Skip to content

AstText

bhsd edited this page Jun 14, 2024 · 28 revisions
目录

Other Languages

简介

纯文本节点,继承了 AstNode 的属性和方法。仿照 Text 类设计,属性和方法也和 Text 类非常相似。

✅ 在 MiniBrowser 版本中可用。
🌐 在 Browser 版本中可用。

Properties

type

✅ 展开

type: 'text'
只读。反过来 type: 'text' 也一定对应纯文本节点。

// type
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.type, 'text');

data

✅ 展开

type: string
文本内容,只读。

// data
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.data, 'a');

length

展开

type: number
文本长度,只读。

// length (main)
var {firstChild} = Parser.parse('a');
assert.strictEqual(firstChild.length, 1);

Methods

lint

✅ 展开

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: '&lt;',
			},
		],
	},
	{
		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: '&lt;',
			},
		],
	},
]);

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: '&#93;',
			},
		],
	},
]);
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: ' ',
			},
		],
	},
]);

print

🌐 展开

以 HTML 格式打印。

// print
var {firstChild} = Parser.parse('&<>');
assert.equal(firstChild.print(), '&amp;&lt;&gt;');

replaceData

✅ 展开

param: string 替换的字符串
替换字符串。

// replaceData
var {firstChild} = Parser.parse('a');
firstChild.replaceData('b');
assert.equal(firstChild, 'b');

cloneNode

展开

returns: this
拷贝节点。

// cloneNode (main)
var {firstChild} = Parser.parse('a');
assert.deepStrictEqual(firstChild.cloneNode(), firstChild);

appendData

展开

param: string 添加的字符串
在后方添加字符串。

// appendData (main)
var {firstChild} = Parser.parse('a');
firstChild.appendData('b');
assert.equal(firstChild, 'ab');

deleteData

展开

param: number 起始位置
param: number 删减字符数
删减字符串。

// deleteData (main)
var {firstChild} = Parser.parse('abc');
firstChild.deleteData(-2, 1);
assert.equal(firstChild, 'ac');

insertData

展开

param: number 插入位置
param: string 待插入的字符串
插入字符串。

// insertData (main)
var {firstChild} = Parser.parse('ab');
firstChild.insertData(-1, 'c');
assert.equal(firstChild, 'acb');

substringData

展开

param: number 起始位置
param: number 字符数
returns: string
提取子串。

// substringData (main)
var {firstChild} = Parser.parse('abc');
assert.strictEqual(firstChild.substringData(-2, 1), 'b');

splitText

展开

param: number 分裂位置
将文本子节点分裂为两部分。

// splitText (main)
var {firstChild} = Parser.parse('ab');
firstChild.splitText(1);
assert.equal(firstChild, 'a');
assert.equal(firstChild.nextSibling, 'b');

escape

展开

加入的版本: 1.1.4

转义 =

// escape (main)
var root = Parser.parse('a=b=');
root.firstChild.escape();
assert.deepStrictEqual(
	root.childNodes.map(String),
	['a', '{{=}}', 'b', '{{=}}'],
);
Clone this wiki locally