@Name("ctrl") public class KeyboardInlineMacroProcessor extends InlineMacroProcessor { @Override public Object process(ContentNode parent, String target, Map<String, Object> attributes) { Map<String, Object> attrs = new HashMap<String, Object>(); attrs.put("keys", Arrays.asList("Ctrl", target)); // <1> return createPhraseNode(parent, "kbd", (String) null, attrs) // <2> .convert(); // <3> } } //end::include[]
@Name("big") public static class LoggingProcessor extends BlockProcessor { @Override public Object process(StructuralNode parent, Reader reader, Map<String, Object> attributes) { log(new LogRecord(Severity.INFO, parent.getSourceLocation(), "Hello Log")); final List<String> strings = reader.readLines().stream() .map(String::toUpperCase) .collect(Collectors.toList()); return createBlock(parent, "paragraph", strings); } }
@Name(AnnotatedTestProcessor.NAME) public static class AnnotatedTestProcessor extends AbstractTestProcessor { public static final String NAME = "annotated"; }
@Name(AnnotatedTestProcessor.NAME) public static class AnnotatedTestProcessor extends AbstractTestProcessor { public static final String NAME = "annotated"; }
@Name(AnnotatedTestProcessor.NAME) public static class AnnotatedTestProcessor extends AbstractTestProcessor { public static final String NAME = "annotated"; }
@Name("foo") public class ImageInlineMacroProcessor extends InlineMacroProcessor { @Override public Object process(ContentNode parent, String target, Map<String, Object> attributes) { Map<String, Object> options = new HashMap<String, Object>(); options.put("type", "image"); // <1> options.put("target", "http://foo.bar/" + target); // <2> String[] items = target.split("\\|"); Map<String, Object> attrs = new HashMap<String, Object>(); attrs.put("alt", "Image not available"); // <3> attrs.put("width", "64"); attrs.put("height", "64"); return createPhraseNode(parent, "image", (String) null, attrs, options) // <4> .convert(); // <5> } } //end::include[]
@Name("rightclick") public class ContextMenuInlineMacroProcessor extends InlineMacroProcessor { @Override public Object process(ContentNode parent, String target, Map<String, Object> attributes) { String[] items = target.split("\\|"); Map<String, Object> attrs = new HashMap<String, Object>(); attrs.put("menu", "Right click"); // <1> List<String> submenus = new ArrayList<String>(); for (int i = 0; i < items.length - 1; i++) { submenus.add(items[i]); } attrs.put("submenus", submenus); attrs.put("menuitem", items[items.length - 1]); return createPhraseNode(parent, "menu", (String) null, attrs) // <2> .convert(); // <3> } } //end::include[]
@Name("gist") // <1> public class GistBlockMacroProcessor extends BlockMacroProcessor { // <2> @Override public Object process( // <3> StructuralNode parent, String target, Map<String, Object> attributes) { String content = new StringBuilder() .append("<div class=\"openblock gist\">") .append("<div class=\"content\">") .append("<script src=\"https://gist.github.com/") .append(target) // <4> .append(".js\"></script>") .append("</div>") .append("</div>").toString(); return createBlock(parent, "pass", content); // <5> } } //end::include[]
@Name("issue") // <1> public class IssueInlineMacroProcessor extends InlineMacroProcessor { // <2> @Override public Object process( // <3> ContentNode parent, String target, Map<String, Object> attributes) { String href = new StringBuilder() .append("https://github.com/") .append(attributes.containsKey("repo") ? attributes.get("repo") : parent.getDocument().getAttribute("repo")) .append("/issues/") .append(target).toString(); Map<String, Object> options = new HashMap<>(); options.put("type", ":link"); options.put("target", href); return createPhraseNode(parent, "anchor", target, attributes, options) // <4> .convert(); // <5> } } //end::include[]
@Name("yell") // <1> @Contexts({Contexts.PARAGRAPH}) // <2> @ContentModel(ContentModel.SIMPLE) // <3> public class YellBlockProcessor extends BlockProcessor { // <4> @Override public Object process( // <5> StructuralNode parent, Reader reader, Map<String, Object> attributes) { String content = reader.read(); String yellContent = content.toUpperCase(); return createBlock(parent, "paragraph", yellContent, attributes); } } //end::include[]