@markuplint/html-parser 3.6.0 → 3.7.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@markuplint/html-parser",
3
- "version": "3.6.0",
3
+ "version": "3.7.0",
4
4
  "description": "HTML parser for markuplint",
5
5
  "repository": "git@github.com:markuplint/markuplint.git",
6
6
  "author": "Yusuke Hirao <yusukehirao@me.com>",
@@ -21,12 +21,10 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@markuplint/ml-ast": "3.1.0",
24
- "@markuplint/parser-utils": "3.6.0",
24
+ "@markuplint/parser-utils": "3.7.0",
25
25
  "parse5": "7.1.2",
26
- "tslib": "^2.4.1"
26
+ "tslib": "^2.4.1",
27
+ "type-fest": "^3.8.0"
27
28
  },
28
- "devDependencies": {
29
- "type-fest": "^3.7.0"
30
- },
31
- "gitHead": "715dd53d3b1064a9bcf616c1533921cad9e3b187"
29
+ "gitHead": "adc6e432cccba7cfad0dc8bf9f92e5aaf1107359"
32
30
  }
@@ -0,0 +1,675 @@
1
+ const attrTokenizer = require('../lib/attr-tokenizer').default;
2
+
3
+ it('void attribute', () => {
4
+ expect(attrTokenizer(' abc', 1, 1, 0)).toMatchObject({
5
+ raw: 'abc',
6
+ startLine: 1,
7
+ endLine: 1,
8
+ startCol: 2,
9
+ endCol: 5,
10
+ startOffset: 1,
11
+ endOffset: 4,
12
+ spacesBeforeName: {
13
+ raw: ' ',
14
+ startLine: 1,
15
+ endLine: 1,
16
+ startCol: 1,
17
+ endCol: 2,
18
+ startOffset: 0,
19
+ endOffset: 1,
20
+ },
21
+ name: {
22
+ raw: 'abc',
23
+ startLine: 1,
24
+ endLine: 1,
25
+ startCol: 2,
26
+ endCol: 5,
27
+ startOffset: 1,
28
+ endOffset: 4,
29
+ },
30
+ spacesBeforeEqual: {
31
+ raw: '',
32
+ startLine: 1,
33
+ endLine: 1,
34
+ startCol: 5,
35
+ endCol: 5,
36
+ startOffset: 4,
37
+ endOffset: 4,
38
+ },
39
+ equal: {
40
+ raw: '',
41
+ startLine: 1,
42
+ endLine: 1,
43
+ startCol: 5,
44
+ endCol: 5,
45
+ startOffset: 4,
46
+ endOffset: 4,
47
+ },
48
+ spacesAfterEqual: {
49
+ raw: '',
50
+ startLine: 1,
51
+ endLine: 1,
52
+ startCol: 5,
53
+ endCol: 5,
54
+ startOffset: 4,
55
+ endOffset: 4,
56
+ },
57
+ startQuote: {
58
+ endCol: 5,
59
+ endLine: 1,
60
+ endOffset: 4,
61
+ raw: '',
62
+ startCol: 5,
63
+ startLine: 1,
64
+ startOffset: 4,
65
+ },
66
+ value: {
67
+ endCol: 5,
68
+ endLine: 1,
69
+ endOffset: 4,
70
+ raw: '',
71
+ startCol: 5,
72
+ startLine: 1,
73
+ startOffset: 4,
74
+ },
75
+ endQuote: {
76
+ endCol: 5,
77
+ endLine: 1,
78
+ endOffset: 4,
79
+ raw: '',
80
+ startCol: 5,
81
+ startLine: 1,
82
+ startOffset: 4,
83
+ },
84
+ });
85
+ });
86
+
87
+ test('normal', () => {
88
+ expect(attrTokenizer(' abc="123"', 1, 1, 0)).toMatchObject({
89
+ startLine: 1,
90
+ endLine: 1,
91
+ startCol: 2,
92
+ endCol: 11,
93
+ startOffset: 1,
94
+ endOffset: 10,
95
+ raw: 'abc="123"',
96
+ spacesBeforeName: {
97
+ raw: ' ',
98
+ startLine: 1,
99
+ endLine: 1,
100
+ startCol: 1,
101
+ endCol: 2,
102
+ startOffset: 0,
103
+ endOffset: 1,
104
+ },
105
+ name: {
106
+ raw: 'abc',
107
+ startLine: 1,
108
+ endLine: 1,
109
+ startCol: 2,
110
+ endCol: 5,
111
+ startOffset: 1,
112
+ endOffset: 4,
113
+ },
114
+ spacesBeforeEqual: {
115
+ raw: '',
116
+ startLine: 1,
117
+ endLine: 1,
118
+ startCol: 5,
119
+ endCol: 5,
120
+ startOffset: 4,
121
+ endOffset: 4,
122
+ },
123
+ equal: {
124
+ raw: '=',
125
+ startLine: 1,
126
+ endLine: 1,
127
+ startCol: 5,
128
+ endCol: 6,
129
+ startOffset: 4,
130
+ endOffset: 5,
131
+ },
132
+ spacesAfterEqual: {
133
+ raw: '',
134
+ startLine: 1,
135
+ endLine: 1,
136
+ startCol: 6,
137
+ endCol: 6,
138
+ startOffset: 5,
139
+ endOffset: 5,
140
+ },
141
+ startQuote: {
142
+ raw: '"',
143
+ startLine: 1,
144
+ endLine: 1,
145
+ startCol: 6,
146
+ endCol: 7,
147
+ startOffset: 5,
148
+ endOffset: 6,
149
+ },
150
+ value: {
151
+ raw: '123',
152
+ startLine: 1,
153
+ endLine: 1,
154
+ startCol: 7,
155
+ endCol: 10,
156
+ startOffset: 6,
157
+ endOffset: 9,
158
+ },
159
+ endQuote: {
160
+ endCol: 11,
161
+ endLine: 1,
162
+ endOffset: 10,
163
+ raw: '"',
164
+ startCol: 10,
165
+ startLine: 1,
166
+ startOffset: 9,
167
+ },
168
+ });
169
+ });
170
+
171
+ test('after line break', () => {
172
+ expect(attrTokenizer('\n abc="123"', 1, 1, 0)).toMatchObject({
173
+ startLine: 2,
174
+ endLine: 2,
175
+ startCol: 2,
176
+ endCol: 11,
177
+ startOffset: 2,
178
+ endOffset: 11,
179
+ raw: 'abc="123"',
180
+ spacesBeforeName: {
181
+ raw: '\n ',
182
+ startLine: 1,
183
+ endLine: 2,
184
+ startCol: 1,
185
+ endCol: 2,
186
+ startOffset: 0,
187
+ endOffset: 2,
188
+ },
189
+ name: {
190
+ raw: 'abc',
191
+ startLine: 2,
192
+ endLine: 2,
193
+ startCol: 2,
194
+ endCol: 5,
195
+ startOffset: 2,
196
+ endOffset: 5,
197
+ },
198
+ spacesBeforeEqual: {
199
+ raw: '',
200
+ startLine: 2,
201
+ endLine: 2,
202
+ startCol: 5,
203
+ endCol: 5,
204
+ startOffset: 5,
205
+ endOffset: 5,
206
+ },
207
+ equal: {
208
+ raw: '=',
209
+ startLine: 2,
210
+ endLine: 2,
211
+ startCol: 5,
212
+ endCol: 6,
213
+ startOffset: 5,
214
+ endOffset: 6,
215
+ },
216
+ spacesAfterEqual: {
217
+ raw: '',
218
+ startLine: 2,
219
+ endLine: 2,
220
+ startCol: 6,
221
+ endCol: 6,
222
+ startOffset: 6,
223
+ endOffset: 6,
224
+ },
225
+ startQuote: {
226
+ raw: '"',
227
+ startLine: 2,
228
+ endLine: 2,
229
+ startCol: 6,
230
+ endCol: 7,
231
+ startOffset: 6,
232
+ endOffset: 7,
233
+ },
234
+ value: {
235
+ raw: '123',
236
+ startLine: 2,
237
+ endLine: 2,
238
+ startCol: 7,
239
+ endCol: 10,
240
+ startOffset: 7,
241
+ endOffset: 10,
242
+ },
243
+ endQuote: {
244
+ raw: '"',
245
+ startLine: 2,
246
+ endLine: 2,
247
+ startCol: 10,
248
+ endCol: 11,
249
+ startOffset: 10,
250
+ endOffset: 11,
251
+ },
252
+ });
253
+ });
254
+
255
+ test('after line break', () => {
256
+ expect(attrTokenizer('\n abc="123"', 1, 3, 0)).toMatchObject({
257
+ spacesBeforeName: {
258
+ raw: '\n ',
259
+ startLine: 1,
260
+ endLine: 2,
261
+ startCol: 3,
262
+ endCol: 2,
263
+ startOffset: 0,
264
+ endOffset: 2,
265
+ },
266
+ });
267
+ });
268
+
269
+ test('single quote', () => {
270
+ expect(attrTokenizer(" q='a'", 1, 1, 0)).toMatchObject({
271
+ startLine: 1,
272
+ endLine: 1,
273
+ startCol: 3,
274
+ endCol: 8,
275
+ startOffset: 2,
276
+ endOffset: 7,
277
+ raw: "q='a'",
278
+ spacesBeforeName: {
279
+ raw: ' ',
280
+ startLine: 1,
281
+ endLine: 1,
282
+ startCol: 1,
283
+ endCol: 3,
284
+ startOffset: 0,
285
+ endOffset: 2,
286
+ },
287
+ name: {
288
+ raw: 'q',
289
+ startLine: 1,
290
+ endLine: 1,
291
+ startCol: 3,
292
+ endCol: 4,
293
+ startOffset: 2,
294
+ endOffset: 3,
295
+ },
296
+ equal: {
297
+ raw: '=',
298
+ startLine: 1,
299
+ endLine: 1,
300
+ startCol: 4,
301
+ endCol: 5,
302
+ startOffset: 3,
303
+ endOffset: 4,
304
+ },
305
+ value: {
306
+ raw: 'a',
307
+ startLine: 1,
308
+ endLine: 1,
309
+ startCol: 6,
310
+ endCol: 7,
311
+ startOffset: 5,
312
+ endOffset: 6,
313
+ },
314
+ });
315
+ });
316
+
317
+ test('no quote', () => {
318
+ expect(attrTokenizer('q=a', 1, 1, 0)).toMatchObject({
319
+ startLine: 1,
320
+ endLine: 1,
321
+ startCol: 1,
322
+ endCol: 4,
323
+ startOffset: 0,
324
+ endOffset: 3,
325
+ raw: 'q=a',
326
+ name: {
327
+ raw: 'q',
328
+ startLine: 1,
329
+ endLine: 1,
330
+ startCol: 1,
331
+ endCol: 2,
332
+ startOffset: 0,
333
+ endOffset: 1,
334
+ },
335
+ equal: {
336
+ raw: '=',
337
+ startLine: 1,
338
+ endLine: 1,
339
+ startCol: 2,
340
+ endCol: 3,
341
+ startOffset: 1,
342
+ endOffset: 2,
343
+ },
344
+ value: {
345
+ raw: 'a',
346
+ startLine: 1,
347
+ endLine: 1,
348
+ startCol: 3,
349
+ endCol: 4,
350
+ startOffset: 2,
351
+ endOffset: 3,
352
+ },
353
+ });
354
+ });
355
+
356
+ test('empty', () => {
357
+ expect(attrTokenizer('q', 1, 1, 0)).toMatchObject({
358
+ startLine: 1,
359
+ endLine: 1,
360
+ startCol: 1,
361
+ endCol: 2,
362
+ startOffset: 0,
363
+ endOffset: 1,
364
+ raw: 'q',
365
+ name: {
366
+ raw: 'q',
367
+ startLine: 1,
368
+ endLine: 1,
369
+ startCol: 1,
370
+ endCol: 2,
371
+ startOffset: 0,
372
+ endOffset: 1,
373
+ },
374
+ equal: {},
375
+ value: {},
376
+ });
377
+ });
378
+
379
+ test('no value', () => {
380
+ expect(attrTokenizer('q=', 1, 1, 0)).toMatchObject({
381
+ startLine: 1,
382
+ endLine: 1,
383
+ startCol: 1,
384
+ endCol: 3,
385
+ startOffset: 0,
386
+ endOffset: 2,
387
+ raw: 'q=',
388
+ name: {
389
+ raw: 'q',
390
+ startLine: 1,
391
+ endLine: 1,
392
+ startCol: 1,
393
+ endCol: 2,
394
+ startOffset: 0,
395
+ endOffset: 1,
396
+ },
397
+ equal: {
398
+ raw: '=',
399
+ startLine: 1,
400
+ endLine: 1,
401
+ startCol: 2,
402
+ endCol: 3,
403
+ startOffset: 1,
404
+ endOffset: 2,
405
+ },
406
+ value: {
407
+ raw: '',
408
+ startLine: 1,
409
+ endLine: 1,
410
+ startCol: 3,
411
+ endCol: 3,
412
+ startOffset: 2,
413
+ endOffset: 2,
414
+ },
415
+ });
416
+ });
417
+
418
+ test('spaces', () => {
419
+ expect(attrTokenizer('abc = "efg"', 1, 1, 0)).toMatchObject({
420
+ startLine: 1,
421
+ endLine: 1,
422
+ startCol: 1,
423
+ endCol: 14,
424
+ startOffset: 0,
425
+ endOffset: 13,
426
+ raw: 'abc = "efg"',
427
+ name: {
428
+ raw: 'abc',
429
+ startLine: 1,
430
+ endLine: 1,
431
+ startCol: 1,
432
+ endCol: 4,
433
+ startOffset: 0,
434
+ endOffset: 3,
435
+ },
436
+ equal: {
437
+ raw: '=',
438
+ startLine: 1,
439
+ endLine: 1,
440
+ startCol: 6,
441
+ endCol: 7,
442
+ startOffset: 5,
443
+ endOffset: 6,
444
+ },
445
+ value: {
446
+ raw: 'efg',
447
+ startLine: 1,
448
+ endLine: 1,
449
+ startCol: 10,
450
+ endCol: 13,
451
+ startOffset: 9,
452
+ endOffset: 12,
453
+ },
454
+ });
455
+ });
456
+
457
+ test('line break', () => {
458
+ expect(
459
+ attrTokenizer(
460
+ `
461
+ abc
462
+
463
+ =
464
+
465
+ "e
466
+
467
+ fg
468
+
469
+ "`,
470
+ 1,
471
+ 1,
472
+ 0,
473
+ ),
474
+ ).toMatchObject({
475
+ startLine: 2,
476
+ endLine: 10,
477
+ startCol: 2,
478
+ endCol: 2,
479
+ startOffset: 2,
480
+ endOffset: 29,
481
+ raw: 'abc\n\n =\n\n "e\n\n fg\n\n"',
482
+ name: {
483
+ raw: 'abc',
484
+ startLine: 2,
485
+ endLine: 2,
486
+ startCol: 2,
487
+ endCol: 5,
488
+ startOffset: 2,
489
+ endOffset: 5,
490
+ },
491
+ equal: {
492
+ raw: '=',
493
+ startLine: 4,
494
+ endLine: 4,
495
+ startCol: 4,
496
+ endCol: 5,
497
+ startOffset: 10,
498
+ endOffset: 11,
499
+ },
500
+ value: {
501
+ raw: 'e\n\n fg\n\n',
502
+ startLine: 6,
503
+ endLine: 10,
504
+ startCol: 4,
505
+ endCol: 1,
506
+ startOffset: 16,
507
+ endOffset: 28,
508
+ },
509
+ });
510
+ });
511
+
512
+ it('includes gt sign', () => {
513
+ expect(attrTokenizer('abc="d>e"', 1, 1, 0)).toMatchObject({
514
+ raw: 'abc="d>e"',
515
+ startLine: 1,
516
+ endLine: 1,
517
+ startCol: 1,
518
+ endCol: 10,
519
+ startOffset: 0,
520
+ endOffset: 9,
521
+ spacesBeforeName: {
522
+ raw: '',
523
+ startLine: 1,
524
+ endLine: 1,
525
+ startCol: 1,
526
+ endCol: 1,
527
+ startOffset: 0,
528
+ endOffset: 0,
529
+ },
530
+ name: {
531
+ raw: 'abc',
532
+ startLine: 1,
533
+ endLine: 1,
534
+ startCol: 1,
535
+ endCol: 4,
536
+ startOffset: 0,
537
+ endOffset: 3,
538
+ },
539
+ spacesBeforeEqual: {
540
+ raw: '',
541
+ startLine: 1,
542
+ endLine: 1,
543
+ startCol: 4,
544
+ endCol: 4,
545
+ startOffset: 3,
546
+ endOffset: 3,
547
+ },
548
+ equal: {
549
+ raw: '=',
550
+ startLine: 1,
551
+ endLine: 1,
552
+ startCol: 4,
553
+ endCol: 5,
554
+ startOffset: 3,
555
+ endOffset: 4,
556
+ },
557
+ spacesAfterEqual: {
558
+ raw: '',
559
+ startLine: 1,
560
+ endLine: 1,
561
+ startCol: 5,
562
+ endCol: 5,
563
+ startOffset: 4,
564
+ endOffset: 4,
565
+ },
566
+ startQuote: {
567
+ endCol: 6,
568
+ endLine: 1,
569
+ endOffset: 5,
570
+ raw: '"',
571
+ startCol: 5,
572
+ startLine: 1,
573
+ startOffset: 4,
574
+ },
575
+ value: {
576
+ endCol: 9,
577
+ endLine: 1,
578
+ endOffset: 8,
579
+ raw: 'd>e',
580
+ startCol: 6,
581
+ startLine: 1,
582
+ startOffset: 5,
583
+ },
584
+ endQuote: {
585
+ endCol: 10,
586
+ endLine: 1,
587
+ endOffset: 9,
588
+ raw: '"',
589
+ startCol: 9,
590
+ startLine: 1,
591
+ startOffset: 8,
592
+ },
593
+ });
594
+ expect(attrTokenizer('abc="d=>e"', 1, 1, 0)).toMatchObject({
595
+ raw: 'abc="d=>e"',
596
+ startLine: 1,
597
+ endLine: 1,
598
+ startCol: 1,
599
+ endCol: 11,
600
+ startOffset: 0,
601
+ endOffset: 10,
602
+ spacesBeforeName: {
603
+ raw: '',
604
+ startLine: 1,
605
+ endLine: 1,
606
+ startCol: 1,
607
+ endCol: 1,
608
+ startOffset: 0,
609
+ endOffset: 0,
610
+ },
611
+ name: {
612
+ raw: 'abc',
613
+ startLine: 1,
614
+ endLine: 1,
615
+ startCol: 1,
616
+ endCol: 4,
617
+ startOffset: 0,
618
+ endOffset: 3,
619
+ },
620
+ spacesBeforeEqual: {
621
+ raw: '',
622
+ startLine: 1,
623
+ endLine: 1,
624
+ startCol: 4,
625
+ endCol: 4,
626
+ startOffset: 3,
627
+ endOffset: 3,
628
+ },
629
+ equal: {
630
+ raw: '=',
631
+ startLine: 1,
632
+ endLine: 1,
633
+ startCol: 4,
634
+ endCol: 5,
635
+ startOffset: 3,
636
+ endOffset: 4,
637
+ },
638
+ spacesAfterEqual: {
639
+ raw: '',
640
+ startLine: 1,
641
+ endLine: 1,
642
+ startCol: 5,
643
+ endCol: 5,
644
+ startOffset: 4,
645
+ endOffset: 4,
646
+ },
647
+ startQuote: {
648
+ endCol: 6,
649
+ endLine: 1,
650
+ endOffset: 5,
651
+ raw: '"',
652
+ startCol: 5,
653
+ startLine: 1,
654
+ startOffset: 4,
655
+ },
656
+ value: {
657
+ endCol: 10,
658
+ endLine: 1,
659
+ endOffset: 9,
660
+ raw: 'd=>e',
661
+ startCol: 6,
662
+ startLine: 1,
663
+ startOffset: 5,
664
+ },
665
+ endQuote: {
666
+ endCol: 11,
667
+ endLine: 1,
668
+ endOffset: 10,
669
+ raw: '"',
670
+ startCol: 10,
671
+ startLine: 1,
672
+ startOffset: 9,
673
+ },
674
+ });
675
+ });
@@ -0,0 +1,21 @@
1
+ const { getNamespace } = require('../lib/get-namespace');
2
+
3
+ describe('getNamespace', () => {
4
+ it('div', () => {
5
+ expect(getNamespace('div')).toBe('http://www.w3.org/1999/xhtml');
6
+ expect(getNamespace('span')).toBe('http://www.w3.org/1999/xhtml');
7
+ expect(getNamespace('html')).toBe('http://www.w3.org/1999/xhtml');
8
+ });
9
+
10
+ it('svg', () => {
11
+ expect(getNamespace('svg')).toBe('http://www.w3.org/2000/svg');
12
+ expect(getNamespace('g', 'http://www.w3.org/2000/svg')).toBe('http://www.w3.org/2000/svg');
13
+ expect(getNamespace('rect', 'http://www.w3.org/2000/svg')).toBe('http://www.w3.org/2000/svg');
14
+ });
15
+
16
+ it('MathML', () => {
17
+ expect(getNamespace('math')).toBe('http://www.w3.org/1998/Math/MathML');
18
+ expect(getNamespace('msqrt', 'http://www.w3.org/1998/Math/MathML')).toBe('http://www.w3.org/1998/Math/MathML');
19
+ expect(getNamespace('mn', 'http://www.w3.org/1998/Math/MathML')).toBe('http://www.w3.org/1998/Math/MathML');
20
+ });
21
+ });