Preserve symbol attributes when serializing/deserializing XML.
This commit is contained in:
@ -444,3 +444,38 @@ eek_symbol_get_icon_name (EekSymbol *symbol)
|
|||||||
return NULL;
|
return NULL;
|
||||||
return priv->icon_name;
|
return priv->icon_name;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
EekSymbolCategory category;
|
||||||
|
gchar *name;
|
||||||
|
} category_names[] = {
|
||||||
|
{ EEK_SYMBOL_CATEGORY_LETTER, "letter" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_FUNCTION, "function" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_KEYNAME, "keyname" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_USER0, "user0" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_USER1, "user1" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_USER2, "user2" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_USER3, "user3" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_USER4, "user4" },
|
||||||
|
{ EEK_SYMBOL_CATEGORY_UNKNOWN, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
G_CONST_RETURN gchar *
|
||||||
|
eek_symbol_category_get_name (EekSymbolCategory category)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
for (i = 0; i < G_N_ELEMENTS(category_names); i++)
|
||||||
|
if (category_names[i].category == category)
|
||||||
|
return category_names[i].name;
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
EekSymbolCategory
|
||||||
|
eek_symbol_category_from_name (const gchar *name)
|
||||||
|
{
|
||||||
|
gint i;
|
||||||
|
for (i = 0; i < G_N_ELEMENTS(category_names); i++)
|
||||||
|
if (g_strcmp0 (category_names[i].name, name) == 0)
|
||||||
|
return category_names[i].category;
|
||||||
|
return EEK_SYMBOL_CATEGORY_UNKNOWN;
|
||||||
|
}
|
||||||
|
|||||||
@ -111,6 +111,11 @@ void eek_symbol_set_icon_name (EekSymbol *symbol,
|
|||||||
const gchar *icon_name);
|
const gchar *icon_name);
|
||||||
G_CONST_RETURN gchar *eek_symbol_get_icon_name (EekSymbol *symbol);
|
G_CONST_RETURN gchar *eek_symbol_get_icon_name (EekSymbol *symbol);
|
||||||
|
|
||||||
|
G_CONST_RETURN gchar *eek_symbol_category_get_name
|
||||||
|
(EekSymbolCategory category);
|
||||||
|
EekSymbolCategory eek_symbol_category_from_name
|
||||||
|
(const gchar *name);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* EEK_SYMBOL_H */
|
#endif /* EEK_SYMBOL_H */
|
||||||
|
|||||||
@ -66,8 +66,10 @@ struct _ParseCallbackData {
|
|||||||
gdouble corner_radius;
|
gdouble corner_radius;
|
||||||
GSList *points;
|
GSList *points;
|
||||||
GSList *symbols;
|
GSList *symbols;
|
||||||
|
gchar *name;
|
||||||
gchar *label;
|
gchar *label;
|
||||||
gchar *icon;
|
gchar *icon;
|
||||||
|
EekSymbolCategory category;
|
||||||
guint keyval;
|
guint keyval;
|
||||||
gint groups, levels;
|
gint groups, levels;
|
||||||
EekOutline outline;
|
EekOutline outline;
|
||||||
@ -166,6 +168,7 @@ start_element_callback (GMarkupParseContext *pcontext,
|
|||||||
gint column = -1, row = -1, groups = -1, levels = -1;
|
gint column = -1, row = -1, groups = -1, levels = -1;
|
||||||
guint keyval = EEK_INVALID_KEYSYM;
|
guint keyval = EEK_INVALID_KEYSYM;
|
||||||
gchar *name = NULL, *label = NULL, *icon = NULL, *id = NULL, *version = NULL;
|
gchar *name = NULL, *label = NULL, *icon = NULL, *id = NULL, *version = NULL;
|
||||||
|
EekSymbolCategory category;
|
||||||
|
|
||||||
validate (element_name, data->element_stack, error);
|
validate (element_name, data->element_stack, error);
|
||||||
if (error && *error)
|
if (error && *error)
|
||||||
@ -184,6 +187,8 @@ start_element_callback (GMarkupParseContext *pcontext,
|
|||||||
label = g_strdup (*values);
|
label = g_strdup (*values);
|
||||||
else if (g_strcmp0 (*names, "icon") == 0)
|
else if (g_strcmp0 (*names, "icon") == 0)
|
||||||
icon = g_strdup (*values);
|
icon = g_strdup (*values);
|
||||||
|
else if (g_strcmp0 (*names, "category") == 0)
|
||||||
|
category = eek_symbol_category_from_name (*values);
|
||||||
else if (g_strcmp0 (*names, "keyval") == 0)
|
else if (g_strcmp0 (*names, "keyval") == 0)
|
||||||
keyval = strtoul (*values, NULL, 10);
|
keyval = strtoul (*values, NULL, 10);
|
||||||
else if (g_strcmp0 (*names, "version") == 0)
|
else if (g_strcmp0 (*names, "version") == 0)
|
||||||
@ -230,9 +235,11 @@ start_element_callback (GMarkupParseContext *pcontext,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (g_strcmp0 (element_name, "symbol") == 0 ||
|
if (g_strcmp0 (element_name, "symbol") == 0 ||
|
||||||
g_strcmp0 (element_name, "keysym") == 0) {
|
g_strcmp0 (element_name, "keysym") == 0 ||
|
||||||
|
g_strcmp0 (element_name, "text") == 0) {
|
||||||
data->label = g_strdup (label);
|
data->label = g_strdup (label);
|
||||||
data->icon = g_strdup (icon);
|
data->icon = g_strdup (icon);
|
||||||
|
data->category = category;
|
||||||
if (g_strcmp0 (element_name, "keysym") == 0)
|
if (g_strcmp0 (element_name, "keysym") == 0)
|
||||||
data->keyval = keyval;
|
data->keyval = keyval;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -77,6 +77,21 @@ output_bounds (GString *output, EekBounds *bounds)
|
|||||||
bounds->height);
|
bounds->height);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
output_symbol_attributes (GString *output,
|
||||||
|
EekSymbol *symbol)
|
||||||
|
{
|
||||||
|
if (eek_symbol_get_name (symbol) != NULL)
|
||||||
|
g_string_markup_printf (output, " name=\"%s\"",
|
||||||
|
eek_symbol_get_name (symbol));
|
||||||
|
if (eek_symbol_get_label (symbol) != NULL)
|
||||||
|
g_string_markup_printf (output, " label=\"%s\"",
|
||||||
|
eek_symbol_get_label (symbol));
|
||||||
|
if (eek_symbol_get_category (symbol) != EEK_SYMBOL_CATEGORY_UNKNOWN)
|
||||||
|
g_string_markup_printf (output, " category=\"%s\"",
|
||||||
|
eek_symbol_category_get_name (eek_symbol_get_category (symbol)));
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
output_key_callback (EekElement *element, gpointer user_data)
|
output_key_callback (EekElement *element, gpointer user_data)
|
||||||
{
|
{
|
||||||
@ -146,26 +161,28 @@ output_key_callback (EekElement *element, gpointer user_data)
|
|||||||
if (EEK_IS_KEYSYM(symbol)) {
|
if (EEK_IS_KEYSYM(symbol)) {
|
||||||
guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
|
guint xkeysym = eek_keysym_get_xkeysym (EEK_KEYSYM(symbol));
|
||||||
|
|
||||||
|
g_string_markup_printf (data->output, "<keysym");
|
||||||
|
output_symbol_attributes (data->output, symbol);
|
||||||
if (xkeysym != EEK_INVALID_KEYSYM)
|
if (xkeysym != EEK_INVALID_KEYSYM)
|
||||||
g_string_markup_printf
|
g_string_markup_printf (data->output, " keyval=\"%u\"",
|
||||||
(data->output,
|
xkeysym);
|
||||||
"<keysym keyval=\"%u\">%s</keysym>\n",
|
g_string_markup_printf (data->output, ">%s</keysym>\n",
|
||||||
xkeysym,
|
eek_symbol_get_name (symbol));
|
||||||
eek_symbol_get_name (symbol));
|
|
||||||
else
|
|
||||||
g_string_markup_printf (data->output,
|
|
||||||
"<keysym>%s</keysym>\n",
|
|
||||||
eek_symbol_get_name (symbol));
|
|
||||||
}
|
}
|
||||||
else if (EEK_IS_TEXT(symbol)) {
|
else if (EEK_IS_TEXT(symbol)) {
|
||||||
|
g_string_markup_printf (data->output, "<text");
|
||||||
|
output_symbol_attributes (data->output, symbol);
|
||||||
g_string_markup_printf (data->output,
|
g_string_markup_printf (data->output,
|
||||||
"<text>%s</text>\n",
|
">%s</text>\n",
|
||||||
eek_text_get_text (EEK_TEXT(symbol)));
|
eek_text_get_text (EEK_TEXT(symbol)));
|
||||||
}
|
}
|
||||||
else
|
else {
|
||||||
|
g_string_markup_printf (data->output, "<symbol");
|
||||||
|
output_symbol_attributes (data->output, symbol);
|
||||||
g_string_markup_printf (data->output,
|
g_string_markup_printf (data->output,
|
||||||
"<symbol>%s</symbol>\n",
|
">%s</symbol>\n",
|
||||||
eek_symbol_get_name (symbol));
|
eek_symbol_get_name (symbol));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
g_string_append_indent (data->output, data->indent + 1);
|
g_string_append_indent (data->output, data->indent + 1);
|
||||||
g_string_markup_printf (data->output, "</symbols>\n");
|
g_string_markup_printf (data->output, "</symbols>\n");
|
||||||
|
|||||||
@ -44,7 +44,8 @@ def remap(keyboard, mapping):
|
|||||||
if mapped.has_key('label'):
|
if mapped.has_key('label'):
|
||||||
replace.set_label(mapped['label'])
|
replace.set_label(mapped['label'])
|
||||||
if mapped.has_key('category'):
|
if mapped.has_key('category'):
|
||||||
replace.set_category(mapped['category'])
|
cat = Eek.symbol_category_from_name(mapped['category'])
|
||||||
|
replace.set_category(cat)
|
||||||
matrix.set_symbol(0, level, replace)
|
matrix.set_symbol(0, level, replace)
|
||||||
def __each_section(element, data):
|
def __each_section(element, data):
|
||||||
element.foreach_child(__each_key, data)
|
element.foreach_child(__each_key, data)
|
||||||
|
|||||||
@ -149,9 +149,10 @@
|
|||||||
(car from)
|
(car from)
|
||||||
(or (mim2remap--char-to-keyname (aref from 0))
|
(or (mim2remap--char-to-keyname (aref from 0))
|
||||||
(error "No keyname for %c" (aref from 0))))
|
(error "No keyname for %c" (aref from 0))))
|
||||||
(if (characterp to)
|
(list (cons :text (if (characterp to)
|
||||||
(list (cons :text (char-to-string to)))
|
(char-to-string to)
|
||||||
(list (cons :text to))))))
|
to))
|
||||||
|
(cons :category 'letter)))))
|
||||||
(cdr sexp))))))
|
(cdr sexp))))))
|
||||||
|
|
||||||
(defun batch-mim2remap ()
|
(defun batch-mim2remap ()
|
||||||
|
|||||||
Reference in New Issue
Block a user