<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          commonmark-javaJava 的 Markdown 解析器

          聯(lián)合創(chuàng)作 · 2023-09-30 14:40

          commonmark-java 是一個 Markdown 解析器,一個基于 CommonMark 規(guī)范解析和渲染 Markdown 文本的 Java 庫。具有以下特性:

          • 小(最小化的依賴)

          • 快 (比 pegdown 快 10-20 倍,在倉庫中可查看 benchmarks)

          • 靈活 (解析后可操作 AST,自定義 HTML 渲染)

          • 可擴(kuò)展(表格,刪除線,自動鏈接等等)

          Maven:

          <dependency>
              <groupId>com.atlassian.commonmark</groupId>
              <artifactId>commonmark</artifactId>
              <version>0.9.0</version>
          </dependency>

          解析和渲染成 HTML

          import org.commonmark.node.*;
          import org.commonmark.parser.Parser;
          import org.commonmark.renderer.html.HtmlRenderer;
          
          Parser parser = Parser.builder().build();
          Node document = parser.parse("This is *Sparta*");
          HtmlRenderer renderer = HtmlRenderer.builder().build();
          renderer.render(document);  // "<p>This is <em>Sparta</em></p>\n"

          你也可以對輸出 HTML 進(jìn)行屬性定制:

          Parser parser = Parser.builder().build();
          HtmlRenderer renderer = HtmlRenderer.builder()
                  .attributeProviderFactory(new AttributeProviderFactory() {
                      public AttributeProvider create(AttributeProviderContext context) {
                          return new ImageAttributeProvider();
                      }
                  })
                  .build();
          
          Node document = parser.parse("![text](/url.png)");
          renderer.render(document);
          // "<p><img src=\"/url.png\" alt=\"text\" class=\"border\" /></p>\n"
          
          class ImageAttributeProvider implements AttributeProvider {
              @Override
              public void setAttributes(Node node, String tagName, Map<String, String> attributes) {
                  if (node instanceof Image) {
                      attributes.put("class", "border");
                  }
              }
          }

          對輸出的 HTML 進(jìn)行渲染定制:

          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("Example:\n\n    code");
          renderer.render(document);
          // "<p>Example:</p>\n<pre>code\n</pre>\n"
          
          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();
              }
          }
          瀏覽 37
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          編輯 分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  w黄视频欧美精品韩日 | 欧美三日本三级少妇三级999 | 九一麻豆影院无码精品 | 黄色一级片日韩学生妹无套无码内射视频 | 中文字幕无码播放 |