Skip to content

Commit 0e4a2df

Browse files
authored
Merge pull request #19 from SnipMeDev/feature/better-theme-api
Better theme api
2 parents cb9ef8c + c08549a commit 0e4a2df

File tree

8 files changed

+51
-17
lines changed

8 files changed

+51
-17
lines changed

.DS_Store

0 Bytes
Binary file not shown.

CHANGELOG.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
1+
## [0.7.0]
2+
3+
### Added
4+
- `key` field to `SyntaxTheme` model
5+
- `getNames()` function to `SyntaxThemes`
6+
- `SyntaxTheme.useDark(darkMode: Boolean)` extension to `SyntaxThemes`
7+
8+
### Changed
9+
- static theme constructors names in `SyntaxTheme`
10+
111
## [0.6.0]
212

313
### Added

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ repositories {
1515
```
1616

1717
```shell
18-
implementation("dev.snipme:highlights:0.6.0")
18+
implementation("dev.snipme:highlights:0.7.0")
1919
```
2020

2121
## Features ✨
@@ -217,6 +217,7 @@ You can also prepare your own themes and use them. Just create the `SyntaxTheme`
217217

218218
```kotlin
219219
SyntaxTheme(
220+
key = "MY_THEME",
220221
code = 0xEDEDED,
221222
keyword = 0xCC7832,
222223
string = 0x6A8759,

build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ plugins {
1313
}
1414

1515
group = "dev.snipme"
16-
version = "0.6.0"
16+
version = "0.7.0"
1717

1818
kotlin {
1919
// Android

sample/build.gradle.kts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,5 @@ application {
3131
}
3232

3333
dependencies {
34-
implementation("dev.snipme:highlights:0.6.0")
34+
implementation("dev.snipme:highlights:0.7.0")
3535
}

sample/src/main/kotlin/Main.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import dev.snipme.highlights.Highlights
22
import dev.snipme.highlights.model.BoldHighlight
33
import dev.snipme.highlights.model.PhraseLocation
44
import dev.snipme.highlights.model.SyntaxLanguage
5+
import dev.snipme.highlights.model.SyntaxThemes
56

67
val sampleClass = """
78
@Serializable
@@ -39,7 +40,7 @@ fun main() {
3940
println()
4041

4142
println("Available themes:")
42-
println("${Highlights.themes(darkMode = false).keys}")
43+
println("${SyntaxThemes.getNames()}")
4344
println()
4445

4546
println("This is a sample class:")
@@ -48,6 +49,7 @@ fun main() {
4849

4950
val highlights = Highlights.Builder()
5051
.code(sampleClass)
52+
.theme(SyntaxThemes.monokai())
5153
.language(SyntaxLanguage.JAVA)
5254
.build()
5355

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package dev.snipme.highlights.model
22

3-
// TODO Replace Int with Pair to support light / dark mode
43
data class SyntaxTheme(
4+
val key: String,
55
val code: Int,
66
val keyword: Int,
77
val string: Int,
@@ -13,7 +13,8 @@ data class SyntaxTheme(
1313
val mark: Int
1414
) {
1515
companion object {
16-
fun simple(code: Int, string: Int, accent: Int, value: Int) = SyntaxTheme(
16+
fun simple(key: String, code: Int, string: Int, accent: Int, value: Int) = SyntaxTheme(
17+
key = key,
1718
code = code,
1819
keyword = accent,
1920
string = string,
@@ -25,16 +26,18 @@ data class SyntaxTheme(
2526
mark = code
2627
)
2728

28-
fun general(code: Int, string: Int, accent: Int, value: Int, comment: Int) = SyntaxTheme(
29-
code = code,
30-
keyword = accent,
31-
string = string,
32-
literal = value,
33-
comment = comment,
34-
metadata = code,
35-
multilineComment = comment,
36-
punctuation = accent,
37-
mark = code
38-
)
29+
fun basic(key: String, code: Int, string: Int, accent: Int, value: Int, comment: Int) =
30+
SyntaxTheme(
31+
key = key,
32+
code = code,
33+
keyword = accent,
34+
string = string,
35+
literal = value,
36+
comment = comment,
37+
metadata = code,
38+
multilineComment = comment,
39+
punctuation = accent,
40+
mark = code
41+
)
3942
}
4043
}

src/commonMain/kotlin/dev/snipme/highlights/model/SyntaxThemes.kt

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ object SyntaxThemes {
1010

1111
val dark = mapOf(
1212
DARCULA_KEY to SyntaxTheme(
13+
key = DARCULA_KEY,
1314
code = 0xEDEDED,
1415
keyword = 0xCC7832,
1516
string = 0x6A8759,
@@ -21,6 +22,7 @@ object SyntaxThemes {
2122
mark = 0xEDEDED
2223
),
2324
MONOKAI_KEY to SyntaxTheme(
25+
key = MONOKAI_KEY,
2426
code = 0xF8F8F2,
2527
keyword = 0xF92672,
2628
string = 0xE6DB74,
@@ -32,6 +34,7 @@ object SyntaxThemes {
3234
mark = 0xF8F8F2
3335
),
3436
NOTEPAD_KEY to SyntaxTheme(
37+
key = NOTEPAD_KEY,
3538
code = 0x000080,
3639
keyword = 0x0000FF,
3740
string = 0x808080,
@@ -43,6 +46,7 @@ object SyntaxThemes {
4346
mark = 0xAA2C8C
4447
),
4548
MATRIX_KEY to SyntaxTheme(
49+
key = MATRIX_KEY,
4650
code = 0x008500,
4751
keyword = 0x008500,
4852
string = 0x269926,
@@ -54,6 +58,7 @@ object SyntaxThemes {
5458
mark = 0x008500
5559
),
5660
PASTEL_KEY to SyntaxTheme(
61+
key = PASTEL_KEY,
5762
code = 0xDFDEE0,
5863
keyword = 0x729FCF,
5964
string = 0x93CF55,
@@ -68,6 +73,7 @@ object SyntaxThemes {
6873

6974
val light = mapOf(
7075
DARCULA_KEY to SyntaxTheme(
76+
key = DARCULA_KEY,
7177
code = 0x121212,
7278
keyword = 0xCC7832,
7379
string = 0x6A8759,
@@ -79,6 +85,7 @@ object SyntaxThemes {
7985
mark = 0x121212
8086
),
8187
MONOKAI_KEY to SyntaxTheme(
88+
key = MONOKAI_KEY,
8289
code = 0x07070D,
8390
keyword = 0xF92672,
8491
string = 0xE6DB74,
@@ -90,6 +97,7 @@ object SyntaxThemes {
9097
mark = 0x07070D
9198
),
9299
NOTEPAD_KEY to SyntaxTheme(
100+
key = NOTEPAD_KEY,
93101
code = 0x000080,
94102
keyword = 0x0000FF,
95103
string = 0x808080,
@@ -101,6 +109,7 @@ object SyntaxThemes {
101109
mark = 0xAA2C8C
102110
),
103111
MATRIX_KEY to SyntaxTheme(
112+
key = MATRIX_KEY,
104113
code = 0x008500,
105114
keyword = 0x008500,
106115
string = 0x269926,
@@ -112,6 +121,7 @@ object SyntaxThemes {
112121
mark = 0x008500
113122
),
114123
PASTEL_KEY to SyntaxTheme(
124+
key = PASTEL_KEY,
115125
code = 0x20211F,
116126
keyword = 0x729FCF,
117127
string = 0x93CF55,
@@ -127,10 +137,18 @@ object SyntaxThemes {
127137
fun themes(darkMode: Boolean = false) = if (darkMode) dark else light
128138

129139
fun default(darkMode: Boolean = false) = themes(darkMode)[DARCULA_KEY]!!
140+
130141
fun darcula(darkMode: Boolean = false) = themes(darkMode)[DARCULA_KEY]!!
131142
fun monokai(darkMode: Boolean = false) = themes(darkMode)[MONOKAI_KEY]!!
132143
fun notepad(darkMode: Boolean = false) = themes(darkMode)[NOTEPAD_KEY]!!
133144
fun matrix(darkMode: Boolean = false) = themes(darkMode)[MATRIX_KEY]!!
134145
fun pastel(darkMode: Boolean = false) = themes(darkMode)[PASTEL_KEY]!!
135146

147+
fun getNames(): List<String> = SyntaxThemes.light.map {
148+
it.key
149+
.lowercase()
150+
.replaceFirstChar { if (it.isLowerCase()) it.titlecase() else it.toString() }
151+
}
152+
153+
fun SyntaxTheme.useDark(darkMode: Boolean) = if (darkMode) dark[key] else light[key]
136154
}

0 commit comments

Comments
 (0)