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

Side by Side Diff: lib/src/document.dart

Issue 1274763005: Clean up: (Closed) Base URL: https://github.com/dart-lang/markdown.git@master
Patch Set: Bump. 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 unified diff | Download patch
« no previous file with comments | « lib/src/block_parser.dart ('k') | lib/src/html_renderer.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 library markdown.document; 1 library markdown.src.document;
2 2
3 import 'ast.dart'; 3 import 'ast.dart';
4 import 'block_parser.dart'; 4 import 'block_parser.dart';
5 import 'inline_parser.dart'; 5 import 'inline_parser.dart';
6 6
7 /// Maintains the context needed to parse a markdown document. 7 /// Maintains the context needed to parse a markdown document.
8 class Document { 8 class Document {
9 final Map<String, Link> refLinks; 9 final Map<String, Link> refLinks;
10 List<InlineSyntax> inlineSyntaxes; 10 List<InlineSyntax> inlineSyntaxes;
11 Resolver linkResolver; 11 Resolver linkResolver;
12 Resolver imageLinkResolver; 12 Resolver imageLinkResolver;
13 13
14 Document({this.inlineSyntaxes, this.linkResolver, this.imageLinkResolver}) 14 Document({this.inlineSyntaxes, this.linkResolver, this.imageLinkResolver})
15 : refLinks = <String, Link>{}; 15 : refLinks = <String, Link>{};
16 16
17 parseRefLinks(List<String> lines) { 17 parseRefLinks(List<String> lines) {
18 // This is a hideous regex. It matches: 18 // This is a hideous regex. It matches:
19 // [id]: http:foo.com "some title" 19 // [id]: http:foo.com "some title"
20 // Where there may whitespace in there, and where the title may be in 20 // Where there may whitespace in there, and where the title may be in
21 // single quotes, double quotes, or parentheses. 21 // single quotes, double quotes, or parentheses.
22 final indent = r'^[ ]{0,3}'; // Leading indentation. 22 var indent = r'^[ ]{0,3}'; // Leading indentation.
23 final id = r'\[([^\]]+)\]'; // Reference id in [brackets]. 23 var id = r'\[([^\]]+)\]'; // Reference id in [brackets].
24 final quote = r'"[^"]+"'; // Title in "double quotes". 24 var quote = r'"[^"]+"'; // Title in "double quotes".
25 final apos = r"'[^']+'"; // Title in 'single quotes'. 25 var apos = r"'[^']+'"; // Title in 'single quotes'.
26 final paren = r"\([^)]+\)"; // Title in (parentheses). 26 var paren = r"\([^)]+\)"; // Title in (parentheses).
27 final pattern = new RegExp( 27 var pattern =
28 '$indent$id:\\s+(\\S+)\\s*($quote|$apos|$paren|)\\s*\$'); 28 new RegExp('$indent$id:\\s+(\\S+)\\s*($quote|$apos|$paren|)\\s*\$');
29 29
30 for (int i = 0; i < lines.length; i++) { 30 for (var i = 0; i < lines.length; i++) {
31 final match = pattern.firstMatch(lines[i]); 31 var match = pattern.firstMatch(lines[i]);
32 if (match != null) { 32 if (match != null) {
33 // Parse the link. 33 // Parse the link.
34 var id = match[1]; 34 var id = match[1];
35 var url = match[2]; 35 var url = match[2];
36 var title = match[3]; 36 var title = match[3];
37 37
38 if (title == '') { 38 if (title == '') {
39 // No title. 39 // No title.
40 title = null; 40 title = null;
41 } else { 41 } else {
42 // Remove "", '', or (). 42 // Remove "", '', or ().
43 title = title.substring(1, title.length - 1); 43 title = title.substring(1, title.length - 1);
44 } 44 }
45 45
46 // References are case-insensitive. 46 // References are case-insensitive.
47 id = id.toLowerCase(); 47 id = id.toLowerCase();
48 48
49 refLinks[id] = new Link(id, url, title); 49 refLinks[id] = new Link(id, url, title);
50 50
51 // Remove it from the output. We replace it with a blank line which will 51 // Remove it from the output. We replace it with a blank line which will
52 // get consumed by later processing. 52 // get consumed by later processing.
53 lines[i] = ''; 53 lines[i] = '';
54 } 54 }
55 } 55 }
56 } 56 }
57 57
58 /// Parse the given [lines] of markdown to a series of AST nodes. 58 /// Parse the given [lines] of markdown to a series of AST nodes.
59 List<Node> parseLines(List<String> lines) { 59 List<Node> parseLines(List<String> lines) {
60 final parser = new BlockParser(lines, this); 60 var parser = new BlockParser(lines, this);
61 61
62 final blocks = []; 62 var blocks = <Node>[];
63 while (!parser.isDone) { 63 while (!parser.isDone) {
64 for (final syntax in BlockSyntax.syntaxes) { 64 for (var syntax in BlockSyntax.syntaxes) {
65 if (syntax.canParse(parser)) { 65 if (syntax.canParse(parser)) {
66 final block = syntax.parse(parser); 66 var block = syntax.parse(parser);
67 if (block != null) blocks.add(block); 67 if (block != null) blocks.add(block);
68 break; 68 break;
69 } 69 }
70 } 70 }
71 } 71 }
72 72
73 return blocks; 73 return blocks;
74 } 74 }
75 75
76 /// Takes a string of raw text and processes all inline markdown tags, 76 /// Takes a string of raw text and processes all inline markdown tags,
77 /// returning a list of AST nodes. For example, given ``"*this **is** a* 77 /// returning a list of AST nodes. For example, given ``"*this **is** a*
78 /// `markdown`"``, returns: 78 /// `markdown`"``, returns:
79 /// `<em>this <strong>is</strong> a</em> <code>markdown</code>`. 79 /// `<em>this <strong>is</strong> a</em> <code>markdown</code>`.
80 List<Node> parseInline(String text) => new InlineParser(text, this).parse(); 80 List<Node> parseInline(String text) => new InlineParser(text, this).parse();
81 } 81 }
82 82
83 class Link { 83 class Link {
84 final String id; 84 final String id;
85 final String url; 85 final String url;
86 final String title; 86 final String title;
87 Link(this.id, this.url, this.title); 87 Link(this.id, this.url, this.title);
88 } 88 }
OLDNEW
« no previous file with comments | « lib/src/block_parser.dart ('k') | lib/src/html_renderer.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698