From 460e5214a20a381af9b18273372477389927f3fc Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Tue, 15 Apr 2025 00:05:52 +0200 Subject: Add class Modmap and test KeyModifier --- srcs/juloo.keyboard2/KeyboardData.java | 65 ++++++++++++---------------------- 1 file changed, 23 insertions(+), 42 deletions(-) (limited to 'srcs/juloo.keyboard2/KeyboardData.java') diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index e4a7506..f5cc87e 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -260,7 +260,7 @@ public final class KeyboardData case "modmap": if (modmap != null) throw error(parser, "Multiple '' are not allowed"); - modmap = Modmap.parse(parser); + modmap = parse_modmap(parser); break; default: throw error(parser, "Expecting tag , got <" + parser.getName() + ">"); @@ -555,53 +555,34 @@ public final class KeyboardData } } - public static class Modmap + public static Modmap parse_modmap(XmlPullParser parser) throws Exception { - public final Map shift; - public final Map fn; - public final Map ctrl; - - public Modmap(Map s, Map f, Map c) - { - shift = s; - fn = f; - ctrl = c; - } - - public static Modmap parse(XmlPullParser parser) throws Exception + Modmap mm = new Modmap(); + while (next_tag(parser)) { - HashMap shift = new HashMap(); - HashMap fn = new HashMap(); - HashMap ctrl = new HashMap(); - while (next_tag(parser)) + Modmap.M m; + switch (parser.getName()) { - switch (parser.getName()) - { - case "shift": - parse_mapping(parser, shift); - break; - case "fn": - parse_mapping(parser, fn); - break; - case "ctrl": - parse_mapping(parser, ctrl); - break; - default: - throw error(parser, "Expecting tag or , got <" + parser.getName() + ">"); - } + case "shift": m = Modmap.M.Shift; break; + case "fn": m = Modmap.M.Fn; break; + case "ctrl": m = Modmap.M.Ctrl; break; + default: + throw error(parser, "Expecting tag or , got <" + + parser.getName() + ">"); } - - return new Modmap(shift, fn, ctrl); + parse_modmap_mapping(parser, mm, m); } + return mm; + } - private static void parse_mapping(XmlPullParser parser, Map dst) throws Exception - { - KeyValue a = KeyValue.getKeyByName(parser.getAttributeValue(null, "a")); - KeyValue b = KeyValue.getKeyByName(parser.getAttributeValue(null, "b")); - while (parser.next() != XmlPullParser.END_TAG) - continue; - dst.put(a, b); - } + private static void parse_modmap_mapping(XmlPullParser parser, Modmap mm, + Modmap.M m) throws Exception + { + KeyValue a = KeyValue.getKeyByName(parser.getAttributeValue(null, "a")); + KeyValue b = KeyValue.getKeyByName(parser.getAttributeValue(null, "b")); + while (parser.next() != XmlPullParser.END_TAG) + continue; + mm.add(m, a, b); } /** Position of a key on the layout. */ -- cgit v1.2.3