securemark 0.236.0 → 0.237.2

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.
Files changed (40) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/securemark.js +184 -99
  3. package/karma.conf.js +1 -1
  4. package/markdown.d.ts +9 -10
  5. package/package-lock.json +81 -47
  6. package/package.json +1 -1
  7. package/src/parser/api/bind.ts +7 -3
  8. package/src/parser/api/parse.test.ts +2 -2
  9. package/src/parser/api/parse.ts +8 -11
  10. package/src/parser/block/blockquote.test.ts +1 -1
  11. package/src/parser/block/codeblock.test.ts +5 -2
  12. package/src/parser/block/codeblock.ts +43 -25
  13. package/src/parser/block/dlist.ts +1 -3
  14. package/src/parser/block/extension/aside.test.ts +1 -1
  15. package/src/parser/block/extension/aside.ts +1 -1
  16. package/src/parser/block/extension/example.test.ts +2 -2
  17. package/src/parser/block/extension/example.ts +1 -1
  18. package/src/parser/block/extension/fig.test.ts +22 -20
  19. package/src/parser/block/extension/figure.test.ts +33 -33
  20. package/src/parser/block/extension/figure.ts +26 -1
  21. package/src/parser/block/extension/message.ts +1 -1
  22. package/src/parser/block/extension/placeholder.ts +1 -1
  23. package/src/parser/block/extension/table.ts +1 -1
  24. package/src/parser/block/extension.ts +1 -1
  25. package/src/parser/block/heading.test.ts +1 -1
  26. package/src/parser/block/heading.ts +11 -7
  27. package/src/parser/block/mathblock.ts +1 -1
  28. package/src/parser/block/olist.test.ts +8 -0
  29. package/src/parser/block/olist.ts +6 -6
  30. package/src/parser/block/reply/cite.test.ts +4 -0
  31. package/src/parser/block/reply/cite.ts +1 -0
  32. package/src/parser/block/ulist.test.ts +8 -0
  33. package/src/parser/block/ulist.ts +6 -6
  34. package/src/parser/inline/comment.ts +1 -1
  35. package/src/parser/inline/extension/indexee.ts +8 -8
  36. package/src/parser/inline.ts +2 -0
  37. package/src/parser/processor/figure.test.ts +70 -46
  38. package/src/parser/processor/figure.ts +58 -21
  39. package/src/parser/processor/footnote.ts +1 -1
  40. package/src/util/quote.ts +1 -0
