Skip to content

Commit 6b76561

Browse files
authored
Merge pull request #16 from nachg/issue12
closes #12
2 parents 56cef5d + a65f1e3 commit 6b76561

35 files changed

+312
-109
lines changed

src/main/kotlin/org/nachg/xpathqs/core/selector/Block.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import org.nachg.xpathqs.core.reflection.freeze
44
import org.nachg.xpathqs.core.reflection.setBase
55
import org.nachg.xpathqs.core.selector.base.ISelector
66
import org.nachg.xpathqs.core.selector.base.SelectorState
7+
import org.nachg.xpathqs.core.selector.extensions.clone
78
import org.nachg.xpathqs.core.selector.selector.Selector
89
import org.nachg.xpathqs.core.selector.selector.SelectorProps
910

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.nachg.xpathqs.core.selector
2+
3+
/**
4+
* Class for storing global properties
5+
*/
6+
object Global {
7+
//inner text attribute for the Web-based selectors
8+
var TEXT_ARG = "text()"
9+
}

src/main/kotlin/org/nachg/xpathqs/core/selector/XpathSelector.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.nachg.xpathqs.core.selector.base.ISelector
66
import org.nachg.xpathqs.core.selector.base.SelectorState
77

88
class XpathSelector(
9-
val xpath: String = "",
9+
private val xpath: String = "",
1010

1111
state: SelectorState = SelectorState.INIT,
1212
base: ISelector = NullSelector(),
Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,15 @@
11
package org.nachg.xpathqs.core.selector.args
22

33
open class KVSelectorArg(
4-
protected val k: String,
5-
protected val v: String,
4+
open val k: String,
5+
open val v: String,
66
joinType: JoinType = JoinType.NONE
7-
) : SelectorArg(
8-
value = "$k=$v",
9-
joinType
7+
) : ValueArg(
8+
joinType = joinType
109
) {
10+
override val value: String
11+
get() = "$k=$v"
12+
1113
override val key: String
1214
get() = k
13-
}
15+
}

src/main/kotlin/org/nachg/xpathqs/core/selector/args/SelectorArgs.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.nachg.xpathqs.core.selector.args
22

33
class SelectorArgs(
4-
private val args: HashMap<String, SelectorArg> = HashMap()
4+
private val args: HashMap<String, ValueArg> = HashMap()
55
) : Cloneable {
66
fun toXpath(): String {
77
if (args.isEmpty()) return ""
@@ -19,7 +19,7 @@ class SelectorArgs(
1919
return "[$res]"
2020
}
2121

22-
fun add(arg: SelectorArg): SelectorArgs {
22+
fun add(arg: ValueArg): SelectorArgs {
2323
if (args.isNotEmpty() && arg.isNone) {
2424
arg.joinType = JoinType.AND
2525
}
@@ -29,6 +29,6 @@ class SelectorArgs(
2929

3030
@Suppress("UNCHECKED_CAST")
3131
public override fun clone(): SelectorArgs {
32-
return SelectorArgs(args.clone() as HashMap<String, SelectorArg>)
32+
return SelectorArgs(args.clone() as HashMap<String, ValueArg>)
3333
}
3434
}

src/main/kotlin/org/nachg/xpathqs/core/selector/args/SelectorArg.kt renamed to src/main/kotlin/org/nachg/xpathqs/core/selector/args/ValueArg.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.nachg.xpathqs.core.selector.args
22

3-
open class SelectorArg(
4-
internal val value: String,
3+
open class ValueArg(
4+
internal open val value: String = "",
55
internal var joinType: JoinType = JoinType.NONE
66
) {
77
fun toXpath(): String {
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package org.nachg.xpathqs.core.selector.args.decorators
2+
3+
import org.nachg.xpathqs.core.selector.args.KVSelectorArg
4+
5+
class CommaDecorator(private val wrapper: KVSelectorArg) : KVSelectorArg(wrapper.k, wrapper.v) {
6+
override val v: String
7+
get() = escape("'${wrapper.v}'")
8+
9+
companion object {
10+
fun escape(str: String): String {
11+
val value = str.removePrefix("'").removeSuffix("'")
12+
if (value.contains("'")) {
13+
return "concat('${value.replace("'", "',\"'\",'")}')"
14+
}
15+
return str
16+
}
17+
}
18+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package org.nachg.xpathqs.core.selector.args.decorators
2+
3+
import org.nachg.xpathqs.core.selector.args.KVSelectorArg
4+
import org.nachg.xpathqs.core.selector.args.ValueArg
5+
6+
class ContainsDecorator(private val wrapper: KVSelectorArg) : ValueArg() {
7+
override val value: String
8+
get() = "contains(${wrapper.k}, ${wrapper.v})"
9+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package org.nachg.xpathqs.core.selector.args.decorators
2+
3+
import org.nachg.xpathqs.core.selector.args.KVSelectorArg
4+
5+
class KVNormalizeSpaceDecorator(private val wrapper: KVSelectorArg) : KVSelectorArg(wrapper.k, wrapper.v) {
6+
override val v: String
7+
get() = "normalize-space(${wrapper.v})"
8+
}

src/main/kotlin/org/nachg/xpathqs/core/selector/compose/ComposeSelectorProps.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ package org.nachg.xpathqs.core.selector.compose
33
import org.nachg.xpathqs.core.selector.args.SelectorArgs
44
import org.nachg.xpathqs.core.selector.base.BaseSelectorProps
55
import org.nachg.xpathqs.core.selector.base.ISelector
6-
import org.nachg.xpathqs.core.selector.clone
6+
import org.nachg.xpathqs.core.selector.extensions.clone
77

88
class ComposeSelectorProps(
99
internal val selectors: ArrayList<ISelector> = ArrayList(),

0 commit comments

Comments
 (0)