diff --git a/Cargo.lock b/Cargo.lock index 953a067..0e86c37 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -26,7 +26,7 @@ name = "asciimath-rs" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" dependencies = [ - "charred 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", + "charred 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "htmlescape 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", "maplit 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -83,12 +83,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "charred" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "charred" -version = "0.3.0" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] @@ -599,10 +594,10 @@ source = "registry+https://github.com/rust-lang/crates.io-index" [[package]] name = "snekdown" -version = "0.19.3" +version = "0.19.4" dependencies = [ "asciimath-rs 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "charred 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "charred 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", "chrono 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)", "colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)", "crossbeam-utils 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", @@ -817,8 +812,7 @@ dependencies = [ "checksum byteorder 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "08c48aae112d48ed9f069b33538ea9e3e90aa263cfa3d1c24309612b1f7472de" "checksum cc 1.0.58 (registry+https://github.com/rust-lang/crates.io-index)" = "f9a06fb2e53271d7c279ec1efea6ab691c35a2ae67ec0d91d7acec0caf13b518" "checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum charred 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "8cf73c7fbbaf59d5643f99c6a4413eba1b914a7489c39b730ec7d8d72e7bb061" -"checksum charred 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "81443b6f18b18560f94a0e14d529a1db379581473217b1b2a40ecae0c96a5d0e" +"checksum charred 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)" = "e098f81a798d5019ee7b85efe9aa93dd48d4ea16fd1965f7afa24db6a1900652" "checksum chrono 0.4.13 (registry+https://github.com/rust-lang/crates.io-index)" = "c74d84029116787153e02106bf53e66828452a4b325cc8652b788b5967c0a0b6" "checksum clap 2.33.2 (registry+https://github.com/rust-lang/crates.io-index)" = "10040cdf04294b565d9e0319955430099ec3813a64c952b86a41200ad714ae48" "checksum colored 1.9.3 (registry+https://github.com/rust-lang/crates.io-index)" = "f4ffc801dacf156c5854b9df4f425a626539c3a6ef7893cc0c5084a23f0b6c59" diff --git a/Cargo.toml b/Cargo.toml index daa11dc..e55a909 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "snekdown" -version = "0.19.3" +version = "0.19.4" authors = ["trivernis "] edition = "2018" license-file = "LICENSE" @@ -17,7 +17,7 @@ name = "snekdown" path = "src/main.rs" [dependencies] -charred = "0.2.2" +charred = "0.3.1" crossbeam-utils = "0.7.2" structopt = "0.3.14" minify = "1.1.1" diff --git a/src/elements/mod.rs b/src/elements/mod.rs index 6e63ce0..9c13514 100644 --- a/src/elements/mod.rs +++ b/src/elements/mod.rs @@ -169,6 +169,7 @@ pub enum Inline { Math(Math), BibReference(Arc>), TemplateVar(Arc>), + LineBreak, } #[derive(Clone, Debug)] diff --git a/src/format/html.rs b/src/format/html.rs index 581413a..feb8ebf 100644 --- a/src/format/html.rs +++ b/src/format/html.rs @@ -66,6 +66,7 @@ impl ToHtml for Inline { Inline::BibReference(bibref) => bibref.read().unwrap().to_html(), Inline::TemplateVar(var) => var.read().unwrap().to_html(), Inline::Math(m) => m.to_html(), + Inline::LineBreak => "
".to_string(), } } } diff --git a/src/parser/inline.rs b/src/parser/inline.rs index 0db67a4..a47fdb2 100644 --- a/src/parser/inline.rs +++ b/src/parser/inline.rs @@ -95,7 +95,6 @@ impl ParseInline for Parser { /// parses an image url fn parse_image(&mut self) -> ParseResult { let start_index = self.ctm.get_index(); - self.ctm.seek_any(&INLINE_WHITESPACE)?; self.ctm.assert_char(&IMG_START, Some(start_index))?; self.ctm.seek_one()?; @@ -114,8 +113,6 @@ impl ParseInline for Parser { // parses an url fn parse_url(&mut self, short_syntax: bool) -> ParseResult { let start_index = self.ctm.get_index(); - self.ctm.seek_any(&INLINE_WHITESPACE)?; - let mut description = Vec::new(); if self.ctm.check_char(&DESC_OPEN) { @@ -329,7 +326,10 @@ impl ParseInline for Parser { return Err(self.ctm.err()); } let mut characters = String::new(); - characters.push(self.ctm.get_current()); + if !self.ctm.check_char(&SPECIAL_ESCAPE) { + characters.push(self.ctm.get_current()); + } + while let Some(ch) = self.ctm.next_char() { if self.ctm.check_any(&INLINE_SPECIAL_CHARS) || self.ctm.check_any(&self.inline_break_at) @@ -337,7 +337,9 @@ impl ParseInline for Parser { { break; } - characters.push(ch) + if !self.ctm.check_char(&SPECIAL_ESCAPE) { + characters.push(ch) + } } if characters.len() > 0 { diff --git a/src/parser/line.rs b/src/parser/line.rs index d9bc785..95af386 100644 --- a/src/parser/line.rs +++ b/src/parser/line.rs @@ -1,6 +1,6 @@ use super::ParseResult; use crate::elements::tokens::*; -use crate::elements::{Cell, Centered, Header, Line, ListItem, Row, Ruler, TextLine}; +use crate::elements::{Cell, Centered, Header, Inline, Line, ListItem, Row, Ruler, TextLine}; use crate::parser::inline::ParseInline; use crate::references::bibliography::BibEntry; use crate::Parser; @@ -155,9 +155,12 @@ impl ParseLine for Parser { if self.ctm.check_char(&LB) { self.ctm.seek_one()?; + if self.ctm.check_char(&LB) { + text.add_subtext(Inline::LineBreak) + } } - if text.subtext.len() > 0 || !self.ctm.check_eof() { + if text.subtext.len() > 0 { Ok(text) } else { Err(self.ctm.err())