diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-26 18:07:22 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-26 18:07:22 +0200 |
commit | e8cf6402a5491fb5af5a9c6dceed147f4e61d25e (patch) | |
tree | 020d8d3f00fc11e1ca87bc8f93bb2f011c8785bb | |
parent | a834ce0e2fd1d08bf37042e5e327ab37d520623d (diff) | |
download | metamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar metamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar.bz2 metamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar.zst |
sloppy table parser
-rw-r--r-- | code/src/markdown/mod.rs | 3 | ||||
-rw-r--r-- | code/src/markdown/parser.pest | 10 | ||||
-rw-r--r-- | readme.md | 4 |
3 files changed, 11 insertions, 6 deletions
diff --git a/code/src/markdown/mod.rs b/code/src/markdown/mod.rs index 68386cc..f7d97e2 100644 --- a/code/src/markdown/mod.rs +++ b/code/src/markdown/mod.rs @@ -40,6 +40,9 @@ pub fn render_ast(p: Pair<Rule>) -> String { Rule::style_code => format!("<code>{}</code>", p.into_inner().next().unwrap().as_str()), Rule::unordered_list => format!("<ul>{}</ul>", render_pairs(p.into_inner())), Rule::ordered_list => format!("<ol>{}</ol>", render_pairs(p.into_inner())), + Rule::table => format!("<table><tbody>{}</tbody></table>", render_pairs(p.into_inner())), + Rule::table_row => format!("<tr>{}</tr>", render_pairs(p.into_inner())), + Rule::table_cell => format!("<td><p>{}</p></td>", render_pairs(p.into_inner())), Rule::unordered_list_item | Rule::ordered_list_item => { format!("<li>{}</li>", render_pairs(p.into_inner())) } diff --git a/code/src/markdown/parser.pest b/code/src/markdown/parser.pest index a15277f..08ad249 100644 --- a/code/src/markdown/parser.pest +++ b/code/src/markdown/parser.pest @@ -1,6 +1,6 @@ file = _{ SOI ~ NEWLINE* ~ (block ~ NEWLINE*)* ~ EOI } -block = { code_block | latex_block | header | unordered_list | ordered_list | paragraph } +block = { code_block | latex_block | header | unordered_list | ordered_list | table | paragraph } header = { "#"{1,6} ~ span } unordered_list = { unordered_list_item+ } unordered_list_item = { "- " ~ span ~ NEWLINE } @@ -12,7 +12,9 @@ block = { code_block | latex_block | header | unordered_list | ordered_list | pa code_block_inner = { (!"```" ~ ANY)* } latex_block = { "$$" ~ latex_block_inner ~ "$$" } latex_block_inner = { (!"$$" ~ ANY)* } - + table = { (table_row ~ NEWLINE)+ } + table_row = { "|"? ~ table_cell ~ ("|" ~ table_cell)+ ~ "|"? } + table_cell = { span } span = { (style_bold | style_italic | style_code | inline_latex | hyperlink | text)+ } style_bold = { "**" ~ span ~ "**" } @@ -25,5 +27,5 @@ span = { (style_bold | style_italic | style_code | inline_latex | hyperlink | te hyperlink_label = { span } hyperlink_location = { (!")" ~ANY)+ } - text = { (!("[" | "]" | "*" | "_" | "`" | "$" | ("\n" ~ forbidden_span_wrap)) ~ ANY)+ } - forbidden_span_wrap = _{ "\n" | "- " | ASCII_DIGIT+ ~ ". " } + text = { (!("[" | "]" | "*" | "_" | "`" | "|" | "$" | ("\n" ~ forbidden_span_wrap)) ~ ANY)+ } + forbidden_span_wrap = _{ "\n" | "|" | "- " | ASCII_DIGIT+ ~ ". " } @@ -6,10 +6,10 @@ My personal blog's source code. ## Todo (blog-tool) -- proper markdown parsing +- table parser +- table styling - markdown images - parser error handling -- syntax highlighting via AST from grammar ## License |