flexmark-java
是java
版的Markdown
转换工具,基本支持Markdown
所有的语法,而且扩展性也不错;本文主要是通过扩展形式给链接添加target
属性- 本文的扩展还将支持
Spring Properties
来动态配置, 支持域名排除、支持相对路径排除、支持自定义target
属性的值.
定义Properties
配置类 LinkTargetProperties
@Configuration
@ConfigurationProperties(prefix = "markdown.link")
public class LinkTargetProperties{
/**
* 排除添加 target 属性的链接
*/
private List<String> excludes;
/**
* target 属性的值
*/
private String target = "_target";
/**
* 相对路径排除
*/
private boolean relativeExclude = true;
// get 和 set 方法省略
}
实现 AttributeProvider
的类 LinkTargetAttributeProvider
扩展
flexmark-java
主要是通过实现AttributeProvider
进行修改
public class LinkTargetAttributeProvider implements AttributeProvider {
// 用于获取配置的数据
private final DataHolder dataHolder;
// 绝对路径正则匹配
private final Pattern pattern = Pattern.compile("^[a-zA-z]+://[^\\s]*");
public LinkTargetAttributeProvider(DataHolder dataHolder) {
this.dataHolder = dataHolder;
}
@Override
public void setAttributes(@NotNull Node node, @NotNull AttributablePart part, @NotNull Attributes attributes) {
// 只处理 Link
if (node instanceof Link && part == AttributablePart.LINK) {
// 获取 href 标签
Attribute hrefAttr = attributes.get("href");
if (hrefAttr