Created
May 29, 2017 03:48
-
-
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.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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