/**
* mds — A micro-display server
* Copyright © 2014 Mattias Andrée (maandree@member.fsf.org)
*
* 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 3 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.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see .
*/
#ifndef MDS_MDS_KBDC_TREE_H
#define MDS_MDS_KBDC_TREE_H
#include
#define MDS_KBDC_TREE_TYPE_INFORMATION 0
#define MDS_KBDC_TREE_TYPE_INFORMATION_LANGUAGE 1
#define MDS_KBDC_TREE_TYPE_INFORMATION_COUNTRY 2
#define MDS_KBDC_TREE_TYPE_INFORMATION_VARIANT 3
#define MDS_KBDC_TREE_TYPE_INCLUDE 4
#define MDS_KBDC_TREE_TYPE_FUNCTION 5
#define MDS_KBDC_TREE_TYPE_MACRO 6
#define MDS_KBDC_TREE_TYPE_ASSUMPTION 7
#define MDS_KBDC_TREE_TYPE_ASSUMPTION_HAVE 8
#define MDS_KBDC_TREE_TYPE_ASSUMPTION_HAVE_CHARS 9
#define MDS_KBDC_TREE_TYPE_ASSUMPTION_HAVE_RANGE 10
#define MDS_KBDC_TREE_TYPE_FOR 11
#define MDS_KBDC_TREE_TYPE_IF 12
#define MDS_KBDC_TREE_TYPE_LET 13
#define MDS_KBDC_TREE_TYPE_MAP 15
#define MDS_KBDC_TREE_TYPE_ARRAY 16
#define MDS_KBDC_TREE_TYPE_KEYS 17
#define MDS_KBDC_TREE_TYPE_STRING 18
#define MDS_KBDC_TREE_TYPE_MACRO_CALL 19
/**
* Keyboard layout syntax tree
*/
union mds_kbdc_tree __attribute__((transparent));
typedef union mds_kbdc_tree mds_kbdc_tree_t;
struct mds_kbdc_tree_simple
{
int type;
mds_kbdc_tree_t* next;
mds_kbdc_tree_t* inner;
};
typedef struct mds_kbdc_tree_simple mds_kbdc_tree_information_t;
struct mds_kbdc_tree_information_data
{
int type;
mds_kbdc_tree_t* next;
char* data;
};
typedef struct mds_kbdc_tree_information_data mds_kbdc_tree_information_language_t;
typedef struct mds_kbdc_tree_information_data mds_kbdc_tree_information_country_t;
typedef struct mds_kbdc_tree_information_data mds_kbdc_tree_information_variant_t;
typedef struct mds_kbdc_tree_include
{
int type;
mds_kbdc_tree_t* next;
char* filename;
} mds_kbdc_tree_include_t;
struct mds_kbdc_tree_callable
{
int type;
mds_kbdc_tree_t* next;
char* data;
mds_kbdc_tree_t* inner;
};
typedef struct mds_kbdc_tree_callable mds_kbdc_tree_function_t;
typedef struct mds_kbdc_tree_callable mds_kbdc_tree_macro_t;
typedef struct mds_kbdc_tree_simple mds_kbdc_tree_assumption_t;
typedef struct mds_kbdc_tree_assumption_have
{
int type;
mds_kbdc_tree_t* next;
char* keys;
} mds_kbdc_tree_assumption_have_t;
typedef struct mds_kbdc_tree_assumption_have_chars
{
int type;
mds_kbdc_tree_t* next;
char* chars;
} mds_kbdc_tree_assumption_have_chars_t;
typedef struct mds_kbdc_tree_assumption_have_range
{
int type;
mds_kbdc_tree_t* next;
char* first;
char* last;
} mds_kbdc_tree_assumption_have_range_t;
typedef struct mds_kbdc_tree_for
{
int type;
mds_kbdc_tree_t* next;
char* first;
char* last;
char* variable;
} mds_kbdc_tree_for_t;
typedef struct mds_kbdc_tree_if
{
int type;
mds_kbdc_tree_t* next;
char* condition;
mds_kbdc_tree_t* inner;
mds_kbdc_tree_t* otherwise;
} mds_kbdc_tree_if_t;
typedef struct mds_kbdc_tree_let
{
int type;
mds_kbdc_tree_t* next;
char* variable;
mds_kbdc_tree_t* value;
} mds_kbdc_tree_let_t;
typedef struct mds_kbdc_tree_map
{
int type;
mds_kbdc_tree_t* next;
mds_kbdc_tree_t* sequence;
mds_kbdc_tree_t* result;
} mds_kbdc_tree_map_t;
typedef struct mds_kbdc_tree_array
{
int type;
mds_kbdc_tree_t* next;
mds_kbdc_tree_t* elements;
} mds_kbdc_tree_array_t;
typedef struct mds_kbdc_tree_keys
{
int type;
mds_kbdc_tree_t* next;
char* keys;
} mds_kbdc_trees_key_t;
typedef struct mds_kbdc_tree_string
{
int type;
mds_kbdc_tree_t* next;
char* string;
} mds_kbdc_tree_string_t;
typedef struct mds_kbdc_tree_macro_call
{
int type;
mds_kbdc_tree_t* next;
char* name;
mds_kbdc_tree_t* arguments;
} mds_kbdc_tree_macro_call_t;
/**
* Keyboard layout syntax tree
*/
union mds_kbdc_tree
{
struct
{
int type;
mds_kbdc_tree_t* next;
};
mds_kbdc_tree_information_t information;
mds_kbdc_tree_information_language_t language;
mds_kbdc_tree_information_country_t country;
mds_kbdc_tree_information_variant_t variant;
mds_kbdc_tree_information_include_t include;
mds_kbdc_tree_function_t function;
mds_kbdc_tree_macro_t macro;
mds_kbdc_tree_assumption_t assumption;
mds_kbdc_tree_assumption_have have;
mds_kbdc_tree_assumption_have_chars have_chars;
mds_kbdc_tree_assumption_have_range have_range;
mds_kbdc_tree_for_t for_;
mds_kbdc_tree_if_t if_;
mds_kbdc_tree_let_t let;
mds_kbdc_tree_map_t map;
mds_kbdc_tree_array_t array;
mds_kbdc_tree_keys_t keys;
mds_kbdc_tree_string_t string;
mds_kbdc_tree_macro_call_t macro_call;
};
#endif