-
Notifications
You must be signed in to change notification settings - Fork 2
Parser
目录
程序的主入口是个名为 Parser
的对象。通常情况下,所有操作的第一步都是通过 Parser.parse 方法生成一个完整的语法树,然后再对语法树进行查询和修改,最后输出维基文本。
const Parser = require('wikiparser-node'); // CommonJS
或
import Parser from 'wikiparser-node'; // ES module
或
import Parser = require('wikiparser-node'); // TypeScript
✅ 展开
type: Config | string
指定解析设置的绝对路径或相对于 WikiParser-Node 的路径,或完整的设置对象。预设的解析设置包含英文维基百科(enwiki
)、中文维基百科(zhwiki
)、萌娘百科(moegirl
)和 LLWiki(llwiki
)。如需定制一个 MediaWiki 站点的解析设置,请参考 .schema.json
填入相关内容。
// config
var config;
Parser.config = 'zhwiki'; // 使用中文维基百科的设置
config = Parser.getConfig();
Parser.config = './config/zhwiki'; // 使用相对路径也是等效的
assert.deepStrictEqual(Parser.getConfig(), config);
✅ 展开
type: string
指定语法错误信息需要用到的语言文件的绝对路径或相对于 WikiParser-Node 的路径。默认语言为英文,其他预设的语言包含简体中文和繁体中文。
// i18n
var message;
Parser.i18n = 'zh-hans';
[{message}] = Parser.parse('<!--').lint();
assert.strictEqual(message, '未闭合的HTML注释');
Parser.i18n = './i18n/zh-hans'; // 使用相对路径也是等效的
[{message}] = Parser.parse('<!--').lint();
assert.strictEqual(message, '未闭合的HTML注释');
展开
加入的版本:1.10.0
type: string
指定模板文件夹的绝对路径或相对于 WikiParser-Node 的路径,用于 Token.prototype.expand
。在 Windows 文件系统中,页面标题中的冒号(:
)需要被替换为 Unicode 冒号(꞉
)。
展开
type: Map<string, string>
用于设置单向语言变体转换。
// conversionTable (main)
Parser.conversionTable.set('頁', '页');
assert.strictEqual(Parser.normalizeTitle('首頁').title, '首页');
展开
type: Map<string, string>
用于设置重定向。注意页面名称必须首字母大写且空格需替换为下划线。
// redirects (main)
var title;
Parser.redirects.set('main_page', 'project : 首页#EN');
title = Parser.normalizeTitle('main page');
assert.strictEqual(title.title, 'Project:首页');
assert.strictEqual(title.toString(), 'Project:首页#EN');
展开
加入的版本:1.9.0
type: boolean
是否只解析而不修改,默认为 false
。当设置为 true
时,解析器的性能会有所提升。
展开
type: boolean
是否输出警告信息,默认为 true
。
展开
type: boolean
是否输出调试信息,默认为 false
。
✅ 展开
param: string
标题(含或不含命名空间前缀)
param: number
命名空间,默认为 0
returns: Title
规范化页面标题。注意使用默认的解析设置时不会包含任何跨维基的信息。
// normalizeTitle
var title = Parser.normalizeTitle('lang#參考資料', 10);
assert.equal(title, 'Template:Lang#參考資料');
title = Parser.normalizeTitle('File:<');
assert.deepStrictEqual({...title}, {
interwiki: '',
valid: false,
});
// normalizeTitle (main)
var title;
// 跨维基前缀依赖每个MediaWiki站点具体的设定
Parser.config = 'moegirl';
title = Parser.normalizeTitle('zhwp:模板:lang#參考資料');
assert.equal(title, 'zhwp:Template:Lang#參考資料');
✅ 展开
param: string
维基文本
param: boolean
是否嵌入
param: number | string | string[]
解析阶段
returns: Token
解析维基文本。
// parse
var wikitext = '<includeonly>i</includeonly><noinclude>n</noinclude>';
assert.strictEqual(Parser.parse(wikitext).text(), 'n');
assert.strictEqual(Parser.parse(wikitext, true).text(), 'i');
wikitext = '{{a}} [[b]] ';
assert.equal(Parser.parse(wikitext, false, 'template').lastChild, ' [[b]] ');
✅ 展开
returns: Config
获取解析设置。
展开
param: string
链接标题
returns: RegExpExecArray | null
是否是跨维基链接。注意使用默认的解析设置时不会包含任何跨维基的信息。
// isInterwiki (main)
Parser.config = 'zhwiki'; // 跨维基前缀依赖每个MediaWiki站点具体的设定
assert.deepStrictEqual(
Parser.isInterwiki('mw :Main Page'),
Object.assign(['mw :', 'mw'], {
index: 0,
input: 'mw :Main Page',
groups: undefined,
indices: Object.assign([[0, 4], [0, 2]], {groups: undefined}),
}),
);
对维基文本批量执行语法检查的命令行工具
用于维基文本的 ESLint 插件
A command-line tool that performs linting on Wikitext in bulk
ESLint plugin for Wikitext