Krill output: escape URLs in target refs

Change-Id: Ibe431def22a51242b0a07a8894e468c655376b1a
diff --git a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
index ef10aa6..acefd97 100644
--- a/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
+++ b/app/src/main/kotlin/de/ids_mannheim/korapxmltools/KorapXmlTool.kt
@@ -2941,7 +2941,7 @@
                         val attrAnnotation = if (value.isEmpty()) {
                             "@:dereko/s:$key\$<b>17<s>${span.depth}<i>${span.tokenTo}"
                         } else {
-                            "@:dereko/s:$key:$value\$<b>17<s>${span.depth}<i>${span.tokenTo}"
+                            "@:dereko/s:$key:${value.escapeKrillAttribute()}\$<b>17<s>${span.depth}<i>${span.tokenTo}"
                         }
                         tokenAnnotations.add(jsonString(attrAnnotation))
                     }
@@ -2960,7 +2960,7 @@
                         val attrAnnotation = if (value.isEmpty()) {
                             "@:dereko/s:$key\$<b>17<s>${span.depth}<i>${span.tokenTo}"
                         } else {
-                            "@:dereko/s:$key:$value\$<b>17<s>${span.depth}<i>${span.tokenTo}"
+                            "@:dereko/s:$key:${value.escapeKrillAttribute()}\$<b>17<s>${span.depth}<i>${span.tokenTo}"
                         }
                         tokenAnnotations.add(jsonString(attrAnnotation))
                     }
@@ -3121,6 +3121,16 @@
     return sb.toString()
 }
 
+// Escape special characters in Krill attribute values
+// These characters have special meaning in the Krill annotation format
+fun String.escapeKrillAttribute(): String {
+    return this.replace("#", "%23")
+        .replace("$", "%24")
+        .replace(":", "%3A")
+        .replace("<", "%3C")
+        .replace(">", "%3E")
+}
+
 fun jsonString(value: String): String = "\"${value.escapeJson()}\""
 
 fun jsonArray(items: List<String>): String = items.joinToString(",", "[", "]")