Skip to content

Instantly share code, notes, and snippets.

@francisnnumbi
Created May 29, 2017 03:48
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save francisnnumbi/1c103fb1b5eb89200c4594188e591d0c to your computer and use it in GitHub Desktop.
Save francisnnumbi/1c103fb1b5eb89200c4594188e591d0c to your computer and use it in GitHub Desktop.
i need your advice. this is the class i use for highlighting my text in my EditText. It works fine, well to some extents! But when the text starts growing in size, it starts freezing! I know, this is due to multiple while...loops. My concern is the way of changing so that i have at least one loop.
package fnn.smirl.note.util;
import java.util.regex.*;
import android.text.*;
import android.text.style.*;
import android.graphics.*;
import java.util.*;
public class EditorUtils implements Tokenize {
public static void formatEditor(Editable ssb) {
Matcher mat = END.matcher(ssb);
// while (!mat.hitEnd()) {
// mat.usePattern(SPACE);
// mat.find();
StyleSpan[] ss = ssb.getSpans(0, ssb.toString().length(), StyleSpan.class);
for (StyleSpan as : ss)ssb.removeSpan(as);
ForegroundColorSpan[] dss = ssb.getSpans(0, ssb.toString().length(), ForegroundColorSpan.class);
for (ForegroundColorSpan as : dss)ssb.removeSpan(as);
mat.usePattern(NUMBER);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.BOLD),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(BLOCK_NAME);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.BOLD),
mat.start(), mat.end() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(BLOCK_NAME_COLOR)),
mat.start(), mat.end() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(RESERVED_KEYS);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.BOLD),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(RESERVED_KEYS_COLOR)),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(PRIMITIVE_TYPE);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.BOLD_ITALIC),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(PRIMITIVE_TYPE_COLOR)),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(BLOCK_SIGN);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.BOLD),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(BLOCK_SIGN_COLOR)),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(INV_COMMA);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.ITALIC),
mat.start() + 1, mat.end() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(INV_COMMA_COLOR)),
mat.start() + 1, mat.end() - 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
mat.usePattern(COMMENT_BLOCK);
while (mat.find()) {
ssb.setSpan(new StyleSpan(Typeface.ITALIC),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ssb.setSpan(new ForegroundColorSpan(Color.parseColor(COMMENT_BLOCK_COLOR)),
mat.start(), mat.end(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
// mat.usePattern(END);
// if(mat.find()) {
// }
// }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment