@@ -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