diff --git a/MapAnalyzer.jar b/MapAnalyzer.jar index 4e56256..671a2bd 100644 Binary files a/MapAnalyzer.jar and b/MapAnalyzer.jar differ diff --git a/MapDesignerRaster.jar b/MapDesignerRaster.jar index 6307817..0f76093 100644 Binary files a/MapDesignerRaster.jar and b/MapDesignerRaster.jar differ diff --git a/MapDesignerVector.jar b/MapDesignerVector.jar index d8faf9e..bcb768c 100644 Binary files a/MapDesignerVector.jar and b/MapDesignerVector.jar differ diff --git a/build.xml b/build.xml index 74676a6..41c09e4 100644 --- a/build.xml +++ b/build.xml @@ -5,7 +5,7 @@ - + diff --git a/src/apps/MapDesignerVector.java b/src/apps/MapDesignerVector.java index 5e48abe..50bbc7a 100644 --- a/src/apps/MapDesignerVector.java +++ b/src/apps/MapDesignerVector.java @@ -56,6 +56,7 @@ import java.util.List; import java.util.function.BiConsumer; import java.util.function.Consumer; +import static image.SVGMap.escapeHTML; import static java.lang.Double.isNaN; import static java.lang.Math.hypot; import static java.lang.String.format; @@ -378,7 +379,7 @@ public class MapDesignerVector extends MapApplication { } // for non-data Strings, replace "Equirectangular" with the name of the projection else if (elementS instanceof Content) { - elementP = new Content(((Content) elementS).content.replace("Equirectangular", proj.getName())); + elementP = new Content(((Content) elementS).content.replace("Equirectangular", escapeHTML(proj.getName()))); } // anything else doesn't need to be changed with the projection else { diff --git a/src/image/SVGMap.java b/src/image/SVGMap.java index badff08..841ffa1 100644 --- a/src/image/SVGMap.java +++ b/src/image/SVGMap.java @@ -154,15 +154,8 @@ public class SVGMap implements Iterable, SavableImage { @Override public void characters(char[] characters, int start, int length) { // just dump the provided characters into currentFormatString - StringBuilder characterString = new StringBuilder(); - for (int i = 0; i < length; i++) { - char c = characters[start + i]; - if (c >= 128 || c == '\'' || c == '"' || c == '<' || c == '>' || c == '&') // some characters must be escaped here - characterString.append("&#").append((int) c).append(";"); - else - characterString.append(c); - } - elements.add(new Content(characterString.toString())); + elements.add(new Content(escapeHTML( + new String(characters).substring(start, start + length)))); } // @Override /* only available in Java 14+ */ @@ -545,6 +538,19 @@ public class SVGMap implements Iterable, SavableImage { string.append(">"); return string.toString(); } + + + public static String escapeHTML(String raw) { + StringBuilder escaped = new StringBuilder(); + for (int i = 0; i < raw.length(); i ++) { + char c = raw.charAt(i); // don't forget to escape special characters + if (c >= 128 || c == '\'' || c == '"' || c == '<' || c == '>' || c == '&') // some characters must be escaped here + escaped.append(format("&#%d;", (int) c)); + else + escaped.append(c); + } + return escaped.toString(); + } /**