WHITESPACE = _{ " " }
CMD_START = _{ ":" }
CMT_START = _{ "#" }
CMD_END = _{("="|"/")}
CMD_SEP = _{(","|NEWLINE)}
ALNUM = _{( ASCII_ALPHANUMERIC | "_" | "-" | "+" | "." | "*" | "~")}
GROUP_START = _{ "[" }
GROUP_END = _{ "]" }
filter_spec = { (
filter_group
| filter_presub
| filter_subdir
| filter_nop
| filter
| filter_noarg
)+ }
filter_group = { CMD_START ~ cmd? ~ GROUP_START ~ compose ~ GROUP_END }
filter_subdir = { CMD_START ~ "/" ~ argument }
filter_nop = { CMD_START ~ "/" }
filter_presub = { CMD_START ~ ":" ~ argument }
filter = { CMD_START ~ cmd ~ "=" ~ (argument ~ ("," ~ argument)*)? }
filter_noarg = { CMD_START ~ cmd }
argument = { (ALNUM | "/" )+ }
cmd = { ALNUM+ }
file_entry = { dst_path ~ "=" ~ filter_spec }
compose = {
NEWLINE*
~ (filter_spec|file_entry)?
~ (CMD_SEP+ ~ (filter_spec|file_entry))*
~ NEWLINE*
}
workspace_comments = {
NEWLINE*
~ ( (CMT_START ~ (!NEWLINE ~ ANY)*)
~ NEWLINE*)+
}
workspace_file = {
workspace_comments?
~ compose
~ EOI
}
filter_chain = _{ filter_spec ~ EOI }
dst_path = @{ path ~ ("/" ~ path)* }
path = @{ ALNUM+ }