entry : chunk(s?) EOF { join('', @{$item[1]}) }
chunk : text { $item[1] }
| code { $item[1] }
text : TEXT { join('', '
', $item[1], '
') }
code : CODE_OP CODE_TEXT CODE_CL { join('', '', CGI::escapeHTML($item[2]), '
') }
# Tokens
EOF : m{^\Z}
TEXT : m{[\w ]+} { $item[1] }
CODE_OP : m{} { $item[1] }
CODE_CL : m{} { $item[1] }
CODE_CHARS : m{[\w $]+} { $item[1] }
CODE_SPECIAL : m{<\w+>} { $item[1] ne '' } { $item[1] }
# Pseudo-token
CODE_TEXT : CODE_TEXT_(s?) { join('', @{$item[1]}) }
CODE_TEXT_ : CODE_CHARS { $item[1] }
| CODE_SPECIAL { $item[1] }