9e60adcc18217260bf43628fbcb075f5dc27d584
1 %{
2 #include <math.h>
3 #include <string.h>
5 #include <glib/gprintf.h>
7 #include "../gst_private.h"
9 #include "types.h"
10 #include "../gstinfo.h"
11 #include "../gsturi.h"
12 #include "grammar.tab.h"
14 /* Override the default ECHO so as to avoid fortify warnings. Ignore the
15 embedded-NUL case for now. We know yytext is NUL-terminated. */
16 #define ECHO g_fprintf(yyout, "%s", yytext)
18 #ifdef G_HAVE_ISO_VARARGS
19 #define PRINT(...) GST_CAT_DEBUG (GST_CAT_PIPELINE, "flex: " __VA_ARGS__)
20 #elif defined(G_HAVE_GNUC_VARARGS)
21 #define PRINT(args...) GST_CAT_DEBUG (GST_CAT_PIPELINE, "flex: " args)
22 #else
23 static inline void
24 PRINT (const char *format, ...)
25 {
26 va_list varargs;
28 va_start (varargs, format);
29 GST_CAT_LEVEL_LOG_valist (GST_CAT_PIPELINE, GST_LEVEL_DEBUG, NULL,
30 format, varargs);
31 va_end (varargs);
32 }
33 #endif
35 %}
37 _operator [(){}.!,;=]
38 _identifier [[:alpha:]][[:alnum:]\-_%:]*
40 _char ("\\".)|([^[:space:]])
41 _string {_char}+|("\""([^\"]|"\\\"")*"\"")|("'"([^']|"\\\'")*"'")
43 _assign [[:space:]]*"="[[:space:]]*
45 _protocol [[:alpha:]][[:alnum:]+-\.]*
46 _url ({_protocol}"://"{_string}|["."{_identifier}]?"/"{_string})|({_protocol}"://")
48 /* we must do this here, because nearly everything matches a {_string} */
49 _assignment {_identifier}{_assign}{_string}
51 /* get pad/element references and stuff with dots right */
52 _padref "."{_identifier}
53 _ref {_identifier}"."{_identifier}?
54 _binref {_identifier}[[:space:]]*"."[[:space:]]*"("
56 /* links */
57 _mimechar [[:alnum:]-]
58 _mimetype {_mimechar}+"/"{_mimechar}+
59 _capschar ("\\".)|([^\;!])
60 _capsstring {_capschar}+
61 _caps {_mimetype}(","[^!]|{_capsstring})*
62 _link ("!"[[:space:]]*{_caps}([[:space:]]*(";"[[:space:]]*{_caps})*[[:space:]]*)*"!")|("!")
64 %x value
65 %option noyywrap
66 %option nounput
67 %option reentrant
68 %option bison-bridge
69 %option never-interactive
70 %option noinput
71 %%
73 {_assignment} {
74 /* "=" */
75 PRINT ("ASSIGNMENT: %s", yytext);
76 yylval->s = gst_parse_strdup (yytext);
77 BEGIN (INITIAL);
78 return ASSIGNMENT;
79 }
81 {_padref} {
82 yytext++;
83 PRINT ("PADREF: %s", yytext);
84 yylval->s = gst_parse_strdup (yytext);
85 BEGIN (INITIAL);
86 return PADREF;
87 }
89 {_ref} {
90 PRINT ("REF: %s", yytext);
91 yylval->s = gst_parse_strdup (yytext);
92 BEGIN (INITIAL);
93 return REF;
94 }
96 {_binref} {
97 gchar *pos = yytext;
98 while (!g_ascii_isspace (*pos) && (*pos != '.')) pos++;
99 *pos = '\0';
100 PRINT ("BINREF: %s", yytext);
101 yylval->s = gst_parse_strdup (yytext);
102 BEGIN (INITIAL);
103 return BINREF;
104 }
106 {_identifier} {
107 PRINT ("IDENTIFIER: %s", yytext);
108 yylval->s = gst_parse_strdup (yytext);
109 BEGIN (INITIAL);
110 return IDENTIFIER;
111 }
113 {_link} {
114 gchar *c = yytext;
115 PRINT ("LINK: %s", yytext);
116 c++;
117 if (*c) {
118 while (g_ascii_isspace (*c)) c++;
119 c = yylval->s = gst_parse_strdup (c);
120 while (*c) c++;
121 if (*--c != '!')
122 g_assert_not_reached ();
123 while (g_ascii_isspace (*--c));
124 *++c = '\0';
125 } else {
126 yylval->s = NULL;
127 }
128 BEGIN (INITIAL);
129 return LINK;
130 }
131 {_url} {
132 PRINT ("URL: %s", yytext);
133 yylval->s = g_strdup (yytext);
134 gst_parse_unescape (yylval->s);
135 BEGIN (INITIAL);
136 return PARSE_URL;
137 }
139 {_operator} { PRINT ("OPERATOR: [%s]", yytext); return *yytext; }
141 [[:space:]]+ { PRINT ("SPACE: [%s]", yytext); }
143 . {
144 PRINT ("Invalid Lexer element: %s\n", yytext);
145 return *yytext;
146 }
148 %%