叉子为 https://github.com/frencojobs/fenceparser 互联网档案馆的存檔,存档日期2013-12-02
一个测试良好的微小解析器 用于解析Markdown的 栅栏码块中的元数据.
概览

如果你的马克道有这个密码栅栏,
```ts twoslash {1-3, 5} title="Hello, World"
使用 评论 将产生两个关于代码块的信息, lang 财务报告和审定财务报表 meta 像这样.
{
"lang": "ts",
"meta": "twoslash {1-3, 5} title=\"Hello, World\""
}
使用 fenceparser 解析 meta 字符串到有用的对象.
import parse from 'fenceparser'
console.log(parse(meta))
// {
// twoslash: true,
// highlight: { '1-3': true, '5': true },
// title: 'Hello, World'
// }
解析器不会有意处理解析语言部分,因为它通常由Markdown解析器处理.
但是,如果你想允许宽松的语法语法,例如 ts{1-3, 5} 以及 ts {1-3, 5} 用于 gatsby-remark-vscode 密码 举个例子,言语不能正确解释语言.
{
"lang": "ts{1-3,", // because remark uses space to split
"meta": "5}"
}
在这种情况下,你可以使用图书馆的 lex 函数以获取一个适当的符号化数组。 然后将第一个元素取出 lang。例如,
import {lex, parse} from 'fenceparser'
// Notice this ^ parse is not the same the default export function
const full = [node.lang, node.meta].join(' ') // Join them back
const tokens = lex(full)
const lang = tokens.shift() // ts
const meta = parse(tokens) // { highlight: {'1-3': true, '5': true} }
语法
语法语法松散地取自于各种语法高手所使用的技术. 规则是这样的:
- 可使用有效的 HTML 属性,
attribute, (中文(简体) ),data-attribute等 (中文(简体) ). - 和HTML一样,顶级属性名称是大小写不敏感
- 没有数值的属性被指定为
true - 属性值可以是单引字符串或双引出字符串、整数/浮数、布尔数、对象数或数组
- 非引用字符串只要没有被白空或断行相分隔,就有效,
attr=--theme-color - 对象可以接受有效属性作为孩子,或者接受有效属性,其值由
:关键词,{1-3, 5, ids: {7}} - 阵列就像 JavaScript 的阵列
- 没有属性密钥的对象
{1-3} {7}合并并分配给highlight对象 - 无后缀