@@ -28,7 +28,7 @@ describe('Unit: parser/processor/figure', () => {
28
28
  assert.deepStrictEqual(
29
29
  [...target.children].map(el => el.outerHTML),
30
30
  [
31
- '<figure data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
31
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
32
32
  '<p><a class="label" data-label="fig-a" href="#label:fig-a">Fig. 1</a></p>',
33
33
  '<p><a class="label" data-label="fig-a" href="#label:fig-a">Fig. 1</a></p>',
34
34
  ]);
@@ -49,12 +49,12 @@ describe('Unit: parser/processor/figure', () => {
49
49
  assert.deepStrictEqual(
50
50
  [...target.children].map(el => el.outerHTML),
51
51
  [
52
- '<figure data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
52
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
53
53
  '<h2 id="index:0">0</h2>',
54
- '<figure data-label="fig-b" data-group="fig" data-number="2" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
55
- '<figure data-label="table-a" data-group="table" data-number="1" id="label:table-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Table 1. </span></figcaption></figure>',
56
- '<figure data-label="fig-b" data-group="fig" data-number="3" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Duplicate label"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3. </span></figcaption></figure>',
57
- '<figure data-label="fig-c" data-group="fig" data-number="4" id="label:fig-c"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 4. </span></figcaption></figure>',
54
+ '<figure data-type="quote" data-label="fig-b" data-group="fig" data-number="2" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
55
+ '<figure data-type="quote" data-label="table-a" data-group="table" data-number="1" id="label:table-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Table 1. </span></figcaption></figure>',
56
+ '<figure data-type="quote" data-label="fig-b" data-group="fig" data-number="3" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Duplicate label"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3. </span></figcaption></figure>',
57
+ '<figure data-type="quote" data-label="fig-c" data-group="fig" data-number="4" id="label:fig-c"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 4. </span></figcaption></figure>',
58
58
  ]);
59
59
  }
60
60
  });
@@ -69,7 +69,7 @@ describe('Unit: parser/processor/figure', () => {
69
69
  assert.deepStrictEqual(
70
70
  [...target.children].map(el => el.outerHTML),
71
71
  [
72
- '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
72
+ '<figure data-type="math" data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
73
73
  '<p><a class="label" data-label="$-a" href="#label:$-a">(1)</a></p>',
74
74
  ]);
75
75
  }
@@ -91,14 +91,14 @@ describe('Unit: parser/processor/figure', () => {
91
91
  assert.deepStrictEqual(
92
92
  [...target.children].map(el => el.outerHTML),
93
93
  [
94
- '<figure data-label="fig-2" data-group="fig" data-number="2" id="label:fig-2"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
95
- '<figure data-label="fig-3.1" data-group="fig" data-number="3.1" id="label:fig-3.1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3.1. </span></figcaption></figure>',
96
- '<figure data-label="$-4.1.1" data-group="$" data-number="4.1.1" id="label:$-4.1.1"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(4.1.1)</span></figcaption></figure>',
97
- '<figure data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
98
- '<figure data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
94
+ '<figure data-type="quote" data-label="fig-2" data-group="fig" data-number="2" id="label:fig-2"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
95
+ '<figure data-type="quote" data-label="fig-3.1" data-group="fig" data-number="3.1" id="label:fig-3.1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3.1. </span></figcaption></figure>',
96
+ '<figure data-type="math" data-label="$-4.1.1" data-group="$" data-number="4.1.1" id="label:$-4.1.1"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(4.1.1)</span></figcaption></figure>',
97
+ '<figure data-type="math" data-label="$-a" data-group="$" data-number="1" id="label:$-a"><div><div class="math" translate="no">$$\n$$</div></div><figcaption><span class="figindex">(1)</span></figcaption></figure>',
98
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
99
99
  '<p><a class="label" data-label="fig-2" href="#label:fig-2">Fig. 2</a></p>',
100
100
  '<p><a class="label" data-label="$-4.1.1" href="#label:$-4.1.1">(4.1.1)</a></p>',
101
- '<p><a class="label disabled invalid" data-label="fig-1" data-invalid-syntax="label" data-invalid-type="reference" data-invalid-message="Missing the reference">$fig-1</a></p>',
101
+ '<p><a class="label disabled invalid" data-label="fig-1" data-invalid-syntax="label" data-invalid-type="reference" data-invalid-message="Missing the target figure">$fig-1</a></p>',
102
102
  ]);
103
103
  }
104
104
  });
@@ -115,10 +115,10 @@ describe('Unit: parser/processor/figure', () => {
115
115
  assert.deepStrictEqual(
116
116
  [...target.children].map(el => el.outerHTML),
117
117
  [
118
- '<blockquote><blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><figure data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>',
119
- '<aside class="example" data-type="markdown"><pre translate="no">~~~figure $fig-a\n&gt; \n\n~~~\n\n$fig-a</pre><hr><section><figure data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><p><a class="label disabled" data-label="fig-a">Fig. 1</a></p><ol class="annotations"></ol><ol class="references"></ol></section></aside>',
120
- '<figure data-label="fig-b" data-group="fig" data-number="1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
121
- '<figure data-label="fig-a" data-group="fig" data-number="2" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
118
+ '<blockquote><blockquote><section><figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote><section><figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>',
119
+ '<aside class="example" data-type="markdown"><pre translate="no">~~~figure $fig-a\n&gt; \n\n~~~\n\n$fig-a</pre><hr><section><figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure><p><a class="label disabled" data-label="fig-a">Fig. 1</a></p><ol class="annotations"></ol><ol class="references"></ol></section></aside>',
120
+ '<figure data-type="quote" data-label="fig-b" data-group="fig" data-number="1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
121
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="2" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2. </span></figcaption></figure>',
122
122
  ]);
123
123
  }
124
124
  });
