blob: e387182bb1d8d649a64384ebf53523e1cacba253 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
// WHITESPACE = _{ " " | "\t" | NEWLINE }
file = _{ SOI ~ NEWLINE* ~ (block ~ NEWLINE*)* ~ EOI }
block = { code_block | latex_block | header | unordered_list | ordered_list | paragraph }
header = { "#"+ ~ 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 | text)+ }
style_bold = { "**" ~ text ~ "**" }
style_italic = { "_" ~ text ~ "_" }
style_code = { "`" ~ code_inner ~ "`" }
code_inner = { (!"`" ~ ANY)+ }
inline_latex = { "$" ~ latex_inner ~ "$" }
latex_inner = { (!"$" ~ ANY)+ }
text = { (!("\n" ~ forbidden_span_wrap | "*" | "_" | "`" | "$") ~ ANY)+ }
forbidden_span_wrap = _{ "\n" | "-" | ASCII_DIGIT+ ~ "." }
|