package com.fourlastor.dante;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import com.fourlastor.dante.parser.Block;
import com.fourlastor.dante.parser.BlockListener;
import com.fourlastor.dante.parser.ParseListener;
import com.fourlastor.dante.parser.Parser;
import java.util.ArrayList;
public class Dante implements ParseListener {
private final Parser parser;
private final ArrayList<BlockListener> listeners;
private SpannableStringBuilder builder;
public Dante(Parser parser) {
this.parser = parser;
this.listeners = new ArrayList<>();
parser.register(this);
}
public Spanned parse(String string) {
builder = new SpannableStringBuilder();
parser.parse(string);
return builder;
}
@Override public void characters(String string) {
builder.append(string);
}
@Override public void start(Block block) {
for (BlockListener listener: listeners) {
if (listener.match(block)) {
listener.start(block, builder);
}
}
}
@Override public void end(Block block) {
for (BlockListener listener: listeners) {
if (listener.match(block)) {
listener.end(block, builder);
}
}
}
public void register(BlockListener listener) {
this.listeners.add(listener);
}
}