diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs index c17f4aad..15cb3354 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags.rs @@ -81,15 +81,15 @@ impl Tags { reference::render_links(buffer, base, link_color, links); // Cleanup unformatted escape chars - for escapes in ESCAPES { - for escape in *escapes { - let mut cursor = buffer.start_iter(); - while let Some((mut match_start, mut match_end)) = - cursor.forward_search(escape, TextSearchFlags::CASE_INSENSITIVE, None) - { - buffer.delete(&mut match_start, &mut match_end); - cursor = match_end; + for e in ESCAPE_ENTRIES { + let mut cursor = buffer.start_iter(); + while let Some((mut match_start, mut match_end)) = + cursor.forward_search(e, TextSearchFlags::CASE_INSENSITIVE, None) + { + if match_end.backward_cursor_positions(1) { + buffer.delete(&mut match_start, &mut match_end) } + cursor = match_end; } } @@ -103,10 +103,8 @@ impl Tags { s = reference::strip_tags(&s); s = strike::strip_tags(&s); s = underline::strip_tags(&s); - for escapes in ESCAPES { - for escape in *escapes { - s = s.replace(escape, ""); - } + for e in ESCAPE_ENTRIES { + s = s.replace(e, &e[1..]); } s }) @@ -118,17 +116,12 @@ pub fn format_header_fragment(value: &str) -> GString { Uri::escape_string(&value.to_lowercase().replace(" ", "-"), None, true) } -const ESCAPES: &[&[&str]] = &[ - &["\\\n"], - bold::ESCAPES, - // same with pre - // code::ESCAPES, - header::ESCAPES, - // same with bold and reference - // list::ESCAPES, - pre::ESCAPES, - quote::ESCAPES, - reference::ESCAPES, - strike::ESCAPES, - underline::ESCAPES, +const ESCAPE_ENTRIES: &[&str] = &[ + "\\\n", "\\\\", "\\>", "\\`", "\\!", "\\[", "\\]", "\\(", "\\)", "\\*", "\\#", "\\~", "\\_", ]; +#[test] +fn test_escape_entries() { + for e in ESCAPE_ENTRIES { + assert_eq!(e.len(), 2) + } +} diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/bold.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/bold.rs index 70436faa..56bd09c3 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/bold.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/bold.rs @@ -7,8 +7,6 @@ use regex::Regex; const REGEX_BOLD: &str = r"\*\*(?P[^*]+)\*\*"; -pub const ESCAPES: &[&str] = &["\\*"]; // same with list - pub struct Bold(TextTag); impl Bold { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/code.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/code.rs index 501fa270..5d79041f 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/code.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/code.rs @@ -12,9 +12,6 @@ use syntax::Syntax; const REGEX_CODE: &str = r"(?s)```[ \t]*(?P.*?)\n(?P.*?)```"; -// same with pre -// pub const ESCAPES: &[&str] = &["\\`"]; - struct Entry { alt: Option, data: String, diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs index 471f2a57..e399d92c 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/header.rs @@ -8,8 +8,6 @@ use std::collections::HashMap; const REGEX_HEADER: &str = r"(?m)^(?P#{1,6})\s+(?P.*)$"; -pub const ESCAPES: &[&str] = &["\\#"]; - pub struct Header { h1: TextTag, h2: TextTag, diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/list.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/list.rs index 4796e99a..304167c8 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/list.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/list.rs @@ -7,9 +7,6 @@ use regex::Regex; const REGEX_LIST: &str = r"(?m)^(?P<level>[ \t]*)\*[ \t]+(?:(?P<state>\[[ xX]\])[ \t]+)?(?P<text>.*)"; -// same with bold and reference -// pub const ESCAPES: &[&str] = &["\\*","\\[","\\]"]; - struct State(bool); impl State { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/pre.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/pre.rs index 3d867761..473067dc 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/pre.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/pre.rs @@ -10,8 +10,6 @@ const REGEX_PRE: &str = r"`(?P<text>[^`]+)`"; const TAG_FONT: &str = "monospace"; // @TODO const TAG_SCALE: f64 = 0.9; -pub const ESCAPES: &[&str] = &["\\`"]; // same with code - pub struct Pre(TextTag); impl Pre { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/quote.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/quote.rs index e6161b3b..e7a79849 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/quote.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/quote.rs @@ -8,8 +8,6 @@ use regex::Regex; const REGEX_QUOTE: &str = r"(?m)>\s*(?P<text>.*)$"; -pub const ESCAPES: &[&str] = &["\\>"]; - pub struct Quote(TextTag); impl Quote { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/reference.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/reference.rs index 57eb3546..b69622b1 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/reference.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/reference.rs @@ -12,8 +12,6 @@ const REGEX_IMAGE: &str = r"!\[(?P<alt>[^\]]*)\]\((?P<url>[^\)]+)\)"; const REGEX_IMAGE_LINK: &str = r"\[(?P<is_img>!)\[(?P<alt>[^\]]*)\]\((?P<img_url>[^\)]+)\)\]\((?P<link_url>[^\)]+)\)"; -pub const ESCAPES: &[&str] = &["\\!", "\\[", "\\]", "\\(", "\\)"]; - struct Reference { uri: Uri, alt: String, diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/strike.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/strike.rs index cdabe70b..13b4ef08 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/strike.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/strike.rs @@ -7,8 +7,6 @@ use regex::Regex; const REGEX_STRIKE: &str = r"~~(?P<text>.+?)~~"; -pub const ESCAPES: &[&str] = &["\\~"]; - pub struct Strike(TextTag); impl Strike { diff --git a/src/app/browser/window/tab/item/page/content/text/markdown/tags/underline.rs b/src/app/browser/window/tab/item/page/content/text/markdown/tags/underline.rs index 242291e6..fe7dbd3f 100644 --- a/src/app/browser/window/tab/item/page/content/text/markdown/tags/underline.rs +++ b/src/app/browser/window/tab/item/page/content/text/markdown/tags/underline.rs @@ -8,8 +8,6 @@ use regex::Regex; const REGEX_UNDERLINE: &str = r"\b_(?P<text>[^_]+)_\b"; -pub const ESCAPES: &[&str] = &["\\_"]; - pub struct Underline(TextTag); impl Underline {