grammar Tumblr
rule root (block / tag / orphan / literal)* <Tumblargh::Node::Root> end rule block block_start (block / tag / orphan / literal)* block_end <Tumblargh::Node::Block> end rule block_start '{block:' block_name space? block_arguments? '}' space? <Tumblargh::Node::BlockStart> end rule block_end '{/block:' block_name '}' space? <Tumblargh::Node::BlockEnd> end rule block_name [^\s}:;]+ end rule block_arguments block_argument+ end rule block_argument (([a-zA-Z0-9]+) '=' '"' ([a-zA-Z0-9]+) '"') space? end rule tag '{' tag_name '}' <Tumblargh::Node::Tag> end rule tag_name ([a-zA-Z0-9]+ ':'? [^\n:/{};\[\]\(\)]*) end rule orphan '{' !'/' <Tumblargh::Node::Literal> end rule literal [^{]+ <Tumblargh::Node::Literal> end rule space [\s]+ end
end