From 699e9e37f32166d93fcdd51bc64c59583513b62e Mon Sep 17 00:00:00 2001 From: Izumi Kawashima Date: Tue, 30 Oct 2018 04:14:32 +0900 Subject: [PATCH] XmlThemeBuilder: fix check at tag processing (#598) --- vtm/src/org/oscim/theme/XmlThemeBuilder.java | 32 ++++++++++++++------ 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/vtm/src/org/oscim/theme/XmlThemeBuilder.java b/vtm/src/org/oscim/theme/XmlThemeBuilder.java index 526f8c9c..d9d9a5a9 100644 --- a/vtm/src/org/oscim/theme/XmlThemeBuilder.java +++ b/vtm/src/org/oscim/theme/XmlThemeBuilder.java @@ -5,6 +5,7 @@ * Copyright 2016-2017 Longri * Copyright 2016 Andrey Novikov * Copyright 2018 Gustl22 + * Copyright 2018 Izumi Kawashima * * This file is part of the OpenScienceMap project (http://www.opensciencemap.org). * @@ -81,14 +82,20 @@ public class XmlThemeBuilder extends DefaultHandler { private static final int RENDER_THEME_VERSION_VTM = 1; private enum Element { - RENDER_THEME, RENDERING_INSTRUCTION, RULE, STYLE, ATLAS, RENDERING_STYLE, TAG_TRANSFORM + RENDER_THEME, RENDERING_INSTRUCTION, RULE, STYLE, ATLAS, RECT, RENDERING_STYLE, TAG_TRANSFORM } private static final String ELEMENT_NAME_RENDER_THEME = "rendertheme"; private static final String ELEMENT_NAME_STYLE_MENU = "stylemenu"; private static final String ELEMENT_NAME_MATCH_MAPSFORGE = "rule"; private static final String ELEMENT_NAME_MATCH_VTM = "m"; - private static final String UNEXPECTED_ELEMENT = "unexpected element: "; + private static final String UNEXPECTED_ELEMENT_STACK_NOT_EMPTY = "Stack not empty, unexpected element: "; + private static final String UNEXPECTED_ELEMENT_RENDERING_INSTRUCTION_PARENT_ELEMENT_MISMATCH = "Rendering instruction:: Parent element mismatch: unexpected element: "; + private static final String UNEXPECTED_ELEMENT_RULE_PARENT_ELEMENT_MISMATCH = "Rule:: Parent element mismatch: unexpected element: "; + private static final String UNEXPECTED_ELEMENT_STYLE_PARENT_ELEMENT_MISMATCH = "Style:: Parent element mismatch: unexpected element: "; + private static final String UNEXPECTED_ELEMENT_ATLAS_PARENT_ELEMENT_MISMATCH = "Atlas:: Parent element mismatch: unexpected element: "; + private static final String UNEXPECTED_ELEMENT_RECT_PARENT_ELEMENT_MISMATCH = "Rect:: Parent element mismatch: unexpected element: "; + private static final String UNEXPECTED_ELEMENT_TAG_TRANSFORM_PARENT_ELEMENT_MISMATCH = "Tag transform:: Parent element mismatch: unexpected element: "; private static final String LINE_STYLE = "L"; private static final String OUTLINE_STYLE = "O"; @@ -327,7 +334,7 @@ public class XmlThemeBuilder extends DefaultHandler { createAtlas(localName, attributes); } else if ("rect".equals(localName)) { - checkState(localName, Element.ATLAS); + checkState(localName, Element.RECT); createTextureRegion(localName, attributes); } else if ("cat".equals(localName)) { @@ -843,7 +850,7 @@ public class XmlThemeBuilder extends DefaultHandler { switch (element) { case RENDER_THEME: if (!mElementStack.empty()) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_STACK_NOT_EMPTY + elementName); } return; @@ -851,27 +858,34 @@ public class XmlThemeBuilder extends DefaultHandler { parentElement = mElementStack.peek(); if (parentElement != Element.RENDER_THEME && parentElement != Element.RULE) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_RULE_PARENT_ELEMENT_MISMATCH + elementName); } return; case STYLE: parentElement = mElementStack.peek(); if (parentElement != Element.RENDER_THEME) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_STYLE_PARENT_ELEMENT_MISMATCH + elementName); } return; case RENDERING_INSTRUCTION: if (mElementStack.peek() != Element.RULE) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_RENDERING_INSTRUCTION_PARENT_ELEMENT_MISMATCH + elementName); } return; case ATLAS: parentElement = mElementStack.peek(); if (parentElement != Element.RENDER_THEME) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_ATLAS_PARENT_ELEMENT_MISMATCH + elementName); + } + return; + + case RECT: + parentElement = mElementStack.peek(); + if (parentElement != Element.ATLAS) { + throw new SAXException(UNEXPECTED_ELEMENT_RECT_PARENT_ELEMENT_MISMATCH + elementName); } return; @@ -881,7 +895,7 @@ public class XmlThemeBuilder extends DefaultHandler { case TAG_TRANSFORM: parentElement = mElementStack.peek(); if (parentElement != Element.RENDER_THEME) { - throw new SAXException(UNEXPECTED_ELEMENT + elementName); + throw new SAXException(UNEXPECTED_ELEMENT_TAG_TRANSFORM_PARENT_ELEMENT_MISMATCH + elementName); } return; }