summaryrefslogtreecommitdiff
path: root/libcaribou/xml-deserializer.vala
diff options
context:
space:
mode:
Diffstat (limited to 'libcaribou/xml-deserializer.vala')
-rw-r--r--libcaribou/xml-deserializer.vala33
1 files changed, 26 insertions, 7 deletions
diff --git a/libcaribou/xml-deserializer.vala b/libcaribou/xml-deserializer.vala
index 3e4cfe3..d16e41b 100644
--- a/libcaribou/xml-deserializer.vala
+++ b/libcaribou/xml-deserializer.vala
@@ -62,22 +62,21 @@ namespace Caribou {
"Could not find layout file for %s %s", group, variant);
}
- public static GroupModel? load_group (string keyboard_type,
- string group, string variant) {
+ public static GroupModel? load_group_from_file (string filename) {
Xml.Doc* doc;
try {
- string fn = get_layout_file (keyboard_type, group, variant);
- doc = Xml.Parser.parse_file (fn);
+ doc = Xml.Parser.parse_file (filename);
if (doc == null)
throw new IOError.FAILED (
- "Cannot load XML text reader for %s", fn);
+ "Cannot load XML text reader for %s", filename);
} catch (GLib.Error e) {
- stdout.printf ("Failed to load XML: %s\n", e.message);
+ stdout.printf ("Failed to load %s: %s\n", filename, e.message);
return null;
}
- GroupModel grp = new GroupModel (group, variant);
+ // Use dummy group/variant names.
+ GroupModel grp = new GroupModel ("us", "");
Xml.Node* node = doc->children;
create_levels_from_xml (grp, node);
@@ -88,6 +87,26 @@ namespace Caribou {
return grp;
}
+ public static GroupModel? load_group (string keyboard_type,
+ string group, string variant) {
+ string filename;
+ try {
+ filename = get_layout_file (keyboard_type, group, variant);
+ } catch (GLib.Error e) {
+ stdout.printf ("Failed to load keyboard file %s/%s: %s\n",
+ keyboard_type,
+ GroupModel.create_group_name (group, variant),
+ e.message);
+ return null;
+ }
+ var grp = load_group_from_file (filename);
+ if (grp != null) {
+ grp.group = group;
+ grp.variant = variant;
+ }
+ return grp;
+ }
+
public static void create_levels_from_xml (GroupModel group,
Xml.Node* node) {
assert (node->name == "layout");