OLD | NEW |
---|---|
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library trydart.source_update; | 5 library trydart.source_update; |
6 | 6 |
7 /// Returns [updates] expanded to full compilation units/source files. | 7 /// Returns [updates] expanded to full compilation units/source files. |
8 /// | 8 /// |
9 /// [updates] is a convenient way to write updates/patches to a single source | 9 /// [updates] is a convenient way to write updates/patches to a single source |
10 /// file without repeating common parts. | 10 /// file without repeating common parts. |
(...skipping 21 matching lines...) Expand all Loading... | |
32 } | 32 } |
33 } else { | 33 } else { |
34 for (StringBuffer buffer in result) { | 34 for (StringBuffer buffer in result) { |
35 buffer.write(chunk); | 35 buffer.write(chunk); |
36 } | 36 } |
37 } | 37 } |
38 } | 38 } |
39 | 39 |
40 return result.map((e) => '$e').toList(); | 40 return result.map((e) => '$e').toList(); |
41 } | 41 } |
42 | |
43 /// Returns [files] split into mulitple named files. The keys in the returned | |
Johnni Winther
2014/12/18 11:19:46
mulitple -> multiple
ahe
2014/12/18 11:38:53
Whoops. Forgot this. I'll add this change to CL 80
| |
44 /// map are filenames, the values are the files' content. | |
45 /// | |
46 /// Names are indicated by a line on the form "==> filename <==". Spaces are | |
47 /// significant. For example, given this input: | |
48 /// | |
49 /// ==> file1.dart <== | |
50 /// First line of file 1. | |
51 /// Second line of file 1. | |
52 /// Third line of file 1. | |
53 /// ==> empty.dart <== | |
54 /// ==> file2.dart <== | |
55 /// First line of file 2. | |
56 /// Second line of file 2. | |
57 /// Third line of file 2. | |
58 /// | |
59 /// This function would return: | |
60 /// | |
61 /// { | |
62 /// "file1.dart": """ | |
63 /// First line of file 1. | |
64 /// Second line of file 1. | |
65 /// Third line of file 1. | |
66 /// """, | |
67 /// | |
68 /// "empty.dart":"", | |
69 /// | |
70 /// "file2.dart":""" | |
71 /// First line of file 2. | |
72 /// Second line of file 2. | |
73 /// Third line of file 2. | |
74 /// """ | |
75 /// } | |
76 Map<String, String> splitFiles(String files) { | |
77 Map<String, String> result = <String, String>{}; | |
78 String currentName; | |
79 List<String> content; | |
80 void finishFile() { | |
81 if (currentName != null) { | |
82 if (result.containsKey(currentName)) { | |
83 throw new ArgumentError("Duplicated filename $currentName in $files"); | |
84 } | |
85 result[currentName] = content.join(''); | |
86 } | |
87 content = null; | |
88 } | |
89 void processDirective(String line) { | |
90 finishFile(); | |
91 if (line.length < 8 || !line.endsWith(" <==\n")) { | |
92 throw new ArgumentError( | |
93 "Malformed line: expected '==> ... <==', but got: '$line'"); | |
94 } | |
95 currentName = line.substring(4, line.length - 5); | |
96 content = <String>[]; | |
97 } | |
98 for (String line in splitLines(files)) { | |
99 if (line.startsWith("==>")) { | |
100 processDirective(line); | |
101 } else { | |
102 content.add(line); | |
103 } | |
104 } | |
105 finishFile(); | |
106 return result; | |
107 } | |
108 | |
109 /// Split [text] into lines preserving trailing newlines (unlike | |
110 /// String.split("\n"). Also, if [text] is empty, return an empty list (unlike | |
111 /// String.split("\n")). | |
112 List<String> splitLines(String text) { | |
113 return text.split(new RegExp('^', multiLine: true)); | |
114 } | |
OLD | NEW |