OLD | NEW |
1 // Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2017, 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 import 'dart:io'; | 5 import 'dart:io'; |
6 | 6 |
7 import 'dart:isolate'; | 7 import 'dart:isolate'; |
8 | 8 |
9 import 'package:yaml/yaml.dart' show loadYaml; | 9 import 'package:yaml/yaml.dart' show loadYaml; |
10 | 10 |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 port.close(); | 47 port.close(); |
48 } | 48 } |
49 | 49 |
50 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+"); | 50 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+"); |
51 | 51 |
52 String compileTemplate(String name, String template, String tip, | 52 String compileTemplate(String name, String template, String tip, |
53 String analyzerCode, String dart2jsCode) { | 53 String analyzerCode, String dart2jsCode) { |
54 var parameters = new Set<String>(); | 54 var parameters = new Set<String>(); |
55 var conversions = new Set<String>(); | 55 var conversions = new Set<String>(); |
56 var arguments = new Set<String>(); | 56 var arguments = new Set<String>(); |
57 parameters.add("Uri uri"); | |
58 parameters.add("int charOffset"); | |
59 for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) { | 57 for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) { |
60 switch (match[0]) { | 58 switch (match[0]) { |
61 case "#character": | 59 case "#character": |
62 parameters.add("String character"); | 60 parameters.add("String character"); |
63 arguments.add("'character': character"); | 61 arguments.add("'character': character"); |
64 break; | 62 break; |
65 | 63 |
66 case "#unicode": | 64 case "#unicode": |
67 parameters.add("int codePoint"); | 65 parameters.add("int codePoint"); |
68 conversions.add("String unicode = " | 66 conversions.add("String unicode = " |
(...skipping 17 matching lines...) Expand all Loading... |
86 arguments.add("'string': string"); | 84 arguments.add("'string': string"); |
87 break; | 85 break; |
88 | 86 |
89 default: | 87 default: |
90 throw "Unhandled placeholder in template: ${match[0]}"; | 88 throw "Unhandled placeholder in template: ${match[0]}"; |
91 } | 89 } |
92 } | 90 } |
93 | 91 |
94 String interpolate(String name, String text) { | 92 String interpolate(String name, String text) { |
95 return "$name: " | 93 return "$name: " |
96 "\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\""; | 94 "\"\"\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\"\"\""; |
97 } | 95 } |
98 | 96 |
99 List<String> codeArguments = <String>[]; | 97 List<String> codeArguments = <String>[]; |
100 if (template != null) { | 98 if (template != null) { |
101 codeArguments.add('template: r"$template"'); | 99 codeArguments.add('template: r"""$template"""'); |
102 } | 100 } |
103 if (tip != null) { | 101 if (tip != null) { |
104 codeArguments.add('tip: r"$tip"'); | 102 codeArguments.add('tip: r"""$tip"""'); |
105 } | 103 } |
106 if (analyzerCode != null) { | 104 if (analyzerCode != null) { |
107 codeArguments.add('analyzerCode: "$analyzerCode"'); | 105 codeArguments.add('analyzerCode: "$analyzerCode"'); |
108 } | 106 } |
109 if (dart2jsCode != null) { | 107 if (dart2jsCode != null) { |
110 codeArguments.add('dart2jsCode: "$dart2jsCode"'); | 108 codeArguments.add('dart2jsCode: "$dart2jsCode"'); |
111 } | 109 } |
112 | 110 |
113 codeArguments.add("format: _format$name"); | 111 if (parameters.isEmpty && conversions.isEmpty && arguments.isEmpty) { |
| 112 return """ |
| 113 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. |
| 114 const BoundFastaCode code$name = |
| 115 const BoundFastaCode(\"$name\", ${codeArguments.join(', ')}); |
| 116 """; |
| 117 } |
| 118 |
| 119 codeArguments.add("bind: _bind$name"); |
114 | 120 |
115 List<String> messageArguments = <String>[]; | 121 List<String> messageArguments = <String>[]; |
116 messageArguments.add(interpolate("message", template)); | 122 messageArguments.add(interpolate("message", template)); |
117 if (tip != null) { | 123 if (tip != null) { |
118 messageArguments.add(interpolate("tip", tip)); | 124 messageArguments.add(interpolate("tip", tip)); |
119 } | 125 } |
120 messageArguments.add("arguments: { ${arguments.join(', ')} }"); | 126 messageArguments.add("arguments: { ${arguments.join(', ')} }"); |
121 | 127 |
122 return """ | 128 return """ |
123 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. | 129 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. |
124 const FastaCode<_$name> code$name = | 130 const UnboundFastaCode<_$name> code$name = |
125 const FastaCode<_$name>(\"$name\", ${codeArguments.join(', ')}); | 131 const UnboundFastaCode<_$name>(\"$name\", ${codeArguments.join(', ')}); |
126 | |
127 typedef FastaMessage _$name(${parameters.join(', ')}); | |
128 | 132 |
129 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. | 133 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. |
130 FastaMessage _format$name(${parameters.join(', ')}) { | 134 typedef _$name = |
131 ${conversions.join('\n ')} | 135 FastaMessage Function(Uri, int) Function(${parameters.join(', ')}); |
132 return new FastaMessage( | 136 |
133 uri, | 137 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. |
134 charOffset, | 138 FastaMessage Function(Uri, int) _bind$name(${parameters.join(', ')}) { |
135 code$name, | 139 FastaMessage bind(Uri uri, int charOffset) { |
136 ${messageArguments.join(', ')}); | 140 ${conversions.join('\n ')} |
| 141 return new FastaMessage( |
| 142 uri, |
| 143 charOffset, |
| 144 code$name, |
| 145 ${messageArguments.join(', ')}); |
| 146 } |
| 147 return bind; |
137 } | 148 } |
138 """; | 149 """; |
139 } | 150 } |
OLD | NEW |