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"