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(",", "[", "]")