gstreamer/gst/parse/parse.l
Andy Wingo cded585aa2 gst/: Debugging tweaks.
Original commit message from CVS:
2004-02-20  Andy Wingo  <wingo@pobox.com>

* gst/gstbin.c:
* gst/gstbuffer.c:
* gst/gstplugin.c:
* gst/registries/gstxmlregistry.c:
* gst/schedulers/gstoptimalscheduler.c: Debugging tweaks.

* gst/gstelement.c (gst_element_set_scheduler): Debugging fixes.
(gst_element_add_pad): DEBUG->INFO, some fixes.
(gst_element_get_compatible_pad_template): Just see if the
templates' caps intersect, not if one is a strict subset of the
other. This conforms more to what gst_pad_link_intersect() does.
(gst_element_class_add_pad_template): Don't memcpy the pad
template, just ref it.
(gst_element_get_compatible_pad_filtered): Clean up debug messages

* gst/gstpad.c (gst_pad_can_link_filtered): Debug a true result.
(gst_pad_link_filtered): Debug changes.
(gst_pad_link_prepare): New function, consolidated from
can_link_filtered and link_filtered.

* gst/parse/grammar.y (gst_parse_perform_link): Made INFO output
look more like that of the functions in gstelement.c

* gst/gstinfo.c (gst_debug_print_object): Put a space before the
object, and return the empty string if object is NULL.

* gst/parse/parse.l: Remove trailing newlines when calling PRINT.
* gst/parse/grammar.y (YYFPRINTF): Log bison debugging info via
LOG, not DEBUG. We still get flex info on debug.

* gst/registries/gstxmlregistry.c (gst_xml_registry_load): Make
debug string more verbose.
(plugin_times_older_than): DEBUG->LOG.
2004-02-20 13:18:32 +00:00

134 lines
3 KiB
Text

%{
#include <math.h>
#include <string.h>
#include "../gst_private.h"
#include "types.h"
#include "../gstinfo.h"
#include "../gsturi.h"
#include "grammar.tab.h"
#ifdef G_HAVE_ISO_VARARGS
#define PRINT(...) GST_CAT_DEBUG (GST_CAT_PIPELINE, "flex: " __VA_ARGS__)
#elif defined(G_HAVE_GNUC_VARARGS)
#define PRINT(args...) GST_CAT_DEBUG (GST_CAT_PIPELINE, "flex: " args)
#else
#define PRINT(args...)
#endif
#define YY_DECL int _gst_parse_yylex (YYSTYPE *lvalp)
%}
_operator [(){}.:!,;=]
_identifier [[:alpha:]][[:alnum:]\-_%]*
_char ("\\".)|([^[:space:]])
_string {_char}+|("\""([^\"]|"\\\"")*"\"")|("'"([^']|"\\\"")*"'")
_comma [[:space:]]*","[[:space:]]*
_assign [[:space:]]*"="[[:space:]]*
_protocol [[:alpha:]][[:alnum:]+-\.]*
_url {_protocol}"://"{_string}|["."{_identifier}]?"/"{_string}
/* we must do this here, because nearly everything matches a {_string} */
_assignment {_identifier}{_assign}{_string}
/* get pad/element references and stuff with dots right */
_padref "."{_identifier}
_ref {_identifier}"."{_identifier}?
_binref {_identifier}[[:space:]]*"."[[:space:]]*"("
/* links */
_mimechar ([[:alnum:]-])
_mimetype ({_mimechar}+"/"{_mimechar}+)|("\""([^\"]|"\\\"")*"\"")|("'"([^']|"\\\"")*"'")
_capschar ("\\".)|([^\;!])
_capsstring {_capschar}+|("\""([^\"]|"\\\"")*"\"")|("'"([^']|"\\\"")*"'")
_caps {_mimetype}(","[^!]|{_capsstring})*
_link ("!"[[:space:]]*{_caps}([[:space:]]*";"[[:space:]]*{_caps})*[[:space:]]*"!")|("!")
%x value
%option noyywrap
%option nounput
%%
{_assignment} {
/* "=" */
PRINT ("ASSIGNMENT: %s", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return ASSIGNMENT;
}
{_padref} {
yytext++;
PRINT ("PADREF: %s", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return PADREF;
}
{_ref} {
PRINT ("REF: %s", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return REF;
}
{_binref} {
gchar *pos = yytext;
while (!g_ascii_isspace (*pos) && (*pos != '.')) pos++;
*pos = '\0';
PRINT ("BINREF: %s", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return BINREF;
}
{_identifier} {
PRINT ("IDENTIFIER: %s", yytext);
lvalp->s = gst_parse_strdup (yytext);
BEGIN (INITIAL);
return IDENTIFIER;
}
{_link} {
gchar *c = yytext;
PRINT ("LINK: %s", yytext);
c++;
if (*c) {
while (g_ascii_isspace (*c)) c++;
c = lvalp->s = gst_parse_strdup (c);
while (*c) c++;
g_assert (*--c == '!');
while (g_ascii_isspace (*--c));
*++c = '\0';
} else {
lvalp->s = NULL;
}
BEGIN (INITIAL);
return LINK;
}
{_url} {
PRINT ("URL: %s", yytext);
if (gst_uri_is_valid (yytext)) {
lvalp->s = g_strdup (yytext);
} else {
lvalp->s = gst_uri_construct ("file", yytext);
}
gst_parse_unescape (lvalp->s);
BEGIN (INITIAL);
return PARSE_URL;
}
{_operator} { PRINT ("OPERATOR: [%s]", yytext); return *yytext; }
[[:space:]]+ { PRINT ("SPACE: [%s]", yytext); }
. {
printf ("???: %s\n", yytext);
return *yytext;
}
%%