X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=src%2Fxkbcomp%2Fparser.y;h=1beb30bbe62ca73c58d560331af46047da621bd7;hb=ef81d04eef4b1a60ff42bd9ccbe2918b0a5420ec;hp=45f9d90bfdcb76f0fc669400d92182db93b04e96;hpb=6ca1a0c9f6252242fa11e966f3779ba94af684c1;p=platform%2Fupstream%2Flibxkbcommon.git diff --git a/src/xkbcomp/parser.y b/src/xkbcomp/parser.y index 45f9d90..1beb30b 100644 --- a/src/xkbcomp/parser.y +++ b/src/xkbcomp/parser.y @@ -37,6 +37,7 @@ #include "xkbcomp/ast-build.h" #include "xkbcomp/parser-priv.h" #include "scanner-utils.h" +#include "keysym.h" struct parser_param { struct xkb_context *ctx; @@ -45,16 +46,16 @@ struct parser_param { bool more_maps; }; -#define parser_err(param, fmt, ...) \ - scanner_err((param)->scanner, fmt, ##__VA_ARGS__) +#define parser_err(param, error_id, fmt, ...) \ + scanner_err_with_code((param)->scanner, error_id, fmt, ##__VA_ARGS__) -#define parser_warn(param, fmt, ...) \ - scanner_warn((param)->scanner, fmt, ##__VA_ARGS__) +#define parser_warn(param, warning_id, fmt, ...) \ + scanner_warn_with_code((param)->scanner, warning_id, fmt, ##__VA_ARGS__) static void _xkbcommon_error(struct parser_param *param, const char *msg) { - parser_err(param, "%s", msg); + parser_err(param, XKB_ERROR_INVALID_SYNTAX, "%s", msg); } static bool @@ -84,7 +85,7 @@ resolve_keysym(const char *name, xkb_keysym_t *sym_rtrn) #define param_scanner param->scanner %} -%pure-parser +%define api.pure %lex-param { struct scanner *param_scanner } %parse-param { struct parser_param *param } @@ -726,25 +727,42 @@ KeySyms : OBRACE KeySymList CBRACE KeySym : IDENT { - if (!resolve_keysym($1, &$$)) - parser_warn(param, "unrecognized keysym \"%s\"", $1); + if (!resolve_keysym($1, &$$)) { + parser_warn( + param, + XKB_WARNING_UNRECOGNIZED_KEYSYM, + "unrecognized keysym \"%s\"", + $1 + ); + $$ = XKB_KEY_NoSymbol; + } free($1); } | SECTION { $$ = XKB_KEY_section; } | Integer { - if ($1 < 0) { - parser_warn(param, "unrecognized keysym \"%ld\"", $1); + if ($1 < XKB_KEYSYM_MIN) { + parser_warn( + param, + XKB_WARNING_UNRECOGNIZED_KEYSYM, + "unrecognized keysym \"%"PRId64"\"", + $1 + ); $$ = XKB_KEY_NoSymbol; } + /* Special case for digits 0..9 */ else if ($1 < 10) { /* XKB_KEY_0 .. XKB_KEY_9 */ $$ = XKB_KEY_0 + (xkb_keysym_t) $1; } else { - char buf[32]; - snprintf(buf, sizeof(buf), "0x%lx", $1); - if (!resolve_keysym(buf, &$$)) { - parser_warn(param, "unrecognized keysym \"%s\"", buf); + if ($1 <= XKB_KEYSYM_MAX) { + $$ = (xkb_keysym_t) $1; + } else { + parser_warn( + param, XKB_WARNING_UNRECOGNIZED_KEYSYM, + "unrecognized keysym \"0x%"PRIx64"\" " + "(%"PRId64")", $1, $1 + ); $$ = XKB_KEY_NoSymbol; } }