@@ -134,6 +134,8 @@ describe('Unit: parser/processor/figure', () => {
134
134
  '$fig-b\n> ',
135
135
  '## 0',
136
136
  '$-0.0.0',
137
+ '### 0',
138
+ '$-0.0',
137
139
  '$fig-c\n> ',
138
140
  '## 0',
139
141
  '$-0.1.0',
@@ -167,66 +169,88 @@ describe('Unit: parser/processor/figure', () => {
167
169
  '<h1 id="index:0">0</h1>',
168
170
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure>',
169
171
  '<h2 id="index:0">0</h2>',
170
- '<figure data-label="fig-1" data-group="fig" data-number="1" id="label:fig-1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
172
+ '<figure data-type="quote" data-label="fig-1" data-group="fig" data-number="1" id="label:fig-1"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
171
173
  '<h2 id="index:0">0</h2>',
172
174
  '<blockquote><section><h2>0</h2><ol class="annotations"></ol><ol class="references"></ol></section></blockquote>',
173
- '<figure data-label="fig-b" data-group="fig" data-number="2.1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2.1. </span></figcaption></figure>',
175
+ '<figure data-type="quote" data-label="fig-b" data-group="fig" data-number="2.1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2.1. </span></figcaption></figure>',
174
176
  '<h2 id="index:0">0</h2>',
175
- '<figure data-label="$-0.0.0" data-group="$" hidden=""></figure>',
176
- '<figure data-label="fig-c" data-group="fig" data-number="3.1" id="label:fig-c"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3.1. </span></figcaption></figure>',
177
+ '<figure data-label="$-0.0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
178
+ '<h3 id="index:0">0</h3>',
179
+ '<figure data-label="$-0.0" data-group="$" hidden="" data-number="3.0"></figure>',
180
+ '<figure data-type="quote" data-label="fig-c" data-group="fig" data-number="3.1" id="label:fig-c"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 3.1. </span></figcaption></figure>',
177
181
  '<h2 id="index:0">0</h2>',
178
- '<figure data-label="$-0.1.0" data-group="$" hidden=""></figure>',
179
- '<figure data-label="fig-d" data-group="fig" data-number="4.1" id="label:fig-d"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 4.1. </span></figcaption></figure>',
180
- '<figure data-label="$-0.0" data-group="$" hidden=""></figure>',
181
- '<figure data-label="$-0.1.0" data-group="$" hidden=""></figure>',
182
- '<figure data-label="$-0.4.0" data-group="$" hidden=""></figure>',
183
- '<figure data-label="$-0.1.0" data-group="$" hidden=""></figure>',
182
+ '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
183
+ '<figure data-type="quote" data-label="fig-d" data-group="fig" data-number="4.1" id="label:fig-d"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 4.1. </span></figcaption></figure>',
184
+ '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
185
+ '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
186
+ '<figure data-label="$-0.4.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
187
+ '<figure data-label="$-0.1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
184
188
  '<h2 id="index:0">0</h2>',
185
189
  '<h2 id="index:0">0</h2>',
186
190
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="6.0"></figure>',
187
- '<figure data-label="fig-e" data-group="fig" data-number="6.1" id="label:fig-e"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 6.1. </span></figcaption></figure>',
191
+ '<figure data-type="quote" data-label="fig-e" data-group="fig" data-number="6.1" id="label:fig-e"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 6.1. </span></figcaption></figure>',
188
192
  '<h2 id="index:0">0</h2>',
189
193
  '<figure data-label="$-5.0" data-group="$" hidden="" data-number="5.0"></figure>',
190
- '<figure data-label="fig-f" data-group="fig" data-number="5.1" id="label:fig-f"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.1. </span></figcaption></figure>',
191
- '<figure data-label="$-0" data-group="$" hidden=""></figure>',
192
- '<figure data-label="fig-g" data-group="fig" data-number="5.2" id="label:fig-g"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.2. </span></figcaption></figure>',
194
+ '<figure data-type="quote" data-label="fig-f" data-group="fig" data-number="5.1" id="label:fig-f"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.1. </span></figcaption></figure>',
195
+ '<figure data-label="$-0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Invalid base index"></figure>',
196
+ '<figure data-type="quote" data-label="fig-g" data-group="fig" data-number="5.2" id="label:fig-g"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.2. </span></figcaption></figure>',
193
197
  '<h3 id="index:0">0</h3>',
194
- '<figure data-label="$-0.0.0" data-group="$" hidden=""></figure>',
195
- '<figure data-label="fig-h" data-group="fig" data-number="5.3" id="label:fig-h"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.3. </span></figcaption></figure>',
198
+ '<figure data-label="$-0.0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="argument" data-invalid-message="Base index must be $-x.0 format"></figure>',
199
+ '<figure data-type="quote" data-label="fig-h" data-group="fig" data-number="5.3" id="label:fig-h"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.3. </span></figcaption></figure>',
196
200
  '<h3 id="index:0">0</h3>',
197
- '<figure data-label="fig-i" data-group="fig" data-number="5.4" id="label:fig-i"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.4. </span></figcaption></figure>',
201
+ '<figure data-type="quote" data-label="fig-i" data-group="fig" data-number="5.4" id="label:fig-i"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 5.4. </span></figcaption></figure>',
198
202
  '<h1 id="index:0">0</h1>',
199
- '<figure data-label="fig-j" data-group="fig" data-number="6.1" id="label:fig-j"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 6.1. </span></figcaption></figure>',
203
+ '<figure data-type="quote" data-label="fig-j" data-group="fig" data-number="6.1" id="label:fig-j"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 6.1. </span></figcaption></figure>',
200
204
  ]);
201
205
  }
202
206
  });
