|
@@ -27,6 +27,7 @@ class StringXmlWatcherBuilder implements Builder {
|
|
|
|
|
|
|
|
@override
|
|
@override
|
|
|
Future<void> build(BuildStep buildStep) async {
|
|
Future<void> build(BuildStep buildStep) async {
|
|
|
|
|
+ print('string_get_runner build');
|
|
|
final xmlFiles = await buildStep.findAssets(_targetXmlGlob).toList();
|
|
final xmlFiles = await buildStep.findAssets(_targetXmlGlob).toList();
|
|
|
final (buffer, multiBuffer) = await _processXmlFiles(buildStep, xmlFiles);
|
|
final (buffer, multiBuffer) = await _processXmlFiles(buildStep, xmlFiles);
|
|
|
|
|
|
|
@@ -55,18 +56,15 @@ class StringXmlWatcherBuilder implements Builder {
|
|
|
.writeln(' static const Map<String, Map<String, String>> values = {');
|
|
.writeln(' static const Map<String, Map<String, String>> values = {');
|
|
|
multiBuffer.writeln(' \'zh_CN\': {'); // 默认基准语言
|
|
multiBuffer.writeln(' \'zh_CN\': {'); // 默认基准语言
|
|
|
|
|
|
|
|
- print('zkzkzk xmlFiles ${xmlFiles.length}');
|
|
|
|
|
// 遍历所有 XML 文件
|
|
// 遍历所有 XML 文件
|
|
|
for (final file in xmlFiles) {
|
|
for (final file in xmlFiles) {
|
|
|
- print('zkzkzk file ${file.path}');
|
|
|
|
|
try {
|
|
try {
|
|
|
final content = await buildStep.readAsString(file);
|
|
final content = await buildStep.readAsString(file);
|
|
|
final document = XmlDocument.parse(content);
|
|
final document = XmlDocument.parse(content);
|
|
|
- print('zkzkzk document ${document.toString()}');
|
|
|
|
|
// 遍历所有 <string> 元素
|
|
// 遍历所有 <string> 元素
|
|
|
for (final element in document.findAllElements('string')) {
|
|
for (final element in document.findAllElements('string')) {
|
|
|
final name = element.getAttribute('name');
|
|
final name = element.getAttribute('name');
|
|
|
- final value = _sanitizeValue(element.text);
|
|
|
|
|
|
|
+ final value = processXmlText(element.text);
|
|
|
|
|
|
|
|
if (name != null) {
|
|
if (name != null) {
|
|
|
final camelCaseName = _toCamelCase(name);
|
|
final camelCaseName = _toCamelCase(name);
|
|
@@ -76,7 +74,7 @@ class StringXmlWatcherBuilder implements Builder {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
- print('❌ Error processing file ${file.path}: $e');
|
|
|
|
|
|
|
+ print('❌ (string_get_runner)Error processing file ${file.path}: $e');
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -85,10 +83,18 @@ class StringXmlWatcherBuilder implements Builder {
|
|
|
multiBuffer.writeln(' };');
|
|
multiBuffer.writeln(' };');
|
|
|
multiBuffer.writeln('}');
|
|
multiBuffer.writeln('}');
|
|
|
|
|
|
|
|
|
|
+ print('string_get_runner file generated successfully!');
|
|
|
return (buffer, multiBuffer);
|
|
return (buffer, multiBuffer);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- String _sanitizeValue(String value) => value.replaceAll('\r\n', '').trim();
|
|
|
|
|
|
|
+ String processXmlText(String original) {
|
|
|
|
|
+ return original
|
|
|
|
|
+ .replaceAll('\r\n', ' ')
|
|
|
|
|
+ .replaceAll('\n', ' ')
|
|
|
|
|
+ .replaceAll(RegExp(r'\s+'), ' ')
|
|
|
|
|
+ .trim()
|
|
|
|
|
+ .replaceAll("'", "\\'");
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
String _toCamelCase(String snakeCase) {
|
|
String _toCamelCase(String snakeCase) {
|
|
|
return snakeCase.split('_').map((word) {
|
|
return snakeCase.split('_').map((word) {
|