diff --git a/.idea/other.xml b/.idea/other.xml
index 0d3a1fb..4604c44 100644
--- a/.idea/other.xml
+++ b/.idea/other.xml
@@ -179,17 +179,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/glow-compose/build.gradle.kts b/glow-compose/build.gradle.kts
index 26f288d..a61632b 100644
--- a/glow-compose/build.gradle.kts
+++ b/glow-compose/build.gradle.kts
@@ -87,7 +87,7 @@ afterEvaluate {
from(components["release"])
groupId = "com.naulian"
artifactId = "glow-compose"
- version = "1.6.3"
+ version = "1.6.4"
}
}
}
diff --git a/glow-compose/src/main/java/com/naulian/glow_compose/mdx/Mdx.kt b/glow-compose/src/main/java/com/naulian/glow_compose/mdx/Mdx.kt
index 5372206..0b56c08 100644
--- a/glow-compose/src/main/java/com/naulian/glow_compose/mdx/Mdx.kt
+++ b/glow-compose/src/main/java/com/naulian/glow_compose/mdx/Mdx.kt
@@ -55,7 +55,7 @@ import com.naulian.modify.table.Table
fun MdxBlock(
modifier: Modifier = Modifier,
source: String,
- onClickLink: (String) -> Unit = {},
+ onClickLink: ((String) -> Unit)? = null,
components: MdxComponents = mdxComponents(),
contentSpacing: Dp = 12.dp
) {
@@ -76,7 +76,7 @@ fun MdxBlock(
}
@Composable
-fun HandleNode(node: MdxNode, components: MdxComponents, onClickLink: (String) -> Unit) {
+fun HandleNode(node: MdxNode, components: MdxComponents, onClickLink: ((String) -> Unit)?) {
node.children.forEach {
when (it.type) {
MdxType.PARAGRAPH -> components.paragraph(it, onClickLink)
@@ -153,7 +153,7 @@ data class MdxComponents(
style: TextStyle,
onClickLink: (String) -> Unit
) -> Unit,
- val paragraph: @Composable (MdxNode, onClickLink: (String) -> Unit) -> Unit,
+ val paragraph: @Composable (MdxNode, onClickLink: ((String) -> Unit)?) -> Unit,
val header: @Composable (MdxNode) -> Unit,
val quote: @Composable (MdxNode) -> Unit,
val codeBlock: @Composable (MdxNode) -> Unit,
@@ -189,7 +189,7 @@ fun mdxComponents(
text: @Composable (
node: MdxNode,
style: TextStyle,
- onClickLink: (String) -> Unit
+ onClickLink: ((String) -> Unit)?
) -> Unit = { node, style, onClickLink ->
when {
node.children.isEmpty() && node.literal.isBlank() -> {}
@@ -202,12 +202,16 @@ fun mdxComponents(
paragraphContent.annotatedString.getStringAnnotations(
start = offset,
end = offset
- ).firstOrNull()?.let { paragraphContent.linkMap[it.tag]?.let(onClickLink) }
+ ).firstOrNull()?.let {
+ paragraphContent.linkMap[it.tag]?.let { url ->
+ onClickLink?.invoke(url)
+ }
+ }
}
}
}
},
- paragraph: @Composable (MdxNode, onClickLink: (String) -> Unit) -> Unit = { node, onClickLink ->
+ paragraph: @Composable (MdxNode, onClickLink: ((String) -> Unit)?) -> Unit = { node, onClickLink ->
text(node, textStyle, onClickLink)
},
header: @Composable (MdxNode) -> Unit = { node ->
diff --git a/glow-core/build.gradle.kts b/glow-core/build.gradle.kts
index 3d42ec5..0b84c97 100644
--- a/glow-core/build.gradle.kts
+++ b/glow-core/build.gradle.kts
@@ -51,7 +51,7 @@ afterEvaluate {
from(components["release"])
groupId = "com.naulian"
artifactId = "glow-core"
- version = "1.6.3"
+ version = "1.6.4"
}
}
}
diff --git a/glow-core/src/main/java/com/naulian/glow_core/Lexer.kt b/glow-core/src/main/java/com/naulian/glow_core/Lexer.kt
index e5b3a85..7000ba0 100644
--- a/glow-core/src/main/java/com/naulian/glow_core/Lexer.kt
+++ b/glow-core/src/main/java/com/naulian/glow_core/Lexer.kt
@@ -6,10 +6,27 @@ private val symbols = listOf(
'<', ';', '+', '=', '[', ']', '/', '\'', '\"',
)
+abstract class BaseLexer {
+ abstract fun tokenize(): List
+ abstract fun next(): Token
+}
+
class Lexer(private val source: CharSequence) {
private var cursor: Int = 0
private fun char() = if (cursor < source.length) source[cursor] else Char.MIN_VALUE
+ fun tokenize(): List {
+ val tokens = mutableListOf()
+ var token = nextToken()
+
+ while (token.type != Type.EOF && token.type != Type.ILLEGAL) {
+ tokens.add(token)
+ token = nextToken()
+ }
+
+ return tokens
+ }
+
fun nextToken(): Token {
return when (val c = char()) {
' ' -> createSpaceToken()
diff --git a/glow-core/src/main/java/com/naulian/glow_core/Tokenizer.kt b/glow-core/src/main/java/com/naulian/glow_core/Tokenizer.kt
deleted file mode 100644
index ebbdfff..0000000
--- a/glow-core/src/main/java/com/naulian/glow_core/Tokenizer.kt
+++ /dev/null
@@ -1,16 +0,0 @@
-package com.naulian.glow_core
-
-class Tokenizer(private val input: String) {
- fun tokenize(): List {
- val lexer = Lexer(input)
- val tokens = mutableListOf()
- var token = lexer.nextToken()
-
- while (token.type != Type.EOF && token.type != Type.ILLEGAL) {
- tokens.add(token)
- token = lexer.nextToken()
- }
-
- return tokens
- }
-}
\ No newline at end of file
diff --git a/glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KotlinTokenizer.kt b/glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KtLexer.kt
similarity index 84%
rename from glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KotlinTokenizer.kt
rename to glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KtLexer.kt
index 56d48de..86aa0fb 100644
--- a/glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KotlinTokenizer.kt
+++ b/glow-core/src/main/java/com/naulian/glow_core/lang/kotlin/KtLexer.kt
@@ -1,7 +1,7 @@
package com.naulian.glow_core.lang.kotlin
+import com.naulian.glow_core.Lexer
import com.naulian.glow_core.Token
-import com.naulian.glow_core.Tokenizer
import com.naulian.glow_core.Type
private val kotlinKeywords = listOf(
@@ -14,8 +14,8 @@ private val kotlinKeywords = listOf(
"typealias", "typeof", "val", "var", "when", "where", "while"
)
-class KTokenizer(input: String) {
- private var basicTokens: List = Tokenizer(input).tokenize()
+class KtLexer(input: String) {
+ private var basicTokens: List = Lexer(input).tokenize()
private var cursor = 0
fun tokenize(): List {
@@ -99,16 +99,16 @@ class KTokenizer(input: String) {
val subList = basicTokens.subList(from, cursor)
return Token(Type.STRING, subList.joinToString(""))
}
-}
-
-private fun argumentToken(token: Token): Token {
- return if (token.type != Type.IDENTIFIER) token
- else token.copy(type = Type.ARGUMENT)
-}
-
-private fun numberToken(token: Token): Token {
- if (token.type != Type.NUMBER) return token
- return if (token.value.contains("L")) token.copy(type = Type.VALUE_LONG)
- else if (token.value.contains("f")) token.copy(type = Type.VALUE_FLOAT)
- else token.copy(type = Type.VALUE_INT)
+
+ private fun argumentToken(token: Token): Token {
+ return if (token.type != Type.IDENTIFIER) token
+ else token.copy(type = Type.ARGUMENT)
+ }
+
+ private fun numberToken(token: Token): Token {
+ if (token.type != Type.NUMBER) return token
+ return if (token.value.contains("L")) token.copy(type = Type.VALUE_LONG)
+ else if (token.value.contains("f")) token.copy(type = Type.VALUE_FLOAT)
+ else token.copy(type = Type.VALUE_INT)
+ }
}
\ No newline at end of file
diff --git a/glow/build.gradle.kts b/glow/build.gradle.kts
index dc6992c..8c15fc6 100644
--- a/glow/build.gradle.kts
+++ b/glow/build.gradle.kts
@@ -53,7 +53,7 @@ afterEvaluate {
from(components["release"])
groupId = "com.naulian"
artifactId = "glow"
- version = "1.6.3"
+ version = "1.6.4"
}
}
}