Skip to content
Bhsd edited this page Nov 21, 2024 · 36 revisions
目录

Other Languages

简介

程序的主入口是个名为 Parser 的对象。通常情况下,所有操作的第一步都是通过 Parser.parse 方法生成一个完整的语法树,然后再对语法树进行查询和修改,最后输出维基文本。

✅ 在 MiniBrowser 版本中可用。

const Parser = require('wikiparser-node'); // CommonJS

import Parser from 'wikiparser-node'; // ES module

import Parser = require('wikiparser-node'); // TypeScript

Properties

config

✅ 展开

type: Config | string
指定解析设置的绝对路径或相对于 WikiParser-Node 的路径,或完整的设置对象。预设的解析设置包含英文维基百科enwiki)、中文维基百科zhwiki)、萌娘百科moegirl)和 LLWikillwiki)。如需定制一个 MediaWiki 站点的解析设置,请参考 .schema.json 填入相关内容。

// config
var config;
Parser.config = 'zhwiki'; // 使用中文维基百科的设置
config = Parser.getConfig();
Parser.config = './config/zhwiki'; // 使用相对路径也是等效的
assert.deepStrictEqual(Parser.getConfig(), config);

i18n

✅ 展开

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注释');

rules

✅ 展开

加入的版本:1.5.1

type: LintError.Rule[]
全部语法检查规则。

templateDir

展开

加入的版本:1.10.0

type: string
指定模板文件夹的绝对路径或相对于 WikiParser-Node 的路径,用于 Token.prototype.expand。在 Windows 文件系统中,页面标题中的冒号(:)需要被替换为 Unicode 冒号)。

conversionTable

展开

type: Map<string, string>
用于设置单向语言变体转换

// conversionTable (main)
Parser.conversionTable.set('頁', '页');
assert.strictEqual(Parser.normalizeTitle('首頁').title, '首页');

redirects

展开

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');

viewOnly

展开

加入的版本:1.9.0

type: boolean
是否只解析而不修改,默认为 false。当设置为 true 时,解析器的性能会有所提升。

warning

展开

type: boolean
是否输出警告信息,默认为 true

debugging

展开

type: boolean
是否输出调试信息,默认为 false

Methods

normalizeTitle

✅ 展开

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#參考資料');

parse

✅ 展开

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]] ');

getConfig

✅ 展开

returns: Config
获取解析设置。

isInterwiki

展开

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}),
	}),
);
Clone this wiki locally