markdown-it 简介 markdown-it 是一个辅助解析 markdown 的库,可以完成从 # test 到 <h1>test</h1>的转换。 它同时支持浏览器环境和 Node 环境,本质上和 babel 类似,不同之处在于,babel 解析的是 ...
markdown-it 简介 markdown-it 是一个辅助解析 markdown 的库,可以完成从 # test 到
的转换。 它同时支持浏览器环境和 Node 环境,本质上和 babel 类似,不同之处在于,babel 解析的是 JavaScript。 说到解析,实际上称为解释(interpreter)或者编译(compiler)更为令人熟悉。总归绕不开词法分析和语法分析这两个过程。 markdown-it 官方给了一个<a href="https://markdown-it.github.io/">在线示例</a>,可以让我们直观地得到 markdown 经过解析后的结果。 我们也可以手动执行下面代码得到同样的结果:
const md = new MarkdownIt()
let tokens = md.parse('# test')
console.log(tokens)
vue使用示例
<template>
<el-row>
<el-col :span="12">
<el-input
style="margin-top: 6px;height: 2500px;min-height:600px;font-size: 20px;"
type="textarea"
placeholder="请输入内容"
v-model="textarea"
rows="80"
maxlength="20000"
show-word-limit
clearable
resize="none"
>
</el-input>
</el-col>
<el-col :span="12">
<VueMarkdownIt :source='textarea' :plugins='plugins' style="border: 1px solid black;height: 100%;padding-left: 8px;border-radius: 7px;margin-top: 7px;"></VueMarkdownIt>
</el-col>
</el-row>
</template>
<script>
import {ref} from 'vue'
import VueMarkdownIt from 'vue3-markdown-it'
import 'highlight.js/styles/monokai.css'
import MarkdownItEmoji from 'markdown-it-emoji'
import MarkdownItDeflist from 'markdown-it-deflist'
import MarkdownItSub from 'markdown-it-sub'
import MarkdownItSup from 'markdown-it-sup'
import MarkdownItAbbr from 'markdown-it-abbr'
export default {
name: "CreateBlog",
components: {
VueMarkdownIt
},
setup: function (){
let textarea = ref('## 博客正文')
let plugins = reactive([
{
plugin: MarkdownItAbbr
}, {
plugin: MarkdownItSub
}, {
plugin: MarkdownItSup
}, {
plugin: MarkdownItDeflist
}, {
plugin: MarkdownItEmoji
}
])
return {
textarea,
plugins
}
}
}
</script>
模式
markdown-it 提供了三种模式:commonmark、default、zero。分别对应最严格、GFM、最宽松的解析模式。
解析
markdown-it 的解析规则大体上分为块(block)和内联(inline)两种。具体可体现为 MarkdownIt.block 对应的是解析块规则的 ParserBlock, MarkdownIt.inline 对应的是解析内联规则的 ParserInline,MarkdownIt.renderer.render 和 MarkdownIt.renderer.renderInline 分别对应按照块规则和内联规则生成 HTML 代码。
规则
在 MarkdownIt.renderer 中有一个特殊的属性:rules,它代表着对于 token 们的渲染规则,可以被使用者更新或扩展:
var md = require('markdown-it')();
md.renderer.rules.strong_open = function () { return '<b>'; };
md.renderer.rules.strong_close = function () { return '</b>'; };
var result = md.renderInline(...);
比如这段代码就更新了渲染 strong_open 和 strong_close 这两种 token 的规则。
它可以将指定的插件加载到当前的解析器实例中:
var iterator = require('markdown-it-for-inline');
var md = require('markdown-it')()
.use(iterator, 'foo_replace', 'text', function (tokens, idx) {
tokens[idx].content = tokens[idx].content.replace(/foo/g, 'bar');
});
<a href="https://blog.csdn.net/u014357799/article/details/93784996">参考文章</a> <a href="https://blog.csdn.net/lianghecai52171314/article/details/116593900">参考文章</a>
本站为非盈利网站,如果您喜欢这篇文章,欢迎支持我们继续运营!
本站主要用于日常笔记的记录和生活日志。本站不保证所有内容信息可靠!(大多数文章属于搬运!)如有版权问题,请联系我立即删除:“abcdsjx@126.com”。
QQ: 1164453243
邮箱: abcdsjx@126.com