summaryrefslogtreecommitdiff
path: root/xkbparse.y
diff options
context:
space:
mode:
authorDaniel Stone <daniel@fooishbar.org>2010-06-07 22:43:01 +0100
committerDaniel Stone <daniel@fooishbar.org>2010-06-15 19:26:49 +0100
commit02de53d767b20bab1517b4e8a3e7eb3b9e7f15be (patch)
treee917c813c074a6acb89f03cd15dcc36855c8388c /xkbparse.y
parent07cc4d60dea2b4c947fed45b082edae4a53b186a (diff)
downloadxorg-app-xkbcomp-02de53d767b20bab1517b4e8a3e7eb3b9e7f15be.tar.gz
Lazy keysym parsing (avoid XStringToKeysym)
Instead of calling XStringToKeysym on every keysym we parse, store it as a string until we need to store it in an actual keymap. Signed-off-by: Daniel Stone <daniel@fooishbar.org>
Diffstat (limited to 'xkbparse.y')
-rw-r--r--xkbparse.y37
1 files changed, 10 insertions, 27 deletions
diff --git a/xkbparse.y b/xkbparse.y
index 63f87bb..8f9a073 100644
--- a/xkbparse.y
+++ b/xkbparse.y
@@ -136,9 +136,9 @@ unsigned int parseDebug;
XkbFile *file;
}
%type <ival> Number Integer Float SignedNumber
-%type <uval> XkbCompositeType FileType MergeMode OptMergeMode KeySym
+%type <uval> XkbCompositeType FileType MergeMode OptMergeMode
%type <uval> DoodadType Flag Flags OptFlags
-%type <str> KeyName MapName OptMapName
+%type <str> KeyName MapName OptMapName KeySym
%type <sval> FieldSpec Ident Element String
%type <any> DeclList Decl
%type <expr> OptExprList ExprList Expr Term Lhs Terminal ArrayInit
@@ -374,9 +374,9 @@ InterpretDecl : INTERPRET InterpretMatch OBRACE
;
InterpretMatch : KeySym PLUS Expr
- { $$= InterpCreate((KeySym)$1,$3); }
+ { $$= InterpCreate(XStringToKeysym($1), $3); }
| KeySym
- { $$= InterpCreate((KeySym)$1,NULL); }
+ { $$= InterpCreate(XStringToKeysym($1), NULL); }
;
VarDeclList : VarDeclList VarDecl
@@ -716,34 +716,17 @@ OptKeySymList : KeySymList { $$= $1; }
;
KeySymList : KeySymList COMMA KeySym
- { $$= AppendKeysymList($1,(KeySym)$3); }
+ { $$= AppendKeysymList($1,$3); }
| KeySym
- { $$= CreateKeysymList((KeySym)$1); }
+ { $$= CreateKeysymList($1); }
;
-KeySym : IDENT
- {
- KeySym sym;
- if (LookupKeysym(scanStr,&sym))
- $$= sym;
- else {
- char buf[120];
- snprintf(buf, sizeof(buf),
- "expected keysym, got %s",
- uStringText(scanStr));
- yyerror(buf);
- yynerrs++;
- $$= NoSymbol;
- }
- }
- | SECTION
- {
- $$= XK_section;
- }
+KeySym : IDENT { $$= scanStr; scanStr= NULL; }
+ | SECTION { $$= strdup("section"); }
| Integer
{
- if ($1<10) $$= $1+'0'; /* XK_0 .. XK_9 */
- else $$= $1;
+ if ($1<10) { $$= malloc(2); $$[0]= '0' + $1; $$[1]= '\0'; }
+ else { $$= malloc(17); snprintf($$, 17, "%x", $1); }
}
;