%}
-_operator [(){}.!,;=]
+_operator [(){}.!:,;=]
_identifier [[:alnum:]_][[:alnum:]\-_%:]*
_char ("\\".)|([^[:space:]])
_capschar ("\\".)|([^\;!])
_capsstring {_capschar}+
_caps {_mimetype}(","[^!]|{_capsstring})*
-_link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)*"!")|("!")
+_link ([!:][[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)*[!:])|([!:])
%x value
%option noyywrap
{_assignment} {
/* "=" */
PRINT ("ASSIGNMENT: %s", yytext);
- yylval->s = gst_parse_strdup (yytext);
+ yylval->ss = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return ASSIGNMENT;
}
{_padref} {
yytext++;
PRINT ("PADREF: %s", yytext);
- yylval->s = gst_parse_strdup (yytext);
+ yylval->ss = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return PADREF;
}
{_ref} {
PRINT ("REF: %s", yytext);
- yylval->s = gst_parse_strdup (yytext);
+ yylval->ss = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return REF;
}
while (!g_ascii_isspace (*pos) && (*pos != '.')) pos++;
*pos = '\0';
PRINT ("BINREF: %s", yytext);
- yylval->s = gst_parse_strdup (yytext);
+ yylval->ss = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return BINREF;
}
{_identifier} {
PRINT ("IDENTIFIER: %s", yytext);
- yylval->s = gst_parse_strdup (yytext);
+ yylval->ss = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return IDENTIFIER;
}
{_link} {
gchar *c = yytext;
+ gchar op;
+ gboolean link_all;
+
PRINT ("LINK: %s", yytext);
+ /* First char is a link operator */
+ link_all = (*c == ':');
c++;
if (*c) {
while (g_ascii_isspace (*c)) c++;
- c = yylval->s = gst_parse_strdup (c);
+ c = yylval->ss = gst_parse_strdup (c);
while (*c) c++;
- if (*--c != '!')
+ /* Last non-space char is a link operator */
+ op = *--c;
+ if (op != '!' && op != ':')
g_assert_not_reached ();
+ if (op == ':')
+ link_all = TRUE;
+
+ /* Walk backward past whitespaces - what remains
+ * is a filter caps string, or empty */
while (g_ascii_isspace (*--c));
*++c = '\0';
} else {
- yylval->s = NULL;
+ yylval->ss = NULL;
}
BEGIN (INITIAL);
- return LINK;
+ return link_all ? LINK_ALL : LINK;
}
{_url} {
PRINT ("URL: %s", yytext);
- yylval->s = g_strdup (yytext);
- gst_parse_unescape (yylval->s);
+ yylval->ss = g_strdup (yytext);
+ gst_parse_unescape (yylval->ss);
BEGIN (INITIAL);
return PARSE_URL;
}