Don't include extra whitespace in YAML scalar spans. R=rnystrom@google.com BUG=21841 Review URL: https://codereview.chromium.org//797103002 git-svn-id: https://dart.googlecode.com/svn/branches/bleeding_edge/dart/pkg/yaml@42307 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkgs/yaml/CHANGELOG.md b/pkgs/yaml/CHANGELOG.md index f454255..80548ed 100644 --- a/pkgs/yaml/CHANGELOG.md +++ b/pkgs/yaml/CHANGELOG.md
@@ -1,3 +1,7 @@ +## 2.1.1 + +* Properly scope `SourceSpan`s for scalar values surrounded by whitespace. + ## 2.1.0 * Rewrite the parser for a 10x speed improvement.
diff --git a/pkgs/yaml/lib/src/scanner.dart b/pkgs/yaml/lib/src/scanner.dart index 0068553..6c702c8 100644 --- a/pkgs/yaml/lib/src/scanner.dart +++ b/pkgs/yaml/lib/src/scanner.dart
@@ -1156,6 +1156,7 @@ var leadingBreak = ''; var leadingBlank = false; var trailingBlank = false; + var end = _scanner.position; while (_scanner.column == indent && !_scanner.isDone) { // Check for a document indicator. libyaml doesn't do this, but the spec // mandates it. See example 9.5: @@ -1188,6 +1189,7 @@ _scanner.readChar(); } buffer.write(_scanner.substring(startPosition)); + end = _scanner.position; // libyaml always reads a line here, but this breaks on block scalars at // the end of the document that end without newlines. See example 8.1: @@ -1204,7 +1206,7 @@ if (chomping != _Chomping.STRIP) buffer.write(leadingBreak); if (chomping == _Chomping.KEEP) buffer.write(trailingBreaks); - return new ScalarToken(_scanner.spanFrom(start), buffer.toString(), + return new ScalarToken(_scanner.spanFrom(start, end), buffer.toString(), literal ? ScalarStyle.LITERAL : ScalarStyle.FOLDED); } @@ -1430,6 +1432,7 @@ /// Scans a plain scalar. Token _scanPlainScalar() { var start = _scanner.state; + var end = _scanner.state; var buffer = new StringBuffer(); var leadingBreak = ''; var trailingBreaks = ''; @@ -1466,6 +1469,7 @@ _scanner.readChar(); } buffer.write(_scanner.substring(startPosition)); + end = _scanner.state; // Is it the end? if (!_isBlank && !_isBreak) break; @@ -1501,7 +1505,7 @@ // Allow a simple key after a plain scalar with leading blanks. if (leadingBreak.isNotEmpty) _simpleKeyAllowed = true; - return new ScalarToken(_scanner.spanFrom(start), buffer.toString(), + return new ScalarToken(_scanner.spanFrom(start, end), buffer.toString(), ScalarStyle.PLAIN); }
diff --git a/pkgs/yaml/pubspec.yaml b/pkgs/yaml/pubspec.yaml index d0d51c5..f149b1f 100644 --- a/pkgs/yaml/pubspec.yaml +++ b/pkgs/yaml/pubspec.yaml
@@ -1,12 +1,12 @@ name: yaml -version: 2.1.0 +version: 2.1.1 author: "Dart Team <misc@dartlang.org>" homepage: http://www.dartlang.org description: A parser for YAML. dependencies: collection: ">=1.1.0 <2.0.0" path: ">=1.2.0 <2.0.0" - string_scanner: ">=0.1.2 <0.2.0" + string_scanner: ">=0.1.3 <0.2.0" source_span: ">=1.0.0 <2.0.0" dev_dependencies: unittest: ">=0.9.0 <0.12.0"