package net.nightwhistler.pageturner.view.bookview; import android.text.SpannableStringBuilder; import net.nightwhistler.htmlspanner.SpanStack; import net.nightwhistler.htmlspanner.TagNodeHandler; import org.htmlcleaner.TagNode; /** * Many books use * <p> * and * <h1>tags as anchor points. This class harvests those point by wrapping * the original handler. * * @author Alex Kuiper * */ public class AnchorHandler extends TagNodeHandler { private TagNodeHandler wrappedHandler; private AnchorCallback callback; public AnchorHandler(TagNodeHandler wrappedHandler) { this.wrappedHandler = wrappedHandler; } @Override public void beforeChildren(TagNode node, SpannableStringBuilder builder, SpanStack spanStack) { this.wrappedHandler.beforeChildren(node, builder, spanStack); } @Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end, SpanStack spanStack) { String id = node.getAttributeByName("id"); if (id != null) { callback.registerAnchor(id, start); } wrappedHandler.handleTagNode(node, builder, start, end, spanStack); } public void setCallback( AnchorCallback callback ) { this.callback = callback; } public static interface AnchorCallback { void registerAnchor( String anchor, int position ); } }