Home | History | Annotate | Download | only in xkbcomp

Lines Matching refs:info

99 siText(SymInterpInfo *si, CompatInfo *info)
101 char *buf = xkb_context_get_buffer(info->ctx, 128);
103 if (si == &info->default_interp)
107 KeysymText(info->ctx, si->interp.sym),
109 ModMaskText(info->ctx, &info->mods, si->interp.mods));
115 ReportSINotArray(CompatInfo *info, SymInterpInfo *si, const char *field)
117 return ReportNotArray(info->ctx, "symbol interpretation", field,
118 siText(si, info));
122 ReportSIBadType(CompatInfo *info, SymInterpInfo *si, const char *field,
125 return ReportBadType(info->ctx, "symbol interpretation", field,
126 siText(si, info), wanted);
130 ReportLedBadType(CompatInfo *info, LedInfo *ledi, const char *field,
133 return ReportBadType(info->ctx, "indicator map", field,
134 xkb_atom_text(info->ctx, ledi->led.name),
139 ReportLedNotArray(CompatInfo *info, LedInfo *ledi, const char *field)
141 return ReportNotArray(info->ctx, "indicator map", field,
142 xkb_atom_text(info->ctx, ledi->led.name));
146 InitCompatInfo(CompatInfo *info, struct xkb_context *ctx,
149 memset(info, 0, sizeof(*info));
150 info->ctx = ctx;
151 info->actions = actions;
152 info->mods = *mods;
153 info->default_interp.merge = MERGE_OVERRIDE;
154 info->default_interp.interp.virtual_mod = XKB_MOD_INVALID;
155 info->default_led.merge = MERGE_OVERRIDE;
159 ClearCompatInfo(CompatInfo *info)
161 free(info->name);
162 darray_free(info->interps);
166 FindMatchingInterp(CompatInfo *info, SymInterpInfo *new)
170 darray_foreach(old, info->interps)
198 AddInterp(CompatInfo *info, SymInterpInfo *new, bool same_file)
200 SymInterpInfo *old = FindMatchingInterp(info, new);
202 const int verbosity = xkb_context_get_log_verbosity(info->ctx);
208 log_warn(info->ctx,
211 siText(new, info));
238 log_warn(info->ctx,
241 siText(new, info),
248 darray_append(info->interps, *new);
256 xkb_mod_mask_t *mods_rtrn, CompatInfo *info)
266 const char *pred_txt = xkb_atom_text(info->ctx, expr->action.name);
268 log_err(info->ctx,
275 const char *pred_txt = xkb_atom_text(info->ctx, expr->ident.ident);
283 return ExprResolveModMask(info->ctx, expr, MOD_REAL, &info->mods,
308 AddLedMap(CompatInfo *info, LedInfo *new, bool same_file)
311 const int verbosity = xkb_context_get_log_verbosity(info->ctx);
314 for (xkb_led_index_t i = 0; i < info->num_leds; i++) {
315 LedInfo *old = &info->leds[i];
331 log_warn(info->ctx,
334 xkb_atom_text(info->ctx, old->led.name));
356 log_warn(info->ctx,
359 xkb_atom_text(info->ctx, old->led.name),
366 if (info->num_leds >= XKB_MAX_LEDS) {
367 log_err(info->ctx,
372 info->leds[info->num_leds++] = *new;
422 HandleCompatMapFile(CompatInfo *info, XkbFile *file, enum merge_mode merge);
425 HandleIncludeCompatMap(CompatInfo *info, IncludeStmt *include)
429 InitCompatInfo(&included, info->ctx, info->actions, &info->mods);
437 file = ProcessIncludeFile(info->ctx, stmt, FILE_TYPE_COMPAT);
439 info->errorCount += 10;
444 InitCompatInfo(&next_incl, info->ctx, info->actions, &included.mods);
445 next_incl.default_interp = info->default_interp;
447 next_incl.default_led = info->default_led;
458 MergeIncludedCompatMaps(info, &included, include->merge);
461 return (info->errorCount == 0);
465 SetInterpField(CompatInfo *info, SymInterpInfo *si, const char *field,
472 return ReportSINotArray(info, si, field);
474 if (!HandleActionDef(info->ctx, info->actions, &info->mods,
483 return ReportSINotArray(info, si, field);
485 if (!ExprResolveMod(info->ctx, value, MOD_VIRT, &info->mods, &ndx))
486 return ReportSIBadType(info, si, field, "virtual modifier");
495 return ReportSINotArray(info, si, field);
497 if (!ExprResolveBoolean(info->ctx, value, &set))
498 return ReportSIBadType(info, si, field, "boolean");
505 log_dbg(info->ctx,
514 return ReportSINotArray(info, si, field);
516 if (!ExprResolveEnum(info->ctx, value, &val, useModMapValueNames))
517 return ReportSIBadType(info, si, field, "level specification");
523 return ReportBadField(info->ctx, "symbol interpretation", field,
524 siText(si, info));
531 SetLedMapField(CompatInfo *info, LedInfo *ledi, const char *field,
538 return ReportLedNotArray(info, ledi, field);
540 if (!ExprResolveModMask(info->ctx, value, MOD_BOTH,
541 &info->mods, &ledi->led.mods.mods))
542 return ReportLedBadType(info, ledi, field, "modifier mask");
550 return ReportLedNotArray(info, ledi, field);
552 if (!ExprResolveMask(info->ctx, value, &mask, groupMaskNames))
553 return ReportLedBadType(info, ledi, field, "group mask");
562 return ReportLedNotArray(info, ledi, field);
564 if (!ExprResolveMask(info->ctx, value, &mask, ctrlMaskNames))
565 return ReportLedBadType(info, ledi, field, "controls mask");
571 log_dbg(info->ctx,
580 return ReportLedNotArray(info, ledi, field);
582 if (!ExprResolveMask(info->ctx, value, &mask,
584 return ReportLedBadType(info, ledi, field,
593 return ReportLedNotArray(info, ledi, field);
595 if (!ExprResolveMask(info->ctx, value, &mask,
597 return ReportLedBadType(info, ledi, field,
608 log_dbg(info->ctx,
614 log_err(info->ctx,
619 log_err(info->ctx,
622 field, xkb_atom_text(info->ctx, ledi->led.name));
630 HandleGlobalVar(CompatInfo *info, VarDef *stmt)
636 if (!ExprResolveLhs(info->ctx, stmt->name, &elem, &field, &ndx))
639 ret = SetInterpField(info, &info->default_interp, field, ndx,
642 ret = SetLedMapField(info, &info->default_led, field, ndx,
645 ret = SetActionField(info->ctx, info->actions, &info->mods,
651 HandleInterpBody(CompatInfo *info, VarDef *def, SymInterpInfo *si)
659 log_err(info->ctx,
666 ok = ExprResolveLhs(info->ctx, def->name, &elem, &field, &arrayNdx);
670 ok = SetInterpField(info, si, field, arrayNdx, def->value);
677 HandleInterpDef(CompatInfo *info, InterpDef *def, enum merge_mode merge)
683 if (!ResolveStateAndPredicate(def->match, &pred, &mods, info)) {
684 log_err(info->ctx,
690 si = info->default_interp;
696 if (!HandleInterpBody(info, def->def, &si)) {
697 info->errorCount++;
701 if (!AddInterp(info, &si, true)) {
702 info->errorCount++;
710 HandleLedMapDef(CompatInfo *info, LedMapDef *def, enum merge_mode merge)
719 ledi = info->default_led;
727 if (!ExprResolveLhs(info->ctx, var->name, &elem, &field, &arrayNdx)) {
733 log_err(info->ctx,
739 ok = SetLedMapField(info, &ledi, field, arrayNdx, var->value) && ok;
744 return AddLedMap(info, &ledi, true);
750 HandleCompatMapFile(CompatInfo *info, XkbFile *file, enum merge_mode merge)
756 free(info->name);
757 info->name = strdup_safe(file->name);
762 ok = HandleIncludeCompatMap(info, (IncludeStmt *) stmt);
765 ok = HandleInterpDef(info, (InterpDef *) stmt, merge);
768 log_dbg(info->ctx,
774 ok = HandleLedMapDef(info, (LedMapDef *) stmt, merge);
777 ok = HandleGlobalVar(info, (VarDef *) stmt);
780 ok = HandleVModDef(info->ctx, &info->mods, (VModDef *) stmt, merge);
783 log_err(info->ctx,
791 info->errorCount++;
793 if (info->errorCount > 10) {
794 log_err(info->ctx,
807 CopyInterps(CompatInfo *info, bool needSymbol, enum xkb_match_operation pred,
812 darray_foreach(si, info->interps)
819 CopyLedMapDefsToKeymap(struct xkb_keymap *keymap, CompatInfo *info)
821 for (xkb_led_index_t idx = 0; idx < info->num_leds; idx++) {
822 LedInfo *ledi = &info->leds[idx];
870 CopyCompatToKeymap(struct xkb_keymap *keymap, CompatInfo *info)
872 keymap->compat_section_name = strdup_safe(info->name);
875 keymap->mods = info->mods;
877 if (!darray_empty(info->interps)) {
882 CopyInterps(info, true, MATCH_EXACTLY, &collect);
883 CopyInterps(info, true, MATCH_ALL, &collect);
884 CopyInterps(info, true, MATCH_NONE, &collect);
885 CopyInterps(info, true, MATCH_ANY, &collect);
886 CopyInterps(info, true, MATCH_ANY_OR_NONE, &collect);
887 CopyInterps(info, false, MATCH_EXACTLY, &collect);
888 CopyInterps(info, false, MATCH_ALL, &collect);
889 CopyInterps(info, false, MATCH_NONE, &collect);
890 CopyInterps(info, false, MATCH_ANY, &collect);
891 CopyInterps(info, false, MATCH_ANY_OR_NONE, &collect);
897 CopyLedMapDefsToKeymap(keymap, info);
906 CompatInfo info;
913 InitCompatInfo(&info, keymap->ctx, actions, &keymap->mods);
914 info.default_interp.merge = merge;
915 info.default_led.merge = merge;
917 HandleCompatMapFile(&info, file, merge);
918 if (info.errorCount != 0)
921 if (!CopyCompatToKeymap(keymap, &info))
924 ClearCompatInfo(&info);
929 ClearCompatInfo(&info);