securemark 0.225.2 → 0.226.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +4 -0
- package/design.md +5 -5
- package/dist/securemark.js +8 -7
- package/markdown.d.ts +1 -0
- package/package-lock.json +1 -1
- package/package.json +1 -1
- package/src/combinator/control/manipulation/scope.ts +1 -0
- package/src/parser/inline/math.test.ts +37 -32
- package/src/parser/inline/math.ts +5 -7
- package/src/parser/source/escapable.test.ts +9 -1
- package/src/parser/source/escapable.ts +3 -3
- package/src/parser/source/text.test.ts +2 -3
- package/src/parser/source/unescapable.test.ts +9 -0
- package/src/parser/util.ts +3 -2
package/CHANGELOG.md
CHANGED
package/design.md
CHANGED
|
@@ -69,7 +69,7 @@
|
|
|
69
69
|
|
|
70
70
|
### 自己完結性
|
|
71
71
|
|
|
72
|
-
|
|
72
|
+
ドキュメントはすべて初期(共通)構成の閲覧環境で閲覧できなければならない。
|
|
73
73
|
よって閲覧に拡張機能等の追加が必要となってはならない
|
|
74
74
|
|
|
75
75
|
ゆえにドキュメントはサードパーティツールなど自己完結性を損なうツールの使用をサポートしない。
|
|
@@ -139,7 +139,7 @@
|
|
|
139
139
|
|
|
140
140
|
オートリンクは原則としてコピー&ペーストによる引用等を経た際にその解釈が変わってはならない。
|
|
141
141
|
|
|
142
|
-
|
|
142
|
+
ゆえにハッシュタグ構文は構文が表示文字列と一致する構文であるオートリンク構文としてのみ構文化され、表示文字列からの構文の範囲の特定が不可能となる通常の構文を持たない。
|
|
143
143
|
|
|
144
144
|
### 自動附番
|
|
145
145
|
|
|
@@ -271,7 +271,7 @@ CodeMirrorが素では速いがVimModeでは数万文字程度でも耐え難く
|
|
|
271
271
|
### バックトラック
|
|
272
272
|
|
|
273
273
|
SecuremarkのAnnotation構文に典型的であるようにスコープの生成規則を変える構文が存在する場合文脈の相違から解析結果を再利用不能な(`αA'β | αAB`)バックトラックが再帰的に生じ、このような言語を線形時間で解析することは基本的に不可能であり直ちに文脈を確定する任意の構文または記号の前に文脈の差異が生じない(`αAβ | αAB`)場合のみ再利用可能なバックトラックにより線形時間で解析できると思われる。
|
|
274
|
-
このため線形時間で解析可能な文法に制約されるCommonMark
|
|
274
|
+
このため線形時間で解析可能な文法に制約されるCommonMarkがこの制約を破らずこのような文脈不確定文法を導入することは不可能であるという拡張性の限界が存在する。
|
|
275
275
|
|
|
276
276
|
### 標準化
|
|
277
277
|
|
|
@@ -279,8 +279,8 @@ Markdownのように自然言語と自身の文法を分離する汎用構造が
|
|
|
279
279
|
このためCommonMarkは拡張構文を標準化した次期標準仕様との互換性を確保する役には立たずその有用性は構文の拡張を考慮しない範囲での効率的な実装方法の例示およびテストケースの集積による個別実装の支援ならびにその結果としての限定的互換性にとどまる。
|
|
280
280
|
さらにCommonMarkは前述の解析時間の制約から拡張性が低く、高度な構文や機能の実装可能性を考慮していないことから拡張仕様において準拠すべき技術的正当性もない。
|
|
281
281
|
|
|
282
|
-
よってMarkdown
|
|
283
|
-
MarkdownはGFM
|
|
282
|
+
よってMarkdownの標準化は後方互換性確保が不可能であることから発展性がなくスナップショット以上の技術的意味を持たない。
|
|
283
|
+
MarkdownはGFMのように最初から高機能で完成度の高い拡張不要な独自実装のほうが標準としての互換性を確保でき、構文に曖昧さがない形式言語と異なりまず最小限の標準仕様を策定しのちに拡張していく通常の標準化方法が適さない特殊な言語である。
|
|
284
284
|
|
|
285
285
|
### トランスクルージョン
|
|
286
286
|
|
package/dist/securemark.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.
|
|
1
|
+
/*! securemark v0.226.0 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED */
|
|
2
2
|
require = function () {
|
|
3
3
|
function r(e, n, t) {
|
|
4
4
|
function o(i, f) {
|
|
@@ -7763,8 +7763,8 @@ require = function () {
|
|
|
7763
7763
|
const typed_dom_1 = _dereq_('typed-dom');
|
|
7764
7764
|
const disallowedCommand = /\\(?:begin|tiny|huge|large)(?![0-9a-z])/i;
|
|
7765
7765
|
exports.math = (0, combinator_1.lazy)(() => (0, combinator_1.creator)((0, combinator_1.validate)('$', '$', '\n', (0, combinator_1.rewrite)((0, combinator_1.union)([
|
|
7766
|
-
(0, combinator_1.surround)('$',
|
|
7767
|
-
(0, combinator_1.surround)('$',
|
|
7766
|
+
(0, combinator_1.surround)('$', (0, combinator_1.verify)((0, source_1.str)(/^(?![\s{}#$%&]|\d+(?:[,.]\d+)*(?:[\s,.!?()[\]{}]|[^\x00-\x7F])|-[\da-z]|[a-z]+-)(?:\\\$|[\x20-\x23\x25-\x7E])*/i), util_1.isEndTightNodes), /^\$(?![0-9a-z])/i),
|
|
7767
|
+
(0, combinator_1.surround)('$', bracket, '$')
|
|
7768
7768
|
]), (source, {
|
|
7769
7769
|
caches: {math: cache} = {}
|
|
7770
7770
|
}) => {
|
|
@@ -7786,7 +7786,7 @@ require = function () {
|
|
|
7786
7786
|
}))));
|
|
7787
7787
|
const bracket = (0, combinator_1.lazy)(() => (0, combinator_1.creator)((0, combinator_1.surround)('{', (0, combinator_1.some)((0, combinator_1.union)([
|
|
7788
7788
|
bracket,
|
|
7789
|
-
(0, combinator_1.some)(source_1.escsource, /^[{}]/)
|
|
7789
|
+
(0, combinator_1.some)(source_1.escsource, /^(?:[{}]|\\?\n)/)
|
|
7790
7790
|
])), '}', true)));
|
|
7791
7791
|
},
|
|
7792
7792
|
{
|
|
@@ -8663,7 +8663,7 @@ require = function () {
|
|
|
8663
8663
|
];
|
|
8664
8664
|
default:
|
|
8665
8665
|
const b = source[0] !== '\n' && source[0].trimStart() === '';
|
|
8666
|
-
const i = b
|
|
8666
|
+
const i = b ? source.search(text_1.nonWhitespace) : 1;
|
|
8667
8667
|
return [
|
|
8668
8668
|
[source.slice(0, i)],
|
|
8669
8669
|
source.slice(i)
|
|
@@ -9027,9 +9027,10 @@ require = function () {
|
|
|
9027
9027
|
if (nodes.length === 0)
|
|
9028
9028
|
return true;
|
|
9029
9029
|
for (let i = nodes.length; i--;) {
|
|
9030
|
-
|
|
9030
|
+
const node = nodes[i];
|
|
9031
|
+
if (typeof node === 'object' && node.className === 'comment')
|
|
9031
9032
|
continue;
|
|
9032
|
-
return isVisible(
|
|
9033
|
+
return isVisible(node, -1);
|
|
9033
9034
|
}
|
|
9034
9035
|
return false;
|
|
9035
9036
|
}
|
package/markdown.d.ts
CHANGED
package/package-lock.json
CHANGED
package/package.json
CHANGED
|
@@ -23,6 +23,7 @@ export function focus<T>(scope: string | RegExp, parser: Parser<T>): Parser<T> {
|
|
|
23
23
|
};
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
//export function rewrite<T, C extends Ctx, D extends Parser<unknown, C>[]>(scope: Parser<unknown, C, D>, parser: Parser<T, C, never>): Parser<T, C, D>;
|
|
26
27
|
export function rewrite<P extends Parser<unknown>>(scope: Parser<unknown, Context<P>>, parser: P): P;
|
|
27
28
|
export function rewrite<T>(scope: Parser<unknown>, parser: Parser<T>): Parser<T> {
|
|
28
29
|
assert(scope);
|
|
@@ -11,14 +11,14 @@ describe('Unit: parser/inline/math', () => {
|
|
|
11
11
|
assert.deepStrictEqual(inspect(parser('$')), undefined);
|
|
12
12
|
assert.deepStrictEqual(inspect(parser('$$')), undefined);
|
|
13
13
|
assert.deepStrictEqual(inspect(parser('$$$')), undefined);
|
|
14
|
-
assert.deepStrictEqual(inspect(parser('$0$')), undefined);
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('$0
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('$0
|
|
18
|
-
assert.deepStrictEqual(inspect(parser('$0
|
|
19
|
-
assert.deepStrictEqual(inspect(parser('$0
|
|
20
|
-
assert.deepStrictEqual(inspect(parser('$0-
|
|
21
|
-
assert.deepStrictEqual(inspect(parser('$0+
|
|
14
|
+
assert.deepStrictEqual(inspect(parser('$0 $')), undefined);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('$0.$')), undefined);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('$1,000.99.$')), undefined);
|
|
17
|
+
assert.deepStrictEqual(inspect(parser('$0(a)$')), undefined);
|
|
18
|
+
assert.deepStrictEqual(inspect(parser('$0[a]$')), undefined);
|
|
19
|
+
assert.deepStrictEqual(inspect(parser('$0{a}$')), undefined);
|
|
20
|
+
assert.deepStrictEqual(inspect(parser('$0 - $')), undefined);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser('$0 + $')), undefined);
|
|
22
22
|
assert.deepStrictEqual(inspect(parser('$-0$')), undefined);
|
|
23
23
|
assert.deepStrictEqual(inspect(parser('$-0$-1')), undefined);
|
|
24
24
|
assert.deepStrictEqual(inspect(parser('$-a$')), undefined);
|
|
@@ -26,19 +26,14 @@ describe('Unit: parser/inline/math', () => {
|
|
|
26
26
|
assert.deepStrictEqual(inspect(parser('$a $')), undefined);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser('$a-b$')), undefined);
|
|
28
28
|
assert.deepStrictEqual(inspect(parser('$a-b$c-d')), undefined);
|
|
29
|
-
assert.deepStrictEqual(inspect(parser('$a+b$')), undefined);
|
|
30
|
-
assert.deepStrictEqual(inspect(parser('$a*b$')), undefined);
|
|
31
|
-
assert.deepStrictEqual(inspect(parser('$a/b$')), undefined);
|
|
32
|
-
assert.deepStrictEqual(inspect(parser('$a[b]$')), undefined);
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('$a{b}$')), undefined);
|
|
34
29
|
assert.deepStrictEqual(inspect(parser('$a$b')), undefined);
|
|
35
30
|
assert.deepStrictEqual(inspect(parser('$a$b$')), undefined);
|
|
36
31
|
assert.deepStrictEqual(inspect(parser('$ $')), undefined);
|
|
37
32
|
assert.deepStrictEqual(inspect(parser('$ a$')), undefined);
|
|
38
33
|
assert.deepStrictEqual(inspect(parser('$ a $')), undefined);
|
|
39
34
|
assert.deepStrictEqual(inspect(parser('$\n$')), undefined);
|
|
40
|
-
assert.deepStrictEqual(inspect(parser('$a
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('$a
|
|
35
|
+
assert.deepStrictEqual(inspect(parser('$a\\$\nb$')), undefined);
|
|
36
|
+
assert.deepStrictEqual(inspect(parser('$a\\$\\\nb$')), undefined);
|
|
42
37
|
assert.deepStrictEqual(inspect(parser('${')), undefined);
|
|
43
38
|
assert.deepStrictEqual(inspect(parser('${a')), undefined);
|
|
44
39
|
assert.deepStrictEqual(inspect(parser('${$')), undefined);
|
|
@@ -50,8 +45,8 @@ describe('Unit: parser/inline/math', () => {
|
|
|
50
45
|
assert.deepStrictEqual(inspect(parser('${a}b}$')), undefined);
|
|
51
46
|
assert.deepStrictEqual(inspect(parser('${\\}$')), undefined);
|
|
52
47
|
assert.deepStrictEqual(inspect(parser('${\n}$')), undefined);
|
|
53
|
-
assert.deepStrictEqual(inspect(parser('${a
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('${a
|
|
48
|
+
assert.deepStrictEqual(inspect(parser('${a\\$\nb}$')), undefined);
|
|
49
|
+
assert.deepStrictEqual(inspect(parser('${a\\$\\\nb}$')), undefined);
|
|
55
50
|
assert.deepStrictEqual(inspect(parser('${\\begin}$')), [['<span class="invalid" translate="no">${\\begin}$</span>'], '']);
|
|
56
51
|
assert.deepStrictEqual(inspect(parser('${\\Huge}$')), [['<span class="invalid" translate="no">${\\Huge}$</span>'], '']);
|
|
57
52
|
assert.deepStrictEqual(inspect(parser('${a}b$')), undefined);
|
|
@@ -59,23 +54,18 @@ describe('Unit: parser/inline/math', () => {
|
|
|
59
54
|
});
|
|
60
55
|
|
|
61
56
|
it('basic', () => {
|
|
62
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
63
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
64
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
65
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
66
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
67
|
-
assert.deepStrictEqual(inspect(parser('$
|
|
68
|
-
assert.deepStrictEqual(inspect(parser('${ab}$')), [['<span class="math" translate="no" data-src="${ab}$">${ab}$</span>'], '']);
|
|
69
|
-
assert.deepStrictEqual(inspect(parser('${a b}$')), [['<span class="math" translate="no" data-src="${a b}$">${a b}$</span>'], '']);
|
|
70
|
-
assert.deepStrictEqual(inspect(parser('${a }$')), [['<span class="math" translate="no" data-src="${a }$">${a }$</span>'], '']);
|
|
71
|
-
assert.deepStrictEqual(inspect(parser('${ a}$')), [['<span class="math" translate="no" data-src="${ a}$">${ a}$</span>'], '']);
|
|
72
|
-
assert.deepStrictEqual(inspect(parser('${ a }$')), [['<span class="math" translate="no" data-src="${ a }$">${ a }$</span>'], '']);
|
|
73
|
-
assert.deepStrictEqual(inspect(parser('${$}$')), [['<span class="math" translate="no" data-src="${$}$">${$}$</span>'], '']);
|
|
74
|
-
assert.deepStrictEqual(inspect(parser('${\\a}$')), [['<span class="math" translate="no" data-src="${\\a}$">${\\a}$</span>'], '']);
|
|
75
|
-
assert.deepStrictEqual(inspect(parser('${\\$}$')), [['<span class="math" translate="no" data-src="${\\$}$">${\\$}$</span>'], '']);
|
|
76
|
-
assert.deepStrictEqual(inspect(parser('${\\\\}$')), [['<span class="math" translate="no" data-src="${\\\\}$">${\\\\}$</span>'], '']);
|
|
57
|
+
assert.deepStrictEqual(inspect(parser('$0$')), [['<span class="math" translate="no" data-src="$0$">$0$</span>'], '']);
|
|
58
|
+
assert.deepStrictEqual(inspect(parser('$0$$')), [['<span class="math" translate="no" data-src="$0$">$0$</span>'], '$']);
|
|
59
|
+
assert.deepStrictEqual(inspect(parser('$0-1$')), [['<span class="math" translate="no" data-src="$0-1$">$0-1$</span>'], '']);
|
|
60
|
+
assert.deepStrictEqual(inspect(parser('$0+1$')), [['<span class="math" translate="no" data-src="$0+1$">$0+1$</span>'], '']);
|
|
61
|
+
assert.deepStrictEqual(inspect(parser('$0*1$')), [['<span class="math" translate="no" data-src="$0*1$">$0*1$</span>'], '']);
|
|
62
|
+
assert.deepStrictEqual(inspect(parser('$0/1$')), [['<span class="math" translate="no" data-src="$0/1$">$0/1$</span>'], '']);
|
|
77
63
|
assert.deepStrictEqual(inspect(parser('$a$')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '']);
|
|
78
64
|
assert.deepStrictEqual(inspect(parser('$a$$')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '$']);
|
|
65
|
+
assert.deepStrictEqual(inspect(parser('$a -b$')), [['<span class="math" translate="no" data-src="$a -b$">$a -b$</span>'], '']);
|
|
66
|
+
assert.deepStrictEqual(inspect(parser('$a+b$')), [['<span class="math" translate="no" data-src="$a+b$">$a+b$</span>'], '']);
|
|
67
|
+
assert.deepStrictEqual(inspect(parser('$a*b$')), [['<span class="math" translate="no" data-src="$a*b$">$a*b$</span>'], '']);
|
|
68
|
+
assert.deepStrictEqual(inspect(parser('$a/b$')), [['<span class="math" translate="no" data-src="$a/b$">$a/b$</span>'], '']);
|
|
79
69
|
assert.deepStrictEqual(inspect(parser(`$a'$`)), [[`<span class="math" translate="no" data-src="$a'$">$a'$</span>`], '']);
|
|
80
70
|
assert.deepStrictEqual(inspect(parser(`$a''$`)), [[`<span class="math" translate="no" data-src="$a''$">$a''$</span>`], '']);
|
|
81
71
|
assert.deepStrictEqual(inspect(parser('$a$[A](a)')), [['<span class="math" translate="no" data-src="$a$">$a$</span>'], '[A](a)']);
|
|
@@ -95,6 +85,21 @@ describe('Unit: parser/inline/math', () => {
|
|
|
95
85
|
assert.deepStrictEqual(inspect(parser('$f(x)$')), [['<span class="math" translate="no" data-src="$f(x)$">$f(x)$</span>'], '']);
|
|
96
86
|
assert.deepStrictEqual(inspect(parser('$f: x \\to y$')), [['<span class="math" translate="no" data-src="$f: x \\to y$">$f: x \\to y$</span>'], '']);
|
|
97
87
|
assert.deepStrictEqual(inspect(parser('$k$-space')), [['<span class="math" translate="no" data-src="$k$">$k$</span>'], '-space']);
|
|
88
|
+
assert.deepStrictEqual(inspect(parser('${}$')), [['<span class="math" translate="no" data-src="${}$">${}$</span>'], '']);
|
|
89
|
+
assert.deepStrictEqual(inspect(parser('${ }$')), [['<span class="math" translate="no" data-src="${ }$">${ }$</span>'], '']);
|
|
90
|
+
assert.deepStrictEqual(inspect(parser('${a}$')), [['<span class="math" translate="no" data-src="${a}$">${a}$</span>'], '']);
|
|
91
|
+
assert.deepStrictEqual(inspect(parser('${a}$$')), [['<span class="math" translate="no" data-src="${a}$">${a}$</span>'], '$']);
|
|
92
|
+
assert.deepStrictEqual(inspect(parser('${a}$0')), [['<span class="math" translate="no" data-src="${a}$">${a}$</span>'], '0']);
|
|
93
|
+
assert.deepStrictEqual(inspect(parser('${a}$b')), [['<span class="math" translate="no" data-src="${a}$">${a}$</span>'], 'b']);
|
|
94
|
+
assert.deepStrictEqual(inspect(parser('${ab}$')), [['<span class="math" translate="no" data-src="${ab}$">${ab}$</span>'], '']);
|
|
95
|
+
assert.deepStrictEqual(inspect(parser('${a b}$')), [['<span class="math" translate="no" data-src="${a b}$">${a b}$</span>'], '']);
|
|
96
|
+
assert.deepStrictEqual(inspect(parser('${a }$')), [['<span class="math" translate="no" data-src="${a }$">${a }$</span>'], '']);
|
|
97
|
+
assert.deepStrictEqual(inspect(parser('${ a}$')), [['<span class="math" translate="no" data-src="${ a}$">${ a}$</span>'], '']);
|
|
98
|
+
assert.deepStrictEqual(inspect(parser('${ a }$')), [['<span class="math" translate="no" data-src="${ a }$">${ a }$</span>'], '']);
|
|
99
|
+
assert.deepStrictEqual(inspect(parser('${$}$')), [['<span class="math" translate="no" data-src="${$}$">${$}$</span>'], '']);
|
|
100
|
+
assert.deepStrictEqual(inspect(parser('${\\a}$')), [['<span class="math" translate="no" data-src="${\\a}$">${\\a}$</span>'], '']);
|
|
101
|
+
assert.deepStrictEqual(inspect(parser('${\\$}$')), [['<span class="math" translate="no" data-src="${\\$}$">${\\$}$</span>'], '']);
|
|
102
|
+
assert.deepStrictEqual(inspect(parser('${\\\\}$')), [['<span class="math" translate="no" data-src="${\\\\}$">${\\\\}$</span>'], '']);
|
|
98
103
|
});
|
|
99
104
|
|
|
100
105
|
it('nest', () => {
|
|
@@ -8,7 +8,6 @@ const disallowedCommand = /\\(?:begin|tiny|huge|large)(?![0-9a-z])/i;
|
|
|
8
8
|
|
|
9
9
|
export const math: MathParser = lazy(() => creator(validate('$', '$', '\n', rewrite(
|
|
10
10
|
union([
|
|
11
|
-
surround('$', bracket, '$'),
|
|
12
11
|
surround(
|
|
13
12
|
'$',
|
|
14
13
|
verify(
|
|
@@ -17,12 +16,11 @@ export const math: MathParser = lazy(() => creator(validate('$', '$', '\n', rewr
|
|
|
17
16
|
// $[A-z]*- : Label
|
|
18
17
|
// $[A-z]*(?!-) : Math
|
|
19
18
|
// $[\^_[({|] : Math
|
|
20
|
-
// $[#$%&] : Invalid first character in
|
|
21
|
-
|
|
22
|
-
// $[A-z]*\s?[!@#&*+~=`$[]{<] : Incomplete syntax in or around another syntax
|
|
23
|
-
str(/^(?=[\\^_[(|]|[A-Za-z][0-9A-Za-z]*'*[ ~]?(?:\$|([\\^_(|:=<>])(?!\1)))(?:\\\$|[\x20-\x23\x25-\x7E])*/),
|
|
19
|
+
// $[#$%&] : Invalid first character in Latex syntax
|
|
20
|
+
str(/^(?![\s{}#$%&]|\d+(?:[,.]\d+)*(?:[\s,.!?()[\]{}]|[^\x00-\x7F])|-[\da-z]|[a-z]+-)(?:\\\$|[\x20-\x23\x25-\x7E])*/i),
|
|
24
21
|
isEndTightNodes),
|
|
25
|
-
/^\$(?![0-
|
|
22
|
+
/^\$(?![0-9a-z])/i),
|
|
23
|
+
surround('$', bracket, '$'),
|
|
26
24
|
]),
|
|
27
25
|
(source, { caches: { math: cache } = {} }) => [[
|
|
28
26
|
cache?.get(source)?.cloneNode(true) ||
|
|
@@ -43,7 +41,7 @@ const bracket: MathParser.BracketParser = lazy(() => creator(surround(
|
|
|
43
41
|
'{',
|
|
44
42
|
some(union([
|
|
45
43
|
bracket,
|
|
46
|
-
some(escsource, /^[{}]/),
|
|
44
|
+
some(escsource, /^(?:[{}]|\\?\n)/),
|
|
47
45
|
])),
|
|
48
46
|
'}',
|
|
49
47
|
true)));
|
|
@@ -13,7 +13,15 @@ describe('Unit: parser/source/escsource', () => {
|
|
|
13
13
|
it('basic', () => {
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('a')), [['a'], '']);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('ab')), [['ab'], '']);
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('09あいAZaz')), [['09あいAZaz'], '']);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('space', () => {
|
|
20
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser(' \n')), [[' ', '\n'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser(' \n')), [[' ', '\n'], '']);
|
|
17
25
|
});
|
|
18
26
|
|
|
19
27
|
it('linebreak', () => {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { EscapableSourceParser } from '../source';
|
|
2
2
|
import { creator } from '../../combinator';
|
|
3
|
-
import { nonWhitespace
|
|
3
|
+
import { nonWhitespace } from './text';
|
|
4
4
|
|
|
5
5
|
const separator = /[\s\x00-\x2F\x3A-\x40\x5B-\x60\x7B-\x7F]/;
|
|
6
6
|
|
|
@@ -17,8 +17,8 @@ export const escsource: EscapableSourceParser = creator(source => {
|
|
|
17
17
|
return [[source.slice(0, 2)], source.slice(2)];
|
|
18
18
|
default:
|
|
19
19
|
const b = source[0] !== '\n' && source[0].trimStart() === '';
|
|
20
|
-
const i = b
|
|
21
|
-
? source.search(
|
|
20
|
+
const i = b
|
|
21
|
+
? source.search(nonWhitespace)
|
|
22
22
|
: 1;
|
|
23
23
|
assert(i > 0);
|
|
24
24
|
return [[source.slice(0, i)], source.slice(i)];
|
|
@@ -12,9 +12,8 @@ describe('Unit: parser/text/text', () => {
|
|
|
12
12
|
|
|
13
13
|
it('basic', () => {
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('a')), [['a'], '']);
|
|
15
|
-
assert.deepStrictEqual(inspect(parser('
|
|
16
|
-
assert.deepStrictEqual(inspect(parser('09')), [['09'], '']);
|
|
17
|
-
assert.deepStrictEqual(inspect(parser('azあい09')), [['az', 'あい', '09'], '']);
|
|
15
|
+
assert.deepStrictEqual(inspect(parser('ab')), [['ab'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('09あいAZaz')), [['09', 'あい', 'AZaz'], '']);
|
|
18
17
|
assert.deepStrictEqual(inspect(parser('a\nb')), [['a', '<br>', 'b'], '']);
|
|
19
18
|
});
|
|
20
19
|
|
|
@@ -13,6 +13,15 @@ describe('Unit: parser/source/unescapable', () => {
|
|
|
13
13
|
it('basic', () => {
|
|
14
14
|
assert.deepStrictEqual(inspect(parser('a')), [['a'], '']);
|
|
15
15
|
assert.deepStrictEqual(inspect(parser('ab')), [['ab'], '']);
|
|
16
|
+
assert.deepStrictEqual(inspect(parser('09あいAZaz')), [['09', 'あい', 'AZaz'], '']);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
it('space', () => {
|
|
20
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
21
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
22
|
+
assert.deepStrictEqual(inspect(parser(' ')), [[' '], '']);
|
|
23
|
+
assert.deepStrictEqual(inspect(parser(' \n')), [[' ', '\n'], '']);
|
|
24
|
+
assert.deepStrictEqual(inspect(parser(' \n')), [[' ', '\n'], '']);
|
|
16
25
|
});
|
|
17
26
|
|
|
18
27
|
it('linebreak', () => {
|
package/src/parser/util.ts
CHANGED
|
@@ -136,8 +136,9 @@ export function isStartTightNodes(nodes: readonly (HTMLElement | string)[]): boo
|
|
|
136
136
|
export function isEndTightNodes(nodes: readonly (HTMLElement | string)[]): boolean {
|
|
137
137
|
if (nodes.length === 0) return true;
|
|
138
138
|
for (let i = nodes.length; i--;) {
|
|
139
|
-
|
|
140
|
-
|
|
139
|
+
const node = nodes[i];
|
|
140
|
+
if (typeof node === 'object' && node.className === 'comment') continue;
|
|
141
|
+
return isVisible(node, -1);
|
|
141
142
|
}
|
|
142
143
|
return false;
|
|
143
144
|
}
|