12 个版本
0.4.2 | 2018 年 12 月 9 日 |
---|---|
0.4.1 | 2018 年 11 月 2 日 |
0.4.0 | 2018 年 10 月 16 日 |
0.3.5 | 2018 年 7 月 17 日 |
1488 在 文本处理 中
每月 22 次下载
63KB
1.5K SLoC
mediawiki-parser
本项目旨在基于解析表达式文法开发 MediaWiki markdown 子集的解析器。目前功能包括从规范文档生成解析器和测试。提供了一个简单的二进制文件,可以从文件中读取并输出 yaml 到标准输出。
免责声明
mediawiki-parser 的目标是 不是 与 MediaWiki 完全兼容及其所有怪癖。如果可以拒绝奇异或格式错误的输入,则建议使用。当前支持的标记主要面向特定 MediaWiki 项目的需求,除非外部贡献,否则可能不会发生重大变化。
如果您想解析带有所有怪癖的任何 MediaWiki,请查看 Parse Wiki Text。
目前支持的 MediaWiki
- 文本格式:
''italic'', '''bold''', <math>\LaTex</math>, <code></code>, ...
- 段落
- 标题层次结构
- 列表
- 内部引用(文件)
[[文件.扩展名|可选|标题]]
- 外部引用
[https://example.com/ example]
- 表格
- 通用模板
{{name|anon_arg|arg=value}}
- 画廊
- 通用HTML标签和注释
<thing>内容</thing>
已知限制
本项目存在一些已知限制,这些限制可能在将来被解除。部分原因是将WikiText视为一种上下文无关形式语言,这并不完全正确。
{,},[,]
不能在纯文本中使用,因为它们通常表示特殊语法。然而,在数学或<nowiki>
中使用它们是可以的。- 缩进目前不被解析为
pre
。 - 模板仅在语法层面上被简化,它们对其内容没有任何影响。
示例
解析将产生一个带有位置信息的语法树(这里为了简洁大部分被省略)
输入
this is some ''formatted'' [https://example.com example] text.
输出(伪YAML形式)
---
type: document
position: ...
content:
- type: paragraph
position: ...
content:
- type: text
position: ...
text: "this is some "
- type: formatted
position: ...
markup: italic
content:
- type: text
position:
start:
offset: 15
line: 1
col: 16
end:
offset: 24
line: 1
col: 25
text: formatted
- type: text
position: ...
text: " "
- type: externalreference
position: ...
target: "https://example.com"
caption:
- type: text
position: ...
text: example
- type: text
position: ...
text: " text."
或语法错误(这里是一个漂亮的表示形式)
ERROR in line 1 at column 57: Could not continue to parse, expected one of: ''', [, <!--, '', [[, EOF, "\n", {{, [ ], opening html tag, <, normal text
1 | this is some ''formatted'' [https://example.com example]] text.
2 |
API
该库提供了一个简单的 parse()
函数
let input = "Hello World";
let result = mediawiki_parser::parse(&input)
.expect(\"Parsing of the input for {} failed!\");
println!(\"{{}}\", &serde_yaml::to_string(&result).unwrap());
结果是自定义的抽象语法树(AST)。详细信息请参阅文档。
依赖项
~5–13MB
~152K SLoC