package gutenberg.itext.pegdown;
import com.itextpdf.text.Element;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import gutenberg.itext.ITextContext;
import gutenberg.itext.ITextUtils;
import gutenberg.itext.model.SourceCode;
import gutenberg.util.Attributes;
import org.pegdown.ast.Node;
import org.pegdown.ast.VerbatimNode;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
/**
* @author <a href="http://twitter.com/aloyer">@aloyer</a>
*/
public class VerbatimNodeProcessor extends Processor {
private final Logger log = LoggerFactory.getLogger(VerbatimNodeProcessor.class);
public VerbatimNodeProcessor() {
}
@Override
public void process(int level, Node node, InvocationContext context) {
VerbatimNode vNode = (VerbatimNode) node;
SourceCode code = convertToSourceCode(vNode);
Attributes attributes = context.peekAttributes(level);
applyAttributes(code, attributes);
ITextContext iTextContext = context.iTextContext();
List<Element> elements = iTextContext.emitButCollectElements(code);
for (Element element : elements) {
ITextUtils.applyAttributes(element, attributes);
context.append(element);
}
}
private SourceCode convertToSourceCode(VerbatimNode vNode) {
String lang = vNode.getType();
String content = vNode.getText();
return new SourceCode(lang, content);
}
private void applyAttributes(SourceCode code, Attributes attributes) {
code.showLineNumbers(attributes.isOn("linenos"));
}
}