Skip to content
This repository was archived by the owner on Jun 14, 2026. It is now read-only.

Commit aa9b68d

Browse files
committed
add gradle lang
1 parent 9c35343 commit aa9b68d

11 files changed

Lines changed: 3647 additions & 5 deletions

File tree

gradle.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#AndroidIDE: enforce UTF-8 & locale for Gradle daemon
2-
#Fri Oct 17 13:25:55 GMT 2025
2+
#Sat Oct 18 11:53:33 GMT 2025
33
android.nonTransitiveRClass=true
44
kotlin.code.style=official
55
systemProp.user.language=en

snapcode/src/main/java/ir/ninjacoder/codesnap/LangType.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ public enum LangType {
1212
PHP(".php"),
1313
CSS(".css"),
1414
KOTLIN(".kt"),
15-
CSHARP(".cs");
15+
CSHARP(".cs"),
16+
GRADLE(".gradle");
1617

1718
private final String langname;
1819

Lines changed: 203 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,203 @@
1+
package ir.ninjacoder.codesnap.Utils;
2+
3+
import ir.ninjacoder.codesnap.LangType;
4+
import ir.ninjacoder.codesnap.antlr4.gradle.GradleLexer;
5+
import ir.ninjacoder.codesnap.colorhelper.ColorHelper;
6+
import android.text.SpannableStringBuilder;
7+
import ir.ninjacoder.codesnap.widget.data.SpanStyler;
8+
import org.antlr.v4.runtime.CharStreams;
9+
import org.antlr.v4.runtime.Token;
10+
11+
import java.io.StringReader;
12+
import java.util.regex.Pattern;
13+
14+
public class CodeHighlighterGradle implements Highlighter {
15+
16+
@Override
17+
public SpannableStringBuilder highlight(LangType typ, String code, ColorHelper color)
18+
throws Exception {
19+
20+
SpanStyler span = SpanStyler.create();
21+
GradleLexer lexer = new GradleLexer(CharStreams.fromReader(new StringReader(code)));
22+
Token token;
23+
int pretoken = -1;
24+
25+
while ((token = lexer.nextToken()).getType() != Token.EOF) {
26+
int type = token.getType();
27+
String text = token.getText();
28+
29+
switch (type) {
30+
case GradleLexer.WS:
31+
span.addNullText(text);
32+
break;
33+
34+
case GradleLexer.APPLY:
35+
case GradleLexer.TASK:
36+
case GradleLexer.BUILDSCRIPT:
37+
case GradleLexer.REPOSITORIES:
38+
case GradleLexer.MAVEN:
39+
case GradleLexer.GOOGLE:
40+
case GradleLexer.GRADLE:
41+
case GradleLexer.PROJECT:
42+
case GradleLexer.SETTINGS:
43+
case GradleLexer.FILE_TREE:
44+
case GradleLexer.FILES:
45+
case GradleLexer.DO_LAST:
46+
case GradleLexer.FROM:
47+
case GradleLexer.INTO:
48+
span.text(text, color.getKeyword(), true);
49+
break;
50+
51+
case GradleLexer.IMPLEMENTATION:
52+
case GradleLexer.COMPILE_ONLY:
53+
case GradleLexer.RUNTIME_ONLY:
54+
case GradleLexer.TEST_IMPLEMENTATION:
55+
case GradleLexer.ANDROID_TEST_IMPLEMENTATION:
56+
case GradleLexer.API:
57+
case GradleLexer.KAPT:
58+
case GradleLexer.ANNOTATION_PROCESSOR:
59+
case GradleLexer.COMPILE:
60+
case GradleLexer.RUNTIME:
61+
case GradleLexer.TEST_COMPILE:
62+
case GradleLexer.TEST_RUNTIME:
63+
case GradleLexer.VARIANT_CONFIGURATION:
64+
span.text(text, color.getOperator(), true);
65+
break;
66+
67+
case GradleLexer.SINGLE_QUOTE_STRING:
68+
case GradleLexer.DOUBLE_QUOTE_STRING:
69+
case GradleLexer.TRIPLE_QUOTE_STRING:
70+
span.text(text, color.getStrings());
71+
break;
72+
73+
74+
case GradleLexer.DEPENDENCIES:
75+
case GradleLexer.PLUGINS:
76+
span.text(text,color.getMethod(),true); break;
77+
78+
case GradleLexer.INTEGER:
79+
case GradleLexer.FLOAT:
80+
span.text(text, color.getHtmlattr());
81+
break;
82+
case GradleLexer.ASSIGN:
83+
case GradleLexer.PLUS:
84+
case GradleLexer.MINUS:
85+
case GradleLexer.MULT:
86+
case GradleLexer.DIV:
87+
case GradleLexer.DOT:
88+
case GradleLexer.COLON:
89+
case GradleLexer.COMMA:
90+
case GradleLexer.SEMICOLON:
91+
case GradleLexer.LPAREN:
92+
case GradleLexer.RPAREN:
93+
case GradleLexer.LBRACE:
94+
case GradleLexer.RBRACE:
95+
case GradleLexer.LBRACKET:
96+
case GradleLexer.RBRACKET:
97+
span.text(text, color.getSymbol());
98+
break;
99+
case GradleLexer.TRUE:
100+
case GradleLexer.FALSE:
101+
case GradleLexer.NULL:
102+
span.text(text, color.getLastsymi(), true);
103+
break;
104+
105+
case GradleLexer.AS:
106+
case GradleLexer.ASSERT:
107+
case GradleLexer.BREAK:
108+
case GradleLexer.CASE:
109+
case GradleLexer.CATCH:
110+
case GradleLexer.CLASS:
111+
case GradleLexer.CONST:
112+
case GradleLexer.CONTINUE:
113+
case GradleLexer.DEF:
114+
case GradleLexer.DEFAULT:
115+
case GradleLexer.DO:
116+
case GradleLexer.ELSE:
117+
case GradleLexer.ENUM:
118+
case GradleLexer.EXTENDS:
119+
case GradleLexer.FINALLY:
120+
case GradleLexer.FOR:
121+
case GradleLexer.GOTO:
122+
case GradleLexer.IF:
123+
case GradleLexer.IMPLEMENTS:
124+
case GradleLexer.IMPORT:
125+
case GradleLexer.IN:
126+
case GradleLexer.INSTANCEOF:
127+
case GradleLexer.INTERFACE:
128+
case GradleLexer.NEW:
129+
case GradleLexer.PACKAGE:
130+
case GradleLexer.RETURN:
131+
case GradleLexer.SUPER:
132+
case GradleLexer.SWITCH:
133+
case GradleLexer.THIS:
134+
case GradleLexer.THROW:
135+
case GradleLexer.THROWS:
136+
case GradleLexer.TRAIT:
137+
case GradleLexer.TRY:
138+
case GradleLexer.WHILE:
139+
span.text(text, color.getKeyword(), true);
140+
break;
141+
case GradleLexer.LINE_COMMENT:
142+
case GradleLexer.BLOCK_COMMENT:
143+
case GradleLexer.DOC_COMMENT:
144+
span.text(text, color.getComment());
145+
break;
146+
147+
case GradleLexer.IDENTIFIER:
148+
{
149+
int colorNormal = color.getTextnormal();
150+
boolean isBold = false;
151+
152+
if (pretoken == GradleLexer.TASK) {
153+
colorNormal = color.getMethod();
154+
isBold = true;
155+
156+
} else if (pretoken == GradleLexer.PROJECT
157+
|| pretoken == GradleLexer.APPLY
158+
|| pretoken == GradleLexer.REPOSITORIES
159+
|| pretoken == GradleLexer.BUILDSCRIPT) {
160+
colorNormal = color.getPredot();
161+
162+
} else if (pretoken == GradleLexer.IMPLEMENTATION
163+
|| pretoken == GradleLexer.COMPILE_ONLY
164+
|| pretoken == GradleLexer.RUNTIME_ONLY
165+
|| pretoken == GradleLexer.TEST_IMPLEMENTATION) {
166+
colorNormal = color.getLastsymi();
167+
isBold = true;
168+
169+
} else if (pretoken == GradleLexer.DEF
170+
|| pretoken == GradleLexer.CLASS
171+
|| pretoken == GradleLexer.IMPORT
172+
|| pretoken == GradleLexer.IMPLEMENTS) {
173+
174+
colorNormal = color.getMethod();
175+
} else if (lexer._input.LA(2) == '{' || lexer._input.LA("{".length()) == '{') {
176+
colorNormal = color.getMethod();
177+
isBold = true;
178+
179+
} else if (lexer._input.LA(1) == '.') {
180+
colorNormal = color.getLastsymi();
181+
} else if (pretoken == GradleLexer.DOT) {
182+
colorNormal = color.getPredot();
183+
} else if (Character.isUpperCase(text.charAt(0))) {
184+
Pattern pattern = Pattern.compile("^[A-Z][a-zA-Z0-9_]*$");
185+
if (pattern.matcher(text).matches()) {
186+
colorNormal = color.getUppercase();
187+
}
188+
}
189+
190+
span.text(text, colorNormal, isBold);
191+
break;
192+
}
193+
default:
194+
span.text(text, color.getTextnormal());
195+
break;
196+
}
197+
198+
pretoken = type;
199+
}
200+
201+
return span;
202+
}
203+
}

snapcode/src/main/java/ir/ninjacoder/codesnap/Utils/CodeHighlighterJava.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,9 @@ public SpannableStringBuilder highlight(LangType lang, String code, ColorHelper
206206
colorNormal = colorHelper.getLastdot();
207207
} else if (lexer._input.LA(1) == '[' || lexer._input.LA(1) == ']') {
208208
colorNormal = colorHelper.getPrebrak();
209-
} else if (pretoken == JavaLexer.DOT) {
209+
} else if(lexer._input.LA(2) == '{'){
210+
colorNormal = colorHelper.getBracketlevel1();
211+
}else if (pretoken == JavaLexer.DOT) {
210212
colorNormal = colorHelper.getPredot();
211213
} else if (!isClassName && Character.isUpperCase(token.getText().charAt(0))) {
212214
Pattern pattern = Pattern.compile("^[A-Z][a-zA-Z0-9_]*$");

0 commit comments

Comments
 (0)