├── ocaml ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── ocaml │ │ ├── rule │ │ ├── StringRule.kt │ │ ├── BooleanRule.kt │ │ ├── ModuleRule.kt │ │ ├── CommentRule.kt │ │ ├── NumberRule.kt │ │ └── KeywordRule.kt │ │ ├── OCamlRuleBook.kt │ │ └── colorscheme │ │ ├── DarkBackgroundColorSchemeWithSpanStyle.kt │ │ └── DarkBackgroundColorScheme.kt └── build.gradle.kts ├── .github ├── reaction.yml ├── release-drafter.yml ├── dependabot.yml ├── ISSUE_TEMPLATE │ ├── feature_request.md │ └── bug_report.md ├── FUNDING.yml ├── config.yml ├── stale.yml └── workflows │ └── build.yml ├── .jitpack.yml ├── app ├── .gitignore ├── src │ ├── test │ │ └── java │ │ │ └── de │ │ │ └── markusressel │ │ │ └── kodehighlighter │ │ │ └── demo │ │ │ └── SampleTest.kt │ ├── main │ │ ├── res │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ │ ├── colors.xml │ │ │ │ ├── styles.xml │ │ │ │ └── strings.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── raw │ │ │ │ ├── json_example │ │ │ │ ├── markdown_sample.md │ │ │ │ ├── java_sample │ │ │ │ └── ocaml_example.ml │ │ │ ├── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ │ └── drawable │ │ │ │ └── ic_launcher_background.xml │ │ ├── java │ │ │ └── de │ │ │ │ └── markusressel │ │ │ │ └── kodehighlighter │ │ │ │ └── demo │ │ │ │ ├── UiEvent.kt │ │ │ │ ├── theme │ │ │ │ ├── Color.kt │ │ │ │ ├── Shape.kt │ │ │ │ ├── Type.kt │ │ │ │ └── Theme.kt │ │ │ │ ├── Extensions.kt │ │ │ │ ├── MainViewModel.kt │ │ │ │ ├── UiState.kt │ │ │ │ └── MainActivityCompose.kt │ │ └── AndroidManifest.xml │ └── androidTest │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── demo │ │ └── PerformanceTest.kt └── build.gradle.kts ├── core ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ ├── res │ │ └── values │ │ │ ├── strings.xml │ │ │ └── library_kodehighlighter_strings.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── core │ │ ├── rule │ │ ├── RuleMatch.kt │ │ ├── RuleHelper.kt │ │ └── LanguageRule.kt │ │ ├── RuleMatches.kt │ │ ├── colorscheme │ │ └── ColorScheme.kt │ │ ├── util │ │ ├── DebouncedTextWatcher.kt │ │ ├── StatefulSpannableHighlighter.kt │ │ ├── AnnotatedStringHighlighter.kt │ │ ├── SpannableHighlighter.kt │ │ └── EditTextHighlighter.kt │ │ ├── LanguageRuleBook.kt │ │ └── ui │ │ ├── KodeTextFieldColors.kt │ │ ├── KodeText.kt │ │ └── KodeTextField.kt └── build.gradle.kts ├── java ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── java │ │ ├── rule │ │ ├── AnnotationRule.kt │ │ ├── ClassKeywordRule.kt │ │ ├── FinalKeywordRule.kt │ │ ├── ImportKeywordRule.kt │ │ ├── PackageKeywordRule.kt │ │ ├── ReturnKeywordRule.kt │ │ ├── StaticKeywordRule.kt │ │ ├── TypeKeywordRule.kt │ │ ├── CommentRule.kt │ │ └── VisibilityKeywordRule.kt │ │ ├── JavaRuleBook.kt │ │ └── colorscheme │ │ ├── DarkBackgroundColorSchemeWithSpanStyle.kt │ │ └── DarkBackgroundColorScheme.kt └── build.gradle.kts ├── kotlin ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── kotlin │ │ ├── rule │ │ ├── AnnotationRule.kt │ │ ├── OpenKeywordRule.kt │ │ ├── NumberRule.kt │ │ ├── FunctionKeywordRule.kt │ │ ├── ImportKeywordRule.kt │ │ ├── PackageKeywordRule.kt │ │ ├── ReturnKeywordRule.kt │ │ ├── CommentRule.kt │ │ ├── VarKeywordRule.kt │ │ ├── ClassKeywordRule.kt │ │ └── VisibilityKeywordRule.kt │ │ ├── KotlinRuleBook.kt │ │ └── colorscheme │ │ ├── DarkBackgroundColorSchemeWithSpanStyle.kt │ │ └── DarkBackgroundColorScheme.kt └── build.gradle.kts ├── markdown ├── .gitignore ├── src │ ├── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ │ └── de │ │ │ └── markusressel │ │ │ └── kodehighlighter │ │ │ └── language │ │ │ └── markdown │ │ │ ├── rule │ │ │ ├── BoldRule.kt │ │ │ ├── CodeLineRule.kt │ │ │ ├── StrikeRule.kt │ │ │ ├── ImageLinkRule.kt │ │ │ ├── TextLinkRule.kt │ │ │ ├── ItalicRule.kt │ │ │ ├── HeadingRule.kt │ │ │ ├── ListRule.kt │ │ │ └── CodeInlineRule.kt │ │ │ ├── MarkdownRuleBook.kt │ │ │ └── colorscheme │ │ │ ├── DarkBackgroundColorScheme.kt │ │ │ └── DarkBackgroundColorSchemeWithSpanStyle.kt │ └── test │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── markdown │ │ └── SyntaxHighlighterTest.kt └── build.gradle.kts ├── json ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── json │ │ ├── rule │ │ ├── KeywordRule.kt │ │ ├── StringRule.kt │ │ └── NumericRule.kt │ │ ├── JsonRuleBook.kt │ │ └── colorscheme │ │ ├── DarkBackgroundColorSchemeWithSpanStyle.kt │ │ └── DarkBackgroundColorScheme.kt └── build.gradle.kts ├── python ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── de │ │ └── markusressel │ │ └── kodehighlighter │ │ └── language │ │ └── python │ │ ├── rule │ │ ├── MagicRule.kt │ │ ├── DecoratorRule.kt │ │ ├── ExceptRule.kt │ │ ├── SelfKeywordRule.kt │ │ ├── DefKeyword.kt │ │ ├── ReturnKeywordRule.kt │ │ ├── ClassKeywordRule.kt │ │ ├── TypeKeywordRule.kt │ │ ├── OtherKeywordsRule.kt │ │ ├── CommentRule.kt │ │ └── InternalFunctionsRule.kt │ │ ├── PythonRuleBook.kt │ │ └── colorscheme │ │ ├── DarkBackgroundColorScheme.kt │ │ └── DarkBackgroundColorSchemeWithSpanStyle.kt └── build.gradle.kts ├── .ci ├── debug.keystore ├── notify-matrix.sh ├── notify-telegram.sh └── notify.sh ├── .gitignore ├── gradle ├── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties └── libs.versions.toml ├── Makefile ├── settings.gradle.kts ├── gradle.properties ├── LICENSE ├── gradlew.bat ├── gradlew └── README.md /ocaml/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /.github/reaction.yml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.jitpack.yml: -------------------------------------------------------------------------------- 1 | jdk: openjdk17 -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /core/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /java/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /kotlin/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /markdown/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /core/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /java/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /json/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /kotlin/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /ocaml/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /python/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /markdown/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /.ci/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/.ci/debug.keystore -------------------------------------------------------------------------------- /app/src/test/java/de/markusressel/kodehighlighter/demo/SampleTest.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.demo 2 | 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .idea 3 | .gradle 4 | /local.properties 5 | .DS_Store 6 | build 7 | /captures 8 | .externalNativeBuild 9 | -------------------------------------------------------------------------------- /core/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | kodehighlighter_core 3 | 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/markusressel/KodeHighlighter/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #008577 4 | #00574B 5 | #D81B60 6 | 7 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | categories: 2 | - title: 🚀 Features and ✨ Enhancements 3 | label: enhancement 4 | - title: 🐛 Bugfixes 5 | label: bug 6 | change-template: "* $TITLE (#$NUMBER) by @$AUTHOR" 7 | template: | 8 | ## What’s Changed 9 | 10 | $CHANGES 11 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Jun 11 10:38:52 CEST 2020 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.0.0-all.zip 7 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | 2 | 3 | test: 4 | ./gradlew app:assembleDebug --stacktrace 5 | 6 | unittest: 7 | ./gradlew core:testDebugUnitTest --stacktrace 8 | 9 | apk: 10 | ./gradlew app:assembleDebug --stacktrace 11 | 12 | app: apk 13 | build: apk 14 | 15 | publish: 16 | ./gradlew publishMavenPublicationToMavenLocal -------------------------------------------------------------------------------- /app/src/main/java/de/markusressel/kodehighlighter/demo/UiEvent.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.demo 2 | 3 | sealed class UiEvent { 4 | data class ViewTypeSelected(val viewType: ViewType) : UiEvent() 5 | data class LanguageExampleSelected(val languageExample: LanguageExample) : UiEvent() 6 | } 7 | -------------------------------------------------------------------------------- /core/src/main/java/de/markusressel/kodehighlighter/core/rule/RuleMatch.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.core.rule 2 | 3 | /** 4 | * Helper object to keep reference to the properties of a 5 | * matching segment found by a [LanguageRule] 6 | */ 7 | data class RuleMatch(val startIndex: Int, val endIndex: Int) -------------------------------------------------------------------------------- /app/src/main/java/de/markusressel/kodehighlighter/demo/theme/Color.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.demo.theme 2 | 3 | import androidx.compose.ui.graphics.Color 4 | 5 | val Purple200 = Color(0xFFBB86FC) 6 | val Purple500 = Color(0xFF6200EE) 7 | val Purple700 = Color(0xFF3700B3) 8 | val Teal200 = Color(0xFF03DAC5) -------------------------------------------------------------------------------- /app/src/main/java/de/markusressel/kodehighlighter/demo/Extensions.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.demo 2 | 3 | import android.content.res.Resources 4 | import androidx.annotation.RawRes 5 | 6 | fun Resources.readResourceFileAsText(@RawRes resourceId: Int) = 7 | openRawResource(resourceId).bufferedReader().readText() -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.ci/notify-matrix.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | MESSAGE=$1 4 | APK_FILE=$2 5 | 6 | BASE_URL="https://${MATRIX_HOMESERVER}" 7 | 8 | if [[ -n "${APK_FILE}" ]]; then 9 | echo "Sending apk file..." 10 | 11 | # TODO: send to matrix chat 12 | fi 13 | 14 | echo "Sending info message..." 15 | 16 | # TODO: send to matrix chat -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Updates for Github Actions used in the repo 4 | - package-ecosystem: "github-actions" 5 | directory: "/" 6 | schedule: 7 | interval: "weekly" 8 | # Updates for Gradle dependencies used in the app 9 | - package-ecosystem: gradle 10 | directory: "/" 11 | schedule: 12 | interval: "weekly" 13 | -------------------------------------------------------------------------------- /python/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.python" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | } -------------------------------------------------------------------------------- /java/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.java" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | } 15 | -------------------------------------------------------------------------------- /json/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.json" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | } 15 | -------------------------------------------------------------------------------- /kotlin/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.kotlin" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | } 15 | -------------------------------------------------------------------------------- /ocaml/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.ocaml" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/de/markusressel/kodehighlighter/demo/theme/Shape.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.demo.theme 2 | 3 | import androidx.compose.foundation.shape.RoundedCornerShape 4 | import androidx.compose.material.Shapes 5 | import androidx.compose.ui.unit.dp 6 | 7 | val Shapes = Shapes( 8 | small = RoundedCornerShape(4.dp), 9 | medium = RoundedCornerShape(4.dp), 10 | large = RoundedCornerShape(0.dp) 11 | ) -------------------------------------------------------------------------------- /app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/raw/json_example: -------------------------------------------------------------------------------- 1 | { 2 | // Line comments are not included in standard but nonetheless allowed. 3 | /* As well as block comments. */ 4 | "the only keywords are": [true, false, null], 5 | "strings with": { 6 | "no excapes": "pseudopolinomiality" 7 | "valid escapes": "C-style\r\n and unicode\u0021", 8 | "illegal escapes": "\0377\x\" 9 | }, 10 | "some numbers": [ 11 | 42, 12 | -0.0e-0, 13 | 6.626e-34 14 | ] 15 | } -------------------------------------------------------------------------------- /core/src/main/java/de/markusressel/kodehighlighter/core/RuleMatches.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.core 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 5 | 6 | /** 7 | * Data class that describes what styles would need to be applied for a given rule 8 | */ 9 | data class RuleMatches( 10 | val rule: LanguageRule, 11 | val matches: List 12 | ) -------------------------------------------------------------------------------- /markdown/build.gradle.kts: -------------------------------------------------------------------------------- 1 | plugins { 2 | id("kodehighlighter.android.library") 3 | id("kodehighlighter.android.library.publishing") 4 | } 5 | 6 | android { 7 | namespace = "de.markusressel.kodehighlighter.language.markdown" 8 | } 9 | 10 | dependencies { 11 | api(project(":core")) 12 | implementation(libs.kotlin.stdlib.jdk8) 13 | implementation(libs.androidx.compose.ui.text) 14 | 15 | testImplementation(libs.junit4) 16 | testImplementation(libs.kotlinx.coroutines.core) 17 | } 18 | -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/MagicRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object MagicRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "__(\\w+)__".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /json/src/main/java/de/markusressel/kodehighlighter/language/json/rule/KeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.json.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object KeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | private val PATTERN = "\\b(true|false|null)\\b".toRegex() 13 | 14 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/DecoratorRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object DecoratorRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "@([\\w.]+)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/ExceptRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ExceptRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(except) (\\w+):".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/SelfKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object SelfKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "self".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/AnnotationRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object AnnotationRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "@\\S+(\\(.*?\\))?".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/ClassKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ClassKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "class(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/FinalKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object FinalKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "final(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/ImportKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ImportKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "import(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /json/src/main/java/de/markusressel/kodehighlighter/language/json/rule/StringRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.json.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object StringRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "\"(?:\\\\.|[^\"\\\\])*\"".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/AnnotationRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object AnnotationRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | private val PATTERN = "@\\S+(\\(.*?\\))?".toRegex() 13 | 14 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/OpenKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object OpenKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "open(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/BoldRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object BoldRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "\\*{2}(.+?)\\*{2}".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/CodeLineRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object CodeLineRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(?m)^ {4}.+".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /ocaml/src/main/java/de/markusressel/kodehighlighter/language/ocaml/rule/StringRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.ocaml.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object StringRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "\"(\\\\\"|[^\"\\n])*\"".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/PackageKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object PackageKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "package(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/ReturnKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ReturnKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(return)(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/StaticKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object StaticKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(static)(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/NumberRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object NumberRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(-)?\\d+(\\.\\d+)?(L)?".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/StrikeRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object StrikeRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(~{2})([^~]+?)\\1".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /ocaml/src/main/java/de/markusressel/kodehighlighter/language/ocaml/rule/BooleanRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.ocaml.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object BooleanRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "\\b(true|false)(?=\\b)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/DefKeyword.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object DefKeyword : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(def)\\s+(\\w+)(?=\\()".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /core/src/main/java/de/markusressel/kodehighlighter/core/rule/RuleHelper.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.core.rule 2 | 3 | /** 4 | * Helper to implement [LanguageRule] more easily 5 | */ 6 | object RuleHelper { 7 | 8 | /** 9 | * Finds all matches for the given regex in the given text 10 | * 11 | * @param text the text to use 12 | * @param regex the regex to use 13 | * @return list of matches 14 | */ 15 | fun findRegexMatches(text: CharSequence, regex: Regex) = regex.findAll(text).map { 16 | RuleMatch(it.range.first, it.range.last + 1) 17 | }.toList() 18 | 19 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/FunctionKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object FunctionKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "fun(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/ImportKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ImportKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "import(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/PackageKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object PackageKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "package(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/ReturnKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ReturnKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "return(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/ImageLinkRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ImageLinkRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "!\\[.*?]\\(.*?\\)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /ocaml/src/main/java/de/markusressel/kodehighlighter/language/ocaml/rule/ModuleRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.ocaml.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ModuleRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "\\b[A-Z\$_][0-9a-zA-Z\$_]*\\b".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/ReturnKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ReturnKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "return(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/TextLinkRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object TextLinkRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(? { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(class|object)(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/ItalicRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object ItalicRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(? { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(void|boolean|int|float|double)(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/CommentRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object CommentRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /java/src/main/java/de/markusressel/kodehighlighter/language/java/rule/VisibilityKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.java.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object VisibilityKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(public|protected|private)(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /markdown/src/main/java/de/markusressel/kodehighlighter/language/markdown/rule/HeadingRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.markdown.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object HeadingRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "^\\s{0,3}#{1,6} .+".toRegex(RegexOption.MULTILINE) 14 | 15 | } -------------------------------------------------------------------------------- /ocaml/src/main/java/de/markusressel/kodehighlighter/language/ocaml/rule/CommentRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.ocaml.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object CommentRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(\\(\\*)(.*?)(\\*\\))".toRegex(RegexOption.DOT_MATCHES_ALL) 14 | 15 | } -------------------------------------------------------------------------------- /python/src/main/java/de/markusressel/kodehighlighter/language/python/rule/TypeKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.python.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object TypeKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "None|True|False|NotImplemented|\\.\\.\\.".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | KodeHighlighter 3 | 4 | This is a demo for the KodeHighlighter library.\n\n 5 | Highlighting can be applied to any Spannable so it can easily be used inside the standard TextView. 6 | 7 | Below you can see how a Markdown highlighted text would look like: 8 | Here is a sample of a dark theme: 9 | 10 | You can also use this in an EditText: 11 | 12 | -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/CommentRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object CommentRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "//.*|(\"(?:\\\\[^\"]|\\\\\"|.)*?\")|(?s)/\\*.*?\\*/".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /kotlin/src/main/java/de/markusressel/kodehighlighter/language/kotlin/rule/VarKeywordRule.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.language.kotlin.rule 2 | 3 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 4 | import de.markusressel.kodehighlighter.core.rule.RuleHelper 5 | import de.markusressel.kodehighlighter.core.rule.RuleMatch 6 | 7 | object VarKeywordRule : LanguageRule { 8 | 9 | override fun findMatches(text: CharSequence): List { 10 | return RuleHelper.findRegexMatches(text, PATTERN) 11 | } 12 | 13 | private val PATTERN = "(lateinit\\s+)?var(?=\\s)|(const\\s+)?val(?=\\s)".toRegex() 14 | 15 | } -------------------------------------------------------------------------------- /core/src/main/java/de/markusressel/kodehighlighter/core/colorscheme/ColorScheme.kt: -------------------------------------------------------------------------------- 1 | package de.markusressel.kodehighlighter.core.colorscheme 2 | 3 | import de.markusressel.kodehighlighter.core.StyleFactory 4 | import de.markusressel.kodehighlighter.core.rule.LanguageRule 5 | 6 | /** 7 | * A color scheme for a language rule book. 8 | * This essentially maps rules to the styles that will be applied to matched text passages. 9 | */ 10 | interface ColorScheme