+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
+Tue Jun 30 11:58:25 1998 Tim Janik <timj@gtk.org>
+
+ * gscanner.c (g_scanner_unexp_token): take symbol_2_token into
+ account. react on valid/invalid string pairs.
+
Sat Jun 27 21:55:46 PDT 1998 Manish Singh <yosh@gimp.org>
* glib.m4: ftp.glib.org -> ftp.gtk.org, since glib.org isn't
void (*msg_handler) (GScanner*, const gchar*, ...);
g_return_if_fail (scanner != NULL);
-
+
if (is_error)
msg_handler = g_scanner_error;
else
msg_handler = g_scanner_warn;
-
+
if (!identifier_spec)
identifier_spec = "identifier";
if (!symbol_spec)
switch (scanner->token)
{
-
case G_TOKEN_EOF:
g_snprintf (token_string, token_string_len, "end of file");
break;
- default: /* 1 ... 255 */
+ default:
if (scanner->token >= 1 && scanner->token <= 255)
{
if ((scanner->token >= ' ' && scanner->token <= '~') ||
g_snprintf (token_string, expected_string_len, "character `%c'", scanner->token);
else
g_snprintf (token_string, expected_string_len, "character `\\%o'", scanner->token);
+ break;
}
+ else if (!scanner->config->symbol_2_token)
+ {
+ g_snprintf (token_string, token_string_len, "(unknown) token <%d>", scanner->token);
+ break;
+ }
+ /* fall through */
+ case G_TOKEN_SYMBOL:
+ if (expected_token == G_TOKEN_SYMBOL ||
+ (scanner->config->symbol_2_token &&
+ expected_token > G_TOKEN_LAST))
+ print_unexp = FALSE;
+ if (symbol_name)
+ g_snprintf (token_string,
+ token_string_len,
+ "%s%s `%s'",
+ print_unexp ? "" : "invalid ",
+ symbol_spec,
+ symbol_name);
else
- g_snprintf (token_string, token_string_len, "(unknown) token <%d>", scanner->token);
+ g_snprintf (token_string,
+ token_string_len,
+ "%s%s",
+ print_unexp ? "" : "invalid ",
+ symbol_spec);
break;
case G_TOKEN_ERROR:
g_snprintf (token_string, token_string_len, "character `%c'", scanner->value.v_char);
break;
- case G_TOKEN_SYMBOL:
- if (expected_token == G_TOKEN_SYMBOL)
- print_unexp = FALSE;
- if (symbol_name)
- g_snprintf (token_string,
- token_string_len,
- "%s%s `%s'",
- print_unexp ? "" : "invalid ",
- symbol_spec,
- symbol_name);
- else
- g_snprintf (token_string,
- token_string_len,
- "%s%s",
- print_unexp ? "" : "invalid ",
- symbol_spec);
- break;
-
case G_TOKEN_IDENTIFIER:
if (expected_token == G_TOKEN_IDENTIFIER)
print_unexp = FALSE;
g_snprintf (token_string,
- token_string_len,
- "%s%s `%s'",
- print_unexp ? "" : "invalid ",
- identifier_spec,
- scanner->value.v_string);
+ token_string_len,
+ "%s%s `%s'",
+ print_unexp ? "" : "invalid ",
+ identifier_spec,
+ scanner->value.v_string);
break;
case G_TOKEN_BINARY:
break;
case G_TOKEN_STRING:
+ if (expected_token == G_TOKEN_STRING)
+ print_unexp = FALSE;
g_snprintf (token_string,
- token_string_len,
- "%sstring constant \"%s\"",
- scanner->value.v_string[0] == 0 ? "empty " : "",
- scanner->value.v_string);
+ token_string_len,
+ "%s%sstring constant \"%s\"",
+ print_unexp ? "" : "invalid ",
+ scanner->value.v_string[0] == 0 ? "empty " : "",
+ scanner->value.v_string);
token_string[token_string_len - 2] = '"';
token_string[token_string_len - 1] = 0;
break;
break;
case G_TOKEN_NONE:
+ /* somehow the user's parsing code is screwed, there isn't much
+ * we can do about it.
+ * Note, a common case to trigger this is
+ * g_scanner_peek_next_token(); g_scanner_unexp_token();
+ * without an intermediate g_scanner_get_next_token().
+ */
g_assert_not_reached ();
break;
}
switch (expected_token)
{
- default: /* 1 ... 255 */
+ gboolean need_valid;
+
+ default:
if (expected_token >= 1 && expected_token <= 255)
{
if ((expected_token >= ' ' && expected_token <= '~') ||
g_snprintf (expected_string, expected_string_len, "character `%c'", expected_token);
else
g_snprintf (expected_string, expected_string_len, "character `\\%o'", expected_token);
+ break;
}
- else
- g_snprintf (expected_string, expected_string_len, "(unknown) token <%d>", expected_token);
+ else if (!scanner->config->symbol_2_token)
+ {
+ g_snprintf (expected_string, expected_string_len, "(unknown) token <%d>", expected_token);
+ break;
+ }
+ /* fall through */
+ case G_TOKEN_SYMBOL:
+ need_valid = (scanner->token == G_TOKEN_SYMBOL ||
+ (scanner->config->symbol_2_token &&
+ scanner->token > G_TOKEN_LAST));
+ g_snprintf (expected_string,
+ expected_string_len,
+ "%s%s",
+ need_valid ? "valid " : "",
+ symbol_spec);
+ /* FIXME: should we attempt to lookup the symbol_name for symbol_2_token? */
break;
case G_TOKEN_INT:
break;
case G_TOKEN_STRING:
- g_snprintf (expected_string, expected_string_len, "string constant");
- break;
-
- case G_TOKEN_SYMBOL:
g_snprintf (expected_string,
- expected_string_len,
- "%s%s",
- scanner->token == G_TOKEN_SYMBOL ? "valid " : "",
- symbol_spec);
+ expected_string_len,
+ "%sstring constant",
+ scanner->token == G_TOKEN_STRING ? "valid " : "");
break;
case G_TOKEN_IDENTIFIER:
g_snprintf (expected_string,
- expected_string_len,
- "%s%s",
- scanner->token == G_TOKEN_IDENTIFIER ? "valid " : "",
- identifier_spec);
+ expected_string_len,
+ "%s%s",
+ scanner->token == G_TOKEN_IDENTIFIER ? "valid " : "",
+ identifier_spec);
break;
case G_TOKEN_NONE:
void (*msg_handler) (GScanner*, const gchar*, ...);
g_return_if_fail (scanner != NULL);
-
+
if (is_error)
msg_handler = g_scanner_error;
else
msg_handler = g_scanner_warn;
-
+
if (!identifier_spec)
identifier_spec = "identifier";
if (!symbol_spec)
switch (scanner->token)
{
-
case G_TOKEN_EOF:
g_snprintf (token_string, token_string_len, "end of file");
break;
- default: /* 1 ... 255 */
+ default:
if (scanner->token >= 1 && scanner->token <= 255)
{
if ((scanner->token >= ' ' && scanner->token <= '~') ||
g_snprintf (token_string, expected_string_len, "character `%c'", scanner->token);
else
g_snprintf (token_string, expected_string_len, "character `\\%o'", scanner->token);
+ break;
}
+ else if (!scanner->config->symbol_2_token)
+ {
+ g_snprintf (token_string, token_string_len, "(unknown) token <%d>", scanner->token);
+ break;
+ }
+ /* fall through */
+ case G_TOKEN_SYMBOL:
+ if (expected_token == G_TOKEN_SYMBOL ||
+ (scanner->config->symbol_2_token &&
+ expected_token > G_TOKEN_LAST))
+ print_unexp = FALSE;
+ if (symbol_name)
+ g_snprintf (token_string,
+ token_string_len,
+ "%s%s `%s'",
+ print_unexp ? "" : "invalid ",
+ symbol_spec,
+ symbol_name);
else
- g_snprintf (token_string, token_string_len, "(unknown) token <%d>", scanner->token);
+ g_snprintf (token_string,
+ token_string_len,
+ "%s%s",
+ print_unexp ? "" : "invalid ",
+ symbol_spec);
break;
case G_TOKEN_ERROR:
g_snprintf (token_string, token_string_len, "character `%c'", scanner->value.v_char);
break;
- case G_TOKEN_SYMBOL:
- if (expected_token == G_TOKEN_SYMBOL)
- print_unexp = FALSE;
- if (symbol_name)
- g_snprintf (token_string,
- token_string_len,
- "%s%s `%s'",
- print_unexp ? "" : "invalid ",
- symbol_spec,
- symbol_name);
- else
- g_snprintf (token_string,
- token_string_len,
- "%s%s",
- print_unexp ? "" : "invalid ",
- symbol_spec);
- break;
-
case G_TOKEN_IDENTIFIER:
if (expected_token == G_TOKEN_IDENTIFIER)
print_unexp = FALSE;
g_snprintf (token_string,
- token_string_len,
- "%s%s `%s'",
- print_unexp ? "" : "invalid ",
- identifier_spec,
- scanner->value.v_string);
+ token_string_len,
+ "%s%s `%s'",
+ print_unexp ? "" : "invalid ",
+ identifier_spec,
+ scanner->value.v_string);
break;
case G_TOKEN_BINARY:
break;
case G_TOKEN_STRING:
+ if (expected_token == G_TOKEN_STRING)
+ print_unexp = FALSE;
g_snprintf (token_string,
- token_string_len,
- "%sstring constant \"%s\"",
- scanner->value.v_string[0] == 0 ? "empty " : "",
- scanner->value.v_string);
+ token_string_len,
+ "%s%sstring constant \"%s\"",
+ print_unexp ? "" : "invalid ",
+ scanner->value.v_string[0] == 0 ? "empty " : "",
+ scanner->value.v_string);
token_string[token_string_len - 2] = '"';
token_string[token_string_len - 1] = 0;
break;
break;
case G_TOKEN_NONE:
+ /* somehow the user's parsing code is screwed, there isn't much
+ * we can do about it.
+ * Note, a common case to trigger this is
+ * g_scanner_peek_next_token(); g_scanner_unexp_token();
+ * without an intermediate g_scanner_get_next_token().
+ */
g_assert_not_reached ();
break;
}
switch (expected_token)
{
- default: /* 1 ... 255 */
+ gboolean need_valid;
+
+ default:
if (expected_token >= 1 && expected_token <= 255)
{
if ((expected_token >= ' ' && expected_token <= '~') ||
g_snprintf (expected_string, expected_string_len, "character `%c'", expected_token);
else
g_snprintf (expected_string, expected_string_len, "character `\\%o'", expected_token);
+ break;
}
- else
- g_snprintf (expected_string, expected_string_len, "(unknown) token <%d>", expected_token);
+ else if (!scanner->config->symbol_2_token)
+ {
+ g_snprintf (expected_string, expected_string_len, "(unknown) token <%d>", expected_token);
+ break;
+ }
+ /* fall through */
+ case G_TOKEN_SYMBOL:
+ need_valid = (scanner->token == G_TOKEN_SYMBOL ||
+ (scanner->config->symbol_2_token &&
+ scanner->token > G_TOKEN_LAST));
+ g_snprintf (expected_string,
+ expected_string_len,
+ "%s%s",
+ need_valid ? "valid " : "",
+ symbol_spec);
+ /* FIXME: should we attempt to lookup the symbol_name for symbol_2_token? */
break;
case G_TOKEN_INT:
break;
case G_TOKEN_STRING:
- g_snprintf (expected_string, expected_string_len, "string constant");
- break;
-
- case G_TOKEN_SYMBOL:
g_snprintf (expected_string,
- expected_string_len,
- "%s%s",
- scanner->token == G_TOKEN_SYMBOL ? "valid " : "",
- symbol_spec);
+ expected_string_len,
+ "%sstring constant",
+ scanner->token == G_TOKEN_STRING ? "valid " : "");
break;
case G_TOKEN_IDENTIFIER:
g_snprintf (expected_string,
- expected_string_len,
- "%s%s",
- scanner->token == G_TOKEN_IDENTIFIER ? "valid " : "",
- identifier_spec);
+ expected_string_len,
+ "%s%s",
+ scanner->token == G_TOKEN_IDENTIFIER ? "valid " : "",
+ identifier_spec);
break;
case G_TOKEN_NONE: