From e99b80ecf04e6fa949f6cead82f869fb7cbe1ee7 Mon Sep 17 00:00:00 2001 From: trivernis Date: Thu, 21 Jan 2021 20:32:44 +0100 Subject: [PATCH] Fix block documents being ignored at EOF Fixes that block elements are being ignored when written as the last element of a file (Fixes #14)x Signed-off-by: trivernis --- Cargo.lock | 4 ++-- Cargo.toml | 2 +- src/parser/block.rs | 7 +++++-- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 116c3f0..97d48c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -235,9 +235,9 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] name = "charred" -version = "0.3.4" +version = "0.3.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d76bd26a00789c7e782d3ba5c0adae6f7eabc2a1026dfb41838b0e11ebf55f8" +checksum = "ed9759715d56a062d5636cd0cbc71f2aa8a978afe08c572a69e65e8cf53418f5" [[package]] name = "chrono" diff --git a/Cargo.toml b/Cargo.toml index 7494436..bb3649f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,7 +21,7 @@ path = "src/main.rs" pdf = ["headless_chrome", "failure"] [dependencies] -charred = "0.3.4" +charred = "0.3.5" asciimath-rs = "0.5.7" bibliographix = "0.6.0" crossbeam-utils = "0.7.2" diff --git a/src/parser/block.rs b/src/parser/block.rs index c2c5a40..6ed9576 100644 --- a/src/parser/block.rs +++ b/src/parser/block.rs @@ -135,8 +135,9 @@ impl ParseBlock for Parser { let language = self.ctm.get_string_until_any(&[LB], &[])?; self.ctm.seek_one()?; let text = self.ctm.get_string_until_sequence(&[&SQ_CODE_BLOCK], &[])?; + for _ in 0..2 { - self.ctm.seek_one()?; + self.ctm.try_seek(); } Ok(CodeBlock { @@ -153,7 +154,7 @@ impl ParseBlock for Parser { self.ctm.seek_one()?; let text = self.ctm.get_string_until_sequence(&[SQ_MATH], &[])?; for _ in 0..1 { - self.ctm.seek_one()?; + self.ctm.try_seek(); } Ok(MathBlock { expression: asciimath_rs::parse(text), @@ -231,6 +232,7 @@ impl ParseBlock for Parser { let ordered = self.ctm.get_current().is_numeric(); list.ordered = ordered; let mut list_hierarchy: Vec = Vec::new(); + while let Ok(mut item) = self.parse_list_item() { while let Some(parent_item) = list_hierarchy.pop() { if parent_item.level < item.level { @@ -289,6 +291,7 @@ impl ParseBlock for Parser { } let seek_index = self.ctm.get_index(); let mut table = Table::new(header); + while let Ok(_) = self.ctm.seek_one() { self.ctm.seek_any(&INLINE_WHITESPACE)?; if !self.ctm.check_any(&[MINUS, PIPE]) || self.ctm.check_char(&LB) {