Canonical caps/structure strings (those created by gst_caps_to_string() and gst_structure_to_string()) do not have AUTO_VALUE. Goals: - UTF-8 clean - SIMPLE_STRINGs should cover most simple cases that don't interfere with other parts of the gst_caps or gst_parse grammar - forward-parsed grammar - quoted strings handle backslash escaping as well as XML-style (&ack;) escaping CAPS = STRUCTURE [ ';' STRUCTURE ]* STRUCTURE = STRUCTURE_NAME [ ',' FIELD ]* STRUCTURE_NAME = STRING FIELD = FIELD_NAME '=' TYPED_VALUE FIELD_NAME = SIMPLE_STRING TYPED_VALUE = CANONICAL_VALUE | AUTO_VALUE CANONICAL_VALUE = '{' TYPED_VALUE [ ',' TYPED_VALUE ]* '}' | '[' TYPED_VALUE ',' TYPED_VALUE ']' | '(' TYPE ')' VALUE AUTO_VALUE = [-+]?[0-9][0-9]* | [-+]?[0-9][0-9]*[.][0-9]*[eE][-+][0-9]* | STRING VALUE = STRING STRING = ["][^"]["] | ['][^']['] | SIMPLE_STRING SIMPLE_STRING = [A-Za-z0-9_+-:./]+ TYPE = "int" | "i" | "float" | "f" | "double" | "d" | "fourcc" | "4" | "boolean" | "bool" | "b" | GTYPE Canonical Examples: "audio/raw" "audio/raw", rate=(int)44100 "audio/raw", rate=(int)44100, signed=(boolean)true "audio/raw", rate={ (int)44100, (int)48000 } "audio/raw", rate=[ (int)8000, (int)48000 ]