Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: tools/copy_dart.py

Issue 11235059: Switch to new library syntax. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 8 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « lib/html/templates/interface.darttemplate ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!/usr/bin/env python 1 #!/usr/bin/env python
2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file 2 # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
3 # for details. All rights reserved. Use of this source code is governed by a 3 # for details. All rights reserved. Use of this source code is governed by a
4 # BSD-style license that can be found in the LICENSE file. 4 # BSD-style license that can be found in the LICENSE file.
5 """Used to merge and copy dart source files for deployment to AppEngine""" 5 """Used to merge and copy dart source files for deployment to AppEngine"""
6 6
7 import fileinput 7 import fileinput
8 import sys 8 import sys
9 import shutil 9 import shutil
10 import os 10 import os
11 import re 11 import re
12 from os.path import abspath, basename, dirname, exists, isabs, join 12 from os.path import abspath, basename, dirname, exists, isabs, join
13 from glob import glob 13 from glob import glob
14 14
15 re_directive = re.compile( 15 re_directive = re.compile(
16 r'^#(library|import|source|native|resource)\([\'"]([^\'"]*)[\'"](.*)\);$') 16 r'^(library|import|part|native|resource)\s+(.*);$')
17 17
18 class Library(object): 18 class Library(object):
19 def __init__(self, name, imports, sources, natives, code): 19 def __init__(self, name, imports, sources, natives, code):
20 self.name = name 20 self.name = name
21 self.imports = imports 21 self.imports = imports
22 self.sources = sources 22 self.sources = sources
23 self.natives = natives 23 self.natives = natives
24 self.code = code 24 self.code = code
25 25
26 def parseLibrary(library): 26 def parseLibrary(library):
27 """ Parses a .dart source file that is the root of a library, and returns 27 """ Parses a .dart source file that is the root of a library, and returns
28 information about it: the name, the imports, included sources, and any 28 information about it: the name, the imports, included sources, and any
29 code in the file. 29 code in the file.
30 """ 30 """
31 libraryname = None 31 libraryname = None
32 imports = [] 32 imports = []
33 sources = [] 33 sources = []
34 natives = [] 34 natives = []
35 inlinecode = [] 35 inlinecode = []
36 if exists(library): 36 if exists(library):
37 # TODO(sigmund): stop parsing when import/source 37 # TODO(sigmund): stop parsing when import/source
38 for line in fileinput.input(library): 38 for line in fileinput.input(library):
39 match = re_directive.match(line) 39 match = re_directive.match(line)
40 if match: 40 if match:
41 directive = match.group(1) 41 directive = match.group(1)
42 if directive == 'library': 42 if directive == 'library':
43 assert libraryname is None 43 assert libraryname is None
44 libraryname = match.group(2) 44 libraryname = match.group(2)
45 elif directive == 'source': 45 elif directive == 'part':
46 sources.append(match.group(2)) 46 suffix = match.group(2)
47 if not suffix.startswith('of '):
48 sources.append(match.group(2).strip('"\''))
47 elif directive == 'import': 49 elif directive == 'import':
48 imports.append((match.group(2), match.group(3))) 50 imports.append(match.group(2))
49 elif directive == 'native':
50 natives.append(match.group(2))
51 elif directive == 'resource':
52 # currently ignored
53 pass
54 else: 51 else:
55 raise 'unknown directive %s' % directive 52 raise Exception('unknown directive %s in %s' % (directive, line))
56 else: 53 else:
57 inlinecode.append(line) 54 inlinecode.append(line)
58 fileinput.close() 55 fileinput.close()
59 return Library(libraryname, imports, sources, natives, inlinecode) 56 return Library(libraryname, imports, sources, natives, inlinecode)
60 57
61 def normjoin(*args): 58 def normjoin(*args):
62 return os.path.normpath(os.path.join(*args)) 59 return os.path.normpath(os.path.join(*args))
63 60
64 def mergefiles(srcs, dstfile): 61 def mergefiles(srcs, dstfile):
65 for src in srcs: 62 for src in srcs:
66 with open(src, 'r') as s: 63 with open(src, 'r') as s:
67 dstfile.write(s.read()) 64 for line in s:
65 if not line.startswith('part of '):
66 dstfile.write(line)
68 67
69 def copyfile(src, dst): 68 def copyfile(src, dst):
70 if not exists(dirname(dst)): 69 if not exists(dirname(dst)):
71 os.makedirs(dirname(dst)) 70 os.makedirs(dirname(dst))
72 with open(src, 'r') as s: 71 with open(src, 'r') as s:
73 with open(dst, 'w') as d: 72 with open(dst, 'w') as d:
74 d.write(s.read()) 73 d.write(s.read())
75 74
76 def main(outdir = None, *inputs): 75 def main(outdir = None, *inputs):
77 if not outdir or not inputs: 76 if not outdir or not inputs:
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
118 # Ensure output directory exists 117 # Ensure output directory exists
119 outpath = join(outdir, lib[1:] if isabs(lib) else lib) 118 outpath = join(outdir, lib[1:] if isabs(lib) else lib)
120 dstpath = dirname(outpath) 119 dstpath = dirname(outpath)
121 if not exists(dstpath): 120 if not exists(dstpath):
122 os.makedirs(dstpath) 121 os.makedirs(dstpath)
123 122
124 123
125 # Create file containing all imports, and inlining all sources 124 # Create file containing all imports, and inlining all sources
126 with open(outpath, 'w') as f: 125 with open(outpath, 'w') as f:
127 if library.name: 126 if library.name:
128 f.write("#library('%s');\n\n" % library.name) 127 f.write("library %s;\n\n" % library.name)
129 else: 128 else:
130 f.write("#library('%s');\n\n" % basename(lib)) 129 f.write("library %s;\n\n" % basename(lib))
131 for (importfile, optional_prefix) in library.imports: 130 for importfile in library.imports:
132 f.write("#import('%s'%s);\n" % (importfile, optional_prefix)) 131 f.write("import %s;\n" % (importfile))
133 for native in library.natives:
134 if isabs(native):
135 npath = native[1:]
136 else:
137 npath = native
138 f.write("#native('%s');\n" % npath)
139 copyfile(normjoin(dirname(lib), native),
140 join(dirname(outpath), npath))
141 f.write('%s' % (''.join(library.code))) 132 f.write('%s' % (''.join(library.code)))
142 mergefiles([normjoin(dirname(lib), s) for s in library.sources], f) 133 mergefiles([normjoin(dirname(lib), s) for s in library.sources], f)
143 134
144 for (i, prefix) in library.imports: 135 for suffix in library.imports:
145 if not i.startswith('dart:'): 136 m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?$', suffix)
146 worklist.append(normjoin(dirname(lib), i)); 137 uri = m.group(0)
138 if not uri.startswith('dart:'):
139 worklist.append(normjoin(dirname(lib), uri));
147 140
148 return 0 141 return 0
149 142
150 if __name__ == '__main__': 143 if __name__ == '__main__':
151 sys.exit(main(*sys.argv[1:])) 144 sys.exit(main(*sys.argv[1:]))
OLDNEW
« no previous file with comments | « lib/html/templates/interface.darttemplate ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698