Skip to content

Commit

Permalink
Merge branch 'regexp'
Browse files Browse the repository at this point in the history
  • Loading branch information
munificent committed Sep 11, 2015
2 parents 42a1455 + f87207e commit d09002e
Show file tree
Hide file tree
Showing 4 changed files with 38 additions and 10 deletions.
10 changes: 8 additions & 2 deletions benchmark/input.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,16 @@
**TODO: Add more examples to cover all of the syntax.**

# Regressions

Bad backtracking in the HR parser:

-------------------------- | -------------------------------------------------

# Real-world sample

This input was taken from the test package's README to get a representative
sample of real-world markdown:

## Writing Tests

Tests are specified using the top-level [`test()`][test] function, and test
assertions are made using [`expect()`][expect]:

Expand Down
5 changes: 4 additions & 1 deletion benchmark/output.html
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
<p><strong>TODO: Add more examples to cover all of the syntax.</strong></p>
<h1>Regressions</h1>
<p>Bad backtracking in the HR parser:</p>
<p>-------------------------- | -------------------------------------------------</p>
<h1>Real-world sample</h1>
<p>This input was taken from the test package's README to get a representative
sample of real-world markdown:</p>
<h2>Writing Tests</h2>
<p>Tests are specified using the top-level <a href="http://www.dartdocs.org/documentation/test/latest/index.html#test/test@id_test"><code>test()</code></a> function, and test
assertions are made using <a href="http://www.dartdocs.org/documentation/test/latest/index.html#test/test@id_expect"><code>expect()</code></a>:</p>
<pre class="dart"><code>import "package:test/test.dart";
Expand Down
15 changes: 8 additions & 7 deletions lib/src/block_parser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,16 @@ import 'document.dart';
import 'util.dart';

/// The line contains only whitespace or is empty.
final _emptyPattern = new RegExp(r'^([ \t]*)$');
final _emptyPattern = new RegExp(r'^(?:[ \t]*)$');

/// A series of `=` or `-` (on the next line) define setext-style headers.
final _setextPattern = new RegExp(r'^((=+)|(-+))$');
final _setextPattern = new RegExp(r'^(=+|-+)$');

/// Leading (and trailing) `#` define atx-style headers.
final _headerPattern = new RegExp(r'^(#{1,6})(.*?)#*$');
///
/// Starts with 1-6 unescaped `#` characters which must not be followed by a
/// non-space character. Line may end with any number of `#` characters,.
final _headerPattern = new RegExp(r'^(#{1,6})[ \x09\x0b\x0c](.*?)#*$');

/// The line starts with `>` with one optional space after.
final _blockquotePattern = new RegExp(r'^[ ]{0,3}>[ ]?(.*)$');
Expand All @@ -24,14 +27,12 @@ final _blockquotePattern = new RegExp(r'^[ ]{0,3}>[ ]?(.*)$');
final _indentPattern = new RegExp(r'^(?: |\t)(.*)$');

/// Fenced code block.
final _codePattern = new RegExp(r'^(`{3,}|~{3,})(.*)$');
final _codePattern = new RegExp(r'^[ ]{0,3}(`{3,}|~{3,})(.*)$');

/// Three or more hyphens, asterisks or underscores by themselves. Note that
/// a line like `----` is valid as both HR and SETEXT. In case of a tie,
/// SETEXT should win.
final _hrPattern = new RegExp(r'^[ ]{0,3}((-+[ ]{0,2}){3,}|'
r'(_+[ ]{0,2}){3,}|'
r'(\*+[ ]{0,2}){3,})$');
final _hrPattern = new RegExp(r'^ {0,3}([-*_]) *\1 *\1(?:\1| )*$');

/// Really hacky way to detect block-level embedded HTML. Just looks for
/// "<somename".
Expand Down
18 changes: 18 additions & 0 deletions test/markdown_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -235,6 +235,24 @@ void main() {
<h6>header</h6>
''');

validate(
'h7 is not a header',
'''
####### header
''',
'''
<p>####### header</p>
''');

validate(
'h6 must not be followed by non-space ',
'''
######A header
''',
'''
<p>######A header</p>
''');

validate(
'trailing "#" are removed',
'''
Expand Down

0 comments on commit d09002e

Please sign in to comment.