Index: packages/string_scanner/lib/src/line_scanner.dart |
diff --git a/packages/string_scanner/lib/src/line_scanner.dart b/packages/string_scanner/lib/src/line_scanner.dart |
index 66d7575b2e7c20fa59ec952bff4280dac5302e87..06f1cbc1e0a64f0e1efaa5470a150b8f47481857 100644 |
--- a/packages/string_scanner/lib/src/line_scanner.dart |
+++ b/packages/string_scanner/lib/src/line_scanner.dart |
@@ -2,8 +2,6 @@ |
// for details. All rights reserved. Use of this source code is governed by a |
// BSD-style license that can be found in the LICENSE file. |
-library string_scanner.line_scanner; |
- |
import 'package:charcode/ascii.dart'; |
import 'string_scanner.dart'; |
@@ -28,6 +26,8 @@ class LineScanner extends StringScanner { |
/// This can be used to efficiently save and restore the state of the scanner |
/// when backtracking. A given [LineScannerState] is only valid for the |
/// [LineScanner] that created it. |
+ /// |
+ /// This does not include the scanner's match information. |
LineScannerState get state => |
new LineScannerState._(this, position, line, column); |
@@ -75,15 +75,26 @@ class LineScanner extends StringScanner { |
LineScanner(String string, {sourceUrl, int position}) |
: super(string, sourceUrl: sourceUrl, position: position); |
+ bool scanChar(int character) { |
+ if (!super.scanChar(character)) return false; |
+ _adjustLineAndColumn(character); |
+ return true; |
+ } |
+ |
int readChar() { |
- var char = super.readChar(); |
- if (char == $lf || (char == $cr && peekChar() != $lf)) { |
+ var character = super.readChar(); |
+ _adjustLineAndColumn(character); |
+ return character; |
+ } |
+ |
+ /// Adjusts [_line] and [_column] after having consumed [character]. |
+ void _adjustLineAndColumn(int character) { |
+ if (character == $lf || (character == $cr && peekChar() != $lf)) { |
_line += 1; |
_column = 0; |
} else { |
_column += 1; |
} |
- return char; |
} |
bool scan(Pattern pattern) { |