def parse_declaration(ruleset)
assert unless @token == '{''{'
while true
scan()
flag_escape = escape?(@value)
case @token
when nil ; break
when '}''}' ; break
when :stag ; has_colon?(); ruleset.set_stag _parse_expr() , flag_escape
when :cont ; has_colon?(); ruleset.set_cont _parse_expr() , flag_escape
when :etag ; has_colon?(); ruleset.set_etag _parse_expr() , flag_escape
when :elem ; has_colon?(); ruleset.set_elem _parse_expr() , flag_escape
when :value ; has_colon?(); ruleset.set_value _parse_expr() , flag_escape
when :attrs ; has_colon?(); ruleset.set_attrs _parse_pairs(), flag_escape
when :append ; has_colon?(); ruleset.set_append _parse_exprs(), flag_escape
when :remove ; has_colon?(); ruleset.set_remove _parse_strs()
when :tagname; has_colon?(); ruleset.set_tagname _parse_str()
when :logic ; has_colon?(); ruleset.set_logic _parse_block()
when :before ; has_colon?(); ruleset.set_before _parse_block()
when :after ; has_colon?(); ruleset.set_after _parse_block()
when :begin ; has_colon?(); ruleset.set_before _parse_block()
when :end ; has_colon?(); ruleset.set_after _parse_block()
else
raise parse_error("'#{@value}': unexpected token.")
end
end
return ruleset
end