[HeanCms] Fixes
parent
7829a2ad3b
commit
3463c8a49e
@ -0,0 +1,38 @@
|
||||
package org.koitharu.kotatsu.parsers.util.json
|
||||
|
||||
fun String.unescapeJson(): String {
|
||||
val builder = StringBuilder()
|
||||
var i = 0
|
||||
while (i < length) {
|
||||
val delimiter = this[i]
|
||||
i++ // consume letter or backslash
|
||||
if (delimiter == '\\' && i < length) {
|
||||
val ch = this[i]
|
||||
i++
|
||||
|
||||
when (ch) {
|
||||
'\\', '/', '"', '\'' -> builder.append(ch)
|
||||
'n' -> builder.append('\n')
|
||||
'r' -> builder.append('\r')
|
||||
't' -> builder.append('\t')
|
||||
'b' -> builder.append('\b')
|
||||
'u' -> {
|
||||
val hex = StringBuilder(4)
|
||||
require(i + 4 <= length) { "Not enough unicode digits!" }
|
||||
for (x in substring(i, i + 4)) {
|
||||
require(x.isLetterOrDigit()) { "Bad character in unicode escape" }
|
||||
hex.append(x.lowercase())
|
||||
}
|
||||
i += 4 // consume those four digits.
|
||||
val code = hex.toString().toInt(16)
|
||||
builder.append(code.toChar())
|
||||
}
|
||||
|
||||
else -> throw IllegalArgumentException("Illegal escape sequence: \\$ch")
|
||||
}
|
||||
} else {
|
||||
builder.append(delimiter)
|
||||
}
|
||||
}
|
||||
return builder.toString()
|
||||
}
|
||||
Loading…
Reference in New Issue