首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析标记的Commonmark库:如何解析三个刻度

解析标记的Commonmark库:如何解析三个刻度
EN

Stack Overflow用户
提问于 2019-09-04 23:12:49
回答 1查看 307关注 0票数 0

我有这样的代码:

代码语言:javascript
复制
public class TestCommons {
    public static void main(String[] args) {

        Parser parser = Parser.builder().build();
        Node document = parser.parse("*`Yes.` This* **is** ```\nSparta```");
        HtmlRenderer renderer = HtmlRenderer.builder().build();
        System.out.println(renderer.render(document));  //<p><em><code>Yes.</code> This</em> <strong>is</strong> <code> Sparta</code></p>
        }
}

所以可以看到,它用<code>标签代替了一滴答和三滴答。不过,我想用<pre>标签代替三滴答。有办法做到这一点吗?我只在他们的github上找到了这个例子:

代码语言:javascript
复制
Parser parser = Parser.builder().build();
HtmlRenderer renderer = HtmlRenderer.builder()
        .nodeRendererFactory(new HtmlNodeRendererFactory() {
            public NodeRenderer create(HtmlNodeRendererContext context) {
                return new IndentedCodeBlockNodeRenderer(context);
            }
        })
        .build();

Node document = parser.parse("*`Yes.` This* **is** ```\nSparta```");
renderer.render(document);
//<p><em><code>Yes.</code> This</em> <strong>is</strong> <code> Sparta</code></p>

class IndentedCodeBlockNodeRenderer implements NodeRenderer {

    private final HtmlWriter html;

    IndentedCodeBlockNodeRenderer(HtmlNodeRendererContext context) {
        this.html = context.getWriter();
    }

    @Override
    public Set<Class<? extends Node>> getNodeTypes() {
        // Return the node types we want to use this renderer for.
        return Collections.<Class<? extends Node>>singleton(IndentedCodeBlock.class);
    }

    @Override
    public void render(Node node) {
        // We only handle one type as per getNodeTypes, so we can just cast it here.
        IndentedCodeBlock codeBlock = (IndentedCodeBlock) node;
        html.line();
        html.tag("pre");
        html.text(codeBlock.getLiteral());
        html.tag("/pre");
        html.line();
    }
}

但是,它提供了相同的结果,并且似乎只区分前面有多个/n的字符串,以限定<pre>标记。

转向的方法是什么

代码语言:javascript
复制
"*`Yes.` This* **is** ```\nSparta```"

转到

代码语言:javascript
复制
<p><em><code>Yes.</code> This</em> <strong>is</strong> <pre> Sparta</pre></p>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-05 13:45:54

请注意,有两种不同类型的内容可以被3条滴答包围:

  1. 只要开号和结束号匹配,代码跨度可以由任意数量的回标分隔,包括三个。代码跨度不是块级,只被包装在<code>标记中。
  2. 有围栏的代码块,它需要三个或更多的回标,必须被行分隔符包围,并且分隔符必须是在行上的。有围栏的代码块是块级的,并被包装在<pre><code>标记中。

我想你指的是有围栏的代码块。请注意,它们需要更多字符串中的换行符。因此,您的字符串被正确地解析为代码跨度。如果您希望将被3个背板包围的代码识别为一个有围栏的代码块,则需要添加一些额外的换行符:

代码语言:javascript
复制
"*`Yes.` This* **is** \n```\nSparta\n```"

或者,作为格式化字符串:

代码语言:javascript
复制
*`Yes.` This* **is** 

斯巴达

代码语言:javascript
复制

上述内容将由Commonmark解析为:

代码语言:javascript
复制
<p><em><code>Yes.</code> This</em>  <strong>is</strong>
</p>
<pre><code>Sparta
</code></pre>

注意,如果删除任何一个换行,那么它就被认为是一个代码跨度,而不是一个有围栏的代码块。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57796594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档