aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-26 18:07:22 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-26 18:07:22 +0200
commite8cf6402a5491fb5af5a9c6dceed147f4e61d25e (patch)
tree020d8d3f00fc11e1ca87bc8f93bb2f011c8785bb
parenta834ce0e2fd1d08bf37042e5e327ab37d520623d (diff)
downloadmetamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar
metamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar.bz2
metamuffin-blog-e8cf6402a5491fb5af5a9c6dceed147f4e61d25e.tar.zst
sloppy table parser
-rw-r--r--code/src/markdown/mod.rs3
-rw-r--r--code/src/markdown/parser.pest10
-rw-r--r--readme.md4
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+ ~ ". " }
diff --git a/readme.md b/readme.md
index 8417c90..a739232 100644
--- a/readme.md
+++ b/readme.md
@@ -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