package com.diandi.demo.util;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.text.Spannable;
import android.text.SpannableString;
import android.text.TextUtils;
import android.text.style.ImageSpan;
import com.diandi.demo.model.diandi.FaceText;
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* *******************************************************************************
* ********* Author : klob(kloblic@gmail.com) .
* ********* Date : 2014-11-29 .
* ********* Time : 11:46 .
* ********* Project name : Diandi1.18 .
* ********* Version : 1.0
* ********* Copyright @ 2014, klob, All Rights Reserved
* *******************************************************************************
*/
public class FaceTextUtils {
public static List<FaceText> faceTexts = new ArrayList<FaceText>();
static {
faceTexts.add(new FaceText("\\ue056"));
faceTexts.add(new FaceText("\\ue057"));
faceTexts.add(new FaceText("\\ue058"));
faceTexts.add(new FaceText("\\ue059"));
faceTexts.add(new FaceText("\\ue105"));
faceTexts.add(new FaceText("\\ue106"));
faceTexts.add(new FaceText("\\ue107"));
faceTexts.add(new FaceText("\\ue108"));
faceTexts.add(new FaceText("\\ue401"));
faceTexts.add(new FaceText("\\ue402"));
faceTexts.add(new FaceText("\\ue403"));
faceTexts.add(new FaceText("\\ue404"));
faceTexts.add(new FaceText("\\ue405"));
faceTexts.add(new FaceText("\\ue406"));
faceTexts.add(new FaceText("\\ue407"));
faceTexts.add(new FaceText("\\ue408"));
faceTexts.add(new FaceText("\\ue409"));
faceTexts.add(new FaceText("\\ue40a"));
faceTexts.add(new FaceText("\\ue40b"));
faceTexts.add(new FaceText("\\ue40d"));
faceTexts.add(new FaceText("\\ue40e"));
faceTexts.add(new FaceText("\\ue40f"));
faceTexts.add(new FaceText("\\ue410"));
faceTexts.add(new FaceText("\\ue411"));
faceTexts.add(new FaceText("\\ue412"));
faceTexts.add(new FaceText("\\ue413"));
faceTexts.add(new FaceText("\\ue414"));
faceTexts.add(new FaceText("\\ue415"));
faceTexts.add(new FaceText("\\ue416"));
faceTexts.add(new FaceText("\\ue417"));
faceTexts.add(new FaceText("\\ue418"));
faceTexts.add(new FaceText("\\ue41f"));
faceTexts.add(new FaceText("\\ue00e"));
faceTexts.add(new FaceText("\\ue421"));
}
public static String parse(String s) {
for (FaceText faceText : faceTexts) {
s = s.replace("\\" + faceText.text, faceText.text);
s = s.replace(faceText.text, "\\" + faceText.text);
}
return s;
}
/**
* toSpannableString
*
* @return SpannableString
* @throws
*/
public static SpannableString toSpannableString(Context context, String text) {
if (!TextUtils.isEmpty(text)) {
SpannableString spannableString = new SpannableString(text);
int start = 0;
Pattern pattern = Pattern.compile("\\\\ue[a-z0-9]{3}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String faceText = matcher.group();
String key = faceText.substring(1);
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(),
context.getResources().getIdentifier(key, "drawable", context.getPackageName()), options);
ImageSpan imageSpan = new ImageSpan(context, bitmap);
int startIndex = text.indexOf(faceText, start);
int endIndex = startIndex + faceText.length();
if (startIndex >= 0)
spannableString.setSpan(imageSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
start = (endIndex - 1);
}
return spannableString;
} else {
return new SpannableString("");
}
}
public static SpannableString toSpannableString(Context context, String text, SpannableString spannableString) {
int start = 0;
Pattern pattern = Pattern.compile("\\\\ue[a-z0-9]{3}", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String faceText = matcher.group();
String key = faceText.substring(1);
BitmapFactory.Options options = new BitmapFactory.Options();
// options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeResource(context.getResources(), context.getResources()
.getIdentifier(key, "drawable", context.getPackageName()), options);
ImageSpan imageSpan = new ImageSpan(context, bitmap);
int startIndex = text.indexOf(faceText, start);
int endIndex = startIndex + faceText.length();
if (startIndex >= 0)
spannableString.setSpan(imageSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
start = (endIndex - 1);
}
return spannableString;
}
}