summaryrefslogtreecommitdiff
path: root/src/parse/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/parse/mod.rs')
-rw-r--r--src/parse/mod.rs24
1 files changed, 18 insertions, 6 deletions
diff --git a/src/parse/mod.rs b/src/parse/mod.rs
index 7c0a0932..c08c5d6f 100644
--- a/src/parse/mod.rs
+++ b/src/parse/mod.rs
@@ -37,6 +37,7 @@ pub fn parse_markup_elements(
differential: isize,
reference: &[Green],
mut at_start: bool,
+ column: usize,
) -> Option<(Vec<Green>, bool, usize)> {
let mut p = Parser::with_prefix(prefix, src, TokenMode::Markup);
@@ -47,6 +48,12 @@ pub fn parse_markup_elements(
let mut stopped = false;
while !p.eof() {
+ if let Some(NodeKind::Space(1 ..)) = p.peek() {
+ if p.column(p.current_end()) < column {
+ return None;
+ }
+ }
+
markup_node(&mut p, &mut at_start);
if p.prev_end() >= end_pos {
@@ -85,11 +92,15 @@ pub fn parse_markup_elements(
}
}
+ if p.prev_end() < end_pos {
+ return None;
+ }
+
if p.eof() && !stopped {
replaced = reference.len();
}
- let (mut res, terminated) = p.consume_open_ended()?;
+ let (mut res, terminated) = p.consume()?;
if stopped {
res.pop().unwrap();
}
@@ -103,8 +114,9 @@ pub fn parse_template(
src: &str,
end_pos: usize,
_: isize,
- reference: &[Green],
+ _: &[Green],
_: bool,
+ _: usize,
) -> Option<(Vec<Green>, bool, usize)> {
let mut p = Parser::with_prefix(prefix, src, TokenMode::Code);
if !p.at(&NodeKind::LeftBracket) {
@@ -113,7 +125,7 @@ pub fn parse_template(
template(&mut p);
- let (mut green, terminated) = p.consume_open_ended()?;
+ let (mut green, terminated) = p.consume()?;
let first = green.remove(0);
if first.len() != end_pos {
return None;
@@ -128,8 +140,9 @@ pub fn parse_block(
src: &str,
end_pos: usize,
_: isize,
- reference: &[Green],
+ _: &[Green],
_: bool,
+ _: usize,
) -> Option<(Vec<Green>, bool, usize)> {
let mut p = Parser::with_prefix(prefix, src, TokenMode::Code);
if !p.at(&NodeKind::LeftBrace) {
@@ -138,9 +151,8 @@ pub fn parse_block(
block(&mut p);
- let (mut green, terminated) = p.consume_open_ended()?;
+ let (mut green, terminated) = p.consume()?;
let first = green.remove(0);
-
if first.len() != end_pos {
return None;
}