lezer-markdown源码阅读。
主要代码在src\markdown.ts
处。
导出一个Type
,是enum类型,元素为Markdown中号牌的编号。
导出一个parser
,为MarkdownParser的实例,包含默认的配置
- 从NodeTypes创建NodeSet,并辅之以highlight tags
- DefaultBlockParsers
- 包含针对block的解析器
- IndentedCode
- FencedCode
- Blockquote
- HorizontalRule
- BulletList
- OrderedList
- ATXHeading
- HTMLBlock
- LinkReference: null
- SetexHeading: null
- 包含针对block的解析器
- DefaultLeafBlocks中定义了:
- LinkReference
- SetexHeading
- blocknames来自于DefaultBlockParsers的keys
- DefaultEndLeaf
- isAtxHeading
- isFencedCode
- isBlockquote
- isBulletList
- isOrderedList
- isHorizontalRule
- isHTMLBlock
- DefaultSkipMarkup
- DefaultInline
- Escape
- Entity
- InlineCode
- HTMLTag
- Emphasis
- HardBreak
- Link
- Image
- LinkEnd
- 取DefaultInline的keys作为值
解析器的功能主要在类型MarkdownParser中实现。 它实现了lezer.Parser,最主要的方法是createParse:
- 创建了一个BlockContext现例(实现了PartialParse)
- 在此基础上增加this.wrappers
- 返回此PartialParse值
MarkdownParser的其他方法
- configure可以用于配置MarkdownExtension
- parseInline,解析随行内容
BlockContext实现了PartialParse:
- 含有到MarkdownParser的引用
- PartialParse的属方
- parsedPos返回absoluteLineStart
- advance()
- 如果碰到stoppedAt就finish
如何使用mocha测试
首先安装VSCode扩展Mocha Test Explorer
。
typescript需要额外配置,否则会显示:Unknown file extension ".ts"
。
根据https://github.com/hbenl/vscode-mocha-test-adapter/issues/206做如下配置:
{
"mochaExplorer.files": "test/test-*.ts",
"mochaExplorer.require": [
"ts-node/register",
// "esm"
],
"mochaExplorer.nodeArgv": [
"--loader=ts-node/esm",
"--no-warnings=ExperimentalWarning",
"--experimental-specifier-resolution=node"
]
}
可能会提示spec.ts中有类型错误,使用// @ts-ignore
即可。