file = _{ SOI ~ block* ~ EOI } block = { (code_block | header | list | paragraph | "") ~ NEWLINE } header = { "#"+ ~ span } list = { list_item+ } list_item = { "-" ~ span } paragraph = { span } code_block = { "```" ~ (!"```" ~ ANY) ~ "```" } span = { (style_bold | style_italic | style_code | text)+ } style_bold = { "**" ~ text ~ "**" } style_italic = { "_" ~ text ~ "_" } style_code = { "`" ~ text ~ "`" } text = { (!(NEWLINE | "*" | "_" | "`") ~ ANY)+ }