-
Notifications
You must be signed in to change notification settings - Fork 2
AstText
bhsd edited this page Jun 14, 2024
·
28 revisions
目录
纯文本节点,继承了 AstNode 的属性和方法。仿照 Text 类设计,属性和方法也和 Text 类非常相似。
✅ 在 Mini 和 Browser 版本中可用。
🌐 在 Browser 版本中可用。
✅ 展开
type: 'text'
只读。反过来 type: 'text'
也一定对应纯文本节点。
// type
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.type, 'text');
✅ 展开
type: string
文本内容,只读。
// data
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.data, 'a');
展开
type: number
文本长度,只读。
// length (main)
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.length, 1);
✅ 展开
returns: LintError[]
报告潜在语法错误。
// lint
var root, lastChild, linkText;
assert.deepStrictEqual(Parser.parse('<a>\n0<b<c').firstChild.lint(), [
{
rule: 'tag-like',
severity: 'error',
message: 'lonely "<"',
startLine: 0,
startCol: 0,
startIndex: 0,
endLine: 0,
endCol: 2,
endIndex: 2,
suggestions: [
{
desc: 'escape',
range: [0, 1],
text: '<',
},
],
},
{
rule: 'tag-like',
severity: 'warning',
message: 'lonely "<"',
startLine: 1,
startCol: 1,
startIndex: 5,
endLine: 1,
endCol: 3,
endIndex: 7,
suggestions: [
{
desc: 'escape',
range: [5, 6],
text: '<',
},
],
},
]);
assert.deepStrictEqual(Parser.parse('{ {{}-').firstChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'warning',
message: 'lonely "{"',
startLine: 0,
startCol: 0,
startIndex: 0,
endLine: 0,
endCol: 1,
endIndex: 1,
},
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "{"',
startLine: 0,
startCol: 2,
startIndex: 2,
endLine: 0,
endCol: 4,
endIndex: 4,
},
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "}"',
startLine: 0,
startCol: 4,
startIndex: 4,
endLine: 0,
endCol: 5,
endIndex: 5,
},
]);
assert.deepStrictEqual(Parser.parse(' ]] ][[').firstChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "]"',
startLine: 0,
startCol: 1,
startIndex: 1,
endLine: 0,
endCol: 3,
endIndex: 3,
},
{
rule: 'lonely-bracket',
severity: 'warning',
message: 'lonely "]"',
startLine: 0,
startCol: 4,
startIndex: 4,
endLine: 0,
endCol: 5,
endIndex: 5,
},
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "["',
startLine: 0,
startCol: 5,
startIndex: 5,
endLine: 0,
endCol: 7,
endIndex: 7,
},
]);
root = Parser.parse('[//a []]');
linkText = root.querySelector('ext-link-text');
({lastChild} = root);
assert.equal(linkText, '[');
assert.equal(lastChild, ']');
assert.deepStrictEqual(linkText.firstChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "["',
startLine: 0,
startCol: 5,
startIndex: 5,
endLine: 0,
endCol: 6,
endIndex: 6,
suggestions: [
{
desc: 'escape',
range: [6, 7],
text: ']',
},
],
},
]);
assert.deepStrictEqual(lastChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "]"',
startLine: 0,
startCol: 7,
startIndex: 7,
endLine: 0,
endCol: 8,
endIndex: 8,
},
]);
assert.deepStrictEqual(Parser.parse('[ftp://a').firstChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "["',
startLine: 0,
startCol: 0,
startIndex: 0,
endLine: 0,
endCol: 1,
endIndex: 1,
},
]);
assert.deepStrictEqual(Parser.parse('ftp://a]').lastChild.lint(), [
{
rule: 'lonely-bracket',
severity: 'error',
message: 'lonely "]"',
startLine: 0,
startCol: 7,
startIndex: 7,
endLine: 0,
endCol: 8,
endIndex: 8,
fix: {
range: [0, 0],
text: '[',
},
},
]);
assert.deepStrictEqual(Parser.parse('中http://a').firstChild.lint(), [
{
rule: 'lonely-http',
severity: 'error',
message: 'lonely "http://"',
startLine: 0,
startCol: 1,
startIndex: 1,
endLine: 0,
endCol: 8,
endIndex: 8,
suggestions: [
{
desc: 'whitespace',
range: [1, 1],
text: ' ',
},
],
},
]);
🌐 展开
以 HTML 格式打印。
// print
var {firstChild} = Parser.parse('&<>');
assert.equal(firstChild.print(), '&<>');
✅ 展开
param: string
替换的字符串
替换字符串。
// replaceData
var {firstChild} = Parser.parse('a');
firstChild.replaceData('b');
assert.equal(firstChild, 'b');
展开
returns: this
拷贝节点。
// cloneNode (main)
var {firstChild} = Parser.parse('a');
assert.deepStrictEqual(firstChild.cloneNode(), firstChild);
展开
param: string
添加的字符串
在后方添加字符串。
// appendData (main)
var {firstChild} = Parser.parse('a');
firstChild.appendData('b');
assert.equal(firstChild, 'ab');
展开
param: number
起始位置
param: number
删减字符数
删减字符串。
// deleteData (main)
var {firstChild} = Parser.parse('abc');
firstChild.deleteData(-2, 1);
assert.equal(firstChild, 'ac');
展开
param: number
插入位置
param: string
待插入的字符串
插入字符串。
// insertData (main)
var {firstChild} = Parser.parse('ab');
firstChild.insertData(-1, 'c');
assert.equal(firstChild, 'acb');
展开
param: number
起始位置
param: number
字符数
returns: string
提取子串。
// substringData (main)
var {firstChild} = Parser.parse('abc');
assert.strictEqual(firstChild.substringData(-2, 1), 'b');
展开
param: number
分裂位置
将文本子节点分裂为两部分。
// splitText (main)
var {firstChild} = Parser.parse('ab');
firstChild.splitText(1);
assert.equal(firstChild, 'a');
assert.equal(firstChild.nextSibling, 'b');
展开
加入的版本: 1.1.4
转义 =
。
// escape (main)
var root = Parser.parse('a=b=');
root.firstChild.escape();
assert.deepStrictEqual(
root.childNodes.map(String),
['a', '{{=}}', 'b', '{{=}}'],
);
对维基文本批量执行语法检查的命令行工具
用于维基文本的 ESLint 插件
A command-line tool that performs linting on Wikitext in bulk
ESLint plugin for Wikitext