package net.nightwhistler.htmlspanner.handlers.attributes;
import android.text.SpannableStringBuilder;
import android.util.Log;
import net.nightwhistler.htmlspanner.SpanStack;
import net.nightwhistler.htmlspanner.css.CSSCompiler;
import net.nightwhistler.htmlspanner.style.Style;
import net.nightwhistler.htmlspanner.handlers.StyledTextHandler;
import org.htmlcleaner.TagNode;
/**
* Handler which parses style attributes and modifies the style accordingly.
*/
public class StyleAttributeHandler extends WrappingStyleHandler {
public StyleAttributeHandler(StyledTextHandler wrapHandler) {
super(wrapHandler);
}
@Override
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end, Style useStyle,
SpanStack spanStack) {
String styleAttr = node.getAttributeByName("style");
if ( getSpanner().isAllowStyling() && styleAttr != null ) {
super.handleTagNode(node, builder, start, end,
parseStyleFromAttribute(useStyle, styleAttr),
spanStack);
} else {
super.handleTagNode(node, builder, start, end, useStyle, spanStack);
}
}
private Style parseStyleFromAttribute(Style baseStyle, String attribute) {
Style style = baseStyle;
String[] pairs = attribute.split(";");
for ( String pair: pairs ) {
String[] keyVal = pair.split(":");
if ( keyVal.length != 2) {
Log.e("StyleAttributeHandler", "Could not parse attribute: " + attribute );
return baseStyle;
}
String key = keyVal[0].toLowerCase().trim();
String value = keyVal[1].toLowerCase().trim();
CSSCompiler.StyleUpdater updater = CSSCompiler.getStyleUpdater(key, value);
if ( updater != null ) {
style = updater.updateStyle(style, getSpanner());
}
}
return style;
}
}