xkbparse.y revision f46a6179
1f46a6179Smrg/* $Xorg: xkbparse.y,v 1.3 2000/08/17 19:54:34 cpqbld Exp $ */ 2f46a6179Smrg/************************************************************ 3f46a6179Smrg Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc. 4f46a6179Smrg 5f46a6179Smrg Permission to use, copy, modify, and distribute this 6f46a6179Smrg software and its documentation for any purpose and without 7f46a6179Smrg fee is hereby granted, provided that the above copyright 8f46a6179Smrg notice appear in all copies and that both that copyright 9f46a6179Smrg notice and this permission notice appear in supporting 10f46a6179Smrg documentation, and that the name of Silicon Graphics not be 11f46a6179Smrg used in advertising or publicity pertaining to distribution 12f46a6179Smrg of the software without specific prior written permission. 13f46a6179Smrg Silicon Graphics makes no representation about the suitability 14f46a6179Smrg of this software for any purpose. It is provided "as is" 15f46a6179Smrg without any express or implied warranty. 16f46a6179Smrg 17f46a6179Smrg SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS 18f46a6179Smrg SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 19f46a6179Smrg AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON 20f46a6179Smrg GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL 21f46a6179Smrg DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 22f46a6179Smrg DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 23f46a6179Smrg OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH 24f46a6179Smrg THE USE OR PERFORMANCE OF THIS SOFTWARE. 25f46a6179Smrg 26f46a6179Smrg ********************************************************/ 27f46a6179Smrg/* $XFree86: xc/programs/xkbcomp/xkbparse.y,v 3.11tsi Exp $ */ 28f46a6179Smrg 29f46a6179Smrg%token 30f46a6179Smrg END_OF_FILE 0 31f46a6179Smrg ERROR_TOK 255 32f46a6179Smrg XKB_KEYMAP 1 33f46a6179Smrg XKB_KEYCODES 2 34f46a6179Smrg XKB_TYPES 3 35f46a6179Smrg XKB_SYMBOLS 4 36f46a6179Smrg XKB_COMPATMAP 5 37f46a6179Smrg XKB_GEOMETRY 6 38f46a6179Smrg XKB_SEMANTICS 7 39f46a6179Smrg XKB_LAYOUT 8 40f46a6179Smrg INCLUDE 10 41f46a6179Smrg OVERRIDE 11 42f46a6179Smrg AUGMENT 12 43f46a6179Smrg REPLACE 13 44f46a6179Smrg ALTERNATE 14 45f46a6179Smrg VIRTUAL_MODS 20 46f46a6179Smrg TYPE 21 47f46a6179Smrg INTERPRET 22 48f46a6179Smrg ACTION_TOK 23 49f46a6179Smrg KEY 24 50f46a6179Smrg ALIAS 25 51f46a6179Smrg GROUP 26 52f46a6179Smrg MODIFIER_MAP 27 53f46a6179Smrg INDICATOR 28 54f46a6179Smrg SHAPE 29 55f46a6179Smrg KEYS 30 56f46a6179Smrg ROW 31 57f46a6179Smrg SECTION 32 58f46a6179Smrg OVERLAY 33 59f46a6179Smrg TEXT 34 60f46a6179Smrg OUTLINE 35 61f46a6179Smrg SOLID 36 62f46a6179Smrg LOGO 37 63f46a6179Smrg VIRTUAL 38 64f46a6179Smrg EQUALS 40 65f46a6179Smrg PLUS 41 66f46a6179Smrg MINUS 42 67f46a6179Smrg DIVIDE 43 68f46a6179Smrg TIMES 44 69f46a6179Smrg OBRACE 45 70f46a6179Smrg CBRACE 46 71f46a6179Smrg OPAREN 47 72f46a6179Smrg CPAREN 48 73f46a6179Smrg OBRACKET 49 74f46a6179Smrg CBRACKET 50 75f46a6179Smrg DOT 51 76f46a6179Smrg COMMA 52 77f46a6179Smrg SEMI 53 78f46a6179Smrg EXCLAM 54 79f46a6179Smrg INVERT 55 80f46a6179Smrg STRING 60 81f46a6179Smrg INTEGER 61 82f46a6179Smrg FLOAT 62 83f46a6179Smrg IDENT 63 84f46a6179Smrg KEYNAME 64 85f46a6179Smrg PARTIAL 70 86f46a6179Smrg DEFAULT 71 87f46a6179Smrg HIDDEN 72 88f46a6179Smrg ALPHANUMERIC_KEYS 73 89f46a6179Smrg MODIFIER_KEYS 74 90f46a6179Smrg KEYPAD_KEYS 75 91f46a6179Smrg FUNCTION_KEYS 76 92f46a6179Smrg ALTERNATE_GROUP 77 93f46a6179Smrg%{ 94f46a6179Smrg#ifdef DEBUG 95f46a6179Smrg#define YYDEBUG 1 96f46a6179Smrg#endif 97f46a6179Smrg#define DEBUG_VAR parseDebug 98f46a6179Smrg#include "parseutils.h" 99f46a6179Smrg#include <X11/keysym.h> 100f46a6179Smrg#include <X11/extensions/XKBgeom.h> 101f46a6179Smrg#include <stdlib.h> 102f46a6179Smrg 103f46a6179Smrg 104f46a6179Smrg%} 105f46a6179Smrg%right EQUALS 106f46a6179Smrg%left PLUS MINUS 107f46a6179Smrg%left TIMES DIVIDE 108f46a6179Smrg%left EXCLAM INVERT 109f46a6179Smrg%left OPAREN 110f46a6179Smrg%start XkbFile 111f46a6179Smrg%union { 112f46a6179Smrg int ival; 113f46a6179Smrg unsigned uval; 114f46a6179Smrg char *str; 115f46a6179Smrg Atom sval; 116f46a6179Smrg ParseCommon *any; 117f46a6179Smrg ExprDef *expr; 118f46a6179Smrg VarDef *var; 119f46a6179Smrg VModDef *vmod; 120f46a6179Smrg InterpDef *interp; 121f46a6179Smrg KeyTypeDef *keyType; 122f46a6179Smrg SymbolsDef *syms; 123f46a6179Smrg ModMapDef *modMask; 124f46a6179Smrg GroupCompatDef *groupCompat; 125f46a6179Smrg IndicatorMapDef *ledMap; 126f46a6179Smrg IndicatorNameDef *ledName; 127f46a6179Smrg KeycodeDef *keyName; 128f46a6179Smrg KeyAliasDef *keyAlias; 129f46a6179Smrg ShapeDef *shape; 130f46a6179Smrg SectionDef *section; 131f46a6179Smrg RowDef *row; 132f46a6179Smrg KeyDef *key; 133f46a6179Smrg OverlayDef *overlay; 134f46a6179Smrg OverlayKeyDef *olKey; 135f46a6179Smrg OutlineDef *outline; 136f46a6179Smrg DoodadDef *doodad; 137f46a6179Smrg XkbFile *file; 138f46a6179Smrg} 139f46a6179Smrg%type <ival> Number Integer Float SignedNumber 140f46a6179Smrg%type <uval> XkbCompositeType FileType MergeMode OptMergeMode KeySym 141f46a6179Smrg%type <uval> DoodadType Flag Flags OptFlags 142f46a6179Smrg%type <str> KeyName MapName OptMapName 143f46a6179Smrg%type <sval> FieldSpec Ident Element String 144f46a6179Smrg%type <any> DeclList Decl 145f46a6179Smrg%type <expr> OptExprList ExprList Expr Term Lhs Terminal ArrayInit 146f46a6179Smrg%type <expr> OptKeySymList KeySymList Action ActionList Coord CoordList 147f46a6179Smrg%type <var> VarDecl VarDeclList SymbolsBody SymbolsVarDecl 148f46a6179Smrg%type <vmod> VModDecl VModDefList VModDef 149f46a6179Smrg%type <interp> InterpretDecl InterpretMatch 150f46a6179Smrg%type <keyType> KeyTypeDecl 151f46a6179Smrg%type <syms> SymbolsDecl 152f46a6179Smrg%type <modMask> ModMapDecl 153f46a6179Smrg%type <groupCompat> GroupCompatDecl 154f46a6179Smrg%type <ledMap> IndicatorMapDecl 155f46a6179Smrg%type <ledName> IndicatorNameDecl 156f46a6179Smrg%type <keyName> KeyNameDecl 157f46a6179Smrg%type <keyAlias> KeyAliasDecl 158f46a6179Smrg%type <shape> ShapeDecl 159f46a6179Smrg%type <section> SectionDecl 160f46a6179Smrg%type <row> SectionBody SectionBodyItem 161f46a6179Smrg%type <key> RowBody RowBodyItem Keys Key 162f46a6179Smrg%type <overlay> OverlayDecl 163f46a6179Smrg%type <olKey> OverlayKeyList OverlayKey 164f46a6179Smrg%type <outline> OutlineList OutlineInList 165f46a6179Smrg%type <doodad> DoodadDecl 166f46a6179Smrg%type <file> XkbFile XkbMapConfigList XkbMapConfig XkbConfig 167f46a6179Smrg%type <file> XkbCompositeMap XkbCompMapList 168f46a6179Smrg%% 169f46a6179SmrgXkbFile : XkbCompMapList 170f46a6179Smrg { $$= rtrnValue= $1; } 171f46a6179Smrg | XkbMapConfigList 172f46a6179Smrg { $$= rtrnValue= $1; } 173f46a6179Smrg | XkbConfig 174f46a6179Smrg { $$= rtrnValue= $1; } 175f46a6179Smrg ; 176f46a6179Smrg 177f46a6179SmrgXkbCompMapList : XkbCompMapList XkbCompositeMap 178f46a6179Smrg { $$= (XkbFile *)AppendStmt(&$1->common,&$2->common); } 179f46a6179Smrg | XkbCompositeMap 180f46a6179Smrg { $$= $1; } 181f46a6179Smrg ; 182f46a6179Smrg 183f46a6179SmrgXkbCompositeMap : OptFlags XkbCompositeType OptMapName OBRACE 184f46a6179Smrg XkbMapConfigList 185f46a6179Smrg CBRACE SEMI 186f46a6179Smrg { $$= CreateXKBFile($2,$3,&$5->common,$1); } 187f46a6179Smrg ; 188f46a6179Smrg 189f46a6179SmrgXkbCompositeType: XKB_KEYMAP { $$= XkmKeymapFile; } 190f46a6179Smrg | XKB_SEMANTICS { $$= XkmSemanticsFile; } 191f46a6179Smrg | XKB_LAYOUT { $$= XkmLayoutFile; } 192f46a6179Smrg ; 193f46a6179Smrg 194f46a6179SmrgXkbMapConfigList : XkbMapConfigList XkbMapConfig 195f46a6179Smrg { $$= (XkbFile *)AppendStmt(&$1->common,&$2->common); } 196f46a6179Smrg | XkbMapConfig 197f46a6179Smrg { $$= $1; } 198f46a6179Smrg ; 199f46a6179Smrg 200f46a6179SmrgXkbMapConfig : OptFlags FileType OptMapName OBRACE 201f46a6179Smrg DeclList 202f46a6179Smrg CBRACE SEMI 203f46a6179Smrg { $$= CreateXKBFile($2,$3,$5,$1); } 204f46a6179Smrg ; 205f46a6179Smrg 206f46a6179SmrgXkbConfig : OptFlags FileType OptMapName DeclList 207f46a6179Smrg { $$= CreateXKBFile($2,$3,$4,$1); } 208f46a6179Smrg ; 209f46a6179Smrg 210f46a6179Smrg 211f46a6179SmrgFileType : XKB_KEYCODES { $$= XkmKeyNamesIndex; } 212f46a6179Smrg | XKB_TYPES { $$= XkmTypesIndex; } 213f46a6179Smrg | XKB_COMPATMAP { $$= XkmCompatMapIndex; } 214f46a6179Smrg | XKB_SYMBOLS { $$= XkmSymbolsIndex; } 215f46a6179Smrg | XKB_GEOMETRY { $$= XkmGeometryIndex; } 216f46a6179Smrg ; 217f46a6179Smrg 218f46a6179SmrgOptFlags : Flags { $$= $1; } 219f46a6179Smrg | { $$= 0; } 220f46a6179Smrg ; 221f46a6179Smrg 222f46a6179SmrgFlags : Flags Flag { $$= (($1)|($2)); } 223f46a6179Smrg | Flag { $$= $1; } 224f46a6179Smrg ; 225f46a6179Smrg 226f46a6179SmrgFlag : PARTIAL { $$= XkbLC_Partial; } 227f46a6179Smrg | DEFAULT { $$= XkbLC_Default; } 228f46a6179Smrg | HIDDEN { $$= XkbLC_Hidden; } 229f46a6179Smrg | ALPHANUMERIC_KEYS { $$= XkbLC_AlphanumericKeys; } 230f46a6179Smrg | MODIFIER_KEYS { $$= XkbLC_ModifierKeys; } 231f46a6179Smrg | KEYPAD_KEYS { $$= XkbLC_KeypadKeys; } 232f46a6179Smrg | FUNCTION_KEYS { $$= XkbLC_FunctionKeys; } 233f46a6179Smrg | ALTERNATE_GROUP { $$= XkbLC_AlternateGroup; } 234f46a6179Smrg ; 235f46a6179Smrg 236f46a6179SmrgDeclList : DeclList Decl 237f46a6179Smrg { $$= AppendStmt($1,$2); } 238f46a6179Smrg | { $$= NULL; } 239f46a6179Smrg ; 240f46a6179Smrg 241f46a6179SmrgDecl : OptMergeMode VarDecl 242f46a6179Smrg { 243f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 244f46a6179Smrg $$= &$2->common; 245f46a6179Smrg } 246f46a6179Smrg | OptMergeMode VModDecl 247f46a6179Smrg { 248f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 249f46a6179Smrg $$= &$2->common; 250f46a6179Smrg } 251f46a6179Smrg | OptMergeMode InterpretDecl 252f46a6179Smrg { 253f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 254f46a6179Smrg $$= &$2->common; 255f46a6179Smrg } 256f46a6179Smrg | OptMergeMode KeyNameDecl 257f46a6179Smrg { 258f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 259f46a6179Smrg $$= &$2->common; 260f46a6179Smrg } 261f46a6179Smrg | OptMergeMode KeyAliasDecl 262f46a6179Smrg { 263f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 264f46a6179Smrg $$= &$2->common; 265f46a6179Smrg } 266f46a6179Smrg | OptMergeMode KeyTypeDecl 267f46a6179Smrg { 268f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 269f46a6179Smrg $$= &$2->common; 270f46a6179Smrg } 271f46a6179Smrg | OptMergeMode SymbolsDecl 272f46a6179Smrg { 273f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 274f46a6179Smrg $$= &$2->common; 275f46a6179Smrg } 276f46a6179Smrg | OptMergeMode ModMapDecl 277f46a6179Smrg { 278f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 279f46a6179Smrg $$= &$2->common; 280f46a6179Smrg } 281f46a6179Smrg | OptMergeMode GroupCompatDecl 282f46a6179Smrg { 283f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 284f46a6179Smrg $$= &$2->common; 285f46a6179Smrg } 286f46a6179Smrg | OptMergeMode IndicatorMapDecl 287f46a6179Smrg { 288f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 289f46a6179Smrg $$= &$2->common; 290f46a6179Smrg } 291f46a6179Smrg | OptMergeMode IndicatorNameDecl 292f46a6179Smrg { 293f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 294f46a6179Smrg $$= &$2->common; 295f46a6179Smrg } 296f46a6179Smrg | OptMergeMode ShapeDecl 297f46a6179Smrg { 298f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 299f46a6179Smrg $$= &$2->common; 300f46a6179Smrg } 301f46a6179Smrg | OptMergeMode SectionDecl 302f46a6179Smrg { 303f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 304f46a6179Smrg $$= &$2->common; 305f46a6179Smrg } 306f46a6179Smrg | OptMergeMode DoodadDecl 307f46a6179Smrg { 308f46a6179Smrg $2->merge= StmtSetMerge(&$2->common,$1); 309f46a6179Smrg $$= &$2->common; 310f46a6179Smrg } 311f46a6179Smrg | MergeMode STRING 312f46a6179Smrg { 313f46a6179Smrg if ($1==MergeAltForm) { 314f46a6179Smrg yyerror("cannot use 'alternate' to include other maps"); 315f46a6179Smrg $$= &IncludeCreate(scanStr,MergeDefault)->common; 316f46a6179Smrg } 317f46a6179Smrg else { 318f46a6179Smrg $$= &IncludeCreate(scanStr,$1)->common; 319f46a6179Smrg } 320f46a6179Smrg } 321f46a6179Smrg ; 322f46a6179Smrg 323f46a6179SmrgVarDecl : Lhs EQUALS Expr SEMI 324f46a6179Smrg { $$= VarCreate($1,$3); } 325f46a6179Smrg | Ident SEMI 326f46a6179Smrg { $$= BoolVarCreate($1,1); } 327f46a6179Smrg | EXCLAM Ident SEMI 328f46a6179Smrg { $$= BoolVarCreate($2,0); } 329f46a6179Smrg ; 330f46a6179Smrg 331f46a6179SmrgKeyNameDecl : KeyName EQUALS Expr SEMI 332f46a6179Smrg { 333f46a6179Smrg KeycodeDef *def; 334f46a6179Smrg 335f46a6179Smrg def= KeycodeCreate($1,$3); 336f46a6179Smrg if ($1) 337f46a6179Smrg free($1); 338f46a6179Smrg $$= def; 339f46a6179Smrg } 340f46a6179Smrg ; 341f46a6179Smrg 342f46a6179SmrgKeyAliasDecl : ALIAS KeyName EQUALS KeyName SEMI 343f46a6179Smrg { 344f46a6179Smrg KeyAliasDef *def; 345f46a6179Smrg def= KeyAliasCreate($2,$4); 346f46a6179Smrg if ($2) free($2); 347f46a6179Smrg if ($4) free($4); 348f46a6179Smrg $$= def; 349f46a6179Smrg } 350f46a6179Smrg ; 351f46a6179Smrg 352f46a6179SmrgVModDecl : VIRTUAL_MODS VModDefList SEMI 353f46a6179Smrg { $$= $2; } 354f46a6179Smrg ; 355f46a6179Smrg 356f46a6179SmrgVModDefList : VModDefList COMMA VModDef 357f46a6179Smrg { $$= (VModDef *)AppendStmt(&$1->common,&$3->common); } 358f46a6179Smrg | VModDef 359f46a6179Smrg { $$= $1; } 360f46a6179Smrg ; 361f46a6179Smrg 362f46a6179SmrgVModDef : Ident 363f46a6179Smrg { $$= VModCreate($1,NULL); } 364f46a6179Smrg | Ident EQUALS Expr 365f46a6179Smrg { $$= VModCreate($1,$3); } 366f46a6179Smrg ; 367f46a6179Smrg 368f46a6179SmrgInterpretDecl : INTERPRET InterpretMatch OBRACE 369f46a6179Smrg VarDeclList 370f46a6179Smrg CBRACE SEMI 371f46a6179Smrg { 372f46a6179Smrg $2->def= $4; 373f46a6179Smrg $$= $2; 374f46a6179Smrg } 375f46a6179Smrg ; 376f46a6179Smrg 377f46a6179SmrgInterpretMatch : KeySym PLUS Expr 378f46a6179Smrg { $$= InterpCreate((KeySym)$1,$3); } 379f46a6179Smrg | KeySym 380f46a6179Smrg { $$= InterpCreate((KeySym)$1,NULL); } 381f46a6179Smrg ; 382f46a6179Smrg 383f46a6179SmrgVarDeclList : VarDeclList VarDecl 384f46a6179Smrg { $$= (VarDef *)AppendStmt(&$1->common,&$2->common); } 385f46a6179Smrg | VarDecl 386f46a6179Smrg { $$= $1; } 387f46a6179Smrg ; 388f46a6179Smrg 389f46a6179SmrgKeyTypeDecl : TYPE String OBRACE 390f46a6179Smrg VarDeclList 391f46a6179Smrg CBRACE SEMI 392f46a6179Smrg { $$= KeyTypeCreate($2,$4); } 393f46a6179Smrg ; 394f46a6179Smrg 395f46a6179SmrgSymbolsDecl : KEY KeyName OBRACE 396f46a6179Smrg SymbolsBody 397f46a6179Smrg CBRACE SEMI 398f46a6179Smrg { $$= SymbolsCreate($2,(ExprDef *)$4); } 399f46a6179Smrg ; 400f46a6179Smrg 401f46a6179SmrgSymbolsBody : SymbolsBody COMMA SymbolsVarDecl 402f46a6179Smrg { $$= (VarDef *)AppendStmt(&$1->common,&$3->common); } 403f46a6179Smrg | SymbolsVarDecl 404f46a6179Smrg { $$= $1; } 405f46a6179Smrg | { $$= NULL; } 406f46a6179Smrg ; 407f46a6179Smrg 408f46a6179SmrgSymbolsVarDecl : Lhs EQUALS Expr 409f46a6179Smrg { $$= VarCreate($1,$3); } 410f46a6179Smrg | Lhs EQUALS ArrayInit 411f46a6179Smrg { $$= VarCreate($1,$3); } 412f46a6179Smrg | Ident 413f46a6179Smrg { $$= BoolVarCreate($1,1); } 414f46a6179Smrg | EXCLAM Ident 415f46a6179Smrg { $$= BoolVarCreate($2,0); } 416f46a6179Smrg | ArrayInit 417f46a6179Smrg { $$= VarCreate(NULL,$1); } 418f46a6179Smrg ; 419f46a6179Smrg 420f46a6179SmrgArrayInit : OBRACKET OptKeySymList CBRACKET 421f46a6179Smrg { $$= $2; } 422f46a6179Smrg | OBRACKET ActionList CBRACKET 423f46a6179Smrg { $$= ExprCreateUnary(ExprActionList,TypeAction,$2); } 424f46a6179Smrg ; 425f46a6179Smrg 426f46a6179SmrgGroupCompatDecl : GROUP Integer EQUALS Expr SEMI 427f46a6179Smrg { $$= GroupCompatCreate($2,$4); } 428f46a6179Smrg ; 429f46a6179Smrg 430f46a6179SmrgModMapDecl : MODIFIER_MAP Ident OBRACE ExprList CBRACE SEMI 431f46a6179Smrg { $$= ModMapCreate($2,$4); } 432f46a6179Smrg ; 433f46a6179Smrg 434f46a6179SmrgIndicatorMapDecl: INDICATOR String OBRACE VarDeclList CBRACE SEMI 435f46a6179Smrg { $$= IndicatorMapCreate($2,$4); } 436f46a6179Smrg ; 437f46a6179Smrg 438f46a6179SmrgIndicatorNameDecl: INDICATOR Integer EQUALS Expr SEMI 439f46a6179Smrg { $$= IndicatorNameCreate($2,$4,False); } 440f46a6179Smrg | VIRTUAL INDICATOR Integer EQUALS Expr SEMI 441f46a6179Smrg { $$= IndicatorNameCreate($3,$5,True); } 442f46a6179Smrg ; 443f46a6179Smrg 444f46a6179SmrgShapeDecl : SHAPE String OBRACE OutlineList CBRACE SEMI 445f46a6179Smrg { $$= ShapeDeclCreate($2,(OutlineDef *)&$4->common); } 446f46a6179Smrg | SHAPE String OBRACE CoordList CBRACE SEMI 447f46a6179Smrg { 448f46a6179Smrg OutlineDef *outlines; 449f46a6179Smrg outlines= OutlineCreate(None,$4); 450f46a6179Smrg $$= ShapeDeclCreate($2,outlines); 451f46a6179Smrg } 452f46a6179Smrg ; 453f46a6179Smrg 454f46a6179SmrgSectionDecl : SECTION String OBRACE SectionBody CBRACE SEMI 455f46a6179Smrg { $$= SectionDeclCreate($2,$4); } 456f46a6179Smrg ; 457f46a6179Smrg 458f46a6179SmrgSectionBody : SectionBody SectionBodyItem 459f46a6179Smrg { $$=(RowDef *)AppendStmt(&$1->common,&$2->common);} 460f46a6179Smrg | SectionBodyItem 461f46a6179Smrg { $$= $1; } 462f46a6179Smrg ; 463f46a6179Smrg 464f46a6179SmrgSectionBodyItem : ROW OBRACE RowBody CBRACE SEMI 465f46a6179Smrg { $$= RowDeclCreate($3); } 466f46a6179Smrg | VarDecl 467f46a6179Smrg { $$= (RowDef *)$1; } 468f46a6179Smrg | DoodadDecl 469f46a6179Smrg { $$= (RowDef *)$1; } 470f46a6179Smrg | IndicatorMapDecl 471f46a6179Smrg { $$= (RowDef *)$1; } 472f46a6179Smrg | OverlayDecl 473f46a6179Smrg { $$= (RowDef *)$1; } 474f46a6179Smrg ; 475f46a6179Smrg 476f46a6179SmrgRowBody : RowBody RowBodyItem 477f46a6179Smrg { $$=(KeyDef *)AppendStmt(&$1->common,&$2->common);} 478f46a6179Smrg | RowBodyItem 479f46a6179Smrg { $$= $1; } 480f46a6179Smrg ; 481f46a6179Smrg 482f46a6179SmrgRowBodyItem : KEYS OBRACE Keys CBRACE SEMI 483f46a6179Smrg { $$= $3; } 484f46a6179Smrg | VarDecl 485f46a6179Smrg { $$= (KeyDef *)$1; } 486f46a6179Smrg ; 487f46a6179Smrg 488f46a6179SmrgKeys : Keys COMMA Key 489f46a6179Smrg { $$=(KeyDef *)AppendStmt(&$1->common,&$3->common);} 490f46a6179Smrg | Key 491f46a6179Smrg { $$= $1; } 492f46a6179Smrg ; 493f46a6179Smrg 494f46a6179SmrgKey : KeyName 495f46a6179Smrg { $$= KeyDeclCreate($1,NULL); } 496f46a6179Smrg | OBRACE ExprList CBRACE 497f46a6179Smrg { $$= KeyDeclCreate(NULL,$2); } 498f46a6179Smrg ; 499f46a6179Smrg 500f46a6179SmrgOverlayDecl : OVERLAY String OBRACE OverlayKeyList CBRACE SEMI 501f46a6179Smrg { $$= OverlayDeclCreate($2,$4); } 502f46a6179Smrg ; 503f46a6179Smrg 504f46a6179SmrgOverlayKeyList : OverlayKeyList COMMA OverlayKey 505f46a6179Smrg { 506f46a6179Smrg $$= (OverlayKeyDef *) 507f46a6179Smrg AppendStmt(&$1->common,&$3->common); 508f46a6179Smrg } 509f46a6179Smrg | OverlayKey 510f46a6179Smrg { $$= $1; } 511f46a6179Smrg ; 512f46a6179Smrg 513f46a6179SmrgOverlayKey : KeyName EQUALS KeyName 514f46a6179Smrg { $$= OverlayKeyCreate($1,$3); } 515f46a6179Smrg ; 516f46a6179Smrg 517f46a6179SmrgOutlineList : OutlineList COMMA OutlineInList 518f46a6179Smrg { $$=(OutlineDef *)AppendStmt(&$1->common,&$3->common);} 519f46a6179Smrg | OutlineInList 520f46a6179Smrg { $$= $1; } 521f46a6179Smrg ; 522f46a6179Smrg 523f46a6179SmrgOutlineInList : OBRACE CoordList CBRACE 524f46a6179Smrg { $$= OutlineCreate(None,$2); } 525f46a6179Smrg | Ident EQUALS OBRACE CoordList CBRACE 526f46a6179Smrg { $$= OutlineCreate($1,$4); } 527f46a6179Smrg | Ident EQUALS Expr 528f46a6179Smrg { $$= OutlineCreate($1,$3); } 529f46a6179Smrg ; 530f46a6179Smrg 531f46a6179SmrgCoordList : CoordList COMMA Coord 532f46a6179Smrg { $$= (ExprDef *)AppendStmt(&$1->common,&$3->common); } 533f46a6179Smrg | Coord 534f46a6179Smrg { $$= $1; } 535f46a6179Smrg ; 536f46a6179Smrg 537f46a6179SmrgCoord : OBRACKET SignedNumber COMMA SignedNumber CBRACKET 538f46a6179Smrg { 539f46a6179Smrg ExprDef *expr; 540f46a6179Smrg expr= ExprCreate(ExprCoord,TypeUnknown); 541f46a6179Smrg expr->value.coord.x= $2; 542f46a6179Smrg expr->value.coord.y= $4; 543f46a6179Smrg $$= expr; 544f46a6179Smrg } 545f46a6179Smrg ; 546f46a6179Smrg 547f46a6179SmrgDoodadDecl : DoodadType String OBRACE VarDeclList CBRACE SEMI 548f46a6179Smrg { $$= DoodadCreate($1,$2,$4); } 549f46a6179Smrg ; 550f46a6179Smrg 551f46a6179SmrgDoodadType : TEXT { $$= XkbTextDoodad; } 552f46a6179Smrg | OUTLINE { $$= XkbOutlineDoodad; } 553f46a6179Smrg | SOLID { $$= XkbSolidDoodad; } 554f46a6179Smrg | LOGO { $$= XkbLogoDoodad; } 555f46a6179Smrg ; 556f46a6179Smrg 557f46a6179SmrgFieldSpec : Ident { $$= $1; } 558f46a6179Smrg | Element { $$= $1; } 559f46a6179Smrg ; 560f46a6179Smrg 561f46a6179SmrgElement : ACTION_TOK 562f46a6179Smrg { $$= XkbInternAtom(NULL,"action",False); } 563f46a6179Smrg | INTERPRET 564f46a6179Smrg { $$= XkbInternAtom(NULL,"interpret",False); } 565f46a6179Smrg | TYPE 566f46a6179Smrg { $$= XkbInternAtom(NULL,"type",False); } 567f46a6179Smrg | KEY 568f46a6179Smrg { $$= XkbInternAtom(NULL,"key",False); } 569f46a6179Smrg | GROUP 570f46a6179Smrg { $$= XkbInternAtom(NULL,"group",False); } 571f46a6179Smrg | MODIFIER_MAP 572f46a6179Smrg {$$=XkbInternAtom(NULL,"modifier_map",False);} 573f46a6179Smrg | INDICATOR 574f46a6179Smrg { $$= XkbInternAtom(NULL,"indicator",False); } 575f46a6179Smrg | SHAPE 576f46a6179Smrg { $$= XkbInternAtom(NULL,"shape",False); } 577f46a6179Smrg | ROW 578f46a6179Smrg { $$= XkbInternAtom(NULL,"row",False); } 579f46a6179Smrg | SECTION 580f46a6179Smrg { $$= XkbInternAtom(NULL,"section",False); } 581f46a6179Smrg | TEXT 582f46a6179Smrg { $$= XkbInternAtom(NULL,"text",False); } 583f46a6179Smrg ; 584f46a6179Smrg 585f46a6179SmrgOptMergeMode : MergeMode { $$= $1; } 586f46a6179Smrg | { $$= MergeDefault; } 587f46a6179Smrg ; 588f46a6179Smrg 589f46a6179SmrgMergeMode : INCLUDE { $$= MergeDefault; } 590f46a6179Smrg | AUGMENT { $$= MergeAugment; } 591f46a6179Smrg | OVERRIDE { $$= MergeOverride; } 592f46a6179Smrg | REPLACE { $$= MergeReplace; } 593f46a6179Smrg | ALTERNATE { $$= MergeAltForm; } 594f46a6179Smrg ; 595f46a6179Smrg 596f46a6179SmrgOptExprList : ExprList { $$= $1; } 597f46a6179Smrg | { $$= NULL; } 598f46a6179Smrg ; 599f46a6179Smrg 600f46a6179SmrgExprList : ExprList COMMA Expr 601f46a6179Smrg { $$= (ExprDef *)AppendStmt(&$1->common,&$3->common); } 602f46a6179Smrg | Expr 603f46a6179Smrg { $$= $1; } 604f46a6179Smrg ; 605f46a6179Smrg 606f46a6179SmrgExpr : Expr DIVIDE Expr 607f46a6179Smrg { $$= ExprCreateBinary(OpDivide,$1,$3); } 608f46a6179Smrg | Expr PLUS Expr 609f46a6179Smrg { $$= ExprCreateBinary(OpAdd,$1,$3); } 610f46a6179Smrg | Expr MINUS Expr 611f46a6179Smrg { $$= ExprCreateBinary(OpSubtract,$1,$3); } 612f46a6179Smrg | Expr TIMES Expr 613f46a6179Smrg { $$= ExprCreateBinary(OpMultiply,$1,$3); } 614f46a6179Smrg | Lhs EQUALS Expr 615f46a6179Smrg { $$= ExprCreateBinary(OpAssign,$1,$3); } 616f46a6179Smrg | Term 617f46a6179Smrg { $$= $1; } 618f46a6179Smrg ; 619f46a6179Smrg 620f46a6179SmrgTerm : MINUS Term 621f46a6179Smrg { $$= ExprCreateUnary(OpNegate,$2->type,$2); } 622f46a6179Smrg | PLUS Term 623f46a6179Smrg { $$= ExprCreateUnary(OpUnaryPlus,$2->type,$2); } 624f46a6179Smrg | EXCLAM Term 625f46a6179Smrg { $$= ExprCreateUnary(OpNot,TypeBoolean,$2); } 626f46a6179Smrg | INVERT Term 627f46a6179Smrg { $$= ExprCreateUnary(OpInvert,$2->type,$2); } 628f46a6179Smrg | Lhs 629f46a6179Smrg { $$= $1; } 630f46a6179Smrg | FieldSpec OPAREN OptExprList CPAREN %prec OPAREN 631f46a6179Smrg { $$= ActionCreate($1,$3); } 632f46a6179Smrg | Terminal 633f46a6179Smrg { $$= $1; } 634f46a6179Smrg | OPAREN Expr CPAREN 635f46a6179Smrg { $$= $2; } 636f46a6179Smrg ; 637f46a6179Smrg 638f46a6179SmrgActionList : ActionList COMMA Action 639f46a6179Smrg { $$= (ExprDef *)AppendStmt(&$1->common,&$3->common); } 640f46a6179Smrg | Action 641f46a6179Smrg { $$= $1; } 642f46a6179Smrg ; 643f46a6179Smrg 644f46a6179SmrgAction : FieldSpec OPAREN OptExprList CPAREN 645f46a6179Smrg { $$= ActionCreate($1,$3); } 646f46a6179Smrg ; 647f46a6179Smrg 648f46a6179SmrgLhs : FieldSpec 649f46a6179Smrg { 650f46a6179Smrg ExprDef *expr; 651f46a6179Smrg expr= ExprCreate(ExprIdent,TypeUnknown); 652f46a6179Smrg expr->value.str= $1; 653f46a6179Smrg $$= expr; 654f46a6179Smrg } 655f46a6179Smrg | FieldSpec DOT FieldSpec 656f46a6179Smrg { 657f46a6179Smrg ExprDef *expr; 658f46a6179Smrg expr= ExprCreate(ExprFieldRef,TypeUnknown); 659f46a6179Smrg expr->value.field.element= $1; 660f46a6179Smrg expr->value.field.field= $3; 661f46a6179Smrg $$= expr; 662f46a6179Smrg } 663f46a6179Smrg | FieldSpec OBRACKET Expr CBRACKET 664f46a6179Smrg { 665f46a6179Smrg ExprDef *expr; 666f46a6179Smrg expr= ExprCreate(ExprArrayRef,TypeUnknown); 667f46a6179Smrg expr->value.array.element= None; 668f46a6179Smrg expr->value.array.field= $1; 669f46a6179Smrg expr->value.array.entry= $3; 670f46a6179Smrg $$= expr; 671f46a6179Smrg } 672f46a6179Smrg | FieldSpec DOT FieldSpec OBRACKET Expr CBRACKET 673f46a6179Smrg { 674f46a6179Smrg ExprDef *expr; 675f46a6179Smrg expr= ExprCreate(ExprArrayRef,TypeUnknown); 676f46a6179Smrg expr->value.array.element= $1; 677f46a6179Smrg expr->value.array.field= $3; 678f46a6179Smrg expr->value.array.entry= $5; 679f46a6179Smrg $$= expr; 680f46a6179Smrg } 681f46a6179Smrg ; 682f46a6179Smrg 683f46a6179SmrgTerminal : String 684f46a6179Smrg { 685f46a6179Smrg ExprDef *expr; 686f46a6179Smrg expr= ExprCreate(ExprValue,TypeString); 687f46a6179Smrg expr->value.str= $1; 688f46a6179Smrg $$= expr; 689f46a6179Smrg } 690f46a6179Smrg | Integer 691f46a6179Smrg { 692f46a6179Smrg ExprDef *expr; 693f46a6179Smrg expr= ExprCreate(ExprValue,TypeInt); 694f46a6179Smrg expr->value.ival= $1; 695f46a6179Smrg $$= expr; 696f46a6179Smrg } 697f46a6179Smrg | Float 698f46a6179Smrg { 699f46a6179Smrg ExprDef *expr; 700f46a6179Smrg expr= ExprCreate(ExprValue,TypeFloat); 701f46a6179Smrg expr->value.ival= $1; 702f46a6179Smrg $$= expr; 703f46a6179Smrg } 704f46a6179Smrg | KeyName 705f46a6179Smrg { 706f46a6179Smrg ExprDef *expr; 707f46a6179Smrg expr= ExprCreate(ExprValue,TypeKeyName); 708f46a6179Smrg memset(expr->value.keyName,0,5); 709f46a6179Smrg strncpy(expr->value.keyName,$1,4); 710f46a6179Smrg free($1); 711f46a6179Smrg $$= expr; 712f46a6179Smrg } 713f46a6179Smrg ; 714f46a6179Smrg 715f46a6179SmrgOptKeySymList : KeySymList { $$= $1; } 716f46a6179Smrg | { $$= NULL; } 717f46a6179Smrg ; 718f46a6179Smrg 719f46a6179SmrgKeySymList : KeySymList COMMA KeySym 720f46a6179Smrg { $$= AppendKeysymList($1,(KeySym)$3); } 721f46a6179Smrg | KeySym 722f46a6179Smrg { $$= CreateKeysymList((KeySym)$1); } 723f46a6179Smrg ; 724f46a6179Smrg 725f46a6179SmrgKeySym : IDENT 726f46a6179Smrg { 727f46a6179Smrg KeySym sym; 728f46a6179Smrg if (LookupKeysym(scanStr,&sym)) 729f46a6179Smrg $$= sym; 730f46a6179Smrg else { 731f46a6179Smrg char buf[120]; 732f46a6179Smrg sprintf(buf,"expected keysym, got %s", 733f46a6179Smrg uStringText(scanStr)); 734f46a6179Smrg yyerror(buf); 735f46a6179Smrg yynerrs++; 736f46a6179Smrg $$= NoSymbol; 737f46a6179Smrg } 738f46a6179Smrg } 739f46a6179Smrg | SECTION 740f46a6179Smrg { 741f46a6179Smrg $$= XK_section; 742f46a6179Smrg } 743f46a6179Smrg | Integer 744f46a6179Smrg { 745f46a6179Smrg if ($1<10) $$= $1+'0'; /* XK_0 .. XK_9 */ 746f46a6179Smrg else $$= $1; 747f46a6179Smrg } 748f46a6179Smrg ; 749f46a6179Smrg 750f46a6179SmrgSignedNumber : MINUS Number { $$= -$2; } 751f46a6179Smrg | Number { $$= $1; } 752f46a6179Smrg ; 753f46a6179Smrg 754f46a6179SmrgNumber : FLOAT { $$= scanInt; } 755f46a6179Smrg | INTEGER { $$= scanInt*XkbGeomPtsPerMM; } 756f46a6179Smrg ; 757f46a6179Smrg 758f46a6179SmrgFloat : FLOAT { $$= scanInt; } 759f46a6179Smrg ; 760f46a6179Smrg 761f46a6179SmrgInteger : INTEGER { $$= scanInt; } 762f46a6179Smrg ; 763f46a6179Smrg 764f46a6179SmrgKeyName : KEYNAME { $$= scanStr; scanStr= NULL; } 765f46a6179Smrg ; 766f46a6179Smrg 767f46a6179SmrgIdent : IDENT { $$= XkbInternAtom(NULL,scanStr,False); } 768f46a6179Smrg | DEFAULT { $$= XkbInternAtom(NULL,"default",False); } 769f46a6179Smrg ; 770f46a6179Smrg 771f46a6179SmrgString : STRING { $$= XkbInternAtom(NULL,scanStr,False); } 772f46a6179Smrg ; 773f46a6179Smrg 774f46a6179SmrgOptMapName : MapName { $$= $1; } 775f46a6179Smrg | { $$= NULL; } 776f46a6179Smrg ; 777f46a6179Smrg 778f46a6179SmrgMapName : STRING { $$= scanStr; scanStr= NULL; } 779f46a6179Smrg ; 780f46a6179Smrg%% 781f46a6179Smrgvoid 782f46a6179Smrgyyerror(const char *s) 783f46a6179Smrg{ 784f46a6179Smrg if (warningLevel>0) { 785f46a6179Smrg (void)fprintf(stderr,"%s: line %d of %s\n",s,lineNum, 786f46a6179Smrg (scanFile?scanFile:"(unknown)")); 787f46a6179Smrg if ((scanStr)&&(warningLevel>3)) 788f46a6179Smrg (void)fprintf(stderr,"last scanned symbol is: %s\n",scanStr); 789f46a6179Smrg } 790f46a6179Smrg return; 791f46a6179Smrg} 792f46a6179Smrg 793f46a6179Smrg 794f46a6179Smrgint 795f46a6179Smrgyywrap(void) 796f46a6179Smrg{ 797f46a6179Smrg return 1; 798f46a6179Smrg} 799f46a6179Smrg 800