Skip to content

Commit b63fc39

Browse files
committed
updates
1 parent c49e8ef commit b63fc39

File tree

10 files changed

+86
-51
lines changed

10 files changed

+86
-51
lines changed
0 Bytes
Binary file not shown.
201 KB
Binary file not shown.

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ allprojects {
3030

3131
```groovy
3232
dependencies {
33-
implementation 'com.github.codeckle:compose-code-editor:2.0.2'
33+
implementation 'com.github.qawaz:compose-code-editor:2.0.3'
3434
}
3535
```
3636

@@ -69,7 +69,7 @@ gpr.key=yourgithubpersonalaccesstoken
6969
#### Step 3 : Add The Dependency
7070

7171
```kotlin
72-
implementation("com.wakaztahir:codeeditor:3.0.3")
72+
implementation("com.wakaztahir:codeeditor:3.0.4")
7373
```
7474

7575
## Usage

codeeditor/build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ plugins {
1010
}
1111

1212
group = "com.wakaztahir"
13-
version = "3.0.3"
13+
version = findProperty("version") as String
1414

1515
kotlin {
1616
android {
@@ -40,7 +40,7 @@ kotlin {
4040
}
4141
val androidTest by getting {
4242
dependencies {
43-
implementation("junit:junit:4.13")
43+
implementation("junit:junit:4.13.2")
4444
}
4545
}
4646
val desktopMain by getting {
@@ -53,11 +53,11 @@ kotlin {
5353
}
5454

5555
android {
56-
compileSdk = 31
56+
compileSdk = 32
5757
sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml")
5858
defaultConfig {
5959
minSdk = 21
60-
targetSdk = 31
60+
targetSdk = 32
6161
}
6262
compileOptions {
6363
sourceCompatibility = JavaVersion.VERSION_1_8
@@ -77,7 +77,7 @@ afterEvaluate {
7777
repositories {
7878
maven {
7979
name = "GithubPackages"
80-
url = uri("https://maven.pkg.github.com/zehanti/compose-code-editor")
80+
url = uri("https://maven.pkg.github.com/Qawaz/compose-code-editor")
8181
try {
8282
credentials {
8383
username = (githubProperties["gpr.usr"] ?: System.getenv("GPR_USER")).toString()

codeeditor/src/commonMain/kotlin/com/wakaztahir/codeeditor/prettify/lang/LangWiki.kt

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -100,16 +100,12 @@ class LangWiki : Lang() {
100100
override val shortcutStylePatterns = ArrayList<StylePattern>()
101101

102102
init {
103-
104-
val fallthroughStylePatterns: List<StylePattern> = ArrayList()
105103
shortcutStylePatterns.new(
106104
Prettify.PR_KEYWORD,
107105
Regex("^#[a-z]+", RegexOption.IGNORE_CASE),
108106
null,
109107
"#"
110108
)
111-
112-
113109
}
114110

115111
override fun getFileExtensions(): List<String> {

demo/android/build.gradle.kts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,11 @@ dependencies {
1010
}
1111

1212
android {
13-
compileSdk = 31
13+
compileSdk = 32
1414
defaultConfig {
1515
applicationId = "com.wakaztahir.android"
1616
minSdk = 21
17-
targetSdk = 31
17+
targetSdk = 32
1818
versionCode = 1
1919
versionName = "1.0.0"
2020
}

demo/android/src/main/AndroidManifest.xml

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,10 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.wakaztahir.android">
33
<application
44
android:allowBackup="false"
5-
android:supportsRtl="true"
6-
android:theme="@style/Theme.AppCompat.Light.NoActionBar">
7-
<activity android:name=".MainActivity">
5+
android:supportsRtl="true">
6+
<activity
7+
android:name=".MainActivity" android:exported="true"
8+
>
89
<intent-filter>
910
<action android:name="android.intent.action.MAIN"/>
1011
<category android:name="android.intent.category.LAUNCHER"/>

docs/README.md

Lines changed: 67 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ allprojects {
3030

3131
```groovy
3232
dependencies {
33-
implementation 'com.github.timeline-notes:compose-code-editor:2.0.2'
33+
implementation 'com.github.qawaz:compose-code-editor:2.0.3'
3434
}
3535
```
3636

@@ -69,19 +69,19 @@ gpr.key=yourgithubpersonalaccesstoken
6969
#### Step 3 : Add The Dependency
7070

7171
```kotlin
72-
implementation("com.wakaztahir:codeeditor:3.0.1")
72+
implementation("com.wakaztahir:codeeditor:3.0.4")
7373
```
7474

7575
## Usage
7676

7777
```kotlin
7878
// Step 1. Declare Language & Code
79-
val language = CodeLang.Java
79+
val language = CodeLang.Kotlin
8080
val code = """
8181
package com.wakaztahir.codeeditor
8282
83-
public static void main(String[] args){
84-
System.out.println("Hello World")
83+
fun main(){
84+
println("Hello World");
8585
}
8686
""".trimIndent()
8787

@@ -111,20 +111,6 @@ Text(parsedCode)
111111
### Using TextField Composable
112112

113113
```kotlin
114-
val language = CodeLang.Java
115-
val code = """
116-
package com.wakaztahir.codeeditor
117-
118-
public static void main(String[] args){
119-
System.out.println("Hello World")
120-
}
121-
""".trimIndent()
122-
123-
val scope = rememberCoroutineScope()
124-
var bringIntoViewRequester = remember { BringIntoViewRequester() }
125-
val parser = remember { PrettifyParser() }
126-
val themeState by remember { mutableStateOf(CodeThemeType.Default) }
127-
val theme = remember(themeState) { themeState.theme() }
128114
var textFieldValue by remember {
129115
mutableStateOf(
130116
TextFieldValue(
@@ -139,7 +125,7 @@ var textFieldValue by remember {
139125
}
140126

141127
OutlinedTextField(
142-
modifier = Modifier.fillMaxSize().bringIntoViewRequester(bringIntoViewRequester),
128+
modifier = Modifier.fillMaxSize(),
143129
value = textFieldValue,
144130
onValueChange = {
145131
textFieldValue = it.copy(
@@ -150,17 +136,74 @@ OutlinedTextField(
150136
code = it.text
151137
)
152138
)
153-
scope.launch {
154-
bringIntoViewRequester.bringIntoView()
155-
}
156139
}
157140
)
158141
```
159142

143+
### Displaying Line Numbers
144+
145+
To display line numbers in the text field we must use a `BasicTextField` since it has a parameter for `onTextLayout`
146+
147+
A basic example can be setup like this , On every text layout a new array is created
148+
which contains top offsets of each line in the `BasicTextField`
149+
150+
```kotlin
151+
152+
val language = CodeLang.Kotlin
153+
val code = """
154+
package com.wakaztahir.codeeditor
155+
156+
fun main(){
157+
println("Hello World");
158+
}
159+
""".trimIndent()
160+
161+
val parser = remember { PrettifyParser() }
162+
val themeState by remember { mutableStateOf(CodeThemeType.Default) }
163+
val theme = remember(themeState) { themeState.theme }
164+
165+
fun parse(code: String): AnnotatedString {
166+
return parseCodeAsAnnotatedString(
167+
parser = parser,
168+
theme = theme,
169+
lang = language,
170+
code = code
171+
)
172+
}
173+
174+
var textFieldValue by remember { mutableStateOf(TextFieldValue(parse(code))) }
175+
var lineTops by remember { mutableStateOf(emptyArray<Float>()) }
176+
val density = LocalDensity.current
177+
178+
Row {
179+
if (lineTops.isNotEmpty()) {
180+
Box(modifier = Modifier.padding(horizontal = 4.dp)) {
181+
lineTops.forEachIndexed { index, top ->
182+
Text(
183+
modifier = Modifier.offset(y = with(density) { top.toDp() }),
184+
text = index.toString(),
185+
color = MaterialTheme.colors.onBackground.copy(.3f)
186+
)
187+
}
188+
}
189+
}
190+
BasicTextField(
191+
modifier = Modifier.fillMaxSize(),
192+
value = textFieldValue,
193+
onValueChange = {
194+
textFieldValue = it.copy(annotatedString = parse(it.text))
195+
},
196+
onTextLayout = { result ->
197+
lineTops = Array(result.lineCount) { result.getLineTop(it) }
198+
}
199+
)
200+
}
201+
```
202+
160203
## List of available languages & their extensions
161204

162205
Default (```"default-code"```), HTML (```"default-markup"```) , C/C++/Objective-C (```"c"```, ```"cc"```, ```"cpp"```, ```"cxx"```, ```"cyc"```, ```"m"```),
163-
C# (```"cs"```), Java (```"java"```), Bash (```"bash"```, ```"bsh"```, ```"csh"```, ```"sh"```),
206+
C# (```"cs"```), Java (```"java"```),Kotlin (```"kt"```) ,Bash (```"bash"```, ```"bsh"```, ```"csh"```, ```"sh"```),
164207
Python (```"cv"```, ```"py"```, ```"python"```), Perl (```"perl"```, ```"pl"```, ```"pm"```),
165208
Ruby (```"rb"```, ```"ruby"```), JavaScript (```"javascript"```, ```"js"```),
166209
CoffeeScript (```"coffee"```), Rust (```"rc"```, ```"rs"```, ```"rust"```), Appollo (```"apollo"```
@@ -186,9 +229,4 @@ releases.
186229

187230
## Issues
188231

189-
* Does not support kotlin yet , but basic syntax highlighting can be achieved by using another
190-
language
191232
* Lack of themes
192-
* Everytime user types code in a text field , all the code is parsed again rather than only the
193-
changed lines which makes it a little inefficient , This is due to compose not supporting
194-
multiline text editing yet , so it will be fixed in future

gradle.properties

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
kotlin.code.style=official
22
android.useAndroidX=true
33

4-
version=3.0.2
5-
versionCode=21
6-
kotlin.version=1.6.21
4+
version=3.0.4
5+
versionCode=1
6+
kotlin.version=1.7.10
77
agp.version=7.0.4
8-
compose.version=1.2.0-alpha01-dev675
8+
compose.version=1.2.0-beta01

mkdocs.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
site_name: Compose Code Editor
22
site_description: 'Jetpack Compose Code Editor'
33
site_author: 'Waqas Tahir'
4-
site_url: 'https://codeckle.github.io/compose-code-editor/'
4+
site_url: 'https://qawaz.github.io/compose-code-editor/'
55
remote_branch: gh-pages
66

77
docs_dir: docs
88

99
repo_name: 'compose-code-editor'
10-
repo_url: 'https://github.com/codeckle/compose-code-editor'
10+
repo_url: 'https://github.com/qawaz/compose-code-editor'
1111

1212
theme:
1313
name: material

0 commit comments

Comments
 (0)