Merge pull request dart-lang/markdown#62 from srawlins/block-syntax-extension-help

Provide a peek() for BlockParser, for extensions
diff --git a/pkgs/markdown/CHANGELOG.md b/pkgs/markdown/CHANGELOG.md
index 03ee8d0..a9291e7 100644
--- a/pkgs/markdown/CHANGELOG.md
+++ b/pkgs/markdown/CHANGELOG.md
@@ -12,6 +12,7 @@
   SetextHeaderWithIdSyntax extensions.
 * Implement backslash-escaping so that Markdown syntax can be escaped, such as
   `[foo]\(bar) ==> <p>[foo](bar)</p>`.
+* New public method for BlockParser: `peek(int linesAhead)`.
 
 ## 0.8.0
 
diff --git a/pkgs/markdown/lib/src/block_parser.dart b/pkgs/markdown/lib/src/block_parser.dart
index af31365..8ba5863 100644
--- a/pkgs/markdown/lib/src/block_parser.dart
+++ b/pkgs/markdown/lib/src/block_parser.dart
@@ -91,6 +91,20 @@
     return lines[_pos + 1];
   }
 
+  /// Gets the line that is [linesAhead] lines ahead of the current one, or
+  /// `null` if there is none.
+  ///
+  /// `peek(0)` is equivalent to [current].
+  ///
+  /// `peek(1)` is equivalent to [next].
+  String peek(int linesAhead) {
+    if (linesAhead < 0)
+      throw new ArgumentError('Invalid linesAhead: $linesAhead; must be >= 0.')
+    // Don't read past the end.
+    if (_pos >= lines.length - linesAhead) return null;
+    return lines[_post + linesAhead];
+  }
+
   void advance() {
     _pos++;
   }
@@ -103,7 +117,7 @@
     return regex.firstMatch(current) != null;
   }
 
-  /// Gets whether or not the current line matches the given pattern.
+  /// Gets whether or not the next line matches the given pattern.
   bool matchesNext(RegExp regex) {
     if (next == null) return false;
     return regex.firstMatch(next) != null;