Java源码示例:com.vladsch.flexmark.html.renderer.LinkType
示例1
private void render(Emoji node, NodeRendererContext context, HtmlWriter html) {
Emoji emoji = node;
EmojiCheatSheet.EmojiShortcut shortcut = EmojiCheatSheet.getImageShortcut(emoji.getText().toString());
if (shortcut == null) {
// output as text
html.text(":");
context.renderChildren(node);
html.text(":");
} else {
ResolvedLink resolvedLink = context.resolveLink(LinkType.LINK, rootImagePath + shortcut.image + "." + extImage, null);
html.attr("src", resolvedLink.getUrl());
html.attr("alt", "emoji " + shortcut.category + ":" + shortcut.name);
if (!attrImageSize.isEmpty())
html.attr("height", attrImageSize).attr("width", attrImageSize);
if (!attrAlign.isEmpty()) html.attr("align", attrAlign);
html.withAttr(resolvedLink);
html.tagVoid("img");
}
}
示例2
private void render(final VideoLink node, final NodeRendererContext context, final HtmlWriter html) {
final String name = node.getText().toString();
if (context.isDoNotRenderLinks()) {
context.renderChildren(node);
} else if (!TextUtils.isEmpty(name)) {
ResolvedLink resolvedLink = context.resolveLink(LinkType.LINK, node.getUrl().unescape(), null);
if (name.equals("youtube") ||
name.equals("yt")) {
html.attr("class", "player yt-player");
html.withAttr().tag("div");
html.attr("type", "text/html");
html.attr("frameborder", "0");
html.attr("allowfullscreen", "");
html.attr("src", String.format("https://www.youtube.com/embed/%s", resolvedLink.getUrl()));
html.srcPos(node.getChars()).withAttr(resolvedLink).tag("iframe");
html.tag("/iframe");
html.tag("/div");
} else {
context.renderChildren(node);
}
}
}
示例3
@Override
public NodeRenderer create(DataHolder options) {
return new NodeRenderer() {
@Override
public Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
HashSet<NodeRenderingHandler<?>> set = new HashSet<>();
set.add(new NodeRenderingHandler<>(Image.class, new CustomNodeRenderer<Image>() {
@Override
public void render(Image node, NodeRendererContext context, HtmlWriter html) {
if (!context.isDoNotRenderLinks()) {
String altText = new TextCollectingVisitor().collectAndGetText(node);
ResolvedLink resolvedLink = context.resolveLink(LinkType.IMAGE, node.getUrl().unescape(), null);
String url = resolvedLink.getUrl();
if (!node.getUrlContent().isEmpty()) {
// reverse URL encoding of =, &
String content = Escaping.percentEncodeUrl(node.getUrlContent()).replace("+", "%2B").replace("%3D", "=").replace("%26", "&");
url += content;
}
final int index = url.indexOf('@');
if (index >= 0) {
String[] dimensions = url.substring(index + 1, url.length()).split("\\|");
url = url.substring(0, index);
if (dimensions.length == 2) {
String width = dimensions[0] == null || dimensions[0].equals("") ? "auto" : dimensions[0];
String height = dimensions[1] == null || dimensions[1].equals("") ? "auto" : dimensions[1];
html.attr("style", "width: " + width + "; height: " + height);
}
}
html.attr("src", url);
html.attr("alt", altText);
if (node.getTitle().isNotNull()) {
html.attr("title", node.getTitle().unescape());
}
html.srcPos(node.getChars()).withAttr(resolvedLink).tagVoid("img");
}
}
}));
return set;
}
};
}
示例4
@Override
public NodeRenderer create(DataHolder options) {
return new NodeRenderer() {
@Override
public Set<NodeRenderingHandler<?>> getNodeRenderingHandlers() {
HashSet<NodeRenderingHandler<?>> set = new HashSet<>();
set.add(new NodeRenderingHandler<>(Image.class, new CustomNodeRenderer<Image>() {
@Override
public void render(Image node, NodeRendererContext context, HtmlWriter html) {
if (!context.isDoNotRenderLinks()) {
String altText = new TextCollectingVisitor().collectAndGetText(node);
ResolvedLink resolvedLink = context.resolveLink(LinkType.IMAGE, node.getUrl().unescape(), null);
String url = resolvedLink.getUrl();
if (!node.getUrlContent().isEmpty()) {
// reverse URL encoding of =, &
String content = Escaping.percentEncodeUrl(node.getUrlContent()).replace("+", "%2B").replace("%3D", "=").replace("%26", "&");
url += content;
}
final int index = url.indexOf('@');
if (index >= 0) {
String[] dimensions = url.substring(index + 1, url.length()).split("\\|");
url = url.substring(0, index);
if (dimensions.length == 2) {
String width = TextUtils.isEmpty(dimensions[0]) ? "auto" : dimensions[0];
String height = TextUtils.isEmpty(dimensions[1]) ? "auto" : dimensions[1];
html.attr("style", "width: " + width + "; height: " + height);
}
}
html.attr("src", url);
html.attr("alt", altText);
if (node.getTitle().isNotNull()) {
html.attr("title", node.getTitle().unescape());
}
html.srcPos(node.getChars()).withAttr(resolvedLink).tagVoid("img");
}
}
}));
return set;
}
};
}
示例5
private void render(final Twitter node, final NodeRendererContext context, final HtmlWriter html) {
final String name = node.getText().toString();
if (context.isDoNotRenderLinks()) {
context.renderChildren(node);
} else if (!TextUtils.isEmpty(name)) {
String value, url;
try {
value = URLEncoder.encode(context.resolveLink(LinkType.LINK, node.getUrl().unescape(), null).getUrl(), "utf-8");
} catch (UnsupportedEncodingException e) {
context.renderChildren(node);
return;
}
if (name.equals("tweet")) {
url = String.format("https://publish.twitter.com/oembed?url=https://twitter.com/twitter/status/%s", value);
} else if (name.equals("tweet-hide-cards")) {
url = String.format("https://publish.twitter.com/oembed?url=https://twitter.com/twitter/status/%s&hide_media=true", value);
} else if (name.equals("follow")) {
mHtml = String.format("<a href=\"https://twitter.com/%s\" data-size=\"large\" class=\"twitter-follow-button\" data-show-count=\"true\">Follow @%s</a><script async src=\"https://platform.twitter.com/widgets.js\" charset=\"utf-8\"></script>",
value, value);
html.srcPos(node.getChars()).append(mHtml);
return;
} else {
context.renderChildren(node);
return;
}
mHtml = null;
new Thread(new LoadTweetRunnable(url)).start();
mCondition.close();
mCondition.block();
if (mHtml == null) {
context.renderChildren(node);
} else {
mHtml = mHtml.replaceAll("src=\"//", "src=\"https://");
html.srcPos(node.getChars()).append(mHtml);
}
}
}