Skip to content

Commit e13ce50

Browse files
committed
add diff
1 parent bff6671 commit e13ce50

22 files changed

Lines changed: 32838 additions & 31797 deletions

README.md

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@
3737
- [ ] perl
3838
- [ ] r
3939
- [ ] matlab
40-
- [ ] lua
40+
- [x] lua
4141
- [x] yaml
4242
- [x] json
4343
- [x] xml
@@ -123,8 +123,23 @@ adding `xml` in your activity
123123
editor.setText(#String);
124124
// adding 1.1.1
125125
editor.setShowHighlighterBracket(#boolean);
126+
//adding 1.1.2
127+
editor.setPaddingStroke(#int);
128+
editor.setIsShowCopyIcon(#boolean);
129+
editor.setLangGroup(#Spinner);
130+
editor.setSaveThemeBySpinner(#Spinner);
131+
editor.setIconRgbMod(#boolean);
132+
133+
134+
126135
```
136+
### Code snap bottomsheet dialog mod
127137

138+
```java
139+
140+
var code = new CodeSnapBottomSheet(#PathString, #Context);
141+
142+
```
128143

129144
### Custom Theme
130145

app/src/main/java/ir/ninjacoder/code/App.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,15 @@
22

33
import android.app.Application;
44

5+
import android.graphics.Paint;
56
import ir.ninjacoder.codesnap.colorhelper.ThemeLoader;
67

78
public class App extends Application {
89
@Override
910
public void onCreate() {
1011
super.onCreate();
12+
Paint paint = new Paint();
13+
1114
ThemeLoader.init(this);
1215
// TODO: Implement this method
1316
}

app/src/main/java/ir/ninjacoder/code/MainActivity.java

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import ir.ninjacoder.codesnap.FormatImage;
2525
import ir.ninjacoder.codesnap.LangType;
2626
import ir.ninjacoder.codesnap.colorhelper.ThemeManager;
27+
import ir.ninjacoder.codesnap.view.CodeSnapBottomSheet;
2728
import ir.ninjacoder.codesnap.widget.editorbase.EffectType;
2829
import java.io.File;
2930
import java.util.Arrays;
@@ -49,7 +50,8 @@ protected void onCreate(Bundle savedInstanceState) {
4950

5051
binding.btn.setOnClickListener(
5152
v -> {
52-
binding.et.takeScreenshot();
53+
// binding.et.takeScreenshot();
54+
new CodeSnapBottomSheet("", MainActivity.this);
5355
});
5456

5557
ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
@@ -89,19 +91,19 @@ public void runItem() {
8991
}
9092
""";
9193
binding.et.setText(code);
92-
// binding
93-
// .et
94-
// .getEditor()
95-
// .setFont(Typeface.createFromFile(new File("/storage/emulated/0/apk/ghostfont.ttf")));
94+
// binding
95+
// .et
96+
// .getEditor()
97+
// .setFont(Typeface.createFromFile(new File("/storage/emulated/0/apk/ghostfont.ttf")));
9698
getWindow()
9799
.setSoftInputMode(
98100
WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE
99101
| WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
100102

101103
setupef();
102-
binding.et.setPaddingStroke(4);
103-
binding.et.setIconRgbMod(true);
104-
binding.et.setCardRgb(true);
104+
binding.et.setPaddingStroke(4);
105+
binding.et.setIconRgbMod(true);
106+
binding.et.setCardRgb(true);
105107
binding.et.setThemeCustom("/storage/emulated/0/Apktool_M/theme.json");
106108
}
107109

gradle.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
#AndroidIDE: enforce UTF-8 & locale for Gradle daemon
2-
#Sun Nov 30 15:59:12 GMT 2025
2+
#Tue Dec 16 17:04:11 GMT 2025
33
android.nonTransitiveRClass=false
44
-Dfile.encoding=UTF-8
5-
systemProp.user.country=US
65
systemProp.user.language=en
6+
systemProp.user.country=US
77
VERSION_CODE=2
88
org.gradle.jvmargs=-Xmx4g -Dfile.encoding\=UTF-8 -Dsun.jnu.encoding\=UTF-8 -Duser.language\=en -Duser.country\=US
99
android.useAndroidX=true

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,8 @@ public enum LangType {
2525
MARKDOWN(".md"),
2626
ZIG(".zig"),
2727
LUA(".lua"),
28+
MATLAB(".y"),
29+
DIFF(".path"),
2830
NONE("");
2931

3032
private final String langname;
@@ -48,9 +50,9 @@ public LangType getLangTypeFromPath(String filePath) {
4850

4951
public boolean hasFile(String file) {
5052
for (LangType lang : LangType.values()) {
51-
if (file.endsWith(lang.getLangname())) {
52-
return true;
53-
}
53+
if (file.endsWith(lang.getLangname())) {
54+
return true;
55+
}
5456
}
5557
return false;
5658
}

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

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -87,14 +87,13 @@ public LayoutGroup(Context c, AttributeSet s) {
8787
init();
8888
}
8989

90-
public void init() {
90+
void init() {
9191
setOrientation(VERTICAL);
9292
binding = LayoutGroupBinding.inflate(LayoutInflater.from(getContext()), this, true);
9393
if (binding != null) {
9494
removeAllViews();
9595
addView(binding.getRoot());
9696
}
97-
9897

9998
setLayoutParams(
10099
new ViewGroup.LayoutParams(
@@ -138,7 +137,7 @@ public void afterTextChanged(Editable arg0) {
138137
binding.eyeicon.setOnClickListener(
139138
v -> {
140139
boolean newState = !getEditor().getisMarkdownMode();
141-
getEditor().toggleMarkdownView();
140+
getEditor().toggleMarkdownView(type);
142141
ObjectUtils.animIcon(
143142
binding.eyeicon, newState ? R.drawable.eyeoff_24px : R.drawable.eyeon_24px);
144143
});
@@ -157,7 +156,7 @@ public void afterTextChanged(Editable arg0) {
157156
}
158157
return true;
159158
});
160-
setStorkeAnimator();
159+
setStorkeAnimator();
161160
}
162161

163162
public void setText(String text) {
@@ -422,7 +421,6 @@ private void updateTheme() {
422421
updateHighlight();
423422
manager.updateRainbowColors();
424423
setLayoutChange();
425-
426424
}
427425

428426
@Override
@@ -1068,6 +1066,24 @@ public void setIsShowCopyIcon(boolean isShowCopyIcon) {
10681066
binding.copyicon.invalidate();
10691067
}
10701068

1069+
public void setLangGroup(Spinner sp) {
1070+
List<LangType> list = Arrays.asList(LangType.values());
1071+
var ad =
1072+
new ArrayAdapter<LangType>(sp.getContext(), android.R.layout.simple_spinner_item, list);
1073+
sp.setAdapter(ad);
1074+
// ad.setDropDownViewResource(android.R.layout.simple_spinner_item);
1075+
sp.setOnItemSelectedListener(
1076+
new AdapterView.OnItemSelectedListener() {
1077+
@Override
1078+
public void onItemSelected(AdapterView<?> ad, View v, int position, long l) {
1079+
setType(list.get(position));
1080+
}
1081+
1082+
@Override
1083+
public void onNothingSelected(AdapterView<?> ad) {}
1084+
});
1085+
}
1086+
10711087
public void setSaveThemeBySpinner(Spinner sp) {
10721088
List<ThemeManager> themeList = Arrays.asList(ThemeManager.values());
10731089

@@ -1094,9 +1110,11 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
10941110
public void onNothingSelected(AdapterView<?> parent) {}
10951111
});
10961112
}
1113+
10971114
public void setIconRgbMod(boolean iconRgbMod) {
10981115
this.iconRgbMod = iconRgbMod;
10991116
}
1117+
11001118
public void setCardRgb(boolean isRgbCard) {
11011119
this.isRgbCard = isRgbCard;
11021120
}
Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
package ir.ninjacoder.codesnap.Utils;
2+
3+
import android.graphics.Color;
4+
import androidx.core.graphics.ColorUtils;
5+
import ir.ninjacoder.codesnap.LangType;
6+
import ir.ninjacoder.codesnap.antlr4.diff.DiffLexer;
7+
import ir.ninjacoder.codesnap.colorhelper.ColorHelper;
8+
import android.text.SpannableStringBuilder;
9+
import ir.ninjacoder.codesnap.widget.data.SpanStyler;
10+
import java.io.StringReader;
11+
import org.antlr.v4.runtime.CharStreams;
12+
import org.antlr.v4.runtime.Token;
13+
14+
public class CodeHighlighterDiff implements Highlighter {
15+
16+
@Override
17+
public SpannableStringBuilder highlight(LangType types, String code, ColorHelper color)
18+
throws Exception {
19+
20+
SpanStyler span = SpanStyler.create();
21+
DiffLexer lexer = new DiffLexer(CharStreams.fromReader(new StringReader(code)));
22+
23+
Token token;
24+
25+
while ((token = lexer.nextToken()) != null) {
26+
int type = token.getType();
27+
String text = token.getText();
28+
29+
if (type == DiffLexer.EOF) {
30+
break;
31+
}
32+
33+
switch (type) {
34+
case DiffLexer.WS:
35+
case DiffLexer.NEWLINE:
36+
span.addNullText(text);
37+
break;
38+
39+
case DiffLexer.DIFF:
40+
// پس‌زمینه آبی با آلفا برای کلمه کلیدی
41+
span.textWithBackground(
42+
text, Color.parseColor("#FF99FF77"), ColorUtils.setAlphaComponent(Color.parseColor("#FF99FF77"), 64));
43+
break;
44+
45+
case DiffLexer.INDEX:
46+
// پس‌زمینه بنفش با آلفا برای متغیر
47+
span.textWithBackground(
48+
text, Color.parseColor("#FFFCC8B1"), ColorUtils.setAlphaComponent(Color.parseColor("#FFFCC8B1"), 64));
49+
break;
50+
51+
case DiffLexer.OLD_FILE:
52+
case DiffLexer.NEW_FILE:
53+
// پس‌زمینه سبز با آلفا برای فایل‌ها
54+
span.textWithBackground(
55+
text, Color.GREEN, ColorUtils.setAlphaComponent(Color.GREEN, 32));
56+
break;
57+
58+
case DiffLexer.HUNK_HEADER:
59+
// پس‌زمینه نارنجی با آلفا برای هدر hunk
60+
span.textWithBackground(
61+
text, Color.parseColor("#FFFF9800"), ColorUtils.setAlphaComponent(Color.parseColor("#FFFF9800"), 64) // نارنجی
62+
);
63+
break;
64+
65+
case DiffLexer.ADDED_LINE:
66+
// پس‌زمینه سبز بسیار کم‌رنگ برای خطوط اضافه شده
67+
span.textWithBackground(text, Color.GREEN, ColorUtils.setAlphaComponent(Color.GREEN, 32));
68+
break;
69+
70+
case DiffLexer.REMOVED_LINE:
71+
// پس‌زمینه قرمز بسیار کم‌رنگ برای خطوط حذف شده
72+
span.textWithBackground(text, Color.RED, ColorUtils.setAlphaComponent(Color.RED, 32));
73+
break;
74+
75+
case DiffLexer.CONTEXT_LINE:
76+
// پس‌زمینه خاکستری با آلفا برای خطوط context
77+
span.textWithBackground(
78+
text, Color.CYAN, ColorUtils.setAlphaComponent(Color.GRAY, 50));
79+
break;
80+
81+
case DiffLexer.NO_NEWLINE:
82+
// پس‌زمینه زرد با آلفا برای no newline
83+
span.textWithBackground(
84+
text, Color.YELLOW, ColorUtils.setAlphaComponent(Color.YELLOW, 64));
85+
break;
86+
87+
default:
88+
// پس‌زمینه خیلی کم‌رنگ برای متن معمولی
89+
span.textWithBackground(
90+
text, color.getTextnormal(), ColorUtils.setAlphaComponent(color.getTextnormal(), 16));
91+
break;
92+
}
93+
}
94+
95+
return span;
96+
}
97+
}

0 commit comments

Comments
 (0)