From b14edcc66993a3e84bbfa0606bff04d0fe271e48 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Mon, 26 Sep 2022 16:53:23 +0200 Subject: almost a good parser --- code/src/markdown/mod.rs | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) (limited to 'code/src/markdown/mod.rs') 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) -> String { Rule::block => render_pairs(p.into_inner()), Rule::header => format!("

{}

", render_pairs(p.into_inner())), Rule::paragraph => format!("

{}

", render_pairs(p.into_inner())), - Rule::list => format!("", render_pairs(p.into_inner())), - Rule::list_item => format!("
  • {}
  • ", render_pairs(p.into_inner())), + Rule::unordered_list => format!("", render_pairs(p.into_inner())), + Rule::ordered_list => format!("
      {}
    ", render_pairs(p.into_inner())), + Rule::unordered_list_item | Rule::ordered_list_item => { + format!("
  • {}
  • ", render_pairs(p.into_inner())) + } + Rule::style_italic => format!("{}", render_pairs(p.into_inner())), + Rule::style_bold => format!("{}", render_pairs(p.into_inner())), + Rule::style_code => format!("{}", 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::>(); + let lang = k[0].as_str(); + let inner = k[1].as_str(); + format!( + "
    {}
    ", + syntax_highlight(lang, &inner).unwrap_or_else(|| escape(&inner)) + ) + } + Rule::inline_latex => format!("TODO: Inline latex"), + Rule::latex_block => format!("

    TODO: Latex block

    "), + + Rule::text => escape(p.as_str()), + _ => todo!("{:?}", p.as_rule()), } } -- cgit v1.2.3-70-g09d2