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