|
| tuple[int, dict[str, str]] | parse (str string) |
| |
|
State | handle_start (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_comment (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_id (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_class (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_key (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_value (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_bare_value (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_escaped (str char, int pos, TokenState tokens) |
| |
|
State | handle_scanning_quoted_value (str char, int pos, TokenState tokens) |
| |
Parser for attributes::
attributes { id = "foo", class = "bar baz",
key1 = "val1", key2 = "val2" }
Adapted from:
https://github.com/jgm/djot/blob/fae7364b86bfce69bc6d5b5eede1f5196d845fd6/djot/attributes.lua#L1
syntax:
attributes <- '{' whitespace* attribute (whitespace attribute)* whitespace* '}'
attribute <- identifier | class | keyval
identifier <- '#' name
class <- '.' name
name <- (nonspace, nonpunctuation other than ':', '_', '-')+
keyval <- key '=' val
key <- (ASCII_ALPHANUM | ':' | '_' | '-')+
val <- bareval | quotedval
bareval <- (ASCII_ALPHANUM | ':' | '_' | '-')+
quotedval <- '"' ([^"] | '\"') '"'