Skip to content

Commit 6afc2aa

Browse files
committed
indent { }
1 parent a16fefa commit 6afc2aa

File tree

1 file changed

+34
-11
lines changed

1 file changed

+34
-11
lines changed

lib-n-ide/src/main/java/com/duy/ide/editor/view/HighlightEditorView.java

Lines changed: 34 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -136,36 +136,59 @@ private void setDefaultFilters() {
136136
//indent filters
137137
final InputFilter indentFilter = new InputFilter() {
138138
@Override
139-
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
139+
public CharSequence filter(CharSequence source, final int start, final int end,
140+
final Spanned dest, final int dstart, final int dend) {
140141
if (mIsAutoIndent) {
141142
if (!(source.length() == 1 && source.charAt(0) == '\n')) {
142143
return null;
143144
}
144-
dstart = dstart - 1;
145-
if (dstart < 0 || dstart >= dest.length())
145+
int startIndex = dstart - 1;
146+
if (startIndex < 0 || startIndex >= dest.length())
146147
return null;
147148

148149
char ch;
149-
for (; dstart >= 0; dstart--) {
150-
ch = dest.charAt(dstart);
150+
for (; startIndex >= 0; startIndex--) {
151+
ch = dest.charAt(startIndex);
151152
if (ch != '\r')
152153
break;
153154
}
154155

155-
StringBuilder sb = new StringBuilder();
156-
for (int i = dstart; i >= 0; i--) {
156+
StringBuilder indent = new StringBuilder();
157+
for (int i = startIndex; i >= 0; i--) {
157158
ch = dest.charAt(i);
158159
if (ch == '\n' || ch == '\r') {
159160
break;
160161
} else if (ch == ' ' || ch == '\t') {
161-
sb.append(ch);
162+
indent.append(ch);
162163
} else {
163-
sb.setLength(0);
164+
indent.setLength(0);
164165
}
165166
}
166-
sb.reverse();
167+
indent.reverse();
168+
169+
//bad code
170+
//common support java,c and c++
171+
// TODO: 08-Jun-18 dynamic change
172+
if (dest.charAt(dend) == '}' && dstart - 1 >= 0 && dest.charAt(dstart - 1) == '{') {
173+
int mstart = dstart - 2;
174+
while (mstart >= 0 && dest.charAt(mstart) != '\n') {
175+
mstart--;
176+
}
177+
String closeIndent = "";
178+
if (mstart >= 0) {
179+
mstart++;
180+
int zstart = mstart;
181+
while (zstart < dest.length() && dest.charAt(zstart) == ' ') {
182+
zstart++;
183+
}
184+
closeIndent = dest.toString().substring(mstart, zstart);
185+
}
186+
return source +
187+
(indent.toString() + " ") +
188+
CURSOR + "\n" + closeIndent;
189+
}
167190

168-
return "\n" + sb.toString();
191+
return "\n" + indent.toString();
169192
}
170193
return null;
171194
}

0 commit comments

Comments
 (0)