aboutsummaryrefslogtreecommitdiff
path: root/code/src/markdown/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'code/src/markdown/mod.rs')
-rw-r--r--code/src/markdown/mod.rs27
1 files changed, 23 insertions, 4 deletions
diff --git a/code/src/markdown/mod.rs b/code/src/markdown/mod.rs
index b6dfb55..dee923c 100644
--- a/code/src/markdown/mod.rs
+++ b/code/src/markdown/mod.rs
@@ -4,7 +4,7 @@ use pest::{
};
use pest_derive::Parser;
-use crate::html::escape;
+use crate::{html::escape, syntax_highlight::syntax_highlight};
#[derive(Parser)]
#[grammar = "grammar/markdown.pest"]
@@ -29,11 +29,30 @@ pub fn render_ast(p: Pair<Rule>) -> String {
Rule::block => render_pairs(p.into_inner()),
Rule::header => format!("<h1>{}</h1>", render_pairs(p.into_inner())),
Rule::paragraph => format!("<p>{}</p>", render_pairs(p.into_inner())),
- Rule::list => format!("<ul>{}</ul>", render_pairs(p.into_inner())),
- Rule::list_item => format!("<li>{}</li>", render_pairs(p.into_inner())),
+ Rule::unordered_list => format!("<ul>{}</ul>", render_pairs(p.into_inner())),
+ Rule::ordered_list => format!("<ol>{}</ol>", render_pairs(p.into_inner())),
+ Rule::unordered_list_item | Rule::ordered_list_item => {
+ format!("<li>{}</li>", render_pairs(p.into_inner()))
+ }
+ Rule::style_italic => format!("<i>{}</i>", render_pairs(p.into_inner())),
+ Rule::style_bold => format!("<b>{}</b>", render_pairs(p.into_inner())),
+ Rule::style_code => format!("<code>{}</code>", p.into_inner().next().unwrap().as_str()),
Rule::span => render_pairs(p.into_inner()),
- Rule::text => escape(p.as_str()),
Rule::EOI => "".to_string(),
+ Rule::code_block => {
+ let k = p.into_inner().collect::<Vec<_>>();
+ let lang = k[0].as_str();
+ let inner = k[1].as_str();
+ format!(
+ "<pre>{}</pre>",
+ syntax_highlight(lang, &inner).unwrap_or_else(|| escape(&inner))
+ )
+ }
+ Rule::inline_latex => format!("<span>TODO: Inline latex</span>"),
+ Rule::latex_block => format!("<p>TODO: Latex block</p>"),
+
+ Rule::text => escape(p.as_str()),
+
_ => todo!("{:?}", p.as_rule()),
}
}