/*
 * Copyright © 2009 Dan Nicholson
 * SPDX-License-Identifier: MIT
 */
#pragma once

#include "config.h"

#include <stdbool.h>

#include "xkbcommon/xkbcommon.h"
#include "atom.h"
#include "keymap.h"

typedef struct {
    const char *name;
    uint32_t value;
} LookupEntry;

bool
LookupString(const LookupEntry tab[], const char *string,
              unsigned int *value_rtrn);

const char *
LookupValue(const LookupEntry tab[], unsigned int value);

extern const LookupEntry ctrlMaskNames[];
extern const LookupEntry modComponentMaskNames[];
extern const LookupEntry groupComponentMaskNames[];
extern const LookupEntry groupMaskNames[];
extern const LookupEntry buttonNames[];
extern const LookupEntry useModMapValueNames[];
extern const LookupEntry actionTypeNames[];
extern const LookupEntry symInterpretMatchMaskNames[];

const char *
ModMaskText(struct xkb_context *ctx, enum mod_type type,
            const struct xkb_mod_set *mods, xkb_mod_mask_t mask);

const char *
ModIndexText(struct xkb_context *ctx, const struct xkb_mod_set *mods,
             xkb_mod_index_t ndx);

const char *
ActionTypeText(enum xkb_action_type type);

const char *
KeysymText(struct xkb_context *ctx, xkb_keysym_t sym);

const char *
KeyNameText(struct xkb_context *ctx, xkb_atom_t name);

const char *
SIMatchText(enum xkb_match_operation type);

const char *
LedStateMaskText(struct xkb_context *ctx, const LookupEntry *lookup,
                 enum xkb_state_component mask);

const char *
ControlMaskText(struct xkb_context *ctx, enum xkb_action_controls mask);
