| 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 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 await new File.fromUri(problemsFile).writeAsString("$sb", flush: true); | 57 await new File.fromUri(problemsFile).writeAsString("$sb", flush: true); |
| 58 port.close(); | 58 port.close(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+"); | 61 final RegExp placeholderPattern = new RegExp("#[a-zA-Z0-9_]+"); |
| 62 | 62 |
| 63 String compileTemplate(String name, String template, String tip) { | 63 String compileTemplate(String name, String template, String tip) { |
| 64 var parameters = new Set<String>(); | 64 var parameters = new Set<String>(); |
| 65 var conversions = new Set<String>(); | 65 var conversions = new Set<String>(); |
| 66 var arguments = new Set<String>(); | 66 var arguments = new Set<String>(); |
| 67 for (Match match in placeholderPattern.allMatches("$template$tip")) { | 67 for (Match match in placeholderPattern.allMatches("$template${tip ?? ''}")) { |
| 68 switch (match[0]) { | 68 switch (match[0]) { |
| 69 case "#character": | 69 case "#character": |
| 70 parameters.add("String character"); | 70 parameters.add("String character"); |
| 71 arguments.add("'character': character,"); | 71 arguments.add("'character': character,"); |
| 72 break; | 72 break; |
| 73 | 73 |
| 74 case "#unicode": | 74 case "#unicode": |
| 75 parameters.add("int codePoint"); | 75 parameters.add("int codePoint"); |
| 76 conversions.add("String unicode = " | 76 conversions.add("String unicode = " |
| 77 "\"(U+\${codePoint.toRadixString(16).padLeft(4, '0')})\";"); | 77 "\"(U+\${codePoint.toRadixString(16).padLeft(4, '0')})\";"); |
| 78 arguments.add("'codePoint': codePoint,"); | 78 arguments.add("'codePoint': codePoint,"); |
| 79 break; | 79 break; |
| 80 | 80 |
| 81 case "#name": | 81 case "#name": |
| 82 parameters.add("String name"); | 82 parameters.add("String name"); |
| 83 arguments.add("'name': name,"); | 83 arguments.add("'name': name,"); |
| 84 break; | 84 break; |
| 85 | 85 |
| 86 case "#lexeme": | 86 case "#lexeme": |
| 87 parameters.add("Token token"); | 87 parameters.add("Token token"); |
| 88 conversions.add("String lexeme = token.lexeme;"); | 88 conversions.add("String lexeme = token.lexeme;"); |
| 89 arguments.add("'token': token,"); | 89 arguments.add("'token': token,"); |
| 90 break; | 90 break; |
| 91 | 91 |
| 92 case "#string": | 92 case "#string": |
| 93 parameters.add("String string"); | 93 parameters.add("String string"); |
| 94 arguments.add("'string': string,"); | 94 arguments.add("'string': string,"); |
| 95 break; | 95 break; |
| 96 |
| 97 default: |
| 98 throw "Unhandled placeholder in template: ${match[0]}"; |
| 96 } | 99 } |
| 97 } | 100 } |
| 98 | 101 |
| 99 String interpolate(String name, String text) { | 102 String interpolate(String name, String text) { |
| 100 if (text == null) return ""; | 103 if (text == null) return ""; |
| 101 return " '$name': " | 104 return " '$name': " |
| 102 "\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\","; | 105 "\"${text.replaceAll(r'$', r'\$').replaceAll('#', '\$')}\","; |
| 103 } | 106 } |
| 104 | 107 |
| 105 return """ | 108 return """ |
| 106 problem$name(${parameters.join(', ')}) { | 109 problem$name(${parameters.join(', ')}) { |
| 107 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. | 110 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE. |
| 108 ${conversions.join('\n ')} | 111 ${conversions.join('\n ')} |
| 109 return { | 112 return { |
| 110 ${interpolate('message', template)} | 113 ${interpolate('message', template)} |
| 111 ${interpolate('tip', tip)} | 114 ${interpolate('tip', tip)} |
| 112 'code': ErrorKind.$name, | 115 'code': ErrorKind.$name, |
| 113 'arguments': { | 116 'arguments': { |
| 114 ${arguments.join('\n ')} | 117 ${arguments.join('\n ')} |
| 115 }, | 118 }, |
| 116 }; | 119 }; |
| 117 } | 120 } |
| 118 """; | 121 """; |
| 119 } | 122 } |
| OLD | NEW |