Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import androidx.activity.ComponentActivity
import androidx.core.content.res.ResourcesCompat
import xyz.wingio.syntakts.android.render
import xyz.wingio.syntakts.android.style.DefaultFontResolver
import xyz.wingio.syntakts.style.Color
import xyz.wingio.syntakts.syntakts

class AndroidTestActivity : ComponentActivity() {

Expand All @@ -23,9 +25,12 @@ class AndroidTestActivity : ComponentActivity() {
`println("hi")`
""".trimIndent()

val syntaks = syntakts {
addTestRules(usernameColor = Color.MAGENTA)
}
findViewById<TextView>(R.id.test_text).render(
text = testString,
syntakts = TestSyntakts,
syntakts = syntaks,
context = Context(this),
enableClickable = true
)
Expand Down
15 changes: 14 additions & 1 deletion demo/src/main/java/xyz/wingio/syntakts/demo/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.Placeholder
import androidx.compose.ui.text.PlaceholderVerticalAlign
Expand All @@ -37,7 +38,10 @@ import xyz.wingio.syntakts.demo.ui.theme.SyntaktsTheme

import xyz.wingio.syntakts.compose.material3.clickable.ClickableText
import xyz.wingio.syntakts.compose.rememberRendered
import xyz.wingio.syntakts.compose.rememberSyntakts
import xyz.wingio.syntakts.compose.style.DefaultFontResolver
import xyz.wingio.syntakts.compose.style.toSyntaktsColor
import kotlin.random.Random

class MainActivity : ComponentActivity() {

Expand All @@ -52,6 +56,7 @@ class MainActivity : ComponentActivity() {
setContent {
SyntaktsTheme {
var text by remember { mutableStateOf("**bold** *italic* __underline__ ~~strikethrough~~ `code`") }
var usernameColor by remember { mutableStateOf(Color.Magenta) }

// A surface container using the 'background' color from the theme
Surface(
Expand All @@ -65,8 +70,11 @@ class MainActivity : ComponentActivity() {
.padding(16.dp)
.fillMaxSize()
) {
val syntaks = rememberSyntakts(usernameColor) {
addTestRules(usernameColor.toSyntaktsColor())
}
ClickableText(
text = TestSyntakts.rememberRendered(text, Context(LocalContext.current)),
text = syntaks.rememberRendered(text, Context(LocalContext.current)),
inlineContent = mapOf(
"heart" to InlineTextContent(
Placeholder(LocalTextStyle.current.fontSize, LocalTextStyle.current.fontSize, PlaceholderVerticalAlign.Center)
Expand All @@ -90,6 +98,11 @@ class MainActivity : ComponentActivity() {
},
modifier = Modifier.weight(1f).fillMaxWidth()
)
Button(
onClick = { usernameColor = Color(Random.nextLong()) }
) {
Text("Change username color")
}
Button(
onClick = { startActivity(atIntent) }
) {
Expand Down
9 changes: 5 additions & 4 deletions demo/src/main/java/xyz/wingio/syntakts/demo/TestSyntakts.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,21 @@ package xyz.wingio.syntakts.demo

import android.content.Context as AndroidContext
import android.widget.Toast
import xyz.wingio.syntakts.Syntakts
import xyz.wingio.syntakts.compose.style.appendInlineContent
import xyz.wingio.syntakts.markdown.addMarkdownRules
import xyz.wingio.syntakts.style.Color
import xyz.wingio.syntakts.style.Style
import xyz.wingio.syntakts.syntakts

val TestSyntakts = syntakts<Context> {
fun Syntakts.Builder<Context>.addTestRules(usernameColor: Color) {

rule("<@([0-9]+)>") { result, ctx ->
val username = ctx.userMap[result.groupValues[1]] ?: "Unknown"
appendClickable(
"@$username",
Style(
color = Color.MAGENTA,
background = Color.MAGENTA withOpacity 0.2f
color = usernameColor,
background = usernameColor withOpacity 0.2f
),
onLongClick = {
Toast.makeText(ctx.androidContext, "Mention long clicked", Toast.LENGTH_SHORT).show()
Expand All @@ -41,6 +41,7 @@ val TestSyntakts = syntakts<Context> {
}

addMarkdownRules()

}

data class Context(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,33 @@ import xyz.wingio.syntakts.syntakts
@Composable
public fun <C> rememberSyntakts(builder: Syntakts.Builder<C>.() -> Unit): Syntakts<C> = remember { syntakts(builder) }

@Composable
public fun <C> rememberSyntakts(
key1: Any?,
builder: Syntakts.Builder<C>.() -> Unit
): Syntakts<C> = remember(key1, builder) { syntakts(builder) }

@Composable
public fun <C> rememberSyntakts(
key1: Any?,
key2: Any?,
builder: Syntakts.Builder<C>.() -> Unit
): Syntakts<C> = remember(key1, key2) { syntakts(builder) }

@Composable
public fun <C> rememberSyntakts(
key1: Any?,
key2: Any?,
key3: Any?,
builder: Syntakts.Builder<C>.() -> Unit
): Syntakts<C> = remember(key1, key2, key3) { syntakts(builder) }

@Composable
public fun <C> rememberSyntakts(
vararg keys: Any?,
builder: Syntakts.Builder<C>.() -> Unit
): Syntakts<C> = remember(*keys) { syntakts(builder) }
Comment on lines +41 to +66

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't all of these be inlined?


/**
* Parse and render the given [text] using the defined rules into an [AnnotatedString]
* ---
Expand Down Expand Up @@ -81,7 +108,7 @@ public fun <C> Syntakts<C>.rememberRendered(
): AnnotatedString {
val builder = remember { AnnotatedStyledTextBuilder(fontResolver = fontResolver) }

LaunchedEffect(text, context) {
LaunchedEffect(this, text, context) {
builder.clear()
ClickHandlerStore.clearForBuilder(builder.id)
}
Expand All @@ -92,7 +119,7 @@ public fun <C> Syntakts<C>.rememberRendered(
}
}

return remember(text, context, fontResolver) {
return remember(this, text, context, fontResolver) {
render(text, context, fontResolver, builder)
}
}
Expand Down
Loading