package org.wordpress.android.util.helpers;
import android.text.Editable;
import android.text.Html;
import android.text.style.BulletSpan;
import android.text.style.LeadingMarginSpan;
import org.xml.sax.XMLReader;
import java.util.ArrayList;
import java.util.List;
/**
* Handle tags that the Html class doesn't understand
* Tweaked from source at http://stackoverflow.com/questions/4044509/android-how-to-use-the-html-taghandler
*/
public class WPHtmlTagHandler implements Html.TagHandler {
private static final int SPAN_INDENT_WIDTH = 15;
private int mListItemCount = 0;
private List<String> mListParents = new ArrayList<>();
@Override
public void handleTag(final boolean opening, final String tag, Editable output,
final XMLReader xmlReader) {
if (tag != null) {
switch (tag) {
case "WPUL":
if (opening)
mListParents.add("ul");
else
mListParents.remove("ul");
break;
case "WPOL":
if (opening)
mListParents.add("ol");
else
mListParents.remove("ol");
break;
case "WPLI":
if (!opening)
handleListTag(output);
break;
case "dd":
if (opening)
mListParents.add("dd");
else
mListParents.remove("dd");
break;
}
}
}
private void handleListTag(Editable output) {
int size = mListParents.size();
if (size > 0 && output != null) {
if ("ul".equals(mListParents.get(size - 1))) {
output.append("\n");
String[] split = output.toString().split("\n");
int start = 0;
if (split.length != 1) {
int lastIndex = split.length - 1;
start = output.length() - split[lastIndex].length() - 1;
}
output.setSpan(new BulletSpan(SPAN_INDENT_WIDTH * mListParents.size()), start, output.length(), 0);
} else if ("ol".equals(mListParents.get(size - 1))) {
mListItemCount++;
output.append("\n");
String[] split = output.toString().split("\n");
int start = 0;
if (split.length != 1) {
int lastIndex = split.length - 1;
start = output.length() - split[lastIndex].length() - 1;
}
output.insert(start, mListItemCount + ". ");
output.setSpan(new LeadingMarginSpan.Standard(SPAN_INDENT_WIDTH * mListParents.size()), start,
output.length(), 0);
}
}
}
}