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