@Override public void visit(Emoji node) { visitor.visit(node); } }),
public static Extension create() { return new EmojiExtension(); }
@Override public void getAstExtra(StringBuilder out) { delimitedSegmentSpanChars(out, openingMarker, text, closingMarker, "text"); }
public static EmojiResolvedShortcut getEmojiText(String emojiId, EmojiShortcutType useShortcutType, EmojiImageType useImageType, String rootImagePath) { EmojiReference.Emoji emoji = EmojiShortcuts.getEmojiFromShortcut(emojiId); String emojiText = null; boolean isUnicode = false; String imageText = null; if (useImageType.isUnicode && emoji.unicodeChars != null) { unicodeText = EmojiShortcuts.getUnicodeChars(emoji); imageText = useShortcutType.getPreferred(cheatSheetFile, gitHubFile); return new EmojiResolvedShortcut(emoji, emojiText, isUnicode, alt);
@Signature public PMarkdownOptions addEmojiExtension(@Arg(type = HintType.ARRAY) @Optional("null") Memory options) { parserExtensions.add(EmojiExtension.create()); Memory imageType = options.valueOfIndex("imageType"); if (!imageType.isNull()) { this.options.set(EmojiExtension.USE_IMAGE_TYPE, EmojiImageType.valueOf(imageType.toString())); } Memory shortcutType = options.valueOfIndex("shortcutType"); if (!shortcutType.isNull()) { this.options.set(EmojiExtension.USE_SHORTCUT_TYPE, EmojiShortcutType.valueOf(shortcutType.toString())); } Memory imagePath = options.valueOfIndex("imagePath"); if (!shortcutType.isNull()) { this.options.set(EmojiExtension.ROOT_IMAGE_PATH, imagePath.toString()); } Memory imageClass = options.valueOfIndex("imageClass"); if (!shortcutType.isNull()) { this.options.set(EmojiExtension.ATTR_IMAGE_CLASS, imageClass.toString()); } Memory imageSize = options.valueOfIndex("imageSize"); if (!shortcutType.isNull()) { this.options.set(EmojiExtension.ATTR_IMAGE_SIZE, imageSize.toString()); } return this; }
public static EmojiResolvedShortcut getEmojiText(Emoji node, EmojiShortcutType useShortcutType, EmojiImageType useImageType, String rootImagePath) { return getEmojiText(node.getText().toString(), useShortcutType, useImageType, rootImagePath); }
void render(Emoji node, NodeFormatterContext context, MarkdownWriter markdown) { markdown.append(node.getOpeningMarker()); markdown.appendNonTranslating(node.getText()); markdown.append(node.getClosingMarker()); }
private static MutableDataHolder getMarkdownOptions() { return new MutableDataSet() .set(HtmlRenderer.ESCAPE_HTML, true) .set(EmojiExtension.USE_SHORTCUT_TYPE, EmojiShortcutType.ANY_GITHUB_PREFERRED) // for full GFM table compatibility add the following table extension options: .set(TablesExtension.COLUMN_SPANS, false) .set(TablesExtension.APPEND_MISSING_COLUMNS, true) .set(TablesExtension.DISCARD_EXTRA_COLUMNS, true) .set(TablesExtension.HEADER_SEPARATOR_COLUMN_MATCH, true) .set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create(), EmojiExtension.create(), StrikethroughExtension.create(), TaskListExtension.create())); }
private void render(Emoji node, NodeRendererContext context, HtmlWriter html) { Emoji emoji = (Emoji) node; String shortcut = shortCutMap.get(emoji.getText().toString()); if (shortcut == null) { // output as text html.text(":"); context.renderChildren(node); html.text(":"); } else { html.raw(shortcut); } }
@Override public void process(Delimiter opener, Delimiter closer, int delimitersUsed) { // Normal case, wrap nodes between delimiters in emoji node. // don't allow any spaces between delimiters if (opener.getInput().subSequence(opener.getEndIndex(), closer.getStartIndex()).indexOfAny(BasedSequence.WHITESPACE_CHARS) == -1) { Emoji emoji = new Emoji(opener.getTailChars(delimitersUsed), BasedSequence.NULL, closer.getLeadChars(delimitersUsed)); opener.moveNodesBetweenDelimitersTo(emoji, closer); } else { opener.convertDelimitersToText(delimitersUsed, closer); } } }