diff --git a/Makefile b/Makefile index 2d0ac51f..d3b04cb0 100644 --- a/Makefile +++ b/Makefile @@ -40,8 +40,8 @@ build/$(PACKAGE): $(COMPILED_JS) # Remove all hidden .svn directories -find build/$(PACKAGE) -name .svn -type d | xargs rm -rf {} \; - # Remove all JS files that were compiled - rm $(JS_BUILD_FILES) + # Create the release version of the main HTML file. + build/tools/ship.py --i=editor/svg-editor.html --on=svg_edit_release > build/$(PACKAGE)/svg-editor.html # codedread: NOTE: Some files are not ready for the Closure compiler: (jquery) $(COMPILED_JS): @@ -75,4 +75,8 @@ clean: rm -rf build/$(PACKAGE) rm -rf build/firefox rm -rf build/opera + rm -rf build/$(PACKAGE).zip + rm -rf build/$(PACKAGE)-src.tar.gz + rm -rf build/$(PACKAGE).xpi + rm -rf build/$(PACKAGE).wgt rm -rf $(COMPILED_JS) diff --git a/build/tools/ship.py b/build/tools/ship.py index 55f5d87f..4e0ae62b 100755 --- a/build/tools/ship.py +++ b/build/tools/ship.py @@ -4,16 +4,19 @@ # ship.py # # Licensed under the Apache 2 License as is the rest of the project -# # Copyright (c) 2011 Jeff Schiller # +# This script has very little real-world application. It is only used in our pure-client web +# app served on GoogleCode so we can have one HTML file, run a build script and generate a 'release' +# version without having to maintain two separate HTML files. +# # This script takes the following inputs: # -# * a HTML file -# * a series of flag names +# * a HTML file (--i=in.html) +# * a series of flag names (--on=Foo --on=Bar) # -# It parses, the HTML file, enables/disables sections of the makrup based -# on conditional comments and flag values, then outputs a new HTML file. +# It parses, the HTML file, enables/disables sections of the markup based +# on if-else comments and flag values, then outputs a new HTML file. # # Example: # @@ -24,7 +27,7 @@ # BAR! # # -# $ ship.py --i in.html --o test-out.html --enable foo +# $ ship.py --i in.html --on foo # # out.html: # @@ -33,30 +36,117 @@ # BAR! # # -# Only if-else-endif are currently supported. All conditional comment expressions must -# be on one line with no other non-whitespace characters. +# It has the following limitations: +# +# 1) Only if-else-endif are currently supported. +# 2) All processing comments must be on one line with no other non-whitespace characters. +# 3) Comments cannot be nested. import optparse +import os + +inside_if = False +last_if_true = False _options_parser = optparse.OptionParser( - usage="%prog --i input.svg --o output.svg [--enable flag1]", - description=("Hello world!")) -_options_parser.add_option("--i", - action="store", dest="input_html_file", help="Input HTML filename") -_options_parser.add_option("--o", - action="store", dest="output_html_file", help="Output HTML filename") -_options_parser.add_option("--on", - action="append", type="string", dest="enabled_flags", - help="name of flag to enable") + usage='%prog --i input.html [--on flag1]', + description=('Rewrites an HTML file based on conditional comments and flags')) +_options_parser.add_option('--i', + action='store', dest='input_html_file', help='Input HTML filename') +_options_parser.add_option('--on', + action='append', type='string', dest='enabled_flags', + help='name of flag to enable') def parse_args(args=None): - options, rargs = _options_parser.parse_args(args) - print options + options, rargs = _options_parser.parse_args(args) + return options, (None, None) - if rargs: - _options_parser.error("Additional arguments not handled: %r, see --help" % rargs) +def parseComment(line, line_num, enabled_flags): + global inside_if + global last_if_true - return options, (None, None) + start = line.find('{') + end = line.find('}') + statement = line[start+1:end].strip() + if statement.startswith('if '): + if inside_if == True: + print 'Fatal Error: Nested {if} found on line ' + str(line_num) + print line + quit() + + # Evaluate whether the expression is true/false. + # only one variable name allowed for now + variable_name = statement[3:].strip() + if variable_name in enabled_flags: + last_if_true = True + line = '' + else: + last_if_true = False + line = '' + + # invert the logic so the endif clause is closed properly + last_if_true = not last_if_true + + elif statement == 'endif': + if inside_if == False: + print 'Fatal Error: {endif} found without {if} on line ' + str(line_num) + print line + quit() + + if last_if_true: + line = '' + else: + line = '' + + inside_if = False + + return line + + +def ship(inFileName, enabled_flags): + # read in HTML file + in_file = file(inFileName, 'r') + + i = 0 + lines = in_file.readlines() + + out_lines = [] + + # loop for each line of markup + for line in lines: + strline = line.strip() + # if we find a comment, process it and print out + if strline.startswith(' +