diff --git a/src/compose/parser.c b/src/compose/parser.c index f84b314..124456d 100644 --- a/src/compose/parser.c +++ b/src/compose/parser.c @@ -332,8 +332,8 @@ add_production(struct xkb_compose_table *table, struct scanner *s, const struct production *production) { unsigned lhs_pos = 0; - uint16_t curr = darray_size(table->nodes) == 1 ? 0 : 1; - uint16_t *pptr = NULL; + uint32_t curr = darray_size(table->nodes) == 1 ? 0 : 1; + uint32_t *pptr = NULL; struct compose_node *node = NULL; /* Warn before potentially going over the limit, discard silently after. */ diff --git a/src/compose/state.c b/src/compose/state.c index 6ba0344..7a78891 100644 --- a/src/compose/state.c +++ b/src/compose/state.c @@ -41,8 +41,8 @@ struct xkb_compose_state { * This is also sufficient for inferring the current status; see * xkb_compose_state_get_status(). */ - uint16_t prev_context; - uint16_t context; + uint32_t prev_context; + uint32_t context; }; XKB_EXPORT struct xkb_compose_state * @@ -91,7 +91,7 @@ xkb_compose_state_get_compose_table(struct xkb_compose_state *state) XKB_EXPORT enum xkb_compose_feed_result xkb_compose_state_feed(struct xkb_compose_state *state, xkb_keysym_t keysym) { - uint16_t context; + uint32_t context; const struct compose_node *node; /* diff --git a/src/compose/table.h b/src/compose/table.h index 6be4348..825a8e2 100644 --- a/src/compose/table.h +++ b/src/compose/table.h @@ -75,16 +75,17 @@ * \0 is so offset 0 points to an empty string). */ -/* Fits in uint16_t, also a good idea to have some limit. */ -#define MAX_COMPOSE_NODES 65535 +/* 7 nodes for every potential Unicode character and then some should be + * enough for all purposes. */ +#define MAX_COMPOSE_NODES (1 << 23) struct compose_node { xkb_keysym_t keysym; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t lokid; + uint32_t lokid; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t hikid; + uint32_t hikid; union { struct { @@ -95,7 +96,7 @@ struct compose_node { uint32_t _pad:31; bool is_leaf:1; /* Offset into xkb_compose_table::nodes or 0. */ - uint16_t eqkid; + uint32_t eqkid; } internal; struct { /* Offset into xkb_compose_table::utf8. */