Skip to content

Commit 3154322

Browse files
committed
Escaped sequences error fixed
1 parent 8385367 commit 3154322

File tree

10 files changed

+45
-25
lines changed

10 files changed

+45
-25
lines changed

src/iris/json/flow/FlowItem.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ import iris.json.plain.IrisJsonItem
88
*/
99
abstract class FlowItem(protected val tokener: Tokener) : IrisJsonItem() {
1010
abstract fun parse()
11+
fun contentSource(start: Int = 0 , end: Int = 0) = tokener.getSourceSequence(start, end)
1112
}

src/iris/json/flow/FlowObject.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package iris.json.flow
33
import iris.json.JsonEntry
44
import iris.json.JsonItem
55
import iris.json.JsonObject
6+
import iris.json.Util
67
import iris.json.plain.IrisJsonNull
78
import java.util.*
89

@@ -54,7 +55,7 @@ class FlowObject(private val parser: JsonFlowParser) : FlowItem(parser.tokener),
5455
char = tokener.nextChar()
5556
}
5657
if (!(char == '"' || char == '\'')) {
57-
if (char in 'a'..'z' || char in 'A'..'Z') {
58+
if (char != null && Util.isAlpha(char)) {
5859
char = null
5960
tokener.back()
6061
} else

src/iris/json/flow/FlowString.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ class FlowString(tokener: Tokener, val quote: Char) : FlowItem(tokener), JsonStr
5858
'r' -> '\r'
5959
't' -> '\t'
6060
'u' -> 'u'
61-
else -> '-'
61+
else -> ch
6262
}
63-
if (ch != '-') {
63+
//if (ch != '-') {
6464
res.append(data, fromIndex, i - 1)
6565
if (repl == 'u') {
6666
val d = data.subSequence(i + 1, i + 1 + 4).toString().toInt(16)
@@ -70,7 +70,7 @@ class FlowString(tokener: Tokener, val quote: Char) : FlowItem(tokener), JsonStr
7070
res.append(repl)
7171
}
7272
fromIndex = i + 1
73-
}
73+
//}
7474
} else {
7575
if (ch == '\\')
7676
isEscape = true

src/iris/json/flow/Tokener.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ interface Tokener {
1212

1313
fun exception(s: String): IllegalArgumentException
1414

15+
fun getSourceSequence(start: Int = 0, end: Int = 0): CharSequence
16+
1517
fun readString(quote: Char): CharSequence
1618

1719
fun readFieldName(quote: Char?): CharSequence

src/iris/json/flow/TokenerBufferedReader.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,8 @@ class TokenerBufferedReader(private val reader: Reader, private val buffer: Char
7070
buff.append(char)
7171
}
7272
}
73+
74+
override fun getSourceSequence(start: Int, end: Int): CharSequence {
75+
return ""
76+
}
7377
}

src/iris/json/flow/TokenerContentBuildReader.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,4 +57,8 @@ class TokenerContentBuildReader(private val reader: Reader, private val buffer:
5757
override fun back() {
5858
pointer--
5959
}
60+
61+
override fun getSourceSequence(start: Int, end: Int): CharSequence {
62+
return ""
63+
}
6064
}

src/iris/json/flow/TokenerSimpleReader.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,10 @@ class TokenerSimpleReader(private val reader: Reader): TokenerAbstractWithSequen
4949
curCharInc()
5050
}
5151

52+
override fun getSourceSequence(start: Int, end: Int): CharSequence {
53+
return ""
54+
}
55+
5256
override fun exception(s: String): IllegalArgumentException {
5357
TODO(s)
5458
}

src/iris/json/flow/TokenerString.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,17 @@ class TokenerString(source: String) : Tokener {
3838
} while (pointer < len)
3939
}
4040

41+
override fun getSourceSequence(start: Int, end: Int): CharSequence {
42+
return IrisSequenceCharArray(source, start, if (end == 0) source.size else end)
43+
}
44+
4145
override fun exception(s: String): IllegalArgumentException {
4246
return IllegalArgumentException(s + "\nPosition $pointer: " + getPlace())
4347
}
4448

4549
private fun getPlace(): String {
46-
val start = max(0, pointer - 10)
47-
val end = min(pointer + 10, source.size - 1)
50+
val start = max(0, pointer - 20)
51+
val end = min(pointer + 20, source.size - 1)
4852
return '"' + String(source.copyOfRange(start, end)) + '"'
4953
}
5054

@@ -54,11 +58,11 @@ class TokenerString(source: String) : Tokener {
5458
val start = this.pointer
5559
do {
5660
val char = source[pointer++]
57-
if (char == '\\')
58-
escaping = true
59-
else if (escaping) {
61+
if (escaping) {
6062
escaping = false
61-
} else if (char == quote) {
63+
} else if (char == '\\')
64+
escaping = true
65+
else if (char == quote) {
6266
break
6367
}
6468
} while (pointer < len)

src/iris/json/plain/IrisJsonString.kt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,19 +44,19 @@ class IrisJsonString(private val data: IrisSequence) : IrisJsonItem(), JsonStrin
4444
'r' -> '\r'
4545
't' -> '\t'
4646
'u' -> 'u'
47-
else -> '-'
47+
else -> ch
4848
}
49-
if (ch != '-') {
50-
res.append(data, fromIndex, i - 1)
51-
if (repl == 'u') {
52-
val d = data.subSequence(i + 1, i + 1 + 4).toString().toInt(16)
53-
res.appendCodePoint(d)
54-
i += 4
55-
} else {
56-
res.append(repl)
57-
}
58-
fromIndex = i + 1
49+
//if (ch != '-') {
50+
res.append(data, fromIndex, i - 1)
51+
if (repl == 'u') {
52+
val d = data.subSequence(i + 1, i + 1 + 4).toString().toInt(16)
53+
res.appendCodePoint(d)
54+
i += 4
55+
} else {
56+
res.append(repl)
5957
}
58+
fromIndex = i + 1
59+
//}
6060
} else {
6161
if (ch == '\\')
6262
isEscape = true

src/iris/json/plain/JsonPlainParser.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -259,11 +259,11 @@ class JsonPlainParser(source: String, private val configuration: Configuration =
259259
var char: Char
260260
do {
261261
char = source[pointer++]
262-
if (char == '\\')
263-
escaping = true
264-
else if (escaping) {
262+
if (escaping) {
265263
escaping = false
266-
} else if (char == quote) {
264+
} else if (char == '\\')
265+
escaping = true
266+
else if (char == quote) {
267267
break
268268
}
269269
} while (pointer < len)

0 commit comments

Comments
 (0)