From 478d8082f41b7859356c3f9662e1c46327b4b76e Mon Sep 17 00:00:00 2001 From: Jules Aguillon Date: Sun, 17 Dec 2023 12:12:23 +0100 Subject: [PATCH] Improve layout parsing errors Add location information to all error and improve "expected tag" errors. --- srcs/juloo.keyboard2/KeyboardData.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/srcs/juloo.keyboard2/KeyboardData.java b/srcs/juloo.keyboard2/KeyboardData.java index 9326ad8fb..989c5f6da 100644 --- a/srcs/juloo.keyboard2/KeyboardData.java +++ b/srcs/juloo.keyboard2/KeyboardData.java @@ -221,7 +221,7 @@ public static KeyboardData load_string_exn(String src) throws Exception private static KeyboardData parse_keyboard(XmlPullParser parser) throws Exception { if (!expect_tag(parser, "keyboard")) - throw new Exception("Empty layout file"); + throw error(parser, "Expected tag "); boolean add_bottom_row = attribute_bool(parser, "bottom_row", true); float specified_kw = attribute_float(parser, "width", 0f); String script = parser.getAttributeValue(null, "script"); @@ -238,7 +238,7 @@ private static KeyboardData parse_keyboard(XmlPullParser parser) throws Exceptio modmap = Modmap.parse(parser); break; default: - throw new Exception("Unknown tag: " + parser.getName()); + throw error(parser, "Expecting tag , got <" + parser.getName() + ">"); } } float kw = (specified_kw != 0f) ? specified_kw : compute_max_width(rows); @@ -258,7 +258,7 @@ private static float compute_max_width(List rows) private static Row parse_row(XmlPullParser parser) throws Exception { if (!expect_tag(parser, "row")) - throw new Exception("Failed to parse row"); + throw error(parser, "Expected tag "); return Row.parse(parser); } @@ -604,7 +604,8 @@ private static boolean expect_tag(XmlPullParser parser, String name) throws Exce if (!next_tag(parser)) return false; if (!parser.getName().equals(name)) - throw new Exception("Unknown tag: " + parser.getName()); + throw error(parser, "Expecting tag <" + name + ">, got <" + + parser.getName() + ">"); return true; } @@ -623,4 +624,10 @@ private static float attribute_float(XmlPullParser parser, String attr, float de return default_val; return Float.parseFloat(val); } + + /** Construct a parsing error. */ + private static Exception error(XmlPullParser parser, String message) + { + return new Exception(message + " " + parser.getPositionDescription()); + } }