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()); + } }