securemark 0.222.0 → 0.225.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-lock.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.222.0",
3
+ "version": "0.225.0",
4
4
  "lockfileVersion": 1,
5
5
  "requires": true,
6
6
  "dependencies": {
@@ -399,9 +399,9 @@
399
399
  }
400
400
  },
401
401
  "@npmcli/fs": {
402
- "version": "1.0.0",
403
- "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.0.0.tgz",
404
- "integrity": "sha512-8ltnOpRR/oJbOp8vaGUnipOi3bqkcW+sLHFlyXIr08OGHmVJLB1Hn7QtGXbYcpVtH1gAYZTlmDXtE4YV0+AMMQ==",
402
+ "version": "1.1.0",
403
+ "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.0.tgz",
404
+ "integrity": "sha512-VhP1qZLXcrXRIaPoqb4YA55JQxLNF3jNR4T55IdOJa3+IFJKNYHtPvtXx8slmeMavj37vCzCfrqQM1vWLsYKLA==",
405
405
  "dev": true,
406
406
  "requires": {
407
407
  "@gar/promisify": "^1.0.1",
@@ -522,9 +522,9 @@
522
522
  "dev": true
523
523
  },
524
524
  "@types/dompurify": {
525
- "version": "2.3.1",
526
- "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.1.tgz",
527
- "integrity": "sha512-YJth9qa0V/E6/XPH1Jq4BC8uCMmO8V1fKWn8PCvuZcAhMn7q0ez9LW6naQT04UZzjFfAPhyRMZmI2a2rbMlEFA==",
525
+ "version": "2.3.2",
526
+ "resolved": "https://registry.npmjs.org/@types/dompurify/-/dompurify-2.3.2.tgz",
527
+ "integrity": "sha512-iht/O0jie/hDur39Z1NzjfOT/O9Kn2aWY99aqOn7lwsjSttEoMyGWvZIuAzZy0cNvAZdjmqySp7Z4d3GfBEGQw==",
528
528
  "dev": true,
529
529
  "requires": {
530
530
  "@types/trusted-types": "*"
@@ -547,9 +547,9 @@
547
547
  "dev": true
548
548
  },
549
549
  "@types/jquery": {
550
- "version": "3.5.9",
551
- "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.9.tgz",
552
- "integrity": "sha512-B8pDk+sH/tSv/HKdx6EQER6BfUOb2GtKs0LOmozziS4h7cbe8u/eYySfUAeTwD+J09SqV3man7AMWIA5mgzCBA==",
550
+ "version": "3.5.10",
551
+ "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.10.tgz",
552
+ "integrity": "sha512-w2qT5DFikh5TXrW/aOaCvCP8g2MMAfPXo3oeHR9v7dRuAZhu38PUWEkYrL4e9VRTcgZE4yER21AHndgpq2QPTQ==",
553
553
  "dev": true,
554
554
  "requires": {
555
555
  "@types/sizzle": "*"
@@ -1338,21 +1338,21 @@
1338
1338
  "dev": true
1339
1339
  },
1340
1340
  "body-parser": {
1341
- "version": "1.19.0",
1342
- "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz",
1343
- "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==",
1341
+ "version": "1.19.1",
1342
+ "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.1.tgz",
1343
+ "integrity": "sha512-8ljfQi5eBk8EJfECMrgqNGWPEY5jWP+1IzkzkGdFFEwFQZZyaZ21UqdaHktgiMlH0xLHqIFtE/u2OYE5dOtViA==",
1344
1344
  "dev": true,
1345
1345
  "requires": {
1346
- "bytes": "3.1.0",
1346
+ "bytes": "3.1.1",
1347
1347
  "content-type": "~1.0.4",
1348
1348
  "debug": "2.6.9",
1349
1349
  "depd": "~1.1.2",
1350
- "http-errors": "1.7.2",
1350
+ "http-errors": "1.8.1",
1351
1351
  "iconv-lite": "0.4.24",
1352
1352
  "on-finished": "~2.3.0",
1353
- "qs": "6.7.0",
1354
- "raw-body": "2.4.0",
1355
- "type-is": "~1.6.17"
1353
+ "qs": "6.9.6",
1354
+ "raw-body": "2.4.2",
1355
+ "type-is": "~1.6.18"
1356
1356
  }
1357
1357
  },
1358
1358
  "boxen": {
@@ -1672,9 +1672,9 @@
1672
1672
  "dev": true
1673
1673
  },
1674
1674
  "bytes": {
1675
- "version": "3.1.0",
1676
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz",
1677
- "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==",
1675
+ "version": "3.1.1",
1676
+ "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.1.tgz",
1677
+ "integrity": "sha512-dWe4nWO/ruEOY7HkUJ5gFt1DCFV9zPRoJr8pV0/ASQermOZjtq8jMjOprC0Kd10GLN+l7xaUPvxzJFWtxGu8Fg==",
1678
1678
  "dev": true
1679
1679
  },
1680
1680
  "cacache": {
@@ -2887,9 +2887,9 @@
2887
2887
  "dev": true
2888
2888
  },
2889
2889
  "electron-to-chromium": {
2890
- "version": "1.4.14",
2891
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.14.tgz",
2892
- "integrity": "sha512-RsGkAN9JEAYMObS72kzUsPPcPGMqX1rBqGuXi9aa4TBKLzICoLf+DAAtd0fVFzrniJqYzpby47gthCUoObfs0Q==",
2890
+ "version": "1.4.16",
2891
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.16.tgz",
2892
+ "integrity": "sha512-BQb7FgYwnu6haWLU63/CdVW+9xhmHls3RCQUFiV4lvw3wimEHTVcUk2hkuZo76QhR8nnDdfZE7evJIZqijwPdA==",
2893
2893
  "dev": true
2894
2894
  },
2895
2895
  "elliptic": {
@@ -5153,24 +5153,16 @@
5153
5153
  "dev": true
5154
5154
  },
5155
5155
  "http-errors": {
5156
- "version": "1.7.2",
5157
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz",
5158
- "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==",
5156
+ "version": "1.8.1",
5157
+ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
5158
+ "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
5159
5159
  "dev": true,
5160
5160
  "requires": {
5161
5161
  "depd": "~1.1.2",
5162
- "inherits": "2.0.3",
5163
- "setprototypeof": "1.1.1",
5162
+ "inherits": "2.0.4",
5163
+ "setprototypeof": "1.2.0",
5164
5164
  "statuses": ">= 1.5.0 < 2",
5165
- "toidentifier": "1.0.0"
5166
- },
5167
- "dependencies": {
5168
- "inherits": {
5169
- "version": "2.0.3",
5170
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
5171
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
5172
- "dev": true
5173
- }
5165
+ "toidentifier": "1.0.1"
5174
5166
  }
5175
5167
  },
5176
5168
  "http-proxy": {
@@ -5621,9 +5613,9 @@
5621
5613
  "dev": true
5622
5614
  },
5623
5615
  "is-negative-zero": {
5624
- "version": "2.0.1",
5625
- "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz",
5626
- "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==",
5616
+ "version": "2.0.2",
5617
+ "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz",
5618
+ "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==",
5627
5619
  "dev": true
5628
5620
  },
5629
5621
  "is-npm": {
@@ -5782,12 +5774,12 @@
5782
5774
  "dev": true
5783
5775
  },
5784
5776
  "is-weakref": {
5785
- "version": "1.0.1",
5786
- "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.1.tgz",
5787
- "integrity": "sha512-b2jKc2pQZjaeFYWEf7ScFj+Be1I+PXmlu572Q8coTXZ+LD/QQZ7ShPMst8h16riVgyXTQwUsFEl74mDvc/3MHQ==",
5777
+ "version": "1.0.2",
5778
+ "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz",
5779
+ "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==",
5788
5780
  "dev": true,
5789
5781
  "requires": {
5790
- "call-bind": "^1.0.0"
5782
+ "call-bind": "^1.0.2"
5791
5783
  }
5792
5784
  },
5793
5785
  "is-windows": {
@@ -6854,9 +6846,9 @@
6854
6846
  "dev": true
6855
6847
  },
6856
6848
  "minipass": {
6857
- "version": "3.1.5",
6858
- "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.5.tgz",
6859
- "integrity": "sha512-+8NzxD82XQoNKNrl1d/FSi+X8wAEWR+sbYAfIvub4Nz0d22plFG72CEVVaufV8PNf4qSslFTD8VMOxNVhHCjTw==",
6849
+ "version": "3.1.6",
6850
+ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.6.tgz",
6851
+ "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==",
6860
6852
  "dev": true,
6861
6853
  "requires": {
6862
6854
  "yallist": "^4.0.0"
@@ -8367,9 +8359,9 @@
8367
8359
  "dev": true
8368
8360
  },
8369
8361
  "qs": {
8370
- "version": "6.7.0",
8371
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz",
8372
- "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==",
8362
+ "version": "6.9.6",
8363
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.6.tgz",
8364
+ "integrity": "sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==",
8373
8365
  "dev": true
8374
8366
  },
8375
8367
  "querystring": {
@@ -8416,13 +8408,13 @@
8416
8408
  "dev": true
8417
8409
  },
8418
8410
  "raw-body": {
8419
- "version": "2.4.0",
8420
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz",
8421
- "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==",
8411
+ "version": "2.4.2",
8412
+ "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.2.tgz",
8413
+ "integrity": "sha512-RPMAFUJP19WIet/99ngh6Iv8fzAbqum4Li7AD6DtGaW2RpMB/11xDoalPiJMTbu6I3hkbMVkATvZrqb9EEqeeQ==",
8422
8414
  "dev": true,
8423
8415
  "requires": {
8424
- "bytes": "3.1.0",
8425
- "http-errors": "1.7.2",
8416
+ "bytes": "3.1.1",
8417
+ "http-errors": "1.8.1",
8426
8418
  "iconv-lite": "0.4.24",
8427
8419
  "unpipe": "1.0.0"
8428
8420
  }
@@ -9067,9 +9059,9 @@
9067
9059
  }
9068
9060
  },
9069
9061
  "setprototypeof": {
9070
- "version": "1.1.1",
9071
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz",
9072
- "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==",
9062
+ "version": "1.2.0",
9063
+ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
9064
+ "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
9073
9065
  "dev": true
9074
9066
  },
9075
9067
  "sha.js": {
@@ -9457,9 +9449,9 @@
9457
9449
  "dev": true
9458
9450
  },
9459
9451
  "spica": {
9460
- "version": "0.0.492",
9461
- "resolved": "https://registry.npmjs.org/spica/-/spica-0.0.492.tgz",
9462
- "integrity": "sha512-RRkarcCp/GzdExxZKSgPBMcMMhypt77A4vFunI57yKZ84VF+Wx35kDGhZC09vcDWPMDaCOPVWbEBYCfciEYQCw==",
9452
+ "version": "0.0.494",
9453
+ "resolved": "https://registry.npmjs.org/spica/-/spica-0.0.494.tgz",
9454
+ "integrity": "sha512-QWdBjWGvCfHocwx2RDurOhhDDxs/HfRP33eLRVFoJCWx0UYS12NZhVZfCgD5NosuiOrZrwsIZ1/ppNXxEMlNaQ==",
9463
9455
  "dev": true
9464
9456
  },
9465
9457
  "split-string": {
@@ -9888,9 +9880,9 @@
9888
9880
  }
9889
9881
  },
9890
9882
  "toidentifier": {
9891
- "version": "1.0.0",
9892
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz",
9893
- "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==",
9883
+ "version": "1.0.1",
9884
+ "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
9885
+ "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
9894
9886
  "dev": true
9895
9887
  },
9896
9888
  "transformify": {
@@ -10032,9 +10024,9 @@
10032
10024
  "dev": true
10033
10025
  },
10034
10026
  "typed-dom": {
10035
- "version": "0.0.247",
10036
- "resolved": "https://registry.npmjs.org/typed-dom/-/typed-dom-0.0.247.tgz",
10037
- "integrity": "sha512-EmFFA1Ymmu8P+VX6scMr/vp2zbQKbjdmnW00jyoWMofr/eDPtdAQGU/SeyXbF3GYOWAml0fl3WXYCUe+G0gkew==",
10027
+ "version": "0.0.248",
10028
+ "resolved": "https://registry.npmjs.org/typed-dom/-/typed-dom-0.0.248.tgz",
10029
+ "integrity": "sha512-iwOQlPwma7lQipzbsG6wkc0Z8lM2L0pApdRLe8k4/oVPEIT4y5TWyZb+NB14lcXWqL90Hph0dTASuJL/SB31fg==",
10038
10030
  "dev": true
10039
10031
  },
10040
10032
  "typedarray": {
@@ -10053,9 +10045,9 @@
10053
10045
  }
10054
10046
  },
10055
10047
  "typescript": {
10056
- "version": "4.5.2",
10057
- "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.2.tgz",
10058
- "integrity": "sha512-5BlMof9H1yGt0P8/WF+wPNw6GfctgGjXp5hkblpyT+8rkASSmkUKMXrxR0Xg8ThVCi/JnHQiKXeBaEwCeQwMFw==",
10048
+ "version": "4.5.3",
10049
+ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.3.tgz",
10050
+ "integrity": "sha512-eVYaEHALSt+s9LbvgEv4Ef+Tdq7hBiIZgii12xXJnukryt3pMgJf6aKhoCZ3FWQsu6sydEnkg11fYXLzhLBjeQ==",
10059
10051
  "dev": true
10060
10052
  },
10061
10053
  "ua-parser-js": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "securemark",
3
- "version": "0.222.0",
3
+ "version": "0.225.0",
4
4
  "description": "Secure markdown renderer working on browsers for user input data.",
5
5
  "private": false,
6
6
  "homepage": "https://github.com/falsandtru/securemark",
@@ -30,8 +30,8 @@
30
30
  "dompurify": "global:DOMPurify"
31
31
  },