203
207
 
204
- it('concatenation', () => {
208
+ it('concat', () => {
205
209
  const target = parse([
206
- '# 0',
207
210
  '$-0.0',
208
211
  '## 0',
212
+ '$-0.0',
213
+ '$fig-a\n> ',
214
+ '$-0.0',
209
215
  '## 0',
216
+ '$fig-b\n> ',
217
+ '$-0.0',
218
+ '### 0',
219
+ '$fig-c\n> ',
210
220
  '$-1.0',
211
- '$fig-a\n> ',
212
221
  '## 0',
213
222
  '$-0.0',
214
- '$fig-b\n> ',
223
+ '$fig-d\n> ',
224
+ '### 0',
225
+ '$-0.0',
226
+ '## 0',
227
+ '$-9.0',
228
+ '$fig-e\n> ',
215
229
  ].join('\n\n'));
216
230
  for (let i = 0; i < 3; ++i) {
217
231
  [...figure(target)];
218
232
  assert.deepStrictEqual(
219
233
  [...target.children].map(el => normalize(el.outerHTML)),
220
234
  [
221
- '<h1 id="index:0">0</h1>',
222
- '<figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure>',
235
+ '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
223
236
  '<h2 id="index:0">0</h2>',
237
+ '<figure data-label="$-0.0" data-group="$" hidden="" data-number="0.0"></figure>',
238
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="0.1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 0.1. </span></figcaption></figure>',
239
+ '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
224
240
  '<h2 id="index:0">0</h2>',
225
- '<figure data-label="$-1.0" data-group="$" hidden="" data-number="1.0"></figure>',
226
- '<figure data-label="fig-a" data-group="fig" data-number="1.1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1.1. </span></figcaption></figure>',
241
+ '<figure data-type="quote" data-label="fig-b" data-group="fig" data-number="1.1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1.1. </span></figcaption></figure>',
242
+ '<figure data-label="$-0.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
243
+ '<h3 id="index:0">0</h3>',
244
+ '<figure data-type="quote" data-label="fig-c" data-group="fig" data-number="1.2" id="label:fig-c"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1.2. </span></figcaption></figure>',
245
+ '<figure data-label="$-1.0" data-group="$" class="invalid" data-invalid-syntax="figure" data-invalid-type="position" data-invalid-message="Base index declarations must be after level 1 to 6 headings"></figure>',
227
246
  '<h2 id="index:0">0</h2>',
228
247
  '<figure data-label="$-0.0" data-group="$" hidden="" data-number="2.0"></figure>',
229
- '<figure data-label="fig-b" data-group="fig" data-number="2.1" id="label:fig-b"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2.1. </span></figcaption></figure>',
248
+ '<figure data-type="quote" data-label="fig-d" data-group="fig" data-number="2.1" id="label:fig-d"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 2.1. </span></figcaption></figure>',
249
+ '<h3 id="index:0">0</h3>',
250
+ '<figure data-label="$-0.0" data-group="$" hidden="" data-number="2.0"></figure>',
251
+ '<h2 id="index:0">0</h2>',
252
+ '<figure data-label="$-9.0" data-group="$" hidden="" data-number="9.0"></figure>',
253
+ '<figure data-type="quote" data-label="fig-e" data-group="fig" data-number="9.1" id="label:fig-e"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 9.1. </span></figcaption></figure>',
230
254
  ]);
231
255
  }
232
256
  });
@@ -242,7 +266,7 @@ describe('Unit: parser/processor/figure', () => {
242
266
  assert.deepStrictEqual(
243
267
  [...target.children].map(el => el.outerHTML),
244
268
  [
245
- '<figure data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
269
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1" id="label:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
246
270
  '<p><a class="label" data-label="fig-a" href="#label:fig-a">Fig. 1</a></p>',
247
271
  '<p><a class="label" data-label="fig-a" href="#label:fig-a">Fig. 1</a></p>',
248
272
  ]);
@@ -259,7 +283,7 @@ describe('Unit: parser/processor/figure', () => {
259
283
  assert.deepStrictEqual(
260
284
  [...target.children].map(el => el.outerHTML),
261
285
  [
262
- '<figure data-label="fig-a" data-group="fig" data-number="1" id="label:0:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
286
+ '<figure data-type="quote" data-label="fig-a" data-group="fig" data-number="1" id="label:0:fig-a"><div><blockquote></blockquote></div><figcaption><span class="figindex">Fig. 1. </span></figcaption></figure>',
263
287
  '<p><a class="label" data-label="fig-a" href="#label:0:fig-a">Fig. 1</a></p>',
264
288
  ]);
265
289
  }
@@ -22,25 +22,62 @@ export function* figure(
22
22
  let bases: readonly string[] = base.split('.');
23
23
  let index: readonly string[] = bases;
24
24
  // Bug: Firefox
25
- //for (let defs = target.querySelectorAll(':scope > figure[data-label], :scope > h1, :scope > h2, :scope > h3'), i = 0, len = defs.length; i < len; ++i) {
25
+ //for (let defs = target.querySelectorAll(':scope > figure[data-label], :scope > h1, :scope > h2'), i = 0, len = defs.length; i < len; ++i) {
26
26
  for (
27
- let defs = target.querySelectorAll('figure[data-label], h1, h2, h3'),
27
+ let defs = target.querySelectorAll('figure[data-label], h1, h2'),
28
28
  i = 0, len = defs.length; i < len; ++i) {
29
29
  yield;
30
30
  const def = defs[i];
31
31
  if (def.parentNode !== target) continue;
32
- if (bases.length === 1 && def.tagName[0] === 'H') continue;
32
+ const { tagName, classList } = def;
33
+ if (bases.length === 1 && tagName[0] === 'H') continue;
33
34
  assert(base === '0' || bases.length > 1);
34
- const label = def.tagName === 'FIGURE'
35
+ const label = tagName === 'FIGURE'
35
36
  ? def.getAttribute('data-label')!
36
37
  : `$-${increment(index, def as HTMLHeadingElement)}`;
37
38
  if (label.endsWith('-')) continue;
38
- if (label.endsWith('-0')) continue;
39
- if (def.tagName === 'FIGURE' && label.endsWith('.0')) {
40
- // $-x.0 after h1 or h2.
41
- if (label.lastIndexOf('.', label.length - 3) < 0 && !(+def.previousElementSibling?.tagName[1]! <= 2)) continue;
39
+ if (label.endsWith('-0')) {
40
+ define(def, {
41
+ class: void classList.add('invalid'),
42
+ 'data-invalid-syntax': 'figure',
43
+ 'data-invalid-type': 'argument',
44
+ 'data-invalid-message': 'Invalid base index',
45
+ hidden: null,
46
+ });
47
+ continue;
48
+ }
49
+ if (tagName === 'FIGURE' && label.endsWith('.0')) {
42
50
  // $-x.x.0 is disabled.
43
- if (label.lastIndexOf('.', label.length - 3) > 0) continue;
51
+ if (label.lastIndexOf('.', label.length - 3) !== -1) {
52
+ define(def, {
53
+ class: void classList.add('invalid'),
54
+ 'data-invalid-syntax': 'figure',
55
+ 'data-invalid-type': 'argument',
56
+ 'data-invalid-message': 'Base index must be $-x.0 format',
57
+ hidden: null,
58
+ });
59
+ continue;
60
+ }
61
+ // $-x.0 after h1-h6.
62
+ if (!/^H[1-6]$/.test(def.previousElementSibling?.tagName ?? '')) {
63
+ define(def, {
64
+ class: void classList.add('invalid'),
65
+ 'data-invalid-syntax': 'figure',
66
+ 'data-invalid-type': 'position',
67
+ 'data-invalid-message': 'Base index declarations must be after level 1 to 6 headings',
68
+ hidden: null,
69
+ });
70
+ continue;
71
+ }
72
+ else {
73
+ classList.contains('invalid') && define(def, {
74
+ class: void classList.remove('invalid'),
75
+ 'data-invalid-syntax': null,
76
+ 'data-invalid-type': null,
77
+ 'data-invalid-message': null,
78
+ hidden: '',
79
+ });
80
+ }
44
81
  }
45
82
  const group = label.split('-', 1)[0];
46
83
  assert(label && group);
@@ -53,27 +90,27 @@ export function* figure(
53
90
  assert(def.matches('figure') || number.endsWith('.0'));
54
91
  if (number.endsWith('.0')) {
55
92
  assert(isFixed(label));
56
- if (number.split('.').length > 2) continue;
57
- if (group !== '$' || def.tagName === 'FIGURE' && def.firstChild) continue;
93
+ assert(number.split('.').length <= 2);
94
+ if (group !== '$' || tagName === 'FIGURE' && def.firstChild) continue;
58
95
  if (number.startsWith('0.')) {
59
96
  assert(number.endsWith('.0'));
60
97
  number = join(
61
98
  index.slice(0)
62
- .reduce((ns, _, i, bs) => {
99
+ .reduce((ns, _, i, xs) => {
63
100
  i === ns.length
64
- ? bs.length = i
65
- : ns[i] = +ns[i] > +bs[i]
101
+ ? xs.length = i
102
+ : ns[i] = +ns[i] > +xs[i]
66
103
  ? ns[i]
67
104
  : +ns[i] === 0
68
- ? bs[i]
69
- : `${+bs[i] + 1}`;
105
+ ? xs[i]
106
+ : `${+xs[i] + 1}`;
70
107
  return ns;
71
108
  }, number.split('.')),
72
109
  '.');
73
110
  }
74
111
  base = number;
75
112
  bases = index = base.split('.');
76
- numbers.clear();
113
+ tagName !== 'FIGURE' && numbers.clear();
77
114
  assert(def.tagName !== 'FIGURE' || !+def.setAttribute('data-number', number));
78
115
  continue;
79
116
  }
@@ -89,11 +126,11 @@ export function* figure(
89
126
  def.querySelector(':scope > figcaption > .figindex')!,
90
127
  group === '$' ? figindex : `${figindex}. `);
91
128
  if (labels.has(label)) {
92
- if (def.classList.contains('invalid') &&
129
+ if (classList.contains('invalid') &&
93
130
  def.getAttribute('data-invalid-message') !== 'Duplicate label') continue;
94
131
  define(def, {
95
132
  id: null,
96
- class: void def.classList.add('invalid'),
133
+ class: void classList.add('invalid'),
97
134
  'data-invalid-syntax': 'figure',
98
135
  'data-invalid-type': 'argument',
99
136
  'data-invalid-message': 'Duplicate label',
@@ -103,7 +140,7 @@ export function* figure(
103
140
  else {
104
141
  labels.add(label);
105
142
  define(def, {
106
- class: void def.classList.remove('invalid'),
143
+ class: void classList.remove('invalid'),
107
144
  'data-invalid-syntax': null,
108
145
  'data-invalid-type': null,
109
146
  'data-invalid-message': null,
@@ -122,7 +159,7 @@ export function* figure(
122
159
  class: `${ref.className} disabled invalid`,
123
160
  'data-invalid-syntax': 'label',
124
161
  'data-invalid-type': 'reference',
125
- 'data-invalid-message': 'Missing the reference',
162
+ 'data-invalid-message': 'Missing the target figure',
126
163
  });
127
164
  }
128
165
  yield ref;
@@ -53,7 +53,7 @@ function build(
53
53
  style ??= abbr ? 'abbr' : 'count';
54
54
  if (style === 'count' ? abbr : !abbr) {
55
55
  define(ref, {
56
- class: `${ref.className} invalid`,
56
+ class: void ref.classList.add('invalid'),
57
57
  'data-invalid-syntax': syntax,
58
58
  'data-invalid-type': 'style',
59
59
  'data-invalid-message': `${syntax[0].toUpperCase() + syntax.slice(1)} style must be consistent`,
package/src/util/quote.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { Element } from 'spica/global';
1
2
  import { exec } from '../combinator/data/parser';
2
3
  import { cite } from '../parser/block/reply/cite';
3
4
  import { define } from 'typed-dom';