├── 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