32
32
  "devDependencies": {
33
- "@types/dompurify": "2.3.1",
34
- "@types/jquery": "3.5.9",
33
+ "@types/dompurify": "2.3.2",
34
+ "@types/jquery": "3.5.10",
35
35
  "@types/mathjax": "0.0.37",
36
36
  "@types/mocha": "9.0.0",
37
37
  "@types/power-assert": "1.5.8",
@@ -56,13 +56,13 @@
56
56
  "karma-firefox-launcher": "^2.1.2",
57
57
  "karma-mocha": "^2.0.1",
58
58
  "mocha": "^9.1.3",
59
- "npm-check-updates": "^12.0.2",
59
+ "npm-check-updates": "^12.0.3",
60
60
  "power-assert": "^1.6.1",
61
61
  "semver": "^7.3.5",
62
- "spica": "0.0.492",
62
+ "spica": "0.0.494",
63
63
  "tsify": "^5.0.4",
64
- "typed-dom": "0.0.247",
65
- "typescript": "4.5.2",
64
+ "typed-dom": "0.0.248",
65
+ "typescript": "4.5.3",
66
66
  "vinyl-buffer": "^1.0.1",
67
67
  "vinyl-source-stream": "^2.0.0"
68
68
  },
@@ -60,9 +60,6 @@ describe('Unit: parser/api/parse', () => {
60
60
  });
