securemark 0.281.4 → 0.282.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
CHANGED
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! securemark v0.
|
|
1
|
+
/*! securemark v0.282.0 https://github.com/falsandtru/securemark | (c) 2017, falsandtru | UNLICENSED License */
|
|
2
2
|
(function webpackUniversalModuleDefinition(root, factory) {
|
|
3
3
|
if(typeof exports === 'object' && typeof module === 'object')
|
|
4
4
|
module.exports = factory(require("Prism"), require("DOMPurify"));
|
|
@@ -6108,6 +6108,7 @@ const MAX = 60;
|
|
|
6108
6108
|
const ELLIPSIS = '...';
|
|
6109
6109
|
const PART = (MAX - ELLIPSIS.length) / 2 | 0;
|
|
6110
6110
|
const REM = MAX - PART * 2 - ELLIPSIS.length;
|
|
6111
|
+
const table = [...[...Array(36)].map((_, i) => i.toString(36)), ...[...Array(36)].map((_, i) => i.toString(36).toUpperCase()).slice(-26), '-', '='].join('');
|
|
6111
6112
|
function identity(type, id, text) {
|
|
6112
6113
|
if (id === '') return undefined;
|
|
6113
6114
|
if (typeof text !== 'string') {
|
|
@@ -6120,7 +6121,7 @@ function identity(type, id, text) {
|
|
|
6120
6121
|
const str = text.replace(/\s/g, '_');
|
|
6121
6122
|
const cs = [...str];
|
|
6122
6123
|
if (type === '' || cs.length <= MAX) {
|
|
6123
|
-
return `${type}:${id ?? ''}:${str}${/_|[^\S ]|=[0-
|
|
6124
|
+
return `${type}:${id ?? ''}:${str}${/_|[^\S ]|=[0-9A-Za-z]{1,6}$/.test(text) ? `=${hash(text)}` : ''}`;
|
|
6124
6125
|
}
|
|
6125
6126
|
const s1 = cs.slice(0, PART + REM).join('');
|
|
6126
6127
|
const s2 = cs.slice(-PART).join('');
|
|
@@ -6130,12 +6131,24 @@ exports.identity = identity;
|
|
|
6130
6131
|
function hash(source) {
|
|
6131
6132
|
let x = 0;
|
|
6132
6133
|
for (let i = 0; i < source.length; ++i) {
|
|
6133
|
-
|
|
6134
|
+
const c = source.charCodeAt(i);
|
|
6135
|
+
x = x ^ c << 1 || ~x ^ c << 1; // 16+1bit
|
|
6136
|
+
|
|
6134
6137
|
x ^= x << 13; // shift <= 32-17bit
|
|
6135
6138
|
x ^= x >>> 17;
|
|
6136
6139
|
x ^= x << 15;
|
|
6137
6140
|
}
|
|
6138
|
-
return (x >>> 0)
|
|
6141
|
+
return baseR(x >>> 0, 62);
|
|
6142
|
+
}
|
|
6143
|
+
// 62も64も最大6桁
|
|
6144
|
+
function baseR(n, r) {
|
|
6145
|
+
let acc = '';
|
|
6146
|
+
do {
|
|
6147
|
+
const mod = n % r;
|
|
6148
|
+
n = (n - mod) / r;
|
|
6149
|
+
acc = table[mod] + acc;
|
|
6150
|
+
} while (n > 0);
|
|
6151
|
+
return acc;
|
|
6139
6152
|
}
|
|
6140
6153
|
function signature(source) {
|
|
6141
6154
|
const target = source.cloneNode(true);
|
package/package.json
CHANGED
|
@@ -51,8 +51,8 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
51
51
|
assert.deepStrictEqual(inspect(parser('[#a\\ ]')), [['<a class="index" href="#index::a">a</a>'], '']);
|
|
52
52
|
assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
|
|
53
53
|
assert.deepStrictEqual(inspect(parser('[#a b]')), [['<a class="index" href="#index::a__b">a b</a>'], '']);
|
|
54
|
-
assert.deepStrictEqual(inspect(parser('[#a\tb]')), [['<a class="index" href="#index::a_b=
|
|
55
|
-
assert.deepStrictEqual(inspect(parser('[#a_b]')), [['<a class="index" href="#index::a_b=
|
|
54
|
+
assert.deepStrictEqual(inspect(parser('[#a\tb]')), [['<a class="index" href="#index::a_b=33Mw2l">a\tb</a>'], '']);
|
|
55
|
+
assert.deepStrictEqual(inspect(parser('[#a_b]')), [['<a class="index" href="#index::a_b=2H8oCG">a_b</a>'], '']);
|
|
56
56
|
assert.deepStrictEqual(inspect(parser('[#a\\ b]')), [['<a class="index" href="#index::a_b">a b</a>'], '']);
|
|
57
57
|
assert.deepStrictEqual(inspect(parser('[#[]]')), [['<a class="index" href="#index::[]">[]</a>'], '']);
|
|
58
58
|
assert.deepStrictEqual(inspect(parser('[#\\]]')), [['<a class="index" href="#index::]">]</a>'], '']);
|
|
@@ -87,8 +87,8 @@ describe('Unit: parser/inline/extension/index', () => {
|
|
|
87
87
|
assert.deepStrictEqual(inspect(parser('[#a|*b*]')), [['<a class="index" href="#index::*b*">a<span class="indexer" data-index="*b*"></span></a>'], '']);
|
|
88
88
|
assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b_c">a<span class="indexer" data-index="b_c"></span></a>'], '']);
|
|
89
89
|
assert.deepStrictEqual(inspect(parser('[#a|b c]')), [['<a class="index" href="#index::b__c">a<span class="indexer" data-index="b__c"></span></a>'], '']);
|
|
90
|
-
assert.deepStrictEqual(inspect(parser('[#a|b\tc]')), [['<a class="index" href="#index::b_c=
|
|
91
|
-
assert.deepStrictEqual(inspect(parser('[#a|b_c]')), [['<a class="index" href="#index::b_c=
|
|
90
|
+
assert.deepStrictEqual(inspect(parser('[#a|b\tc]')), [['<a class="index" href="#index::b_c=xeqYk">a<span class="indexer" data-index="b_c=xeqYk"></span></a>'], '']);
|
|
91
|
+
assert.deepStrictEqual(inspect(parser('[#a|b_c]')), [['<a class="index" href="#index::b_c=KUxv5">a<span class="indexer" data-index="b_c=KUxv5"></span></a>'], '']);
|
|
92
92
|
assert.deepStrictEqual(inspect(parser('[#a|[]]')), [['<a class="index" href="#index::[]">a<span class="indexer" data-index="[]"></span></a>'], '']);
|
|
93
93
|
assert.deepStrictEqual(inspect(parser('[#a|©]')), [['<a class="index" href="#index::&copy;">a<span class="indexer" data-index="&copy;"></span></a>'], '']);
|
|
94
94
|
assert.deepStrictEqual(inspect(parser('[#a |b]')), [['<a class="index" href="#index::b">a<span class="indexer" data-index="b"></span></a>'], '']);
|
|
@@ -13,6 +13,12 @@ const MAX = 60;
|
|
|
13
13
|
const ELLIPSIS = '...';
|
|
14
14
|
const PART = (MAX - ELLIPSIS.length) / 2 | 0;
|
|
15
15
|
const REM = MAX - PART * 2 - ELLIPSIS.length;
|
|
16
|
+
const table = [
|
|
17
|
+
...[...Array(36)].map((_, i) => i.toString(36)),
|
|
18
|
+
...[...Array(36)].map((_, i) => i.toString(36).toUpperCase()).slice(-26),
|
|
19
|
+
'-', '=',
|
|
20
|
+
].join('');
|
|
21
|
+
assert(table.length === 64);
|
|
16
22
|
export function identity(
|
|
17
23
|
type: 'index' | 'mark' | '',
|
|
18
24
|
id: string | undefined,
|
|
@@ -32,7 +38,7 @@ export function identity(
|
|
|
32
38
|
const str = text.replace(/\s/g, '_');
|
|
33
39
|
const cs = [...str];
|
|
34
40
|
if (type === '' || cs.length <= MAX) {
|
|
35
|
-
return `${type}:${id ?? ''}:${str}${/_|[^\S ]|=[0-
|
|
41
|
+
return `${type}:${id ?? ''}:${str}${/_|[^\S ]|=[0-9A-Za-z]{1,6}$/.test(text) ? `=${hash(text)}` : ''}`;
|
|
36
42
|
}
|
|
37
43
|
const s1 = cs.slice(0, PART + REM).join('');
|
|
38
44
|
const s2 = cs.slice(-PART).join('');
|
|
@@ -42,6 +48,9 @@ export function identity(
|
|
|
42
48
|
assert.deepStrictEqual(
|
|
43
49
|
identity('index', undefined, ' 0 '),
|
|
44
50
|
identity('index', undefined, ' 0 '.trim()));
|
|
51
|
+
assert.notDeepStrictEqual(
|
|
52
|
+
identity('index', undefined, '0 0'),
|
|
53
|
+
identity('index', undefined, '0 0'));
|
|
45
54
|
assert.notDeepStrictEqual(
|
|
46
55
|
identity('index', undefined, '0 0'),
|
|
47
56
|
identity('index', undefined, '0_0'));
|
|
@@ -56,23 +65,44 @@ assert.deepStrictEqual(
|
|
|
56
65
|
`${'0'.repeat(MAX - 1)}1`);
|
|
57
66
|
assert.deepStrictEqual(
|
|
58
67
|
identity('index', undefined, `0${'1'.repeat(MAX / 2)}${'2'.repeat(MAX / 2)}3`)!.slice(7),
|
|
59
|
-
`0${'1'.repeat(PART + REM - 1)}${ELLIPSIS}${'2'.repeat(PART - 1)}3=
|
|
68
|
+
`0${'1'.repeat(PART + REM - 1)}${ELLIPSIS}${'2'.repeat(PART - 1)}3=MYkmc`);
|
|
60
69
|
assert.deepStrictEqual(
|
|
61
70
|
identity('index', undefined, `0${'1'.repeat(MAX * 2)}${'2'.repeat(MAX * 2)}3`)!.slice(7),
|
|
62
|
-
`0${'1'.repeat(PART + REM - 1)}${ELLIPSIS}${'2'.repeat(PART - 1)}3=
|
|
71
|
+
`0${'1'.repeat(PART + REM - 1)}${ELLIPSIS}${'2'.repeat(PART - 1)}3=3bF8VU`);
|
|
63
72
|
function hash(source: string): string {
|
|
64
73
|
let x = 0;
|
|
65
74
|
for (let i = 0; i < source.length; ++i) {
|
|
66
|
-
|
|
75
|
+
const c = source.charCodeAt(i);
|
|
76
|
+
x = x ^ c << 1 || ~x ^ c << 1; // 16+1bit
|
|
77
|
+
assert(x !== 0);
|
|
67
78
|
x ^= x << 13; // shift <= 32-17bit
|
|
68
79
|
x ^= x >>> 17;
|
|
69
80
|
x ^= x << 15;
|
|
70
81
|
}
|
|
71
|
-
return (x >>> 0)
|
|
82
|
+
return baseR(x >>> 0, 62);
|
|
72
83
|
}
|
|
73
84
|
assert(hash('\x00') !== '0');
|
|
74
85
|
assert(hash('\x01') !== '0');
|
|
75
86
|
assert(hash('\x00') !== hash(String.fromCharCode(1 << 15)));
|
|
87
|
+
// 62も64も最大6桁
|
|
88
|
+
function baseR(n: number, r: number): string {
|
|
89
|
+
assert(n >= 0);
|
|
90
|
+
assert(Math.floor(n) === n);
|
|
91
|
+
assert(r <= 64);
|
|
92
|
+
let acc = '';
|
|
93
|
+
do {
|
|
94
|
+
const mod = n % r;
|
|
95
|
+
n = (n - mod) / r;
|
|
96
|
+
assert(Math.floor(n) === n);
|
|
97
|
+
acc = table[mod] + acc;
|
|
98
|
+
} while (n > 0)
|
|
99
|
+
assert(acc !== '');
|
|
100
|
+
return acc;
|
|
101
|
+
}
|
|
102
|
+
assert(baseR(0, 36) === (0).toString(36));
|
|
103
|
+
assert(baseR(~0 >>> 0, 36) === (~0 >>> 0).toString(36));
|
|
104
|
+
assert(baseR(61, 62) === 'Z');
|
|
105
|
+
assert(baseR(62, 62) === '10');
|
|
76
106
|
|
|
77
107
|
export function signature(source: Element | DocumentFragment): string {
|
|
78
108
|
assert(!navigator.userAgent.includes('Chrome') || !source.querySelector('br:not(:has(+ :is(ul, ol)))'));
|
|
@@ -25,8 +25,8 @@ describe('Unit: parser/inline/extension/indexer', () => {
|
|
|
25
25
|
assert.deepStrictEqual(inspect(parser(' [|a ]')), [['<span class="indexer" data-index="a"></span>'], '']);
|
|
26
26
|
assert.deepStrictEqual(inspect(parser(' [|a b]')), [['<span class="indexer" data-index="a_b"></span>'], '']);
|
|
27
27
|
assert.deepStrictEqual(inspect(parser(' [|a b]')), [['<span class="indexer" data-index="a__b"></span>'], '']);
|
|
28
|
-
assert.deepStrictEqual(inspect(parser(' [|a\tb]')), [['<span class="indexer" data-index="a_b=
|
|
29
|
-
assert.deepStrictEqual(inspect(parser(' [|a_b]')), [['<span class="indexer" data-index="a_b=
|
|
28
|
+
assert.deepStrictEqual(inspect(parser(' [|a\tb]')), [['<span class="indexer" data-index="a_b=33Mw2l"></span>'], '']);
|
|
29
|
+
assert.deepStrictEqual(inspect(parser(' [|a_b]')), [['<span class="indexer" data-index="a_b=2H8oCG"></span>'], '']);
|
|
30
30
|
assert.deepStrictEqual(inspect(parser(' [|A]')), [['<span class="indexer" data-index="A"></span>'], '']);
|
|
31
31
|
assert.deepStrictEqual(inspect(parser(' [|*A*]')), [['<span class="indexer" data-index="*A*"></span>'], '']);
|
|
32
32
|
assert.deepStrictEqual(inspect(parser(' [|`A`]')), [['<span class="indexer" data-index="`A`"></span>'], '']);
|
|
@@ -30,7 +30,7 @@ describe('Unit: parser/inline/mark', () => {
|
|
|
30
30
|
|
|
31
31
|
it('basic', () => {
|
|
32
32
|
assert.deepStrictEqual(inspect(parser('==a==')), [['<mark id="mark::a">a</mark>', '<a href="#mark::a"></a>'], '']);
|
|
33
|
-
assert.deepStrictEqual(inspect(parser('==a=b==')), [['<mark id="mark::a=b=
|
|
33
|
+
assert.deepStrictEqual(inspect(parser('==a=b==')), [['<mark id="mark::a=b=3lYfIw">a=b</mark>', '<a href="#mark::a=b=3lYfIw"></a>'], '']);
|
|
34
34
|
assert.deepStrictEqual(inspect(parser('==\\===')), [['<mark id="mark::=">=</mark>', '<a href="#mark::="></a>'], '']);
|
|
35
35
|
assert.deepStrictEqual(inspect(parser('==a===')), [['<mark id="mark::a">a</mark>', '<a href="#mark::a"></a>'], '=']);
|
|
36
36
|
});
|
|
@@ -38,7 +38,7 @@ describe('Unit: parser/inline/mark', () => {
|
|
|
38
38
|
it('nest', () => {
|
|
39
39
|
assert.deepStrictEqual(inspect(parser('==a ==b====')), [['<mark id="mark::a_b">a <mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
|
|
40
40
|
assert.deepStrictEqual(inspect(parser('==a\\ ==b====')), [['<mark id="mark::a_b">a <mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b"></a>'], '']);
|
|
41
|
-
assert.deepStrictEqual(inspect(parser('==a	==b====')), [['<mark id="mark::a_b=
|
|
41
|
+
assert.deepStrictEqual(inspect(parser('==a	==b====')), [['<mark id="mark::a_b=33Mw2l">a\t<mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::a_b=33Mw2l"></a>'], '']);
|
|
42
42
|
assert.deepStrictEqual(inspect(parser('==a<wbr>==b====')), [['<mark id="mark::ab">a<wbr><mark id="mark::b">b</mark><a href="#mark::b"></a></mark>', '<a href="#mark::ab"></a>'], '']);
|
|
43
43
|
assert.deepStrictEqual(inspect(parser('==*==a==*==')), [['<mark id="mark::a"><em><mark id="mark::a">a</mark><a href="#mark::a"></a></em></mark>', '<a href="#mark::a"></a>'], '']);
|
|
44
44
|
});
|