diff --git a/selector/src/commonMain/kotlin/li/songe/selector/Version.kt b/selector/src/commonMain/kotlin/li/songe/selector/Version.kt deleted file mode 100644 index 372a736d5..000000000 --- a/selector/src/commonMain/kotlin/li/songe/selector/Version.kt +++ /dev/null @@ -1,8 +0,0 @@ -package li.songe.selector - -import kotlin.js.ExperimentalJsExport -import kotlin.js.JsExport - -@OptIn(ExperimentalJsExport::class) -@JsExport -const val version = "0.0.6" diff --git a/selector/src/commonMain/kotlin/li/songe/selector/parser/ParserSet.kt b/selector/src/commonMain/kotlin/li/songe/selector/parser/ParserSet.kt index d96661683..e78de7405 100644 --- a/selector/src/commonMain/kotlin/li/songe/selector/parser/ParserSet.kt +++ b/selector/src/commonMain/kotlin/li/songe/selector/parser/ParserSet.kt @@ -198,9 +198,12 @@ internal object ParserSet { ExtSyntaxError.assert(source, i, prefix) val startChar = source[i] i++ + if (i >= source.length) { + ExtSyntaxError.throwError(source, i, "any char") + } var data = "" while (source[i] != startChar) { - if (i == source.length - 1) { + if (i >= source.length - 1) { ExtSyntaxError.assert(source, i, startChar.toString()) break } @@ -442,7 +445,10 @@ internal object ParserSet { val selectorList = mutableListOf>() while (i < source.length && whiteCharParser.prefix.contains(source[i])) { i += whiteCharStrictParser(source, i).length - val combinator = if (combinatorParser.prefix.contains((source[i]))) { + if (i >= source.length) { + break + } + val combinator = if (combinatorParser.prefix.contains(source[i])) { val combinatorResult = combinatorParser(source, i) i += combinatorResult.length i += whiteCharStrictParser(source, i).length diff --git a/selector/src/jvmTest/kotlin/li/songe/selector/ParserTest.kt b/selector/src/jvmTest/kotlin/li/songe/selector/ParserTest.kt index 3c88a9cab..ab057205d 100644 --- a/selector/src/jvmTest/kotlin/li/songe/selector/ParserTest.kt +++ b/selector/src/jvmTest/kotlin/li/songe/selector/ParserTest.kt @@ -72,10 +72,9 @@ class ParserTest { } @Test - fun check_query(){ + fun check_query() { val projectCwd = File("../").absolutePath - val text = - "@TextView[text^='跳过'] + LinearLayout TextView[text*=`跳转`]" + val text = "@TextView[text^='跳过'] + LinearLayout TextView[text*=`跳转`]" val selector = Selector.parse(text) println("selector: $selector") println(selector.trackIndex) @@ -94,8 +93,8 @@ class ParserTest { } } val transform = Transform(getAttr = { node, name -> - if (name=="_id") return@Transform node.id - if (name=="_pid") return@Transform node.pid + if (name == "_id") return@Transform node.id + if (name == "_pid") return@Transform node.pid val value = node.attr[name] ?: return@Transform null if (value is JsonNull) return@Transform null value.intOrNull ?: value.booleanOrNull ?: value.content @@ -106,4 +105,11 @@ class ParserTest { println("target_size: " + targets.size) println(targets.firstOrNull()) } + + @Test + fun check_quote() { +// https://github.com/gkd-kit/inspect/issues/7 + val selector = Selector.parse("a[a=''] ") + println("check_quote:$selector") + } } \ No newline at end of file