61
61
 
62
62
  it('linebreak', () => {
63
- assert.deepStrictEqual(
64
- [...parse('*a\n*\nb').children].map(el => el.outerHTML),
65
- ['<p><em>a</em><br>b</p>']);
66
63
  assert.deepStrictEqual(
67
64
  [...parse('\\ ').children].map(el => el.outerHTML),
68
65
  ['<p>\\</p>']);
@@ -104,10 +101,6 @@ describe('Unit: parser/api/parse', () => {
104
101
  '{a}',
105
102
  '{/a}',
106
103
  '{^/a}',
107
- '{^/a/..}',
108
- '{^/a/../}',
109
- '{^/a?/../}',
110
- '{^/a#/../}',
111
104
  '{./a}',
112
105
  '{../a}',
113
106
  '{../../a}',
@@ -131,10 +124,6 @@ describe('Unit: parser/api/parse', () => {
131
124
  '<p><a href="https://source/x/a" target="_blank">a</a></p>',
132
125
  '<p><a href="https://source/a" target="_blank">/a</a></p>',
133
126
  '<p><a href="/z/a">^/a</a></p>',
134
- '<p><a href="/z/a/..">^/a/..</a></p>',
135
- '<p><a href="/z/a/../">^/a/../</a></p>',
136
- '<p><a href="/z/a?/../">^/a?/../</a></p>',
137
- '<p><a href="/z/a#/../">^/a#/../</a></p>',
138
127
  '<p><a href="https://source/x/a" target="_blank">./a</a></p>',
139
128
  '<p><a href="https://source/a" target="_blank">../a</a></p>',
140
129
  '<p><a href="https://source/a" target="_blank">../../a</a></p>',
@@ -14,8 +14,6 @@ describe('Unit: parser/inline/annotation', () => {
14
14
  assert.deepStrictEqual(inspect(parser('(())')), undefined);
15
15
  assert.deepStrictEqual(inspect(parser('(()))')), undefined);
16
16
  assert.deepStrictEqual(inspect(parser('(( ))')), undefined);
17
- assert.deepStrictEqual(inspect(parser('(( a))')), undefined);
18
- assert.deepStrictEqual(inspect(parser('(( a ))')), undefined);
19
17
  assert.deepStrictEqual(inspect(parser('((\n))')), undefined);
20
18
  assert.deepStrictEqual(inspect(parser('((\na))')), undefined);
21
19
  assert.deepStrictEqual(inspect(parser('((\\ a))')), undefined);
@@ -34,6 +32,8 @@ describe('Unit: parser/inline/annotation', () => {
34
32
  });
35
33
 
36
34
  it('basic', () => {
35
+ assert.deepStrictEqual(inspect(parser('(( a))')), [['<sup class="annotation">a</sup>'], '']);
36
+ assert.deepStrictEqual(inspect(parser('(( a ))')), [['<sup class="annotation">a</sup>'], '']);
37
37
  assert.deepStrictEqual(inspect(parser('((a))')), [['<sup class="annotation">a</sup>'], '']);
38
38
  assert.deepStrictEqual(inspect(parser('((a ))')), [['<sup class="annotation">a</sup>'], '']);
39
39
  assert.deepStrictEqual(inspect(parser('((a ))')), [['<sup class="annotation">a</sup>'], '']);
@@ -2,13 +2,13 @@ import { undefined } from 'spica/global';
2
2
  import { AnnotationParser } from '../inline';
3
3
  import { union, some, validate, guard, context, creator, surround, lazy, fmap } from '../../combinator';
4
4
  import { inline } from '../inline';
5
- import { startTight, trimEnd } from '../util';
5
+ import { startLoose, trimNode } from '../util';
6
6
  import { html, defrag } from 'typed-dom';
7
7
 
8
8
  export const annotation: AnnotationParser = lazy(() => creator(validate('((', '))', '\n', fmap(surround(
9
9
  '((',
10
10
  guard(context => context.syntax?.inline?.annotation ?? true,
11
- startTight(
11
+ startLoose(
12
12
  context({ syntax: { inline: {
13
13
  annotation: false,
14
14
  // Redundant
@@ -20,6 +20,6 @@ export const annotation: AnnotationParser = lazy(() => creator(validate('((', ')
20
20
  //link: true,
21
21
  //autolink: true,
22
22
  }}, state: undefined },
23
- union([some(inline, ')', /^\\?\n/)])))),
23
+ union([some(inline, ')', /^\\?\n/)])), '))')),
24
24
  '))'),
25
- ns => [html('sup', { class: 'annotation' }, trimEnd(defrag(ns)))]))));
25
+ ns => [html('sup', { class: 'annotation' }, trimNode(defrag(ns)))]))));
@@ -32,8 +32,6 @@ describe('Unit: parser/inline/deletion', () => {
32
32
  assert.deepStrictEqual(inspect(parser('~~a\\\nb~~')), [['<del>a<span class="linebreak"> </span>b</del>'], '']);
33
33
  assert.deepStrictEqual(inspect(parser('~~\\~~~')), [['<del>~</del>'], '']);
34
34
  assert.deepStrictEqual(inspect(parser('~~a~~~')), [['<del>a</del>'], '~']);
35
- assert.deepStrictEqual(inspect(parser('~~~a~~')), [['<del>~a</del>'], '']);
36
- assert.deepStrictEqual(inspect(parser('~~~a~~~')), [['<del>~a</del>'], '~']);
37
35
  });
38
36
 
39
37
  it('nest', () => {
@@ -2,7 +2,7 @@ import { DeletionParser } from '../inline';
2
2
  import { union, some, creator, surround, lazy } from '../../combinator';
3
3
  import { inline } from '../inline';
4
4
  import { str } from '../source';
5
- import { trimEndBR } from '../util';
5
+ import { trimNodeEndBR } from '../util';
6
6
  import { html, defrag } from 'typed-dom';
7
7
  import { unshift } from 'spica/array';
8
8
 
@@ -10,5 +10,5 @@ export const deletion: DeletionParser = lazy(() => creator(surround(
10
10
  str('~~'),
11
11
  union([some(inline, '~~')]),
12
12
  str('~~'), false,
13
- ([, bs], rest) => [[html('del', defrag(trimEndBR(bs)))], rest],
13
+ ([, bs], rest) => [[html('del', defrag(trimNodeEndBR(bs)))], rest],
14
14
  ([as, bs], rest) => [unshift(as, bs), rest])));
@@ -9,7 +9,10 @@ describe('Unit: parser/inline/emphasis', () => {
9
9
  it('invalid', () => {
10
10
  assert.deepStrictEqual(inspect(parser('*')), undefined);
11
11
  assert.deepStrictEqual(inspect(parser('*a')), [['*', 'a'], '']);
12
- assert.deepStrictEqual(inspect(parser('*a *')), [['*', 'a', ' '], '*']);
12
+ assert.deepStrictEqual(inspect(parser('*a *')), [['*', 'a', ' '], '*']);
13
+ assert.deepStrictEqual(inspect(parser('*a\n*')), [['*', 'a', '<br>'], '*']);
14
+ assert.deepStrictEqual(inspect(parser('*a\\ *')), [['*', 'a', ' '], '*']);
15
+ assert.deepStrictEqual(inspect(parser('*a\\\n*')), [['*', 'a', '<span class="linebreak"> </span>'], '*']);
13
16
  assert.deepStrictEqual(inspect(parser('*a**b')), [['*', 'a', '**', 'b'], '']);
14
17
  assert.deepStrictEqual(inspect(parser('*a**b*')), [['*', 'a', '**', 'b', '*'], '']);
15
18
  assert.deepStrictEqual(inspect(parser('* *')), undefined);
@@ -28,9 +31,6 @@ describe('Unit: parser/inline/emphasis', () => {
28
31
 
29
32
  it('basic', () => {
30
33
  assert.deepStrictEqual(inspect(parser('*a*')), [['<em>a</em>'], '']);
31
- assert.deepStrictEqual(inspect(parser('*a *')), [['<em>a </em>'], '']);
32
- assert.deepStrictEqual(inspect(parser('*a\n*')), [['<em>a</em>'], '']);
33
- assert.deepStrictEqual(inspect(parser('*a\\\n*')), [['<em>a<span class="linebreak"> </span></em>'], '']);
34
34
  assert.deepStrictEqual(inspect(parser('*ab*')), [['<em>ab</em>'], '']);
35
35
  assert.deepStrictEqual(inspect(parser('*a\nb*')), [['<em>a<br>b</em>'], '']);
36
36
  assert.deepStrictEqual(inspect(parser('*a\\\nb*')), [['<em>a<span class="linebreak"> </span>b</em>'], '']);
@@ -3,7 +3,7 @@ import { union, some, creator, surround, close, lazy } from '../../combinator';
3
3
  import { inline } from '../inline';
4
4
  import { strong } from './strong';
5
5
  import { str } from '../source';
6
- import { startTight, verifyEndTight, trimEndBR } from '../util';
6
+ import { startTight, isEndTightNodes } from '../util';
7
7
  import { html, defrag } from 'typed-dom';
8
8
  import { unshift } from 'spica/array';
9
9
 
@@ -12,7 +12,7 @@ export const emphasis: EmphasisParser = lazy(() => creator(surround(close(
12
12
  startTight(some(union([strong, some(inline, '*')]))),
13
13
  str('*'), false,
14
14
  ([as, bs, cs], rest) =>
15
- verifyEndTight(bs)
16
- ? [[html('em', defrag(trimEndBR(bs)))], rest]
15
+ isEndTightNodes(bs)
16
+ ? [[html('em', defrag(bs))], rest]
17
17
  : [unshift(as, bs), cs[0] + rest],
18
18
  ([as, bs], rest) => [unshift(as, bs), rest])));
@@ -2,7 +2,7 @@ import { EmStrongParser } from '../inline';
2
2
  import { union, some, creator, surround, lazy, bind } from '../../combinator';
3
3
  import { inline } from '../inline';
4
4
  import { str } from '../source';
5
- import { startTight, verifyEndTight, trimEndBR } from '../util';
5
+ import { startTight, isEndTightNodes } from '../util';
6
6
  import { html, defrag } from 'typed-dom';
7
7
  import { unshift } from 'spica/array';
8
8
 
@@ -11,26 +11,26 @@ export const emstrong: EmStrongParser = lazy(() => creator(surround(
11
11
  startTight(union([some(inline, '*')])),
12
12
  str(/^\*{1,3}/), false,
13
13
  ([as, bs, cs], rest, context) => {
14
- if (!verifyEndTight(bs)) return [unshift(as, bs), cs[0] + rest];
14
+ if (!isEndTightNodes(bs)) return [unshift(as, bs), cs[0] + rest];
15
15
  switch (cs[0]) {
16
16
  case '*':
17
17
  return bind<EmStrongParser>(
18
18
  union([some(inline, '**')]),
19
19
  (ds, rest) =>
20
- rest.slice(0, 2) === '**' && verifyEndTight(ds)
21
- ? [[html('strong', unshift([html('em', defrag(trimEndBR(bs)))], defrag(trimEndBR(ds))))], rest.slice(2)]
22
- : [unshift(['**', html('em', defrag(trimEndBR(bs)))], ds), rest])
23
- (rest, context) ?? [['**', html('em', defrag(trimEndBR(bs)))], rest];
20
+ rest.slice(0, 2) === '**' && isEndTightNodes(ds)
21
+ ? [[html('strong', unshift([html('em', defrag(bs))], defrag(ds)))], rest.slice(2)]
22
+ : [unshift(['**', html('em', defrag(bs))], ds), rest])
23
+ (rest, context) ?? [['**', html('em', defrag(bs))], rest];
24
24
  case '**':
25
25
  return bind<EmStrongParser>(
26
26
  union([some(inline, '*')]),
27
27
  (ds, rest) =>
28
- rest.slice(0, 1) === '*' && verifyEndTight(ds)
29
- ? [[html('em', unshift([html('strong', defrag(trimEndBR(bs)))], defrag(trimEndBR(ds))))], rest.slice(1)]
30
- : [unshift(['*', html('strong', defrag(trimEndBR(bs)))], ds), rest])
31
- (rest, context) ?? [['*', html('strong', defrag(trimEndBR(bs)))], rest];
28
+ rest.slice(0, 1) === '*' && isEndTightNodes(ds)
29
+ ? [[html('em', unshift([html('strong', defrag(bs))], defrag(ds)))], rest.slice(1)]
30
+ : [unshift(['*', html('strong', defrag(bs))], ds), rest])
31
+ (rest, context) ?? [['*', html('strong', defrag(bs))], rest];
32
32
  case '***':
33
- return [[html('em', [html('strong', defrag(trimEndBR(bs)))])], rest];
33
+ return [[html('em', [html('strong', defrag(bs))])], rest];
34
34
  }
35
35
  assert(false);
36
36
  },
@@ -4,7 +4,7 @@ import { union, some, validate, guard, context, creator, surround, open, lazy, f
4
4
  import { inline } from '../../inline';
5
5
  import { indexee, identify } from './indexee';
6
6
  import { txt, str } from '../../source';
7
- import { startTight, trimEnd } from '../../util';
7
+ import { startTight, trimNodeEnd } from '../../util';
8
8
  import { html, define, defrag } from 'typed-dom';
9
9
  import { join } from 'spica/array';
10
10
 
@@ -29,7 +29,7 @@ export const index: IndexParser = lazy(() => creator(validate('[#', ']', '\n', f
29
29
  inline,
30
30
  ]), ']', /^\\?\n/), true)))),
31
31
  ']'),
32
- ns => [html('a', trimEnd(defrag(ns)))])),
32
+ ns => [html('a', trimNodeEnd(defrag(ns)))])),
33
33
  ([el]: [HTMLAnchorElement]) => [
34
34
  define(el,
35
35
  {
@@ -29,8 +29,6 @@ describe('Unit: parser/inline/html', () => {
29
29
  assert.deepStrictEqual(inspect(parser('<small>z')), undefined);
30
30
  assert.deepStrictEqual(inspect(parser('<small></small>')), undefined);
31
31
  assert.deepStrictEqual(inspect(parser('<small> </small>')), undefined);
32
- assert.deepStrictEqual(inspect(parser('<small> a</small>')), undefined);
33
- assert.deepStrictEqual(inspect(parser('<small> a </small>')), undefined);
34
32
  assert.deepStrictEqual(inspect(parser('<small>\n</small>')), undefined);
35
33
  assert.deepStrictEqual(inspect(parser('<small>\na</small>')), undefined);
36
34
  assert.deepStrictEqual(inspect(parser('<small>\\ a</small>')), undefined);
@@ -59,6 +57,8 @@ describe('Unit: parser/inline/html', () => {
59
57
  });
60
58
 
61
59
  it('basic', () => {
60
+ assert.deepStrictEqual(inspect(parser('<small> a</small>')), [['<small> a</small>'], '']);
61
+ assert.deepStrictEqual(inspect(parser('<small> a </small>')), [['<small> a </small>'], '']);
62
62
  assert.deepStrictEqual(inspect(parser('<small>a</small>')), [['<small>a</small>'], '']);
63
63
  assert.deepStrictEqual(inspect(parser('<small>a</small>a')), [['<small>a</small>'], 'a']);
64
64
  assert.deepStrictEqual(inspect(parser('<small>a </small>')), [['<small>a </small>'], '']);
@@ -5,7 +5,7 @@ import { HTMLParser } from '../inline';
5
5
  import { union, some, validate, context, creator, surround, match, lazy } from '../../combinator';
6
6
  import { inline } from '../inline';
7
7
  import { str } from '../source';
8
- import { startTight, trimEndBR } from '../util';
8
+ import { startLoose, trimNodeEndBR } from '../util';
9
9
  import { html as h, defrag } from 'typed-dom';
10
10
  import { memoize } from 'spica/memoize';
11
11
  import { Cache } from 'spica/cache';
@@ -39,7 +39,7 @@ export const html: HTMLParser = lazy(() => creator(validate('<', '>', '\n', vali
39
39
  validate(`<${tag}`, `</${tag}>`,
40
40
  surround<HTMLParser.TagParser, string>(surround(
41
41
  str(`<${tag}`), some(attribute), str('>'), true),
42
- startTight(
42
+ startLoose(
43
43
  context((() => {
44
44
  switch (tag) {
45
45
  case 'sup':
@@ -63,10 +63,10 @@ export const html: HTMLParser = lazy(() => creator(validate('<', '>', '\n', vali
63
63
  return {};
64
64
  }
65
65
  })(),
66
- some(union([inline]), `</${tag}>`))),
66
+ some(union([inline]), `</${tag}>`)), `</${tag}>`),
67
67
  str(`</${tag}>`), false,
68
68
  ([as, bs, cs], rest, context) =>
69
- [[elem(tag, as, trimEndBR(defrag(bs)), cs, context)], rest])),
69
+ [[elem(tag, as, trimNodeEndBR(defrag(bs)), cs, context)], rest])),
70
70
  ([, tag]) => tag)),
71
71
  match(
72
72
  /^(?=<([a-z]+)(?=[^\S\n]|>))/,
@@ -75,10 +75,10 @@ export const html: HTMLParser = lazy(() => creator(validate('<', '>', '\n', vali
75
75
  validate(`<${tag}`, `</${tag}>`,
76
76
  surround<HTMLParser.TagParser, string>(surround(
77
77
  str(`<${tag}`), some(attribute), str('>'), true),
78
- startTight(some(union([inline]), `</${tag}>`)),
78
+ startLoose(some(union([inline]), `</${tag}>`), `</${tag}>`),
79
79
  str(`</${tag}>`), false,
80
80
  ([as, bs, cs], rest) =>
81
- [[elem(tag, as, trimEndBR(defrag(bs)), cs, {})], rest],
81
+ [[elem(tag, as, trimNodeEndBR(defrag(bs)), cs, {})], rest],
82
82
  ([as, bs], rest) =>
83
83
  as.length === 1
84
84
  ? [unshift(as, bs), rest]
@@ -99,14 +99,14 @@ function elem(tag: string, as: (HTMLElement | string)[], bs: (HTMLElement | stri
99
99
  case 'sub':
100
100
  switch (true) {
101
101
  case context.state?.in?.supsub:
102
- return invalid('nest', `<${tag}> HTML tag cannot be used in <sup>/<sub> HTML tags.`, as, bs, cs);
102
+ return invalid('nest', `<${tag}> HTML tag cannot be used in <sup> or <sub> HTML tag.`, as, bs, cs);
103
103
  }
104
104
  break;
105
105
  case 'small':
106
106
  switch (true) {
107
107
  case context.state?.in?.supsub:
108
108
  case context.state?.in?.small:
109
- return invalid('nest', `<${tag}> HTML tag cannot be used in <sup>/<sub>/<small> HTML tags.`, as, bs, cs);
109
+ return invalid('nest', `<${tag}> HTML tag cannot be used in <sup>, <sub>, or <small> HTML tag.`, as, bs, cs);
110
110
  }
111
111
  break;
112
112
  }
@@ -32,8 +32,6 @@ describe('Unit: parser/inline/insertion', () => {
32
32
  assert.deepStrictEqual(inspect(parser('++a\\\nb++')), [['<ins>a<span class="linebreak"> </span>b</ins>'], '']);
33
33
  assert.deepStrictEqual(inspect(parser('++\\+++')), [['<ins>+</ins>'], '']);
34
34
  assert.deepStrictEqual(inspect(parser('++a+++')), [['<ins>a</ins>'], '+']);
35
- assert.deepStrictEqual(inspect(parser('+++a++')), [['<ins>+a</ins>'], '']);
36
- assert.deepStrictEqual(inspect(parser('+++a+++')), [['<ins>+a</ins>'], '+']);
37
35
  });
38
36
 
39
37
  it('nest', () => {
@@ -2,7 +2,7 @@ import { InsertionParser } from '../inline';
2
2
  import { union, some, creator, surround, lazy } from '../../combinator';
3
3
  import { inline } from '../inline';
4
4
  import { str } from '../source';
5
- import { trimEndBR } from '../util';
5
+ import { trimNodeEndBR } from '../util';
6
6
  import { html, defrag } from 'typed-dom';
7
7
  import { unshift } from 'spica/array';
8
8
 
@@ -10,5 +10,5 @@ export const insertion: InsertionParser = lazy(() => creator(surround(
10
10
  str('++'),
11
11
  union([some(inline, '++')]),
12
12
  str('++'), false,
13
- ([, bs], rest) => [[html('ins', defrag(trimEndBR(bs)))], rest],
13
+ ([, bs], rest) => [[html('ins', defrag(trimNodeEndBR(bs)))], rest],
14
14
  ([as, bs], rest) => [unshift(as, bs), rest])));