| OLD | NEW |
| 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 /// Maintains the internal state needed to parse inline span elements in | 5 /// Maintains the internal state needed to parse inline span elements in |
| 6 /// markdown. | 6 /// markdown. |
| 7 class InlineParser { | 7 class InlineParser { |
| 8 static List<InlineSyntax> get syntaxes { | 8 static List<InlineSyntax> get syntaxes { |
| 9 // Lazy initialize. | 9 // Lazy initialize. |
| 10 if (_syntaxes == null) { | 10 if (_syntaxes == null) { |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 108 } | 108 } |
| 109 | 109 |
| 110 writeText() { | 110 writeText() { |
| 111 writeTextRange(start, pos); | 111 writeTextRange(start, pos); |
| 112 start = pos; | 112 start = pos; |
| 113 } | 113 } |
| 114 | 114 |
| 115 writeTextRange(int start, int end) { | 115 writeTextRange(int start, int end) { |
| 116 if (end > start) { | 116 if (end > start) { |
| 117 final text = source.substring(start, end); | 117 final text = source.substring(start, end); |
| 118 final nodes = _stack.last().children; | 118 final nodes = _stack.last.children; |
| 119 | 119 |
| 120 // If the previous node is text too, just append. | 120 // If the previous node is text too, just append. |
| 121 if ((nodes.length > 0) && (nodes.last() is Text)) { | 121 if ((nodes.length > 0) && (nodes.last is Text)) { |
| 122 final newNode = new Text('${nodes.last().text}$text'); | 122 final newNode = new Text('${nodes.last.text}$text'); |
| 123 nodes[nodes.length - 1] = newNode; | 123 nodes[nodes.length - 1] = newNode; |
| 124 } else { | 124 } else { |
| 125 nodes.add(new Text(text)); | 125 nodes.add(new Text(text)); |
| 126 } | 126 } |
| 127 } | 127 } |
| 128 } | 128 } |
| 129 | 129 |
| 130 addNode(Node node) { | 130 addNode(Node node) { |
| 131 _stack.last().children.add(node); | 131 _stack.last.children.add(node); |
| 132 } | 132 } |
| 133 | 133 |
| 134 // TODO(rnystrom): Only need this because RegExp doesn't let you start | 134 // TODO(rnystrom): Only need this because RegExp doesn't let you start |
| 135 // searching from a given offset. | 135 // searching from a given offset. |
| 136 String get currentSource => source.substring(pos, source.length); | 136 String get currentSource => source.substring(pos, source.length); |
| 137 | 137 |
| 138 bool get isDone => pos == source.length; | 138 bool get isDone => pos == source.length; |
| 139 | 139 |
| 140 void advanceBy(int length) { | 140 void advanceBy(int length) { |
| 141 pos += length; | 141 pos += length; |
| (...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 399 parser.consume(endMatch[0].length); | 399 parser.consume(endMatch[0].length); |
| 400 } else { | 400 } else { |
| 401 // Didn't close correctly so revert to text. | 401 // Didn't close correctly so revert to text. |
| 402 parser.start = startPos; | 402 parser.start = startPos; |
| 403 parser.advanceBy(endMatch[0].length); | 403 parser.advanceBy(endMatch[0].length); |
| 404 } | 404 } |
| 405 | 405 |
| 406 return null; | 406 return null; |
| 407 } | 407 } |
| 408 } | 408 } |
| OLD | NEW |