From e135563c2dcfed90db3e4ef7f830f5cb53d978d6 Mon Sep 17 00:00:00 2001 From: Lars Doelle Date: Thu, 27 Jan 2000 07:33:14 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/kdebase/konsole/; revision=39331 --- src/keytrans.C | 93 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/src/keytrans.C b/src/keytrans.C index 8660f6579..8a38e8775 100644 --- a/src/keytrans.C +++ b/src/keytrans.C @@ -277,3 +277,96 @@ void defKeySyms() defKeySym("Hyper_L", Qt::Key_Hyper_L ); defKeySym("Hyper_R", Qt::Key_Hyper_R ); } + +// [scant.c] + +#include + +// We define a very poor scanner, here. + +#define skipspaces while (*cc == ' ') cc++ + +#define skipname \ + id = cc; \ + while ('A' <= *cc && *cc <= 'Z' || \ + 'a' <= *cc && *cc <= 'z' || \ + '0' <= *cc && *cc <= '9') cc++ + +#define skipchar(C) if (*cc == (C)) cc++; else { printf("error: expecting '%c' at %s.\n",C,cc); return; } + +#define skiphex() cc++ + +#define FALSE 0 +#define TRUE 1 + +#define HERE printf("%s(%d): here\n",__FILE__,__LINE__) + +static void scanline(char* cc) +{ char* id; +Loop: + // syntax: [KeyName { ("+" | "-") ModeName } ":" String] ["#" Comment] + skipspaces; + if ('A' <= *cc && *cc <= 'Z') + { + skipname; + printf("key: >%.*s<\n",cc-id,id); + skipspaces; + while (*cc == '+' || *cc == '-') + { bool opt_on = (*cc++ == '+'); + skipspaces; + skipname; + printf("mode: >%.*s< %s\n",cc-id,id,opt_on?"on":"off"); + skipspaces; + } + skipchar(':') + skipspaces; + // scanstring + skipchar('"') + while (*cc) + { + if (*cc < ' ') break; + if (*cc == '"') break; + if (*cc != '\\') { cc++; continue; } + cc++; + if (!*cc) { printf("error: unexpected end of string.\n"); return; } + switch (*cc) + { + case '\\' : + case 'n' : + case 'r' : + case 'f' : + case 'b' : + case 't' : + case '"' : + case 'E' : cc++; break; + case 'u' : cc++; skiphex(); skiphex(); skiphex(); skiphex(); break; + case 'x' : cc++; skiphex(); skiphex(); break; + default : printf("error: invalid char '%c' after \\.\n",*cc); return; + } + } + skipchar('"') + skipspaces; + } + if (*cc == '#') + { + // Skip Comment + while (*cc && *cc != '\n') cc++; + } + if (*cc == '\n') { cc++; goto Loop; } + if (*cc) + { + printf("error: invalid character '%c' at %s.\n",*cc,cc); return; + } + +} + +/* +int main() +{ + scanline + ( +#include "KeyTab.sys" + ); + return 0; +} +*/