From 136acb9049ff56b130a6071e403ffbc8b39f19b6 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sun, 25 Sep 2022 16:03:27 +0200 Subject: move files --- code/src/markdown.rs | 81 --------------------------------------------- code/src/markdown/mod.rs | 2 ++ code/src/markdown/parser.rs | 0 code/src/markdown/render.rs | 81 +++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 83 insertions(+), 81 deletions(-) delete mode 100644 code/src/markdown.rs create mode 100644 code/src/markdown/mod.rs create mode 100644 code/src/markdown/parser.rs create mode 100644 code/src/markdown/render.rs (limited to 'code') diff --git a/code/src/markdown.rs b/code/src/markdown.rs deleted file mode 100644 index 22934c5..0000000 --- a/code/src/markdown.rs +++ /dev/null @@ -1,81 +0,0 @@ -use markdown::{Block, ListItem, Span}; - -use crate::syntax_highlight::syntax_highlight; - -pub fn span_to_html(ss: Vec) -> String { - let mut out = String::new(); - for s in ss { - out += match s { - Span::Break => format!("
"), - Span::Text(t) => escape(&t), - Span::Code(c) => format!("{}", escape(&c)), - Span::Link(text, url, _) => { - format!("{}", escape(&url), escape(&text)) - } - Span::Image(_, _, _) => todo!(), - Span::Emphasis(c) => format!("{}", span_to_html(c)), - Span::Strong(c) => format!("{}", span_to_html(c)), - } - .as_str() - } - out -} -pub fn blocks_to_html(blocks: Vec) -> String { - let mut out = String::new(); - for e in blocks { - out += match e { - Block::Header(text, level) => { - format!("{}", span_to_html(text)) - } - Block::Paragraph(p) => format!("

{}

", span_to_html(p)), - Block::Blockquote(q) => format!("{}", blocks_to_html(q)), - Block::CodeBlock(syntax, content) => { - if let Some(s) = &syntax { - format!("
{}
", syntax_highlight(s, &content)) - } else { - format!("
{}
", escape(&content)) - } - } - Block::OrderedList(els, _) => format!( - "
    {}
", - els.into_iter() - .map(|e| format!( - "
  • {}
  • ", - match e { - ListItem::Simple(s) => span_to_html(s), - ListItem::Paragraph(b) => blocks_to_html(b), - } - )) - .collect::>() - .join("") - ), - Block::UnorderedList(els) => { - format!( - "
      {}
    ", - els.into_iter() - .map(|e| format!( - "
  • {}
  • ", - match e { - ListItem::Simple(s) => span_to_html(s), - ListItem::Paragraph(b) => blocks_to_html(b), - } - )) - .collect::>() - .join("") - ) - } - Block::Raw(r) => r, - Block::Hr => format!("
    "), - } - .as_str(); - } - out -} - -pub fn escape(text: &str) -> String { - text.replace("&", "&") - .replace("<", "<") - .replace(">", ">") - .replace("'", "’") - .replace("\"", """) -} diff --git a/code/src/markdown/mod.rs b/code/src/markdown/mod.rs new file mode 100644 index 0000000..7bdf323 --- /dev/null +++ b/code/src/markdown/mod.rs @@ -0,0 +1,2 @@ +pub mod parser; +pub mod render; diff --git a/code/src/markdown/parser.rs b/code/src/markdown/parser.rs new file mode 100644 index 0000000..e69de29 diff --git a/code/src/markdown/render.rs b/code/src/markdown/render.rs new file mode 100644 index 0000000..22934c5 --- /dev/null +++ b/code/src/markdown/render.rs @@ -0,0 +1,81 @@ +use markdown::{Block, ListItem, Span}; + +use crate::syntax_highlight::syntax_highlight; + +pub fn span_to_html(ss: Vec) -> String { + let mut out = String::new(); + for s in ss { + out += match s { + Span::Break => format!("
    "), + Span::Text(t) => escape(&t), + Span::Code(c) => format!("{}", escape(&c)), + Span::Link(text, url, _) => { + format!("{}", escape(&url), escape(&text)) + } + Span::Image(_, _, _) => todo!(), + Span::Emphasis(c) => format!("{}", span_to_html(c)), + Span::Strong(c) => format!("{}", span_to_html(c)), + } + .as_str() + } + out +} +pub fn blocks_to_html(blocks: Vec) -> String { + let mut out = String::new(); + for e in blocks { + out += match e { + Block::Header(text, level) => { + format!("{}", span_to_html(text)) + } + Block::Paragraph(p) => format!("

    {}

    ", span_to_html(p)), + Block::Blockquote(q) => format!("{}", blocks_to_html(q)), + Block::CodeBlock(syntax, content) => { + if let Some(s) = &syntax { + format!("
    {}
    ", syntax_highlight(s, &content)) + } else { + format!("
    {}
    ", escape(&content)) + } + } + Block::OrderedList(els, _) => format!( + "
      {}
    ", + els.into_iter() + .map(|e| format!( + "
  • {}
  • ", + match e { + ListItem::Simple(s) => span_to_html(s), + ListItem::Paragraph(b) => blocks_to_html(b), + } + )) + .collect::>() + .join("") + ), + Block::UnorderedList(els) => { + format!( + "
      {}
    ", + els.into_iter() + .map(|e| format!( + "
  • {}
  • ", + match e { + ListItem::Simple(s) => span_to_html(s), + ListItem::Paragraph(b) => blocks_to_html(b), + } + )) + .collect::>() + .join("") + ) + } + Block::Raw(r) => r, + Block::Hr => format!("
    "), + } + .as_str(); + } + out +} + +pub fn escape(text: &str) -> String { + text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("'", "’") + .replace("\"", """) +} -- cgit v1.2.3-70-g09d2