#include "path.h"
static bool
-input_line_get(FILE *file, darray_char *line)
+input_line_get(struct xkb_context *ctx, FILE *file, darray_char *line)
{
int ch;
bool end_of_file = false;
if (ch == '!') {
if (!darray_empty(*line)) {
- WARN("The '!' is legal only at start of line\n");
- ACTION("Line containing '!' ignored\n");
+ log_warn(ctx,
+ "The '!' is legal only at start of line; "
+ "Line containing '!' ignored\n");
darray_resize(*line, 0);
break;
}
* mapping->map[3] = {.word = SYMBOLS, .index = 0}
*/
static void
-match_mapping_line(darray_char *line, struct mapping *mapping)
+match_mapping_line(struct xkb_context *ctx, darray_char *line,
+ struct mapping *mapping)
{
char *tok;
char *str = darray_mem(*line, 1);
if ((i != LAYOUT && i != VARIANT) ||
*end != '\0' || ndx == -1) {
- WARN("Illegal %s index: %d\n", cname[i], ndx);
- WARN("Can only index layout and variant\n");
+ log_warn(ctx,
+ "Illegal %s index: %d\n", cname[i], ndx);
+ log_warn(ctx, "Can only index layout and variant\n");
break;
}
if (ndx < 1 || ndx > XkbNumKbdGroups) {
- WARN("Illegal %s index: %d\n", cname[i], ndx);
- WARN("Index must be in range 1..%d\n",
- XkbNumKbdGroups);
+ log_warn(ctx, "Illegal %s index: %d\n",
+ cname[i], ndx);
+ log_warn(ctx, "Index must be in range 1..%d\n",
+ XkbNumKbdGroups);
break;
}
}
if (present & (1 << i)) {
if ((i == LAYOUT && layout_ndx_present & (1 << ndx)) ||
(i == VARIANT && variant_ndx_present & (1 << ndx))) {
- WARN("Component \"%s\" listed twice\n", tok);
- ACTION("Second definition ignored\n");
+ log_warn(ctx,
+ "Component \"%s\" listed twice; "
+ "Second definition ignored\n", tok);
break;
}
}
}
}
- if (!found) {
- WARN("Unknown component \"%s\"\n", tok);
- ACTION("ignored\n");
- }
+ if (!found)
+ log_warn(ctx, "Unknown component \"%s\"; Ignored\n", tok);
}
if ((present & PART_MASK) == 0) {
- WARN("Mapping needs at least one MLVO part\n");
- ACTION("Illegal mapping ignored\n");
+ log_warn(ctx,
+ "Mapping needs at least one MLVO part; "
+ "Illegal mapping ignored\n");
mapping->num_maps = 0;
return;
}
if ((present & COMPONENT_MASK) == 0) {
- WARN("Mapping needs at least one component\n");
- ACTION("Illegal mapping ignored\n");
+ log_warn(ctx,
+ "Mapping needs at least one component; "
+ "Illegal mapping ignored\n");
mapping->num_maps = 0;
return;
}
/* Match lines following a mapping (see match_mapping_line comment). */
static bool
-match_rule_line(darray_char *line, struct mapping *mapping,
- struct rule *rule)
+match_rule_line(struct xkb_context *ctx, darray_char *line,
+ struct mapping *mapping, struct rule *rule)
{
char *str, *tok;
int nread, i;
const char *names[MAX_WORDS] = { NULL };
if (mapping->num_maps == 0) {
- WARN("Must have a mapping before first line of data\n");
- ACTION("Illegal line of data ignored\n");
+ log_warn(ctx,
+ "Must have a mapping before first line of data; "
+ "Illegal line of data ignored\n");
return false;
}
}
if (nread > mapping->num_maps) {
- WARN("Too many words on a line\n");
- ACTION("Extra word \"%s\" ignored\n", tok);
+ log_warn(ctx,
+ "Too many words on a line; "
+ "Extra word \"%s\" ignored\n", tok);
continue;
}
}
if (nread < mapping->num_maps) {
- WARN("Too few words on a line: %s\n", darray_mem(*line, 0));
- ACTION("line ignored\n");
+ log_warn(ctx, "Too few words on a line: %s; Line ignored\n",
+ darray_mem(*line, 0));
return false;
}
}
static bool
-match_line(darray_char *line, struct mapping *mapping,
- struct rule *rule, struct group *group)
+match_line(struct xkb_context *ctx, darray_char *line,
+ struct mapping *mapping, struct rule *rule,
+ struct group *group)
{
if (darray_item(*line, 0) != '!')
- return match_rule_line(line, mapping, rule);
+ return match_rule_line(ctx, line, mapping, rule);
if (darray_item(*line, 1) == '$' ||
(darray_item(*line, 1) == ' ' && darray_item(*line, 2) == '$'))
return match_group_line(line, group);
- match_mapping_line(line, mapping);
+ match_mapping_line(ctx, line, mapping);
return false;
}
struct rule *rule;
darray_foreach(rule, rules->rules)
- rule->flags &= ~RULE_FLAG_PENDING_MATCH;
+ rule->flags &= ~RULE_FLAG_PENDING_MATCH;
}
static void
struct rule *rule;
darray_foreach(rule, rules->rules)
- if (rule->flags & RULE_FLAG_PENDING_MATCH)
- apply_rule(rule, kccgst);
+ if (rule->flags & RULE_FLAG_PENDING_MATCH)
+ apply_rule(rule, kccgst);
}
static void
}
static struct rules *
-load_rules(FILE *file)
+load_rules(struct xkb_context *ctx, FILE *file)
{
darray_char line;
struct mapping mapping;
darray_init(line);
darray_growalloc(line, 128);
- while (input_line_get(file, &line)) {
- if (match_line(&line, &mapping, &trule, &tgroup)) {
+ while (input_line_get(ctx, file, &line)) {
+ if (match_line(ctx, &line, &mapping, &trule, &tgroup)) {
if (tgroup.number) {
darray_append(rules->groups, tgroup);
memset(&tgroup, 0, sizeof(tgroup));
file = XkbFindFileInPath(ctx, rmlvo->rules, FILE_TYPE_RULES, &path);
if (!file) {
- ERROR("could not find \"%s\" rules in XKB path\n", rmlvo->rules);
- ERROR("%d include paths searched:\n",
- xkb_context_num_include_paths(ctx));
+ log_err(ctx, "could not find \"%s\" rules in XKB path\n",
+ rmlvo->rules);
+ log_err(ctx, "%d include paths searched:\n",
+ xkb_context_num_include_paths(ctx));
for (i = 0; i < xkb_context_num_include_paths(ctx); i++)
- ERROR("\t%s\n", xkb_context_include_path_get(ctx, i));
+ log_err(ctx, "\t%s\n", xkb_context_include_path_get(ctx, i));
return NULL;
}
- rules = load_rules(file);
+ rules = load_rules(ctx, file);
if (!rules) {
- ERROR("failed to load XKB rules \"%s\"\n", path);
+ log_err(ctx, "failed to load XKB rules \"%s\"\n", path);
goto err;
}
kccgst = calloc(1, sizeof(*kccgst));
if (!kccgst) {
- ERROR("failed to allocate XKB components\n");
+ log_err(ctx, "failed to allocate XKB components\n");
goto err;
}
free(kccgst->symbols);
free(kccgst);
kccgst = NULL;
- ERROR("no components returned from XKB rules \"%s\"\n", path);
+ log_err(ctx, "no components returned from XKB rules \"%s\"\n", path);
goto err;
}