Skip to content

Commit aea2bb0

Browse files
Merge branch 'master' into isDense_api
2 parents 0737dc8 + d95496b commit aea2bb0

File tree

5 files changed

+50
-23
lines changed

5 files changed

+50
-23
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,8 @@ LineNumberStyle({
218218
```dart
219219
CodeController({
220220
String? text,
221-
this.language,
222-
this.theme,
221+
Mode? language,
222+
Map<String, TextStyle>? theme,
223223
this.patternMap,
224224
this.stringMap,
225225
this.params = const EditorParams(),

example/android/app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ apply plugin: 'kotlin-android'
2626
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
2727

2828
android {
29-
compileSdkVersion 30
29+
compileSdkVersion 31
3030

3131
sourceSets {
3232
main.java.srcDirs += 'src/main/kotlin'

example/android/build.gradle

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
buildscript {
2-
ext.kotlin_version = '1.3.50'
2+
ext.kotlin_version = '1.7.0'
33
repositories {
44
google()
55
jcenter()
66
}
77

88
dependencies {
9-
classpath 'com.android.tools.build:gradle:4.1.0'
9+
classpath 'com.android.tools.build:gradle:7.1.2'
1010
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
1111
}
1212
}

example/android/gradle/wrapper/gradle-wrapper.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
33
distributionPath=wrapper/dists
44
zipStoreBase=GRADLE_USER_HOME
55
zipStorePath=wrapper/dists
6-
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
6+
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip

lib/src/code_controller.dart

Lines changed: 44 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,38 @@ class EditorParams {
1414
}
1515

1616
class CodeController extends TextEditingController {
17+
Mode? _language;
18+
1719
/// A highlight language to parse the text with
18-
final Mode? language;
20+
Mode? get language => _language;
21+
22+
set language(Mode? language) {
23+
if (language == _language) {
24+
return;
25+
}
26+
27+
if (language != null) {
28+
_languageId = _genId();
29+
highlight.registerLanguage(_languageId, language);
30+
}
31+
32+
_language = language;
33+
notifyListeners();
34+
}
35+
36+
Map<String, TextStyle>? _theme;
1937

2038
/// The theme to apply to the [language] parsing result
21-
final Map<String, TextStyle>? theme;
39+
Map<String, TextStyle>? get theme => _theme;
40+
41+
set theme(Map<String, TextStyle>? theme) {
42+
if (theme == _theme) {
43+
return;
44+
}
45+
46+
_theme = theme;
47+
notifyListeners();
48+
}
2249

2350
/// A map of specific regexes to style
2451
final Map<String, TextStyle>? patternMap;
@@ -43,15 +70,18 @@ class CodeController extends TextEditingController {
4370
final void Function(String)? onChange;
4471

4572
/* Computed members */
46-
final String languageId = _genId();
73+
String _languageId = _genId();
74+
75+
String get languageId => _languageId;
76+
4777
final styleList = <TextStyle>[];
4878
final modifierMap = <String, CodeModifier>{};
4979
RegExp? styleRegExp;
5080

5181
CodeController({
5282
String? text,
53-
this.language,
54-
this.theme,
83+
Mode? language,
84+
Map<String, TextStyle>? theme,
5585
this.patternMap,
5686
this.stringMap,
5787
this.params = const EditorParams(),
@@ -62,13 +92,10 @@ class CodeController extends TextEditingController {
6292
],
6393
this.webSpaceFix = true,
6494
this.onChange,
65-
}) : super(text: text) {
66-
// PatternMap
67-
if (language != null && theme == null) throw Exception("A theme must be provided for language parsing");
68-
// Register language
69-
if (language != null) {
70-
highlight.registerLanguage(languageId, language!);
71-
}
95+
}) : _theme = theme,
96+
super(text: text) {
97+
this.language = language;
98+
7299
// Create modifier map
73100
modifiers.forEach((el) {
74101
modifierMap[el.char] = el;
@@ -207,7 +234,7 @@ class CodeController extends TextEditingController {
207234

208235
TextSpan _processLanguage(String text, TextStyle? style) {
209236
final rawText = _webSpaceFix ? _middleDotsToSpaces(text) : text;
210-
final result = highlight.parse(rawText, language: languageId);
237+
final result = highlight.parse(rawText, language: _languageId);
211238

212239
final nodes = result.nodes;
213240

@@ -220,14 +247,14 @@ class CodeController extends TextEditingController {
220247
final nodeChildren = node.children;
221248
if (val != null) {
222249
if (_webSpaceFix) val = _spacesToMiddleDots(val);
223-
var child = TextSpan(text: val, style: theme?[node.className]);
224-
if (styleRegExp != null) child = _processPatterns(val, theme?[node.className]);
250+
var child = TextSpan(text: val, style: _theme?[node.className]);
251+
if (styleRegExp != null) child = _processPatterns(val, _theme?[node.className]);
225252
currentSpans.add(child);
226253
} else if (nodeChildren != null) {
227254
List<TextSpan> tmp = [];
228255
currentSpans.add(TextSpan(
229256
children: tmp,
230-
style: theme?[node.className],
257+
style: _theme?[node.className],
231258
));
232259
stack.add(currentSpans);
233260
currentSpans = tmp;
@@ -263,7 +290,7 @@ class CodeController extends TextEditingController {
263290
styleRegExp = RegExp(patternList.join('|'), multiLine: true);
264291

265292
// Return parsing
266-
if (language != null)
293+
if (_language != null && _theme != null)
267294
return _processLanguage(text, style);
268295
else if (styleRegExp != null)
269296
return _processPatterns(text, style);

0 commit comments

Comments
 (0)