diff options
Diffstat (limited to 'webapps/qooxdoo-0.6.3-sdk/frontend/framework/tool/generator.py')
-rwxr-xr-x | webapps/qooxdoo-0.6.3-sdk/frontend/framework/tool/generator.py | 1057 |
1 files changed, 0 insertions, 1057 deletions
diff --git a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/tool/generator.py b/webapps/qooxdoo-0.6.3-sdk/frontend/framework/tool/generator.py deleted file mode 100755 index ccce87bcb2..0000000000 --- a/webapps/qooxdoo-0.6.3-sdk/frontend/framework/tool/generator.py +++ /dev/null @@ -1,1057 +0,0 @@ -#!/usr/bin/env python - -import sys, re, os, optparse - -# reconfigure path to import own modules from modules subfolder -sys.path.insert(0, os.path.join(os.path.dirname(os.path.abspath(sys.argv[0])), "modules")) - -import config, tokenizer, loader, api, tree, treegenerator, settings, resources, filetool, stringoptimizer, optparseext, variableoptimizer, obfuscator, compiler, migrator, textutil - - - - - - -def getparser(): - parser = optparse.OptionParser("usage: %prog [options]", option_class=optparseext.ExtendAction) - - - ################################################################################# - # GENERAL - ################################################################################# - - # From/To File - parser.add_option("--from-file", dest="fromFile", metavar="FILENAME", help="Read options from FILENAME.") - parser.add_option("--export-to-file", dest="exportToFile", metavar="FILENAME", help="Store options to FILENAME.") - - # Directories (Lists, Match using index) - parser.add_option("--script-input", action="extend", dest="scriptInput", metavar="DIRECTORY", type="string", default=[], help="Define a script input directory.") - parser.add_option("--script-encoding", action="extend", dest="scriptEncoding", metavar="ENCODING", type="string", default=[], help="Define the encoding for a script input directory.") - parser.add_option("--source-script-path", action="extend", dest="sourceScriptPath", metavar="PATH", type="string", default=[], help="Define a script path for the source version.") - parser.add_option("--resource-input", action="extend", dest="resourceInput", metavar="DIRECTORY", type="string", default=[], help="Define a resource input directory.") - parser.add_option("--resource-output", action="extend", dest="resourceOutput", metavar="DIRECTORY", type="string", default=[], help="Define a resource output directory.") - - # Available Actions - parser.add_option("--generate-compiled-script", action="store_true", dest="generateCompiledScript", default=False, help="Compile source files.") - parser.add_option("--generate-source-script", action="store_true", dest="generateSourceScript", default=False, help="Generate source version.") - parser.add_option("--generate-api-documentation", action="store_true", dest="generateApiDocumentation", default=False, help="Generate API documentation.") - parser.add_option("--copy-resources", action="store_true", dest="copyResources", default=False, help="Copy resource files.") - parser.add_option("--fix-source", action="store_true", dest="fixSource", default=False, help="Fix source files") - parser.add_option("--pretty-print", action="store_true", dest="prettyPrint", default=False, help="Pretty print source code.") - parser.add_option("--migrate-source", action="store_true", dest="migrateSource", default=False, help="Migrate existing code to new version.") - - # Debug Actions - parser.add_option("--store-tokens", action="store_true", dest="storeTokens", default=False, help="Store tokenized content of source files. (Debugging)") - parser.add_option("--store-tree", action="store_true", dest="storeTree", default=False, help="Store tree content of source files. (Debugging)") - parser.add_option("--print-files", action="store_true", dest="printFiles", default=False, help="Output known files. (Debugging)") - parser.add_option("--print-modules", action="store_true", dest="printModules", default=False, help="Output known modules. (Debugging)") - parser.add_option("--print-files-without-modules", action="store_true", dest="printFilesWithoutModules", default=False, help="Output files which have no module connection. (Debugging)") - parser.add_option("--print-includes", action="store_true", dest="printIncludes", default=False, help="Output sorted file list. (Debugging)") - parser.add_option("--print-dependencies", action="store_true", dest="printDeps", default=False, help="Output dependencies of files. (Debugging)") - - # Output files - parser.add_option("--source-script-file", dest="sourceScriptFile", metavar="FILENAME", help="Name of output file from source build process.") - parser.add_option("--compiled-script-file", dest="compiledScriptFile", metavar="FILENAME", help="Name of output file from compiler.") - parser.add_option("--api-documentation-json-file", dest="apiDocumentationJsonFile", metavar="FILENAME", help="Name of JSON API file.") - parser.add_option("--api-documentation-xml-file", dest="apiDocumentationXmlFile", metavar="FILENAME", help="Name of XML API file.") - parser.add_option("--settings-script-file", dest="settingsScriptFile", metavar="FILENAME", help="Name of settings script file.") - - # Encoding - parser.add_option("--script-output-encoding", dest="scriptOutputEncoding", default="utf-8", metavar="ENCODING", help="Defines the encoding used for script output files.") - parser.add_option("--xml-output-encoding", dest="xmlOutputEncoding", default="utf-8", metavar="ENCODING", help="Defines the encoding used for XML output files.") - - - - ################################################################################# - # OPTIONS - ################################################################################# - - # General options - parser.add_option("-q", "--quiet", action="store_false", dest="verbose", default=False, help="Quiet output mode.") - parser.add_option("-v", "--verbose", action="store_true", dest="verbose", help="Verbose output mode.") - parser.add_option("-d", "--debug", action="store_true", dest="enableDebug", help="Enable debug mode.") - parser.add_option("--package-id", dest="packageId", default="", metavar="ID", help="Defines a package ID (required for string optimization etc.)") - parser.add_option("--disable-internal-check", action="store_true", dest="disableInternalCheck", default=False, help="Disable check of modifications to internal files.") - - # Options for source and compiled version - parser.add_option("--define-runtime-setting", action="append", dest="defineRuntimeSetting", metavar="NAMESPACE.KEY:VALUE", default=[], help="Define a setting.") - parser.add_option("--add-new-lines", action="store_true", dest="addNewLines", default=False, help="Keep newlines in compiled files.") - - # Options for source version - parser.add_option("--source-loader-type", action="store", dest="sourceLoaderType", metavar="TYPE", choices=("auto", "docwrite", "domappend"), default="auto", help="Generated source loader type: auto, docwrite, domappend [default: %default].") - - # Options for compiled version - parser.add_option("--add-file-ids", action="store_true", dest="addFileIds", default=False, help="Add file IDs to compiled output.") - parser.add_option("--optimize-strings", action="store_true", dest="optimizeStrings", default=False, help="Optimize strings. Increase mshtml performance.") - parser.add_option("--optimize-variables", action="store_true", dest="optimizeVariables", default=False, help="Optimize variables. Reducing size.") - parser.add_option("--obfuscate-identifiers", action="store_true", dest="obfuscateIdentifiers", default=False, help="Obfuscate public names like function names. (ALPHA!)") - - # Options for resource copying - parser.add_option("--override-resource-output", action="append", dest="overrideResourceOutput", metavar="CLASSNAME.ID:DIRECTORY", default=[], help="Define a resource input directory.") - - # Options for token/tree storage - parser.add_option("--token-output-directory", dest="tokenOutputDirectory", metavar="DIRECTORY", help="Define output directory for tokenizer result of the incoming JavaScript files. (Debugging)") - parser.add_option("--tree-output-directory", dest="treeOutputDirectory", metavar="DIRECTORY", help="Define output directory for generated tree of the incoming JavaScript files. (Debugging)") - - # Cache Directory - parser.add_option("--cache-directory", dest="cacheDirectory", metavar="DIRECTORY", help="If this is defined the loader trys to use cache to optimize the performance.") - - # Options for migration support - parser.add_option("--migration-target", dest="migrationTarget", metavar="VERSION", help="Define the target for migration of source code.") - parser.add_option("--migration-input", action="extend", dest="migrationInput", metavar="DIRECTORY", type="string", default=[], help="Define additional directories for to directories to migrate e.g. HTML files, ...") - - - - - ################################################################################# - # INCLUDE/EXCLUDE - ################################################################################# - - # Include/Exclude - parser.add_option("-i", "--include", action="extend", dest="includeWithDeps", metavar="ID", type="string", default=[], help="Include ID") - parser.add_option("-e", "--exclude", action="extend", dest="excludeWithDeps", metavar="ID", type="string", default=[], help="Exclude ID") - parser.add_option("--include-without-dependencies", action="extend", dest="includeWithoutDeps", metavar="ID", type="string", default=[], help="Include ID") - parser.add_option("--exclude-without-dependencies", action="extend", dest="excludeWithoutDeps", metavar="ID", type="string", default=[], help="Exclude ID") - - # Include/Exclude options - parser.add_option("--disable-auto-dependencies", action="store_false", dest="enableAutoDependencies", default=True, help="Disable detection of dependencies.") - - return parser - - - - - - -def argparser(cmdlineargs): - - # Parse arguments - (options, args) = getparser().parse_args(cmdlineargs) - - # Export to file - if options.exportToFile != None: - print - print " EXPORTING:" - print "----------------------------------------------------------------------------" - - print " * Translating options..." - - optionString = "# Exported configuration from build.py\n\n" - ignoreValue = True - lastWasKey = False - - for arg in cmdlineargs: - if arg == "--export-to-file": - ignoreValue = True - - elif arg.startswith("--"): - if lastWasKey: - optionString += "\n" - - optionString += arg[2:] - ignoreValue = False - lastWasKey = True - - elif arg.startswith("-"): - print " * Couldn't export short argument: %s" % arg - optionString += "\n# Ignored short argument %s\n" % arg - ignoreValue = True - - elif not ignoreValue: - optionString += " = %s\n" % arg - ignoreValue = True - lastWasKey = False - - - - print " * Export to file: %s" % options.exportToFile - filetool.save(options.exportToFile, optionString) - - sys.exit(0) - - # Read from file - elif options.fromFile != None: - - print - print " INITIALIZATION:" - print "----------------------------------------------------------------------------" - - print " * Reading configuration..." - - # Convert file content into arguments - fileargs = {} - fileargpos = 0 - fileargid = "default" - currentfileargs = [] - fileargs[fileargid] = currentfileargs - - alternativeFormatBegin = re.compile("\s*\[\s*") - alternativeFormatEnd = re.compile("\s*\]\s*=\s*") - emptyLine = re.compile("^\s*$") - - for line in file(options.fromFile).read().split("\n"): - line = line.strip() - - if emptyLine.match(line) or line.startswith("#") or line.startswith("//"): - continue - - # Translating... - line = alternativeFormatBegin.sub(" = ", line) - line = alternativeFormatEnd.sub(":", line) - - # Splitting line - line = line.split("=") - - # Extract key element - key = line.pop(0).strip() - - # Separate packages - if key == "package": - fileargpos += 1 - fileargid = line[0].strip() - - print " - Found package: %s" % fileargid - - currentfileargs = [] - fileargs[fileargid] = currentfileargs - continue - - currentfileargs.append("--%s" % key) - - if len(line) > 0: - value = line[0].strip() - currentfileargs.append(value) - - # Parse - defaultargs = fileargs["default"] - - if len(fileargs) > 1: - (fileDb, moduleDb) = load(getparser().parse_args(defaultargs)[0]) - - if options.obfuscateIdentifiers: - sharednames = {} - - for filearg in fileargs: - if filearg == "default": - continue - - combinedargs = [] - combinedargs.extend(defaultargs) - combinedargs.extend(fileargs[filearg]) - - options = getparser().parse_args(defaultargs)[0] - findnames(fileDb, moduleDb, options, sharednames) - - names = obfuscator.sort(sharednames) - - for filearg in fileargs: - if filearg == "default": - continue - - print - print - print - print - print " PACKAGE: %s" % filearg - print "----------------------------------------------------------------------------" - - combinedargs = [] - combinedargs.extend(defaultargs) - combinedargs.extend(fileargs[filearg]) - - options = getparser().parse_args(combinedargs)[0] - execute(fileDb, moduleDb, options, filearg, names) - - else: - options = getparser().parse_args(defaultargs)[0] - (fileDb, moduleDb) = load(options) - - if options.obfuscateIdentifiers: - execute(fileDb, moduleDb, options, "", obfuscator.sort(findnames(fileDb, moduleDb, options))) - else: - execute(fileDb, moduleDb, options, "", names) - - else: - print - print " INITIALIZATION:" - print "----------------------------------------------------------------------------" - - print " * Processing arguments..." - - (fileDb, moduleDb) = load(options) - - if options.obfuscateIdentifiers: - execute(fileDb, moduleDb, options, options.packageId, obfuscator.sort(findnames(fileDb, moduleDb, options))) - else: - execute(fileDb, moduleDb, options, options.packageId) - - - - - - - -def main(): - if len(sys.argv[1:]) == 0: - basename = os.path.basename(sys.argv[0]) - print "usage: %s [options]" % basename - print "Try '%s -h' or '%s --help' to show the help message." % (basename, basename) - sys.exit(1) - - argparser(sys.argv[1:]) - - - - - - -def load(options): - - ###################################################################### - # SOURCE LOADER - ###################################################################### - - print - print " SOURCE LOADER:" - print "----------------------------------------------------------------------------" - - if options.scriptInput == None or len(options.scriptInput) == 0: - if len(options.migrationInput) == 0: - basename = os.path.basename(sys.argv[0]) - print "You must define at least one script input directory!" - print "usage: %s [options]" % basename - print "Try '%s -h' or '%s --help' to show the help message." % (basename, basename) - sys.exit(1) - - (fileDb, moduleDb) = loader.indexScriptInput(options) - - - - - - ###################################################################### - # DEBUG OUTPUT JOBS - ###################################################################### - - if options.printFiles: - print - print " OUTPUT OF KNOWN FILES:" - print "----------------------------------------------------------------------------" - print " * These are all known files:" - for fileEntry in fileDb: - print " - %s (%s)" % (fileEntry, fileDb[fileEntry]["path"]) - - if options.printModules: - print - print " OUTPUT OF KNOWN MODULES:" - print "----------------------------------------------------------------------------" - print " * These are all known modules:" - for moduleEntry in moduleDb: - print " * %s" % moduleEntry - for fileEntry in moduleDb[moduleEntry]: - print " - %s" % fileEntry - - if options.printFilesWithoutModules: - print - print " OUTPUT OF FILES WHICH HAVE NO MODULE CONNECTION:" - print "----------------------------------------------------------------------------" - print " * These are all files without a module connection:" - for fileEntry in fileDb: - fileFound = False - - for moduleEntry in moduleDb: - for moduleFile in moduleDb[moduleEntry]: - if moduleFile == fileEntry: - fileFound = True - break - - if not fileFound: - print " - %s" % fileEntry - - - - return fileDb, moduleDb - - - - - -def findnames(fileDb, moduleDb, options, names={}): - - print - print " SEARCHING FOR IDENTIFIERS:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Searching..." - else: - print " * Searching: ", - - - sortedIncludeList = loader.getSortedList(options, fileDb, moduleDb) - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - - else: - sys.stdout.write(".") - sys.stdout.flush() - - obfuscator.search(loader.getTree(fileDb, fileId, options), names) - - if not options.verbose: - print - - return names - - - - - - - - -def execute(fileDb, moduleDb, options, pkgid="", names=[]): - - additionalOutput = [] - - - ###################################################################### - # SORT OF INCLUDE LIST - ###################################################################### - - print - print " SORT OF INCLUDE LIST:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Include (with dependencies): %s" % options.includeWithDeps - print " * Include (without dependencies): %s" % options.includeWithoutDeps - print " * Exclude (with dependencies): %s" % options.excludeWithDeps - print " * Exclude (without dependencies): %s" % options.excludeWithoutDeps - - print " * Sorting classes..." - - sortedIncludeList = loader.getSortedList(options, fileDb, moduleDb) - - if len(sortedIncludeList) == len(fileDb): - print " * Including all classes" - - print " * Arranged %s classes" % len(sortedIncludeList) - - if options.printIncludes: - print - print " PRINT OF INCLUDE ORDER:" - print "----------------------------------------------------------------------------" - print " * The files will be included in this order:" - for fileId in sortedIncludeList: - print " - %s" % fileId - - if options.printDeps: - print - print " OUTPUT OF DEPENDENCIES:" - print "----------------------------------------------------------------------------" - print " * These are all included files with their dependencies:" - for fileId in sortedIncludeList: - print " - %s" % fileId - if len(fileDb[fileId]["loadtimeDeps"]) > 0: - print " - Loadtime: " - for depEntry in fileDb[fileId]["loadtimeDeps"]: - print " - %s" % depEntry - - if len(fileDb[fileId]["afterDeps"]) > 0: - print " - After: " - for depEntry in fileDb[fileId]["afterDeps"]: - print " - %s" % depEntry - - if len(fileDb[fileId]["runtimeDeps"]) > 0: - print " - Runtime: " - for depEntry in fileDb[fileId]["runtimeDeps"]: - print " - %s" % depEntry - - if len(fileDb[fileId]["beforeDeps"]) > 0: - print " - Before: " - for depEntry in fileDb[fileId]["beforeDeps"]: - print " - %s" % depEntry - - if len(fileDb[fileId]["optionalDeps"]) > 0: - print " - Optional: " - for depEntry in fileDb[fileId]["optionalDeps"]: - print " - %s" % depEntry - - - - - - - ###################################################################### - # SOURCE MIGRATION - ###################################################################### - - if options.migrateSource: - print - print " SOURCE MIGRATION:" - print "----------------------------------------------------------------------------" - - print " * Migrate Source Code..." - - migrator.handle(sortedIncludeList, fileDb, options) - - # Return after migration: Ignore other jobs - return - - - ###################################################################### - # GENERATION OF PRETTY PRINTED CODE - ###################################################################### - - if options.fixSource: - print - print " FIX SOURCE CODE:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Fixing code..." - else: - print " * Fixing code: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - Reading %s" % fileId - - fileEntry = fileDb[fileId] - - filePath = fileEntry["path"] - fileEncoding = fileEntry["encoding"] - - fileContent = filetool.read(filePath, fileEncoding) - fixedContent = textutil.removeTrailingSpaces(textutil.tab2Space(textutil.any2Unix(fileContent), 2)) - - if fixedContent != fileContent: - if options.verbose: - print " - Storing modifications..." - else: - sys.stdout.write("!") - sys.stdout.flush() - - filetool.save(filePath, fixedContent, fileEncoding) - - elif not options.verbose: - sys.stdout.write(".") - sys.stdout.flush() - - if not options.verbose: - print - - # Return after fixing: Ignore other jobs - return - - - - ###################################################################### - # GENERATION OF PRETTY PRINTED CODE - ###################################################################### - - if options.prettyPrint: - print - print " GENERATION OF PRETTY PRINTED CODE:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Pretty printing..." - else: - print " * Pretty printing: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - Compiling %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - prettyFileContent = compiler.compile(loader.getTree(fileDb, fileId, options), True) - - if not prettyFileContent.endswith("\n"): - prettyFileContent += "\n" - - filetool.save(fileDb[fileId]["path"], prettyFileContent) - - if not options.verbose: - print - - # Return after pretty print: Ignore other jobs - return - - - - ###################################################################### - # STRING OPTIMIZATION - ###################################################################### - - if options.optimizeStrings: - print - print " STRING OPTIMIZATION:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Searching strings..." - else: - print " * Searching strings: ", - - stringMap = {} - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - localMap = loader.getStrings(fileDb, fileId, options) - - for value in localMap: - if value in stringMap: - stringMap[value] += localMap[value] - else: - stringMap[value] = localMap[value] - - if not options.verbose: - print - - counter = 0 - for value in stringMap: - counter += stringMap[value] - - stringList = stringoptimizer.sort(stringMap) - - print " * Found %s strings (used %s times)" % (len(stringMap), counter) - - if options.verbose: - print " * Replacing strings..." - else: - print " * Replacing strings: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - stringoptimizer.replace(loader.getTree(fileDb, fileId, options), stringList, "$" + pkgid, options.verbose) - - if not options.verbose: - print - - print " * Generating replacement..." - additionalOutput.append(stringoptimizer.replacement(stringList, "$" + pkgid)) - - - - - - - ###################################################################### - # LOCAL VARIABLE OPTIMIZATION - ###################################################################### - - if options.optimizeVariables: - print - print " LOCAL VARIABLE OPTIMIZATION:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Optimizing variables..." - else: - print " * Optimizing variables: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - variableoptimizer.search(loader.getTree(fileDb, fileId, options), [], 0, "$") - - if not options.verbose: - print - - - - - - - ###################################################################### - # NAME OBFUSCATION - ###################################################################### - - if options.obfuscateIdentifiers: - print - print " OBFUSCATE IDENTIFIERS:" - print "----------------------------------------------------------------------------" - - if options.verbose: - print " * Obfuscating identifiers..." - else: - print " * Obfuscating identifiers: ", - - counter = 0 - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - counter += obfuscator.update(loader.getTree(fileDb, fileId, options), names, "$$") - - if not options.verbose: - print - - print " * Updated %s names" % counter - - - - - - - ###################################################################### - # TOKEN STORAGE - ###################################################################### - - if options.storeTokens: - print - print " TOKEN STORAGE:" - print "----------------------------------------------------------------------------" - - if options.tokenOutputDirectory == None: - print " * You must define the token output directory!" - sys.exit(1) - - if options.verbose: - print " * Storing tokens..." - else: - print " * Storing tokens: ", - - for fileId in sortedIncludeList: - tokenString = tokenizer.convertTokensToString(loader.getTokens(fileDb, fileId, options)) - - if options.verbose: - print " * writing tokens for %s (%s KB)..." % (fileIdm, len(tokenString) / 1000.0) - else: - sys.stdout.write(".") - sys.stdout.flush() - - filetool.save(os.path.join(filetool.normalize(options.tokenOutputDirectory), fileId + config.TOKENEXT), tokenString) - - if not options.verbose: - print - - - - - ###################################################################### - # TREE STORAGE - ###################################################################### - - if options.storeTree: - print - print " TREE STORAGE:" - print "----------------------------------------------------------------------------" - - if options.treeOutputDirectory == None: - print " * You must define the tree output directory!" - sys.exit(1) - - if options.verbose: - print " * Storing tree..." - else: - print " * Storing tree: ", - - for fileId in sortedIncludeList: - treeString = "<?xml version=\"1.0\" encoding=\"" + options.xmlOutputEncoding + "\"?>\n" + tree.nodeToXmlString(loader.getTree(fileDb, fileId, options)) - - if options.verbose: - print " * writing tree for %s (%s KB)..." % (fileId, len(treeString) / 1000.0) - else: - sys.stdout.write(".") - sys.stdout.flush() - - filetool.save(os.path.join(filetool.normalize(options.treeOutputDirectory), fileId + config.XMLEXT), treeString) - - if not options.verbose: - print - - - - - - ###################################################################### - # GENERATION OF API - ###################################################################### - - if options.generateApiDocumentation: - print - print " GENERATION OF API:" - print "----------------------------------------------------------------------------" - - if options.apiDocumentationJsonFile == None and options.apiDocumentationXmlFile == None: - print " * You must define one of JSON or XML API documentation file!" - - docTree = None - - if options.verbose: - print " * Generating API tree..." - else: - print " * Generating API tree: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - docTree = api.createDoc(loader.getTree(fileDb, fileId, options), docTree) - - if not options.verbose: - print - - if docTree: - print " * Finalising tree..." - api.postWorkPackage(docTree, docTree) - - if options.apiDocumentationXmlFile != None: - print " * Writing XML API file to %s" % options.apiDocumentationXmlFile - - xmlContent = "<?xml version=\"1.0\" encoding=\"" + options.xmlOutputEncoding + "\"?>\n" - - if options.addNewLines: - xmlContent += "\n" + tree.nodeToXmlString(docTree) - else: - xmlContent += tree.nodeToXmlString(docTree, "", "", "") - - filetool.save(options.apiDocumentationXmlFile, xmlContent, options.xmlOutputEncoding) - - if options.apiDocumentationJsonFile != None: - print " * Writing JSON API file to %s" % options.apiDocumentationJsonFile - - if options.addNewLines: - jsonContent = tree.nodeToJsonString(docTree) - else: - jsonContent = tree.nodeToJsonString(docTree, "", "", "") - - filetool.save(options.apiDocumentationJsonFile, jsonContent, options.scriptOutputEncoding) - - - - - - ###################################################################### - # CREATE COPY OF RESOURCES - ###################################################################### - - if options.copyResources: - - print - print " CREATE COPY OF RESOURCES:" - print "----------------------------------------------------------------------------" - - resources.copy(options, sortedIncludeList, fileDb) - - - - - - - ###################################################################### - # GENERATION OF SETTINGS - ###################################################################### - - if options.generateSourceScript or options.generateCompiledScript: - settingsStr = "" - - if len(options.defineRuntimeSetting) != 0: - print - print " GENERATION OF SETTINGS:" - print "----------------------------------------------------------------------------" - - print " * Processing input data..." - settingsStr = settings.generate(options) - - if options.settingsScriptFile: - print " * Storing result to %s" % options.settingsScriptFile - filetool.save(options.settingsScriptFile, settingsStr) - - # clear settings for build and source - settingsStr = "" - - - - - - ###################################################################### - # GENERATION OF SOURCE VERSION - ###################################################################### - - if options.generateSourceScript: - print - print " GENERATION OF SOURCE SCRIPT:" - print "----------------------------------------------------------------------------" - - if options.sourceScriptFile == None: - print " * You must define the source script file!" - sys.exit(1) - - else: - options.sourceScriptFile = os.path.normpath(options.sourceScriptFile) - - print " * Generating includer..." - - sourceOutput = settingsStr - - srcEol = ""; - if options.addNewLines: - srcEol = "\n"; - - if sourceOutput != "": - settingsStr += srcEol - - # Define javascript loaders - jsLoaders = {} - - # HTML-only: create <script> tags using document.write() - jsLoaders["docwrite"] = """var includeJs=function(src){document.write('<script type="text/javascript" src="'+src+'"></script>')};""" - - # XHTML-compatible: create and append DOM script nodes - jsLoaders["domappend"] = """if(document.createElementNS&&parentNode.namespaceURI)""" + srcEol + """var includeJs=function(src){var js=document.createElementNS(parentNode.namespaceURI,"script");js.type="text/javascript";js.src=src;parentNode.appendChild(js)};""" + srcEol + """else """ + srcEol + """var includeJs=function(src){var js=document.createElement("script");js.type="text/javascript";js.src=src;parentNode.appendChild(js)};""" - - # Source loader closure - sourceOutput += """(function(sources){""" + srcEol - - # Detect the node we are being called from - sourceOutput += """var parentNode=document.getElementsByTagName('body')[0]||document.getElementsByTagName('head')[0];""" + srcEol - - # Autoselect a loader based on client engine - if options.sourceLoaderType == "auto": - sourceOutput += """var clientEngine=null;""" + srcEol - - # Opera - sourceOutput += """if(window.opera&&/Opera[\s\/]([0-9\.]*)/.test(navigator.userAgent))clientEngine="opera";else """ + srcEol - - # Khtml - sourceOutput += """if(typeof navigator.vendor==="string"&&navigator.vendor==="KDE"&&/KHTML\/([0-9-\.]*)/.test(navigator.userAgent))clientEngine="khtml";else """ + srcEol - - # Webkit - sourceOutput += """if(navigator.userAgent.indexOf("AppleWebKit")!=-1&&/AppleWebKit\/([0-9-\.]*)/.test(navigator.userAgent))clientEngine="webkit";else """ + srcEol - - # Gecko - sourceOutput += """if(window.controllers&&typeof navigator.product==="string"&&navigator.product==="Gecko"&&/rv\:([^\);]+)(\)|;)/.test(navigator.userAgent))clientEngine="gecko";else """ + srcEol - - # MShtml - sourceOutput += """if(/MSIE\s+([^\);]+)(\)|;)/.test(navigator.userAgent))clientEngine="mshtml";""" + srcEol - - # Select the loader based on the engine - sourceOutput += """switch(clientEngine){""" + srcEol - - # Use DOM - sourceOutput += """case "opera": case "gecko":""" + srcEol - sourceOutput += jsLoaders["domappend"] + srcEol - sourceOutput += """break;""" + srcEol - - # Use document.write() - sourceOutput += """case "webkit": case "khtml": case "mshtml": default:""" + srcEol - sourceOutput += jsLoaders["docwrite"] + srcEol - sourceOutput += """break;""" + srcEol - - sourceOutput += """}""" + srcEol - - # Use a fixed loader - else: - sourceOutput += jsLoaders[options.sourceLoaderType] + srcEol - - # Loading loop - sourceOutput += """for(var i=0;i<sources.length;++i)includeJs(sources[i])})""" + srcEol - - sources = "" - for fileId in sortedIncludeList: - if fileDb[fileId]["sourceScriptPath"] == None: - print " * Missing source path definition for script input %s. Could not create source script file!" % fileDb[fileId]["scriptInput"] - sys.exit(1) - - sources += srcEol + '"%s%s",' % (os.path.join(fileDb[fileId]["sourceScriptPath"], fileDb[fileId]["pathId"].replace(".", os.sep)), config.JSEXT) - - # Pass the array with source files to include - sourceOutput += "([" + sources[:-1] + srcEol + "]);" + srcEol - - print " * Storing output as %s..." % options.sourceScriptFile - filetool.save(options.sourceScriptFile, sourceOutput, options.scriptOutputEncoding) - - - - - - ###################################################################### - # GENERATION OF COMPILED VERSION - ###################################################################### - - if options.generateCompiledScript: - print - print " GENERATION OF COMPILED SCRIPT:" - print "----------------------------------------------------------------------------" - - compiledOutput = settingsStr + "".join(additionalOutput) - - if options.compiledScriptFile == None: - print " * You must define the compiled script file!" - sys.exit(1) - - if options.verbose: - print " * Compiling..." - else: - print " * Compiling: ", - - for fileId in sortedIncludeList: - if options.verbose: - print " - Compiling %s" % fileId - else: - sys.stdout.write(".") - sys.stdout.flush() - - compiledFileContent = compiler.compile(loader.getTree(fileDb, fileId, options), False, options.addNewLines, options.enableDebug) - - if options.addFileIds: - compiledOutput += "\n\n\n/* ID: " + fileId + " */\n" + compiledFileContent + "\n" - else: - compiledOutput += compiledFileContent - - if not compiledOutput.endswith(";") and not compiledOutput.endswith("\n"): - compiledOutput += ";" - - if not options.verbose: - print - - print " * Storing output as %s..." % options.compiledScriptFile - filetool.save(options.compiledScriptFile, compiledOutput, options.scriptOutputEncoding) - - - - - - - -###################################################################### -# MAIN LOOP -###################################################################### - -if __name__ == '__main__': - try: - main() - - except KeyboardInterrupt: - print - print " * Keyboard Interrupt" - sys.exit(1) |