Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(629)

Unified Diff: lib/src/eager_span_scanner.dart

Issue 1318603008: Add new SpanScanner.eager(). (Closed) Base URL: git@github.com:dart-lang/string_scanner@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « CHANGELOG.md ('k') | lib/src/line_scanner.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: lib/src/eager_span_scanner.dart
diff --git a/lib/src/line_scanner.dart b/lib/src/eager_span_scanner.dart
similarity index 66%
copy from lib/src/line_scanner.dart
copy to lib/src/eager_span_scanner.dart
index 6a2880b5e4335c598d89b0ce7c45c420c421da70..3fae5cca7cfdefa1017b8b6298d1680df1f8f34e 100644
--- a/lib/src/line_scanner.dart
+++ b/lib/src/eager_span_scanner.dart
@@ -1,40 +1,36 @@
-// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
+// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file
// 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;
+library string_scanner.eager_span_scanner;
import 'package:charcode/ascii.dart';
-import 'string_scanner.dart';
+import 'line_scanner.dart';
+import 'span_scanner.dart';
+
+// TODO(nweiz): Currently this duplicates code in line_scanner.dart. Once
+// sdk#23770 is fully complete, we should move the shared code into a mixin.
/// A regular expression matching newlines across platforms.
final _newlineRegExp = new RegExp(r"\r\n?|\n");
-/// A subclass of [StringScanner] that tracks line and column information.
-class LineScanner extends StringScanner {
- /// The scanner's current (zero-based) line number.
+/// A [SpanScanner] that tracks the line and column eagerly, like [LineScanner].
+class EagerSpanScanner extends SpanScanner {
int get line => _line;
int _line = 0;
- /// The scanner's current (zero-based) column number.
int get column => _column;
int _column = 0;
- /// The scanner's state, including line and column information.
- ///
- /// 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.
LineScannerState get state =>
- new LineScannerState._(this, position, line, column);
+ new _EagerSpanScannerState(this, position, line, column);
- /// Whether the current position is between a CR character and an LF
- /// charactet.
bool get _betweenCRLF => peekChar(-1) == $cr && peekChar() == $lf;
set state(LineScannerState state) {
- if (!identical(state._scanner, this)) {
+ if (state is! _EagerSpanScannerState ||
+ !identical((state as _EagerSpanScannerState)._scanner, this)) {
throw new ArgumentError("The given LineScannerState was not returned by "
"this LineScanner.");
}
@@ -70,7 +66,7 @@ class LineScanner extends StringScanner {
}
}
- LineScanner(String string, {sourceUrl, int position})
+ EagerSpanScanner(String string, {sourceUrl, int position})
: super(string, sourceUrl: sourceUrl, position: position);
int readChar() {
@@ -107,19 +103,13 @@ class LineScanner extends StringScanner {
}
}
-/// A class representing the state of a [LineScanner].
-class LineScannerState {
- /// The [LineScanner] that created this.
- final LineScanner _scanner;
-
- /// The position of the scanner in this state.
+/// A class representing the state of an [EagerSpanScanner].
+class _EagerSpanScannerState implements LineScannerState {
+ final EagerSpanScanner _scanner;
final int position;
-
- /// The zero-based line number of the scanner in this state.
final int line;
-
- /// The zero-based column number of the scanner in this state.
final int column;
- LineScannerState._(this._scanner, this.position, this.line, this.column);
+ _EagerSpanScannerState(this._scanner, this.position, this.line, this.column);
}
+
« no previous file with comments | « CHANGELOG.md ('k') | lib/src/line_scanner.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698