Edit

kc3-lang/libxkbcommon/src/xkbcomp/xkbcomp.h

Branch :

  • Show log

    Commit

  • Author : Ran Benita
    Date : 2012-08-01 18:46:01
    Hash : 3bea189b
    Message : Make top level Handle*File functions nicer Signed-off-by: Ran Benita <ran234@gmail.com>

  • src/xkbcomp/xkbcomp.h
  • /************************************************************
     * Copyright (c) 1994 by Silicon Graphics Computer Systems, Inc.
     *
     * Permission to use, copy, modify, and distribute this
     * software and its documentation for any purpose and without
     * fee is hereby granted, provided that the above copyright
     * notice appear in all copies and that both that copyright
     * notice and this permission notice appear in supporting
     * documentation, and that the name of Silicon Graphics not be
     * used in advertising or publicity pertaining to distribution
     * of the software without specific prior written permission.
     * Silicon Graphics makes no representation about the suitability
     * of this software for any purpose. It is provided "as is"
     * without any express or implied warranty.
     *
     * SILICON GRAPHICS DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
     * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     * AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL SILICON
     * GRAPHICS BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL
     * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
     * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
     * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION  WITH
     * THE USE OR PERFORMANCE OF THIS SOFTWARE.
     *
     ********************************************************/
    
    #ifndef XKBCOMP_H
    #define XKBCOMP_H 1
    
    #include "xkb-priv.h"
    
    enum stmt_type {
        STMT_UNKNOWN = 0,
        STMT_INCLUDE,
        STMT_KEYCODE,
        STMT_ALIAS,
        STMT_EXPR,
        STMT_VAR,
        STMT_TYPE,
        STMT_INTERP,
        STMT_VMOD,
        STMT_SYMBOLS,
        STMT_MODMAP,
        STMT_GROUP_COMPAT,
        STMT_INDICATOR_MAP,
        STMT_INDICATOR_NAME,
        _STMT_NUM_VALUES
    };
    
    enum expr_value_type {
        EXPR_TYPE_UNKNOWN = 0,
        EXPR_TYPE_BOOLEAN,
        EXPR_TYPE_INT,
        EXPR_TYPE_STRING,
        EXPR_TYPE_ACTION,
        EXPR_TYPE_KEYNAME,
        EXPR_TYPE_SYMBOLS,
    };
    
    enum expr_op_type {
        EXPR_VALUE = 0,
        EXPR_IDENT,
        EXPR_ACTION_DECL,
        EXPR_FIELD_REF,
        EXPR_ARRAY_REF,
        EXPR_KEYSYM_LIST,
        EXPR_ACTION_LIST,
        EXPR_ADD,
        EXPR_SUBTRACT,
        EXPR_MULTIPLY,
        EXPR_DIVIDE,
        EXPR_ASSIGN,
        EXPR_NOT,
        EXPR_NEGATE,
        EXPR_INVERT,
        EXPR_UNARY_PLUS,
    };
    
    enum merge_mode {
        MERGE_DEFAULT,
        MERGE_AUGMENT,
        MERGE_OVERRIDE,
        MERGE_REPLACE,
    };
    
    typedef struct _ParseCommon {
        enum stmt_type type;
        struct _ParseCommon *next;
    } ParseCommon;
    
    typedef struct _IncludeStmt {
        ParseCommon common;
        enum merge_mode merge;
        char *stmt;
        char *file;
        char *map;
        char *modifier;
        char *path;
        struct _IncludeStmt *next_incl;
    } IncludeStmt;
    
    typedef struct _Expr {
        ParseCommon common;
        enum expr_op_type op;
        enum expr_value_type value_type;
        union {
            struct {
                struct _Expr *left;
                struct _Expr *right;
            } binary;
            struct {
                xkb_atom_t element;
                xkb_atom_t field;
            } field;
            struct {
                xkb_atom_t element;
                xkb_atom_t field;
                struct _Expr *entry;
            } array;
            struct {
                xkb_atom_t name;
                struct _Expr *args;
            } action;
            struct {
                darray(char *) syms;
                darray(int) symsMapIndex;
                darray(unsigned int) symsNumEntries;
            } list;
            struct _Expr *child;
            xkb_atom_t str;
            unsigned uval;
            int ival;
            char keyName[XkbKeyNameLength];
        } value;
    } ExprDef;
    
    typedef struct _VarDef {
        ParseCommon common;
        enum merge_mode merge;
        ExprDef *name;
        ExprDef *value;
    } VarDef;
    
    typedef struct _VModDef {
        ParseCommon common;
        enum merge_mode merge;
        xkb_atom_t name;
        ExprDef *value;
    } VModDef;
    
    typedef struct _KeycodeDef {
        ParseCommon common;
        enum merge_mode merge;
        char name[XkbKeyNameLength];
        unsigned long value;
    } KeycodeDef;
    
    typedef struct _KeyAliasDef {
        ParseCommon common;
        enum merge_mode merge;
        char alias[XkbKeyNameLength];
        char real[XkbKeyNameLength];
    } KeyAliasDef;
    
    typedef struct _KeyTypeDef {
        ParseCommon common;
        enum merge_mode merge;
        xkb_atom_t name;
        VarDef *body;
    } KeyTypeDef;
    
    typedef struct _SymbolsDef {
        ParseCommon common;
        enum merge_mode merge;
        char keyName[XkbKeyNameLength];
        ExprDef *symbols;
    } SymbolsDef;
    
    typedef struct _ModMapDef {
        ParseCommon common;
        enum merge_mode merge;
        xkb_atom_t modifier;
        ExprDef *keys;
    } ModMapDef;
    
    typedef struct _GroupCompatDef {
        ParseCommon common;
        enum merge_mode merge;
        int group;
        ExprDef *def;
    } GroupCompatDef;
    
    typedef struct _InterpDef {
        ParseCommon common;
        enum merge_mode merge;
        char *sym;
        ExprDef *match;
        VarDef *def;
    } InterpDef;
    
    typedef struct _IndicatorNameDef {
        ParseCommon common;
        enum merge_mode merge;
        int ndx;
        ExprDef *name;
        bool virtual;
    } IndicatorNameDef;
    
    typedef struct _IndicatorMapDef {
        ParseCommon common;
        enum merge_mode merge;
        xkb_atom_t name;
        VarDef *body;
    } IndicatorMapDef;
    
    typedef struct _XkbFile {
        ParseCommon common;
        enum xkb_file_type file_type;
        char *topName;
        char *name;
        ParseCommon *defs;
        int id;
        unsigned flags;
    } XkbFile;
    
    extern bool
    CompileKeycodes(XkbFile *file, struct xkb_keymap *keymap,
                    enum merge_mode merge);
    
    extern bool
    CompileKeyTypes(XkbFile *file, struct xkb_keymap *keymap,
                    enum merge_mode merge);
    
    extern bool
    CompileCompatMap(XkbFile *file, struct xkb_keymap *keymap,
                     enum merge_mode merge);
    
    extern bool
    CompileSymbols(XkbFile *file, struct xkb_keymap *keymap,
                   enum merge_mode merge);
    
    #define AutoKeyNames (1L << 0)
    #define CreateKeyNames(x) ((x)->flags & AutoKeyNames)
    
    #endif /* XKBCOMP_H */