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

Side by Side Diff: tools/copy_dart.py

Issue 12315102: Fix copy_dart to correctly put library comments BEFORE the library directive. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 9 months 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
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|part|native|resource)\s+(.*);$') 16 r'^(library|import|part|native|resource)\s+(.*);$')
17 re_comment = re.compile(
18 r'^(///|/\*| \*).*$')
17 19
18 class Library(object): 20 class Library(object):
19 def __init__(self, name, imports, sources, natives, code): 21 def __init__(self, name, imports, sources, natives, code, comment):
20 self.name = name 22 self.name = name
21 self.imports = imports 23 self.imports = imports
22 self.sources = sources 24 self.sources = sources
23 self.natives = natives 25 self.natives = natives
24 self.code = code 26 self.code = code
27 self.comment = comment
25 28
26 def parseLibrary(library): 29 def parseLibrary(library):
27 """ Parses a .dart source file that is the root of a library, and returns 30 """ 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 31 information about it: the name, the imports, included sources, and any
29 code in the file. 32 code in the file.
30 """ 33 """
31 libraryname = None 34 libraryname = None
32 imports = [] 35 imports = []
33 sources = [] 36 sources = []
34 natives = [] 37 natives = []
35 inlinecode = [] 38 inlinecode = []
39 librarycomment = []
36 if exists(library): 40 if exists(library):
37 # TODO(sigmund): stop parsing when import/source 41 # TODO(sigmund): stop parsing when import/source
38 for line in fileinput.input(library): 42 for line in fileinput.input(library):
39 match = re_directive.match(line) 43 match = re_directive.match(line)
40 if match: 44 if match:
41 directive = match.group(1) 45 directive = match.group(1)
42 if directive == 'library': 46 if directive == 'library':
43 assert libraryname is None 47 assert libraryname is None
44 libraryname = match.group(2) 48 libraryname = match.group(2)
45 elif directive == 'part': 49 elif directive == 'part':
46 suffix = match.group(2) 50 suffix = match.group(2)
47 if not suffix.startswith('of '): 51 if not suffix.startswith('of '):
48 sources.append(match.group(2).strip('"\'')) 52 sources.append(match.group(2).strip('"\''))
49 elif directive == 'import': 53 elif directive == 'import':
50 imports.append(match.group(2)) 54 imports.append(match.group(2))
51 else: 55 else:
52 raise Exception('unknown directive %s in %s' % (directive, line)) 56 raise Exception('unknown directive %s in %s' % (directive, line))
53 else: 57 else:
54 inlinecode.append(line) 58 # Check for library comment.
59 if not libraryname and re_comment.match(line):
60 librarycomment.append(line)
61 else:
62 inlinecode.append(line)
55 fileinput.close() 63 fileinput.close()
56 return Library(libraryname, imports, sources, natives, inlinecode) 64 return Library(libraryname, imports, sources, natives, inlinecode,
65 librarycomment)
57 66
58 def normjoin(*args): 67 def normjoin(*args):
59 return os.path.normpath(os.path.join(*args)) 68 return os.path.normpath(os.path.join(*args))
60 69
61 def mergefiles(srcs, dstfile): 70 def mergefiles(srcs, dstfile):
62 for src in srcs: 71 for src in srcs:
63 with open(src, 'r') as s: 72 with open(src, 'r') as s:
64 for line in s: 73 for line in s:
65 if not line.startswith('part of '): 74 if not line.startswith('part of '):
66 dstfile.write(line) 75 dstfile.write(line)
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 # Ensure output directory exists 116 # Ensure output directory exists
108 outpath = join(outdir, lib[1:] if isabs(lib) else lib) 117 outpath = join(outdir, lib[1:] if isabs(lib) else lib)
109 dstpath = dirname(outpath) 118 dstpath = dirname(outpath)
110 if not exists(dstpath): 119 if not exists(dstpath):
111 os.makedirs(dstpath) 120 os.makedirs(dstpath)
112 121
113 122
114 # Create file containing all imports, and inlining all sources 123 # Create file containing all imports, and inlining all sources
115 with open(outpath, 'w') as f: 124 with open(outpath, 'w') as f:
116 if library.name: 125 if library.name:
126 if library.comment:
127 f.write('%s' % (''.join(library.comment)))
117 f.write("library %s;\n\n" % library.name) 128 f.write("library %s;\n\n" % library.name)
118 else: 129 else:
119 f.write("library %s;\n\n" % basename(lib)) 130 f.write("library %s;\n\n" % basename(lib))
120 for importfile in library.imports: 131 for importfile in library.imports:
121 f.write("import %s;\n" % (importfile)) 132 f.write("import %s;\n" % (importfile))
122 f.write('%s' % (''.join(library.code))) 133 f.write('%s' % (''.join(library.code)))
123 mergefiles([normjoin(dirname(lib), s) for s in library.sources], f) 134 mergefiles([normjoin(dirname(lib), s) for s in library.sources], f)
124 135
125 for suffix in library.imports: 136 for suffix in library.imports:
126 m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?.*$', suffix) 137 m = re.match(r'[\'"]([^\'"]+)[\'"](\s+as\s+\w+)?.*$', suffix)
127 uri = m.group(1) 138 uri = m.group(1)
128 if not uri.startswith('dart:'): 139 if not uri.startswith('dart:'):
129 worklist.append(normjoin(dirname(lib), uri)); 140 worklist.append(normjoin(dirname(lib), uri));
130 141
131 return 0 142 return 0
132 143
133 if __name__ == '__main__': 144 if __name__ == '__main__':
134 sys.exit(main(*sys.argv[1:])) 145 sys.exit(main(*sys.argv[1:]))
OLDNEW
« no previous file with comments | « sdk/lib/html/dartium/html_dartium.dart ('k') | tools/dom/templates/html/dart2js/chrome_dart2js.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698