diff options
author | metamuffin <metamuffin@disroot.org> | 2022-09-26 17:08:20 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2022-09-26 17:08:20 +0200 |
commit | 5316b954323a4d7bee492a3997bae35dd107e44a (patch) | |
tree | 428b550f419d1ceab1f3e54df5bfeb79a17384d1 /code/src/markdown/parser.pest | |
parent | b14edcc66993a3e84bbfa0606bff04d0fe271e48 (diff) | |
download | metamuffin-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.pest | 29 |
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+ ~ "." } |