@@ -45,10 +45,19 @@ def ToCArray(lines):
4545 return ", " .join (result )
4646
4747
48- def RemoveCommentsAndTrailingWhitespace (lines ):
49- lines = re .sub (r'//.*\n' , '\n ' , lines ) # end-of-line comments
50- lines = re .sub (re .compile (r'/\*.*?\*/' , re .DOTALL ), '' , lines ) # comments.
51- lines = re .sub (r'\s+\n+' , '\n ' , lines ) # trailing whitespace
48+ def CompressScript (lines , do_jsmin ):
49+ # If we're not expecting this code to be user visible, we can run it through
50+ # a more aggressive minifier.
51+ if do_jsmin :
52+ return jsmin .jsmin (lines )
53+
54+ # Remove stuff from the source that we don't want to appear when
55+ # people print the source code using Function.prototype.toString().
56+ # Note that we could easily compress the scripts mode but don't
57+ # since we want it to remain readable.
58+ #lines = re.sub('//.*\n', '\n', lines) # end-of-line comments
59+ #lines = re.sub(re.compile(r'/\*.*?\*/', re.DOTALL), '', lines) # comments.
60+ #lines = re.sub('\s+\n+', '\n', lines) # trailing whitespace
5261 return lines
5362
5463
@@ -87,22 +96,6 @@ def ParseValue(string):
8796 return string
8897
8998
90- EVAL_PATTERN = re .compile (r'\beval\s*\(' );
91- WITH_PATTERN = re .compile (r'\bwith\s*\(' );
92-
93-
94- def Validate (lines , file ):
95- lines = RemoveCommentsAndTrailingWhitespace (lines )
96- # Because of simplified context setup, eval and with is not
97- # allowed in the natives files.
98- eval_match = EVAL_PATTERN .search (lines )
99- if eval_match :
100- raise ("Eval disallowed in natives: %s" % file )
101- with_match = WITH_PATTERN .search (lines )
102- if with_match :
103- raise ("With statements disallowed in natives: %s" % file )
104-
105-
10699def ExpandConstants (lines , constants ):
107100 for key , value in constants .items ():
108101 lines = lines .replace (key , str (value ))
@@ -162,9 +155,9 @@ def expand(self, mapping):
162155 args .append (mapping [arg ])
163156 return str (self .fun (* args ))
164157
165- CONST_PATTERN = re .compile (r '^const\s+([a-zA-Z0-9_]+)\s*=\s*([^;]*);$' )
166- MACRO_PATTERN = re .compile (r '^macro\s+([a-zA-Z0-9_]+)\s*\(([^)]*)\)\s*=\s*([^;]*);$' )
167- PYTHON_MACRO_PATTERN = re .compile (r '^python\s+macro\s+([a-zA-Z0-9_]+)\s*\(([^)]*)\)\s*=\s*([^;]*);$' )
158+ CONST_PATTERN = re .compile ('^const\s+([a-zA-Z0-9_]+)\s*=\s*([^;]*);$' )
159+ MACRO_PATTERN = re .compile ('^macro\s+([a-zA-Z0-9_]+)\s*\(([^)]*)\)\s*=\s*([^;]*);$' )
160+ PYTHON_MACRO_PATTERN = re .compile ('^python\s+macro\s+([a-zA-Z0-9_]+)\s*\(([^)]*)\)\s*=\s*([^;]*);$' )
168161
169162def ReadMacros (lines ):
170163 constants = { }
@@ -212,7 +205,7 @@ def ReadMacros(lines):
212205
213206
214207SOURCE_DECLARATION = """\
215- static const char %(id)s[] = { %(data)s };
208+ static const char native_ %(id)s[] = { %(data)s };
216209"""
217210
218211
@@ -230,7 +223,7 @@ def ReadMacros(lines):
230223 if (index == %(i)i) return Vector<const char>("%(name)s", %(length)i);
231224"""
232225
233- def JS2C (source , target , env ):
226+ def JS2C (source , target ):
234227 ids = []
235228 delay_ids = []
236229 modules = []
@@ -245,28 +238,24 @@ def JS2C(source, target, env):
245238
246239 # Build source code lines
247240 source_lines = [ ]
248-
249- minifier = jsmin .JavaScriptMinifier ()
250-
251241 source_lines_empty = []
252- for module in modules :
253- filename = str (module )
254- delay = filename . endswith ( '-delay.js' )
255- lines = ReadFile ( filename )
242+ for s in modules :
243+ delay = str (s ). endswith ( '-delay.js' )
244+ lines = ReadFile ( str ( s ) )
245+ do_jsmin = lines . find ( '// jsminify this file, js2c: jsmin' ) != - 1
256246 lines = ExpandConstants (lines , consts )
257247 lines = ExpandMacros (lines , macros )
258- Validate (lines , filename )
259- lines = minifier .JSMinify (lines )
248+ lines = CompressScript (lines , do_jsmin )
260249 data = ToCArray (lines )
261- id = (os .path .split (filename )[1 ])[:- 3 ]
250+ id = (os .path .split (str ( s ) )[1 ])[:- 3 ]
262251 if delay : id = id [:- 6 ]
263252 if delay :
264253 delay_ids .append ((id , len (lines )))
265254 else :
266255 ids .append ((id , len (lines )))
267256 source_lines .append (SOURCE_DECLARATION % { 'id' : id , 'data' : data })
268257 source_lines_empty .append (SOURCE_DECLARATION % { 'id' : id , 'data' : 0 })
269-
258+
270259 # Build delay support functions
271260 get_index_cases = [ ]
272261 get_script_source_cases = [ ]
@@ -311,8 +300,7 @@ def JS2C(source, target, env):
311300 'source_lines' : "\n " .join (source_lines ),
312301 'get_index_cases' : "" .join (get_index_cases ),
313302 'get_script_source_cases' : "" .join (get_script_source_cases ),
314- 'get_script_name_cases' : "" .join (get_script_name_cases ),
315- 'type' : env ['TYPE' ]
303+ 'get_script_name_cases' : "" .join (get_script_name_cases )
316304 })
317305 output .close ()
318306
@@ -324,17 +312,6 @@ def JS2C(source, target, env):
324312 'source_lines' : "\n " .join (source_lines_empty ),
325313 'get_index_cases' : "" .join (get_index_cases ),
326314 'get_script_source_cases' : "" .join (get_script_source_cases ),
327- 'get_script_name_cases' : "" .join (get_script_name_cases ),
328- 'type' : env ['TYPE' ]
315+ 'get_script_name_cases' : "" .join (get_script_name_cases )
329316 })
330317 output .close ()
331-
332- def main ():
333- natives = sys .argv [1 ]
334- natives_empty = sys .argv [2 ]
335- type = sys .argv [3 ]
336- source_files = sys .argv [4 :]
337- JS2C (source_files , [natives , natives_empty ], { 'TYPE' : type })
338-
339- if __name__ == "__main__" :
340- main ()
0 commit comments