Kotlin multiplatform String markup library, inspired by SRML. Thistle is a common parser which produces an AST that can be rendered to a variety of platform-specific UIs.
// Android
val thistle = ThistleParser(AndroidDefaults(context))
binding.textView.applyStyledText(
thistle,
"Text with {{b}}bold{{/b}} or {{foreground color=#ff0000}}red{{/foreground}} styles"
)
// Compose (both Android and Desktop)
MaterialTheme {
ProvideThistle {
StyledText("Text with {{b}}bold{{/b}} or {{foreground color=#ff0000}}red{{/foreground}} styles")
}
}
// Console (ANSI codes)
val thistle = ThistleParser(ConsoleDefaults())
printlnStyledText(
thistle,
"Text with {{b}}bold{{/b}} or {{red}}red{{/red}} styles"
)
Android | Compose UI | Console |
---|---|---|
Source | Source | Source |
Platform | Markup Target |
---|---|
Android | Spannable |
Compose UI | AnnotatedString |
Console | ANSI Codes |
iOS | NSAttributedString (TODO) |
JS | HTML DOM (TODO) |
repositories {
mavenCentral()
}
// for plain JVM or Android projects
dependencies {
implementation("io.github.copper-leaf:thistle-core:{{site.version}}")
implementation("io.github.copper-leaf:thistle-android:{{site.version}}")
implementation("io.github.copper-leaf:thistle-compose-ui:{{site.version}}")
implementation("io.github.copper-leaf:thistle-console:{{site.version}}")
}
// for multiplatform projects
kotlin {
sourceSets {
val commonMain by getting {
dependencies {
implementation("io.github.copper-leaf:thistle-core:{{site.version}}")
implementation("io.github.copper-leaf:thistle-android:{{site.version}}")
implementation("io.github.copper-leaf:thistle-compose-ui:{{site.version}}")
implementation("io.github.copper-leaf:thistle-console:{{site.version}}")
}
}
}
}
See the website for detailed documentation and usage instructions.
Thistle is licensed under the BSD 3-Clause License, see LICENSE.md.