| 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 |