diff options
Diffstat (limited to 'codegen/vulkan/scripts/promote.py')
-rwxr-xr-x | codegen/vulkan/scripts/promote.py | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/codegen/vulkan/scripts/promote.py b/codegen/vulkan/scripts/promote.py deleted file mode 100755 index c6b73ba4..00000000 --- a/codegen/vulkan/scripts/promote.py +++ /dev/null @@ -1,173 +0,0 @@ -#!/usr/bin/python3 -# -# Copyright 2016-2021 The Khronos Group Inc. -# -# SPDX-License-Identifier: Apache-2.0 - -# Retroactively insert markup in show both 1.1 core features and KHR -# extensions they were promoted from. - -# Usage: promote.py [-overwrite] [-out dir] [-suffix str] files -# -overwrite updates in place (can be risky, make sure there are backups) -# -out specifies directory to create output file in, default 'out' -# -suffix specifies suffix to add to output files, default '' -# files are asciidoc source files from the Vulkan spec to reflow. - -# For error and file-loading interfaces only -import argparse, copy, os, pdb, re, string, sys -from reflib import * -from promoted import * - -global anchor -anchor = 0 - -def anchorname(anchor): - return 'promoted-' + str(anchor) - -def printanchor(fp): - # Anchor index for navigation - global anchor - - print('[[' + anchorname(anchor) + ']]', file=fp) - print('This anchor:', anchorname(anchor), file=fp) - print('<<' + anchorname(anchor+1) + ', OINK>>', file=fp) - anchor = anchor + 1 - -# promote a core interface and include the extension it was promoted from -# line - matching line with 1.1 interface -# type - 'protos', 'structs', 'flags', 'enums' -# name - interface name -# extension - name of extension interface was promoted from -# fp - output filename -def promote(line, type, name, extension, fp): - if type == 'protos': - # printanchor(fp) - print('ifdef::VK_VERSION_1_1[]', file=fp) - print(line, file=fp, end='') - print('endif::VK_VERSION_1_1[]', file=fp) - print('', file=fp) - print('ifdef::VK_VERSION_1_1+' + extension + - '[or the equivalent command]', file=fp) - print('', file=fp) - print('ifdef::' + extension + '[]', file=fp) - print('include::../api/' + type + '/' + name + 'KHR.txt[]', file=fp) - print('endif::' + extension + '[]', file=fp) - del promoted[name] - elif type == 'structs' or type == 'enums' or type == 'flags' or type == 'handles': - # printanchor(fp) - print(line, file=fp, end='') - print('', file=fp) - print('ifdef::' + extension + '[]', file=fp) - print('or the equivalent', file=fp) - print('', file=fp) - print('include::../api/' + type + '/' + name + 'KHR.txt[]', file=fp) - print('endif::' + extension + '[]', file=fp) - del promoted[name] - else: - logWarn('Unrecognized promoted type', type, 'for interface', name) - print(line, file=fp, end='') - - -def promoteFile(filename, args): - logDiag('promote: filename', filename) - - lines = loadFile(filename) - if (lines == None): - return - - # Output file handle and promote object for this file. There are no race - # conditions on overwriting the input, but it's not recommended unless - # you have backing store such as git. - - if args.overwrite: - outFilename = filename - else: - outFilename = args.outDir + '/' + os.path.basename(filename) + args.suffix - - try: - fp = open(outFilename, 'w', encoding='utf8') - True - except: - logWarn('Cannot open output file', filename, ':', sys.exc_info()[0]) - return None - - lineno = 0 - for line in lines: - lineno = lineno + 1 - - matches = includePat.search(line) - if matches != None: - type = matches.group('type') - name = matches.group('name') - if name in promoted: - extension = promoted[name]['extension'] - if extension: - # Promote core interface - promote(line, type, name, promoted[name]['extension'], fp) - continue - # Fallthrough - print(line, file=fp, end='') - - fp.close() - -def promoteAllAdocFiles(folder_to_promote, args): - for root, subdirs, files in os.walk(folder_to_promote): - for file in files: - if file.endswith(".txt"): - file_path = os.path.join(root, file) - promoteFile(file_path, args) - for subdir in subdirs: - sub_folder = os.path.join(root, subdir) - print('Sub-folder = %s' % sub_folder) - if not (subdir.lower() == "scripts") and not (subdir.lower() == "style"): - print(' Parsing = %s' % sub_folder) - promoteAllAdocFiles(sub_folder, args) - else: - print(' Skipping = %s' % sub_folder) - -# Patterns used to recognize interesting lines in an asciidoc source file. -# These patterns are only compiled once. - -if __name__ == '__main__': - parser = argparse.ArgumentParser() - - parser.add_argument('-diag', action='store', dest='diagFile', - help='Set the diagnostic file') - parser.add_argument('-warn', action='store', dest='warnFile', - help='Set the warning file') - parser.add_argument('-log', action='store', dest='logFile', - help='Set the log file for both diagnostics and warnings') - parser.add_argument('-overwrite', action='store_true', - help='Overwrite input filenames instead of writing different output filenames') - parser.add_argument('-out', action='store', dest='outDir', - default='out', - help='Set the output directory in which updated files are generated (default: out)') - parser.add_argument('-suffix', action='store', dest='suffix', - default='', - help='Set the suffix added to updated file names (default: none)') - parser.add_argument('files', metavar='filename', nargs='*', - help='a filename to promote text in') - parser.add_argument('--version', action='version', version='%(prog)s 1.0') - - args = parser.parse_args() - - setLogFile(True, True, args.logFile) - setLogFile(True, False, args.diagFile) - setLogFile(False, True, args.warnFile) - - if args.overwrite: - logWarn('promote.py: will overwrite all input files') - - # If no files are specified, promote the entire specification chapters folder - if len(args.files) == 0: - folder_to_promote = os.getcwd() - folder_to_promote += '/chapters' - promoteAllAdocFiles(folder_to_promote, args) - else: - for file in args.files: - promoteFile(file, args) - - print('At end, promoted interfaces remaining:') - for key in promoted: - if promoted[key]['extension'] != None: - print('\t' + key) |