commit = { SOI ~ header ~ body? ~ footer? ~ NEWLINE* ~ EOI }
header = ${ commit_type ~ scope_with_braces? ~ "!"? ~ ":" ~ WHITE_SPACE+ ~ subject }
commit_type = @{ ASCII_ALPHANUMERIC+ }
scope = @{ ASCII_ALPHANUMERIC+ }
scope_with_braces = _{ "(" ~ scope ~ ")" }
subject = @{ text_without_newline }
body = { NEWLINE{2, } ~ (!footer ~ ANY)+ }
footer = @{ NEWLINE{2, } ~ text_without_newline ~ EOI }
text_without_newline = { (!NEWLINE ~ ANY)+ }