aboutsummaryrefslogtreecommitdiff
path: root/console-client/xkb/lex.l
diff options
context:
space:
mode:
authorEtienne Brateau <etienne.brateau@gmail.com>2024-03-10 00:48:38 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2024-03-10 17:00:12 +0100
commit3358b1473f52876c21e3acafe8f7eac41d01a290 (patch)
tree660b679180fd5254cf41b9d7d3f82bbb0f5ad3b8 /console-client/xkb/lex.l
parent66c891b1cb9ba42bd1824ef0dbffba503697c405 (diff)
downloadhurd-3358b1473f52876c21e3acafe8f7eac41d01a290.tar.gz
hurd-3358b1473f52876c21e3acafe8f7eac41d01a290.tar.bz2
hurd-3358b1473f52876c21e3acafe8f7eac41d01a290.zip
console-client: use xkbcommon instead of x11 for xkb extended support
This allow to reduce the dependencies, only xkbcommon (keyboard support only) is required instead of the whole x11 library + lex + yacc. This replacement allow to reduce the code size, now features are handled by xkbcommon itself. The functionnalites remain the sames (actions are reimplemented but in the code directly as it’s impossible to add custom actions). The custom xkb data files are removed as we can now directly use the standard ones from xkeyboard-config. The configuration to launch the console keyboard modules changed to now directly configure the model+layout+variat+options directly. Tested by compiling with and without xkbcommon. Tested X11 (ran i3 correctly). Composing is still working. Message-ID: <20240309234838.31923-1-etienne.brateau@gmail.com>
Diffstat (limited to 'console-client/xkb/lex.l')
-rw-r--r--console-client/xkb/lex.l386
1 files changed, 0 insertions, 386 deletions
diff --git a/console-client/xkb/lex.l b/console-client/xkb/lex.l
deleted file mode 100644
index ba805f0e..00000000
--- a/console-client/xkb/lex.l
+++ /dev/null
@@ -1,386 +0,0 @@
-/* XKB scanner.
-
- Copyright (C) 2002, 03 Marco Gerards
-
- Written by Marco Gerards <marco@student.han.nl>
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details. */
-
-
- #include "xkb.h"
- #include "parser.tab.h"
- #include <string.h>
- #include <unistd.h>
- #include <stdlib.h>
- #include <stdio.h>
- #include <error.h>
-
- int close_include (void);
- int lineno = 1;
- char *filename = "foo";
-
-%option nodebug
-
-%option UNPUT
-KEYCODE "<"[A-Z][-+A-Z0-9]*">"
-DIGIT [0-9]
-NUM {DIGIT}{DIGIT}*
-FLOAT {DIGIT}{DIGIT}*\.{DIGIT}{DIGIT}*
-HEX 0x[A-Za-z0-9]*
-IDENTIFIER [a-zA-Z][a-zA-Z0-9_]*
-CPPCOMMENT "//".*"\n"
-%%
- /* When the end of a file is reached, close the
- current one and pop the next file to process
- of the stack. */
-
- /* Filter out comment. */
-{CPPCOMMENT} { lineno++; }
- "/*" {
- int c;
-
- while((c = input()) != 0)
- {
- if(c == '\n')
- lineno++;
-
- else if(c == '*')
- {
- if((c = input()) == '/')
- break;
- else
- unput(c);
- }
- }
- }
-
-\n { lineno++; }
-
- /* Beginning of sections. */
-xkb_keymap { return XKBKEYMAP; }
-xkb_symbols { return XKBSYMBOLS; }
-xkb_keycodes { return XKBKEYCODES; }
-xkb_types { return XKBTYPES; }
-xkb_compatibility { return XKBCOMPAT; }
-xkb_geometry { return XKBGEOMETRY; }
-
-
- /* Real modifiers. */
-shift { return SHIFT; }
-lock { return LOCK; }
-control { return CONTROL; }
-ctrl { return CONTROL; }
-mod1 { return MOD1; }
-mod2 { return MOD2; }
-mod3 { return MOD3; }
-mod4 { return MOD4; }
-mod5 { return MOD5; }
-
- /* Levels. */
-anylevel { yylval.val = 0; return LEVEL; }
-levelone { yylval.val = 1; return LEVEL; }
-level1 { yylval.val = 1; return LEVEL; }
-level2 { yylval.val = 2; return LEVEL; }
-level3 { yylval.val = 3; return LEVEL; }
-level4 { yylval.val = 4; return LEVEL; }
-level[1-9][0-9]* { yylval.val = atoi(yytext + 5); return LEVEL; }
-
- /* Groups. */
-group1 { yylval.val = 1; return GROUPNUM; }
-group2 { yylval.val = 2; return GROUPNUM; }
-group3 { yylval.val = 3; return GROUPNUM; }
-group4 { yylval.val = 4; return GROUPNUM; }
-
- /* Booleans */
-true { yylval.val = 1; return BOOLEAN; }
-false { yylval.val = 0; return BOOLEAN; }
-
- /* Interpretation */
-interpret { return INTERPRET; }
-usemodmap { return USEMODMAP; }
-usemodmapmods { return USEMODMAP; }
-modmapmods { return USEMODMAP; }
-repeat { return REPEAT; }
-locking { return LOCKING; }
-locks { return LOCKING; }
-virtualmodifier { return VIRTUALMODIFIER; }
-virtualmod { return VIRTUALMODIFIER; }
-
- /* Interpretation match. */
-noneof { yylval.val = 0; return INTERPMATCH ;}
-anyofornone { yylval.val = 1; return INTERPMATCH ;}
-anyof { yylval.val = 2; return INTERPMATCH ;}
-allof { yylval.val = 3; return INTERPMATCH ;}
-exactly { yylval.val = 4; return INTERPMATCH ;}
-
- /* SetMods action. */
-clearlocks { return CLEARLOCKS; }
-mods { return MODS; }
-
-unlock { return UNLOCK; }
-both { return BOTH; }
-neither { return NEITHER; }
-
- /* Actions. */
-setmods { return SETMODS; }
-latchmods { return LATCHMODS; }
-lockmods { return LOCKMODS; }
-setgroup { return SETGROUP; }
-latchgroup { return LATCHGROUP; }
-lockgroup { return LOCKGROUP; }
-setptrdflt { return PTRDFLT; }
-setpointerdefault { return PTRDFLT; }
-lockptrbtn { return LOCKPTRBTN; }
-lockpointerbutton { return LOCKPTRBTN; }
-lockptrbutton { return LOCKPTRBTN; }
-lockpointerbtn { return LOCKPTRBTN; }
-setcontrols { return SETCONTROLS; }
-lockcontrols { return LOCKCONTROLS; }
-terminateserver { return TERMINATE; }
-terminate { return TERMINATE; }
-switchscreen { return SWITCHSCREEN; }
-consscroll { return CONSSCROLL; }
-consolescroll { return CONSSCROLL; }
-moveptr { return MOVEPTR; }
-private { return PRIVATE; }
- /* Action parameters. */
-latchtolock { return LATCHTOLOCK; }
-group { return GROUP; }
-groups { return GROUPS; }
-accel { return ACCEL; }
-accelerate { return ACCEL; }
-default { return DEFAULT; }
-count { return COUNT; }
-controls { return CONTROLS; }
-same { return SAMESERVER; }
-sameserver { return SAMESERVER; }
-screen { return SCREEN; }
-line { return LINE; }
-percentage { return PERCENT; }
-ptrbtn { return PTRBTN ; }
-pointerbutton { return PTRBTN ; }
-
-action { return ACTION; }
-actions { return ACTIONS; }
-
-whichmodstate { return WHICHMODSTATE; }
-whichmodifierstate { return WHICHMODSTATE; }
-whichgroupstate { return WHICHGROUPSTATE; }
-
- /* Match state for indicator. */
-base { yylval.val = 0; return WHICHSTATE; }
-latched { yylval.val = 1; return WHICHSTATE; }
-locked { yylval.val = 4; return WHICHSTATE; }
-effective { yylval.val = 8; return WHICHSTATE; }
-
- /* Bits for binary controls. */
-repeatkeys { yylval.val = 0; return CONTROLFLAG; }
-autorepeat { yylval.val = 0; return CONTROLFLAG; }
-accessxkeys { yylval.val = 0; return CONTROLFLAG; }
-slowkeys { yylval.val = 0; return CONTROLFLAG; }
-bouncekeys { yylval.val = 0; return CONTROLFLAG; }
-stickykeys { yylval.val = 0; return CONTROLFLAG; }
-accessxtimeout { yylval.val = 0; return CONTROLFLAG; }
-accessxfeedback { yylval.val = 0; return CONTROLFLAG; }
-mousekeys { yylval.val = 0; return CONTROLFLAG; }
-mousekeysaccel { yylval.val = 0; return CONTROLFLAG; }
-audiblebell { yylval.val = 0; return CONTROLFLAG; }
-ignoregrouplock { yylval.val = 0; return CONTROLFLAG; }
-
-index { return INDEX; }
-name { return NAME; }
-symbols { return SYMBOLS; }
-key { return KEY; }
-
- /* Mouse buttons. */
-button1 { yylval.val = 1; return BUTTONNUM; }
-button2 { yylval.val = 2; return BUTTONNUM; }
-button3 { yylval.val = 3; return BUTTONNUM; }
-button4 { yylval.val = 4; return BUTTONNUM; }
-button5 { yylval.val = 5; return BUTTONNUM; }
-button { return BUTTON; }
-
- /* Fuzzyness. */
-any { return ANY; }
-all { return ALL; }
-none { return NONE; }
-
-defaultbutton { return DEFAULTBTN; }
-affect { return AFFECT; }
-
-allowexplicit { return ALLOWEXPLICIT; }
-
- /* Feedback to the keyboard. */
-driveskeyboard { return DRIVESKBD; }
-driveskbd { return DRIVESKBD; }
-ledsdrivekbd { return DRIVESKBD; }
-ledsdrivekeyboard { return DRIVESKBD; }
-indicatordriveskbd { return DRIVESKBD; }
-indicatordriveskeyboard { return DRIVESKBD; }
-
-
-modifier_map { return MODMAP; }
-minimum { return MINIMUM; }
-maximum { return MAXIMUM; }
-virtual { return VIRTUAL; }
-alias { return ALIAS; }
-indicator { return INDICATOR; }
-virtual_modifiers { return VMODS; }
-virtualmods { return VMODS; }
-vmods { return VMODS; }
-type { return TYPE; }
-data { return DATA; }
-modifiers { return MODS; }
-map { return MAP; }
-level_name { return LEVEL_NAME; }
-preserve { return PRESERVE; }
-
- /* Section flags. */
-partial { yylval.val = 1; return FLAGS; }
-complete { yylval.val = 2; return FLAGS; }
-fc { yylval.val = 4; return FLAGS; }
-fd { yylval.val = 8; return FLAGS; }
-cp { return XKBCOMPAT; }
-
- /* Section merge modes. */
-include { yylval.mergemode = defaultmm; return INCLUDE; }
-augment { yylval.mergemode = augment; return AUGMENT; }
-replace { yylval.mergemode = replace; return REPLACE; }
-override { yylval.mergemode = override; return OVERRIDE; }
-
-isolock { return ISOLOCK; }
-pointers { return POINTERS;}
-ptr { return POINTERS;}
-noaction { return NOACTION;}
-groupswrap { return GROUPSWRAP; }
-wrapgroups { return GROUPSWRAP; }
-clampgroups { return GROUPSCLAMP; }
-groupsredirect { return GROUPSREDIRECT; }
-overlay1 { yylval.val = 1; return OVERLAY; }
-overlay2 { yylval.val = 2; return OVERLAY; }
-
- /* String. */
-\"([^"]|\\\")*\" {
- yytext[strlen (yytext) - 1] = '\0';
- yylval.str = strdup (yytext + 1);
- return STR;
- }
- /* Ignore whitespace. */
-[ \t]*
- /* A keycode. */
-{KEYCODE} { yylval.str = strdup (yytext) + 1; yylval.str[strlen (yylval.str) - 1] = 0; return KEYCODE; }
- /* A float vlaue. */
-{FLOAT} { yylval.dbl = atof (yytext); return FLOAT; }
- /* An integer. */
-{NUM} { yylval.val = atoi (yytext); return NUM; }
- /* A hexadecimal value. */
-{HEX} { sscanf (yytext, "0x%X", &yylval.val); return HEX; }
- /* An identifier. */
-{IDENTIFIER} { yylval.str = strdup (yytext); return IDENTIFIER; }
- /* All unrecognized characters. */
-. { return yytext[0]; }
-%%
- /* Stupid hack, the current version of flex is fucked. */
- #define yytext_ptr yytext
-
- void
- scanner_unput (int c)
- {
- unput (c);
- }
-
- int
- yywrap (void)
- {
- if (close_include () == 0)
- return 0;
- else
- return 1;
- }
-
- #define MAX_INCLUDE_DEPTH 50
-
- /* An include file on the stack. */
- struct include_stack
- {
- YY_BUFFER_STATE buffer;
- mergemode merge_mode;
- int currline;
- char *filename;
- } include_stack[MAX_INCLUDE_DEPTH];
- int include_stack_ptr = 0;
-
- /* Add an file to the stack. */
- void
- include_file (FILE *file, mergemode new_mm, char *fname)
- {
- YY_BUFFER_STATE buffer;
-
- debug_printf ("including file %s\n.", fname);
-
- if (include_stack_ptr >= MAX_INCLUDE_DEPTH)
- {
- fprintf (stderr, "Includes nested too deeply\n");
- exit (EXIT_FAILURE);
- }
-
- include_stack[include_stack_ptr].filename = filename;
- include_stack[include_stack_ptr].currline = lineno;
- include_stack[include_stack_ptr].merge_mode = merge_mode;
- include_stack[include_stack_ptr++].buffer = YY_CURRENT_BUFFER;
- filename = fname;
- lineno = 1;
- merge_mode = new_mm;
-
- buffer = yy_create_buffer (file, YY_BUF_SIZE);
- yy_switch_to_buffer (buffer);
- }
-
- /* Close an includefile. returns 0 on success */
- int
- close_include (void)
- {
- if ( --include_stack_ptr < 0 )
- {
- fprintf (stderr, "Unexpected end of file at %s:%d.\n", filename, lineno);
- return (1);
- }
- else
- {
- fclose (yyin);
- yy_delete_buffer (YY_CURRENT_BUFFER);
- merge_mode = include_stack[include_stack_ptr].merge_mode;
- lineno = include_stack[include_stack_ptr].currline;
- filename = include_stack[include_stack_ptr].filename;
- yy_switch_to_buffer (include_stack[include_stack_ptr].buffer);
- debug_printf ("closing file. going back to %s.\n", filename);
- return (0);
- }
- }
-
- void
- yyerror (char *s)
- {
- fprintf (stderr, "%s:%d: %s\n", filename, lineno, s);
- // error_at_line (0, 1, filename, lineno, "foo %d\n", 2);
- }
-
- int
- scanner_get_current_location(void)
- {
- return lineno;
- }
-
- const char*
- scanner_get_current_file(void)
- {
- return filename;
- }