aboutsummaryrefslogtreecommitdiff
path: root/code/src/markdown/parser.pest
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2022-09-26 17:08:20 +0200
committermetamuffin <metamuffin@disroot.org>2022-09-26 17:08:20 +0200
commit5316b954323a4d7bee492a3997bae35dd107e44a (patch)
tree428b550f419d1ceab1f3e54df5bfeb79a17384d1 /code/src/markdown/parser.pest
parentb14edcc66993a3e84bbfa0606bff04d0fe271e48 (diff)
downloadmetamuffin-blog-5316b954323a4d7bee492a3997bae35dd107e44a.tar
metamuffin-blog-5316b954323a4d7bee492a3997bae35dd107e44a.tar.bz2
metamuffin-blog-5316b954323a4d7bee492a3997bae35dd107e44a.tar.zst
hyperlinks
Diffstat (limited to 'code/src/markdown/parser.pest')
-rw-r--r--code/src/markdown/parser.pest29
1 files changed, 29 insertions, 0 deletions
diff --git a/code/src/markdown/parser.pest b/code/src/markdown/parser.pest
new file mode 100644
index 0000000..22563d4
--- /dev/null
+++ b/code/src/markdown/parser.pest
@@ -0,0 +1,29 @@
+file = _{ SOI ~ NEWLINE* ~ (block ~ NEWLINE*)* ~ EOI }
+
+block = { code_block | latex_block | header | unordered_list | ordered_list | paragraph }
+ header = { "#"{1,6} ~ span }
+ unordered_list = { unordered_list_item+ }
+ unordered_list_item = { "-" ~ span ~ NEWLINE }
+ ordered_list = { ordered_list_item+ }
+ ordered_list_item = { ASCII_DIGIT+ ~ "." ~ span ~ NEWLINE }
+ paragraph = { span }
+ code_block = { "```" ~ code_block_lang ~ NEWLINE ~ code_block_inner ~ "```" }
+ code_block_lang = { ASCII_ALPHANUMERIC* }
+ code_block_inner = { (!"```" ~ ANY)* }
+ latex_block = { "$$" ~ latex_block_inner ~ "$$" }
+ latex_block_inner = { (!"$$" ~ ANY)* }
+
+
+span = { (style_bold | style_italic | style_code | inline_latex | hyperlink | text)+ }
+ style_bold = { "**" ~ span ~ "**" }
+ style_italic = { "_" ~ span ~ "_" }
+ style_code = { "`" ~ code_inner ~ "`" }
+ code_inner = { (!"`" ~ ANY)+ }
+ inline_latex = { "$" ~ latex_inner ~ "$" }
+ latex_inner = { (!"$" ~ ANY)+ }
+ hyperlink = { "[" ~ hyperlink_label ~ "](" ~ hyperlink_location ~ ")" }
+ hyperlink_label = { span }
+ hyperlink_location = { (!")" ~ANY)+ }
+
+ text = { (!("[" | "]" | "*" | "_" | "`" | "$" | ("\n" ~ forbidden_span_wrap)) ~ ANY)+ }
+ forbidden_span_wrap = _{ "\n" | "-" | ASCII_DIGIT+ ~ "." }