From 3f73f64c7af9fc131cf2b392478223be95e1d8a9 Mon Sep 17 00:00:00 2001 From: Lukas Renggli Date: Tue, 31 Dec 2024 18:37:26 +0100 Subject: [PATCH 1/3] Enable full unicode decoding of names. --- CHANGELOG.md | 5 +++++ example/xml_test.dart | 36 ++++++++++++++++++++++++++++++++++ lib/src/xml/utils/token.dart | 3 ++- lib/src/xml_events/parser.dart | 4 ++-- pubspec.yaml | 8 ++++++-- 5 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 example/xml_test.dart diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b32e20..3db6715 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## 6.6.0 + +* Upgrade to PetitParser 7.0. +* Enable full unicode decoding of names. + ## 6.5.0 * Add support for most XPath 1.0 functions, including set-operations and ensuring document order for node-sets. diff --git a/example/xml_test.dart b/example/xml_test.dart new file mode 100644 index 0000000..2bee42b --- /dev/null +++ b/example/xml_test.dart @@ -0,0 +1,36 @@ +/// XML test. +library; + +import 'dart:convert'; +import 'dart:io'; + +import 'package:xml/xml_events.dart'; + +void printUsage() { + stdout.writeln('Usage: xml_test {files}'); + exit(1); +} + +Future main(List arguments) async { + final files = []; + + for (final argument in arguments) { + final file = File(argument); + if (file.existsSync()) { + files.add(file); + } else { + stderr.writeln('File not found: $file'); + exit(2); + } + } + if (files.isEmpty) { + printUsage(); + } + + for (final file in files) { + stdout.writeln(file.path); + await file.openRead().transform(utf8.decoder).toXmlEvents() + .handleError((Object error) => stderr.writeln('$error')) + .drain(); + } +} diff --git a/lib/src/xml/utils/token.dart b/lib/src/xml/utils/token.dart index 7f43822..5250308 100644 --- a/lib/src/xml/utils/token.dart +++ b/lib/src/xml/utils/token.dart @@ -45,7 +45,8 @@ class XmlToken { '\u2c00-\u2fef' '\u3001-\ud7ff' '\uf900-\ufdcf' - '\ufdf0-\ufffd'; + '\ufdf0-\ufffd' + '\u{10000}-\u{effff}'; static const nameChars = '$nameStartChars' '-.0-9' '\u00b7' diff --git a/lib/src/xml_events/parser.dart b/lib/src/xml_events/parser.dart index 759135a..e624a39 100644 --- a/lib/src/xml_events/parser.dart +++ b/lib/src/xml_events/parser.dart @@ -244,9 +244,9 @@ class XmlEventParser { Parser nameToken() => seq2(ref0(nameStartChar), ref0(nameChar).star()).flatten('name expected'); - Parser nameStartChar() => pattern(XmlToken.nameStartChars); + Parser nameStartChar() => pattern(XmlToken.nameStartChars, unicode: true); - Parser nameChar() => pattern(XmlToken.nameChars); + Parser nameChar() => pattern(XmlToken.nameChars, unicode: true); } final XmlCache> eventParserCache = diff --git a/pubspec.yaml b/pubspec.yaml index 2524135..9376547 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,5 +1,5 @@ name: xml -version: 6.5.0 +version: 6.6.0 description: A lightweight library for parsing, traversing, querying, transforming and building XML documents. homepage: https://github.com/renggli/dart-xml @@ -14,8 +14,12 @@ environment: dependencies: collection: ^1.19.0 meta: ^1.16.0 - petitparser: ^6.0.0 + petitparser: ^7.0.0 dev_dependencies: args: ^2.5.0 lints: ^5.0.0 test: ^1.25.0 + +dependency_overrides: + petitparser: + git: https://github.com/petitparser/dart-petitparser \ No newline at end of file From 4465ed52ce5744951b24921d94a6dd4a900fb295 Mon Sep 17 00:00:00 2001 From: Lukas Renggli Date: Tue, 31 Dec 2024 18:49:23 +0100 Subject: [PATCH 2/3] Fix formatting --- example/xml_test.dart | 5 ++++- lib/src/xml_events/parser.dart | 3 ++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/example/xml_test.dart b/example/xml_test.dart index 2bee42b..428e3df 100644 --- a/example/xml_test.dart +++ b/example/xml_test.dart @@ -29,7 +29,10 @@ Future main(List arguments) async { for (final file in files) { stdout.writeln(file.path); - await file.openRead().transform(utf8.decoder).toXmlEvents() + await file + .openRead() + .transform(utf8.decoder) + .toXmlEvents() .handleError((Object error) => stderr.writeln('$error')) .drain(); } diff --git a/lib/src/xml_events/parser.dart b/lib/src/xml_events/parser.dart index e624a39..358844d 100644 --- a/lib/src/xml_events/parser.dart +++ b/lib/src/xml_events/parser.dart @@ -244,7 +244,8 @@ class XmlEventParser { Parser nameToken() => seq2(ref0(nameStartChar), ref0(nameChar).star()).flatten('name expected'); - Parser nameStartChar() => pattern(XmlToken.nameStartChars, unicode: true); + Parser nameStartChar() => + pattern(XmlToken.nameStartChars, unicode: true); Parser nameChar() => pattern(XmlToken.nameChars, unicode: true); } From 09a4b909a5a1c3f1c2febe599185cef5194e6df3 Mon Sep 17 00:00:00 2001 From: Lukas Renggli Date: Sun, 12 Jan 2025 09:46:44 +0100 Subject: [PATCH 3/3] Get proper dependency for unicode branch --- pubspec.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pubspec.yaml b/pubspec.yaml index 9376547..0804577 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -14,7 +14,7 @@ environment: dependencies: collection: ^1.19.0 meta: ^1.16.0 - petitparser: ^7.0.0 + petitparser: ^6.0.0 dev_dependencies: args: ^2.5.0 lints: ^5.0.0 @@ -22,4 +22,6 @@ dev_dependencies: dependency_overrides: petitparser: - git: https://github.com/petitparser/dart-petitparser \ No newline at end of file + git: + url: https://github.com/petitparser/dart-petitparser + ref: unicode \ No newline at end of file