解析markdown文档并且代码高亮

解析markdown文档并且代码高亮

前言:

安装如下包:

npm i marked
npm i highlight.js

[marked 官方文档](Using Advanced - Marked Documentation)

[highlight 官方文档](How to use highlight.js (highlightjs.org))

1、使用说明

// Create reference instance
import { marked } from 'marked';

// Set options
// `highlight` example uses https://highlightjs.org
marked.setOptions({
  renderer: new marked.Renderer(),
  highlight: function(code, lang) {
    const hljs = require('highlight.js');
    const language = hljs.getLanguage(lang) ? lang : 'plaintext';
    return hljs.highlight(code, { language }).value;
  },
  langPrefix: 'hljs language-', // highlight.js css expects a top-level 'hljs' class.
  pedantic: false,
  gfm: true,
  breaks: false,
  sanitize: false,
  smartLists: true,
  smartypants: false,
  xhtml: false
});

// Compile
console.log(marked.parse(markdownString));

[注] 实例来自官网

2、完整代码

当前代码应用于next.js

import { marked } from 'marked'
import hljs from "highlight.js";

export async function getBlogDataByPath(fullPath) {
    marked.setOptions({
        renderer: new marked.Renderer(),
        highlight: function (code, lang) {
            console.log(hljs.getLanguage(lang))
            const language = hljs.getLanguage(lang) ? lang : 'plaintext';
            return hljs.highlight(code, { language }).value;
        },
        langPrefix: 'hljs language-', // highlight.js css expects a top-level 'hljs' class.
        pedantic: false,
        gfm: true,
        breaks: false,
        sanitize: false,
        smartLists: true,
        smartypants: false,
        xhtml: false
    });
    const fileContents = fs.readFileSync(fullPath, 'utf8')
    const matterResult = matter(fileContents)
    const contentHtml = marked.parse(fileContents)
    return {
        "id": fullPath,
        contentHtml,
        "content": fileContents.toString(),
        ...matterResult.data
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
您好,您可以使用以下的Java库来解析Markdown文档并获取其中的图片和HTML中的img标签路径: 1. Commonmark-java:这是一个流行的Java库,可以将Markdown文档解析为HTML或AST。您可以使用AST来获取文档中的图片和HTML中的img标签路径。 2. Flexmark-java:这是另一个解析Markdown文档的Java库,它提供了与Commonmark-java类似的功能,但它还支持扩展,例如解析代码块中的语法高亮显示。 您可以使用以下代码片段来解析Markdown文档并获取其中的图片和HTML中的img标签路径: ```java import com.vladsch.flexmark.ast.*; import com.vladsch.flexmark.ext.abbreviation.AbbreviationExtension; import com.vladsch.flexmark.ext.anchorlink.AnchorLinkExtension; import com.vladsch.flexmark.ext.aside.AsideExtension; import com.vladsch.flexmark.ext.autolink.AutolinkExtension; import com.vladsch.flexmark.ext.definition.DefinitionExtension; import com.vladsch.flexmark.ext.emoji.EmojiExtension; import com.vladsch.flexmark.ext.enumerated.reference.EnumeratedReferenceExtension; import com.vladsch.flexmark.ext.footnotes.FootnoteExtension; import com.vladsch.flexmark.ext.gfm.strikethrough.StrikethroughExtension; import com.vladsch.flexmark.ext.gfm.tasklist.TaskListExtension; import com.vladsch.flexmark.ext.tables.TablesExtension; import com.vladsch.flexmark.ext.typographic.TypographicExtension; import com.vladsch.flexmark.ext.yaml.front.matter.YamlFrontMatterExtension; import com.vladsch.flexmark.html.HtmlRenderer; import com.vladsch.flexmark.parser.Parser; import com.vladsch.flexmark.util.ast.Node; import com.vladsch.flexmark.util.ast.VisitHandler; import com.vladsch.flexmark.util.ast.Visitor; import com.vladsch.flexmark.util.data.MutableDataSet; import java.util.Arrays; import java.util.List; public class MarkdownParser { public static void main(String[] args) { String markdown = "# Hello World\n" + "\n" + "This is a **Markdown** document\n" + "\n" + "![image1](/path/to/image1.jpg)\n" + "\n" + "<img src=\"/path/to/image2.jpg\" />\n" + "\n" + "It also contains some `code` blocks\n"; MutableDataSet options = new MutableDataSet(); options.set(Parser.EXTENSIONS, Arrays.asList( AbbreviationExtension.create(), AnchorLinkExtension.create(), AsideExtension.create(), AutolinkExtension.create(), DefinitionExtension.create(), EmojiExtension.create(), EnumeratedReferenceExtension.create(), FootnoteExtension.create(), StrikethroughExtension.create(), TablesExtension.create(), TaskListExtension.create(), TypographicExtension.create(), YamlFrontMatterExtension.create() )); Parser parser = Parser.builder(options).build(); Node document = parser.parse(markdown); // Find all image nodes and print their URLs List<VisitHandler<Image>> imageHandlers = Arrays.asList( new VisitHandler<>(Image.class, image -> { String imageUrl = image.getUrl().toString(); System.out.println("Found image: " + imageUrl); }) ); Visitor imageVisitor = new Visitor(imageHandlers); imageVisitor.visit(document); // Find all HTML image tags and print their URLs List<VisitHandler<HtmlInline>> htmlHandlers = Arrays.asList( new VisitHandler<>(HtmlInline.class, html -> { if (html.getTagName().equals("img")) { String imageUrl = html.getAttribute("src").getValue(); System.out.println("Found HTML image: " + imageUrl); } }) ); Visitor htmlVisitor = new Visitor(htmlHandlers); htmlVisitor.visit(document); // Render the document to HTML and replace all image URLs with {{service}} HtmlRenderer renderer = HtmlRenderer.builder(options).build(); String html = renderer.render(document); html = html.replaceAll("<img\\s+src=\"[^\"]+\"\\s*/?>", "<img src=\"{{service}}\" />"); System.out.println(html); } } ``` 在这个例子中,我们使用Flexmark-java库来解析Markdown文档,使用AST遍历获取其中的图片和HTML中的img标签路径,并使用HtmlRenderer将文档渲染为HTML,然后使用正则表达式将所有的图片URL替换为{{service}}。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值