From 3431a089cf45ad6ab4f8524e2e3ea7dd868c4c78 Mon Sep 17 00:00:00 2001 From: Daniel Stone Date: Mon, 20 Feb 2012 15:37:53 +0000 Subject: [PATCH] Introduce ExprResolveLevel helper Which returns an integer representing the level number represented by the given expression. Signed-off-by: Daniel Stone --- src/xkbcomp/expr.c | 20 ++++++++++++++++++++ src/xkbcomp/expr.h | 4 ++++ src/xkbcomp/keytypes.c | 16 ++-------------- 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/xkbcomp/expr.c b/src/xkbcomp/expr.c index 217656c..d266334 100644 --- a/src/xkbcomp/expr.c +++ b/src/xkbcomp/expr.c @@ -658,6 +658,26 @@ ExprResolveRadioGroup(ExprDef * expr, } int +ExprResolveLevel(ExprDef * expr, + ExprResult * val_rtrn) +{ + static LookupEntry level_names[] = { + { "level1", 1 }, + { "level2", 2 }, + { "level3", 3 }, + { "level4", 4 }, + { "level5", 5 }, + { "level6", 6 }, + { "level7", 7 }, + { "level8", 8 }, + { NULL, 0 } + }; + + return ExprResolveInteger(expr, val_rtrn, SimpleLookup, + (char *) level_names); +} + +int ExprResolveString(ExprDef * expr, ExprResult * val_rtrn) { diff --git a/src/xkbcomp/expr.h b/src/xkbcomp/expr.h index 4aca3d4..f11d9ea 100644 --- a/src/xkbcomp/expr.h +++ b/src/xkbcomp/expr.h @@ -120,6 +120,10 @@ extern int ExprResolveRadioGroup(ExprDef * /* expr */ , ExprResult * /* val_rtrn */ ); +extern int ExprResolveLevel(ExprDef * /* expr */ , + ExprResult * /* val_rtrn */ + ); + extern int ExprResolveFloat(ExprDef * /* expr */ , ExprResult * /* val_rtrn */ ); diff --git a/src/xkbcomp/keytypes.c b/src/xkbcomp/keytypes.c index 3dcceda..57164d2 100644 --- a/src/xkbcomp/keytypes.c +++ b/src/xkbcomp/keytypes.c @@ -645,18 +645,6 @@ AddMapEntry(struct xkb_desc * xkb, return True; } -static LookupEntry lnames[] = { - {"level1", 1}, - {"level2", 2}, - {"level3", 3}, - {"level4", 4}, - {"level5", 5}, - {"level6", 6}, - {"level7", 7}, - {"level8", 8}, - {NULL, 0} -}; - static Bool SetMapEntry(KeyTypeInfo * type, struct xkb_desc * xkb, ExprDef * arrayNdx, ExprDef * value) @@ -685,7 +673,7 @@ SetMapEntry(KeyTypeInfo * type, entry.mods.real_mods &= type->mask; entry.mods.vmods &= type->vmask; } - if (!ExprResolveInteger(value, &rtrn, SimpleLookup, (char *) lnames)) + if (!ExprResolveLevel(value, &rtrn)) { ERROR("Level specifications in a key type must be integer\n"); ACTION("Ignoring malformed level specification\n"); @@ -821,7 +809,7 @@ SetLevelName(KeyTypeInfo * type, ExprDef * arrayNdx, ExprDef * value) if (arrayNdx == NULL) return ReportTypeShouldBeArray(type, "level name"); - if (!ExprResolveInteger(arrayNdx, &rtrn, SimpleLookup, (char *) lnames)) + if (!ExprResolveLevel(arrayNdx, &rtrn)) return ReportTypeBadType(type, "level name", "integer"); if ((rtrn.ival < 1) || (rtrn.ival > XkbMaxShiftLevel + 1)) { -- 2.7.4