bedazzlr 0.2.8 → 0.3.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/README.md +1 -1
- package/lib/index.js +65 -59
- package/package.json +6 -7
package/README.md
CHANGED
package/lib/index.js
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
|
-
/* global document window console requestAnimationFrame */
|
|
1
|
+
/* global document window console requestAnimationFrame IntersectionObserver */
|
|
2
2
|
|
|
3
3
|
import emptyStack from '@iter-tools/imm-stack';
|
|
4
4
|
import classNames from 'classnames';
|
|
5
|
-
import {
|
|
5
|
+
import { streamParse } from 'bablr';
|
|
6
6
|
|
|
7
7
|
import { CloseNodeTag, LiteralTag, OpenNodeTag, ReferenceTag } from '@bablr/agast-helpers/symbols';
|
|
8
8
|
import { printSelfClosingNodeTag } from '@bablr/agast-helpers/print';
|
|
9
|
-
import { buildOpenNodeTag, nodeFlags, tokenFlags } from '@bablr/agast-helpers/builders';
|
|
9
|
+
import { buildOpenNodeTag, nodeFlags, tokenFlags, parseTag } from '@bablr/agast-helpers/builders';
|
|
10
10
|
import {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
} from '@bablr/helpers/
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
11
|
+
continue_,
|
|
12
|
+
getStreamIterator,
|
|
13
|
+
hoistTrivia,
|
|
14
|
+
StreamIterable,
|
|
15
|
+
wait,
|
|
16
|
+
} from '@bablr/agast-helpers/stream';
|
|
17
|
+
import { deepFreezeRecord, freezeRecord } from '@bablr/agast-helpers/object';
|
|
18
|
+
import { buildEmbeddedCallable } from '@bablr/agast-vm-helpers/builders';
|
|
19
|
+
import { m } from '@bablr/helpers/grammar';
|
|
20
20
|
|
|
21
21
|
let anchorStyle =
|
|
22
22
|
'display: inline-block; position: relative; vertical-align: top; pointer-events: none;';
|
|
@@ -131,17 +131,21 @@ const chunkify = (chunkSize, str) => {
|
|
|
131
131
|
return new StreamIterable(__chunkify(chunkSize, str));
|
|
132
132
|
};
|
|
133
133
|
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
function* __highlightCode(el, language, matcher, options = {}) {
|
|
134
|
+
function* __highlightCode(el, language, matcher, options = freezeRecord({})) {
|
|
137
135
|
let { chunkSize, bablr: bablrOptions = {} } = options;
|
|
138
136
|
let input = chunkSize ? chunkify(chunkSize, el.innerText) : el.innerText;
|
|
139
137
|
let tags = getStreamIterator(
|
|
140
138
|
hoistTrivia(
|
|
141
|
-
streamParse(
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
139
|
+
streamParse(
|
|
140
|
+
language,
|
|
141
|
+
matcher,
|
|
142
|
+
input,
|
|
143
|
+
null,
|
|
144
|
+
deepFreezeRecord({
|
|
145
|
+
...bablrOptions,
|
|
146
|
+
holdShiftedNodes: true,
|
|
147
|
+
}),
|
|
148
|
+
),
|
|
145
149
|
),
|
|
146
150
|
);
|
|
147
151
|
|
|
@@ -156,13 +160,14 @@ function* __highlightCode(el, language, matcher, options = {}) {
|
|
|
156
160
|
let step = tags.next();
|
|
157
161
|
|
|
158
162
|
while (true) {
|
|
159
|
-
|
|
160
|
-
step
|
|
163
|
+
while (step === null || step instanceof Promise) {
|
|
164
|
+
if (step === null) yield continue_(), (step = tags.next());
|
|
165
|
+
if (step instanceof Promise) step = yield wait(step);
|
|
161
166
|
}
|
|
162
167
|
|
|
163
168
|
if (step.done) break;
|
|
164
169
|
|
|
165
|
-
let tag = step.value;
|
|
170
|
+
let tag = parseTag(step.value);
|
|
166
171
|
|
|
167
172
|
if (tag.type === OpenNodeTag) {
|
|
168
173
|
range = range.cloneRange();
|
|
@@ -179,7 +184,7 @@ function* __highlightCode(el, language, matcher, options = {}) {
|
|
|
179
184
|
open,
|
|
180
185
|
range,
|
|
181
186
|
referenceTag,
|
|
182
|
-
// langs: stack.value.langs.
|
|
187
|
+
// langs: stack.value.langs.push(bindingTag?.value ?? []),
|
|
183
188
|
});
|
|
184
189
|
}
|
|
185
190
|
|
|
@@ -414,14 +419,14 @@ function* __highlightCode(el, language, matcher, options = {}) {
|
|
|
414
419
|
if (store.selectionState === 'selecting') {
|
|
415
420
|
let selected = store.selectedRange;
|
|
416
421
|
|
|
417
|
-
if (e.
|
|
418
|
-
if (e.
|
|
422
|
+
if (e.relatedTarget?.tagName !== 'NODE') {
|
|
423
|
+
if (e.target?.tagName === 'NODE') {
|
|
419
424
|
let startTokenNode = selected[0];
|
|
420
425
|
|
|
421
426
|
if (startTokenNode) {
|
|
422
|
-
range = [startTokenNode, e.
|
|
427
|
+
range = [startTokenNode, e.target];
|
|
423
428
|
} else {
|
|
424
|
-
range = [e.
|
|
429
|
+
range = [e.target, e.target];
|
|
425
430
|
}
|
|
426
431
|
|
|
427
432
|
store.selectedRange = range;
|
|
@@ -431,8 +436,8 @@ function* __highlightCode(el, language, matcher, options = {}) {
|
|
|
431
436
|
}
|
|
432
437
|
}
|
|
433
438
|
|
|
434
|
-
if (e.
|
|
435
|
-
store.hoverTarget = e.
|
|
439
|
+
if (e.target?.tagName === 'NODE') {
|
|
440
|
+
store.hoverTarget = e.target;
|
|
436
441
|
} else {
|
|
437
442
|
store.hoverTarget = null;
|
|
438
443
|
}
|
|
@@ -442,20 +447,20 @@ function* __highlightCode(el, language, matcher, options = {}) {
|
|
|
442
447
|
if (store.selectionState === 'selecting') {
|
|
443
448
|
let selected = store.selectedRange;
|
|
444
449
|
|
|
445
|
-
if (e.
|
|
450
|
+
if (e.relatedTarget?.tagName === 'NODE') {
|
|
446
451
|
let range;
|
|
447
452
|
|
|
448
453
|
let startTokenNode = selected[0];
|
|
449
454
|
|
|
450
455
|
if (startTokenNode) {
|
|
451
|
-
range = [startTokenNode, e.
|
|
456
|
+
range = [startTokenNode, e.relatedTarget];
|
|
452
457
|
} else {
|
|
453
|
-
range = [e.
|
|
458
|
+
range = [e.relatedTarget, null];
|
|
454
459
|
}
|
|
455
460
|
|
|
456
461
|
store.selectedRange = range;
|
|
457
462
|
} else {
|
|
458
|
-
if (e.
|
|
463
|
+
if (e.relatedTarget?.tagName === 'NODE') {
|
|
459
464
|
store.selectedRange = [store.selectedRange[0], store.selectedRange[0]];
|
|
460
465
|
} else {
|
|
461
466
|
store.selectedRange = [store.selectedRange[0], null];
|
|
@@ -511,36 +516,37 @@ export const highlightCode = (el, language, matcher = language.defaultMatcher, o
|
|
|
511
516
|
function* __highlightAll(languages, options) {
|
|
512
517
|
let codeBlocks = document.querySelectorAll('code');
|
|
513
518
|
|
|
514
|
-
|
|
515
|
-
let
|
|
516
|
-
|
|
517
|
-
let flags = block.getAttribute('bablr-ref-flags');
|
|
519
|
+
let intersectionChanged = (entries) => {
|
|
520
|
+
for (let entry of entries) {
|
|
521
|
+
let { target } = entry;
|
|
518
522
|
|
|
519
|
-
|
|
523
|
+
let canonicalURL = target.getAttribute('bablr-lang');
|
|
524
|
+
let language = languages.get(canonicalURL);
|
|
525
|
+
let flags = target.getAttribute('bablr-ref-flags');
|
|
520
526
|
|
|
521
|
-
|
|
522
|
-
if (!name && !language.defaultMatcher) continue;
|
|
527
|
+
let name = target.getAttribute('bablr-prod');
|
|
523
528
|
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
: language.defaultMatcher,
|
|
539
|
-
options,
|
|
540
|
-
);
|
|
541
|
-
} catch (e) {
|
|
542
|
-
console.warn(e);
|
|
529
|
+
if (!language) continue;
|
|
530
|
+
if (!name && !language.defaultMatcher) continue;
|
|
531
|
+
|
|
532
|
+
try {
|
|
533
|
+
highlightCode(
|
|
534
|
+
target,
|
|
535
|
+
language,
|
|
536
|
+
name ? m`<${name}>` : language.defaultMatcher,
|
|
537
|
+
|
|
538
|
+
options,
|
|
539
|
+
);
|
|
540
|
+
} catch (e) {
|
|
541
|
+
console.warn(e);
|
|
542
|
+
}
|
|
543
543
|
}
|
|
544
|
+
};
|
|
545
|
+
|
|
546
|
+
let io = new IntersectionObserver(intersectionChanged);
|
|
547
|
+
|
|
548
|
+
for (let block of codeBlocks) {
|
|
549
|
+
io.observe(block);
|
|
544
550
|
}
|
|
545
551
|
}
|
|
546
552
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "bedazzlr",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Code block syntax highlighting using BABLR",
|
|
5
5
|
"author": "Conrad Buck<conartist6@gmail.com>",
|
|
6
6
|
"type": "module",
|
|
@@ -15,16 +15,15 @@
|
|
|
15
15
|
"test": "mocha test/*.test.js"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@bablr/agast-helpers": "0.
|
|
19
|
-
"@bablr/agast-vm-helpers": "0.
|
|
20
|
-
"@bablr/
|
|
21
|
-
"@bablr/helpers": "0.25.5",
|
|
18
|
+
"@bablr/agast-helpers": "0.11.3",
|
|
19
|
+
"@bablr/agast-vm-helpers": "0.11.3",
|
|
20
|
+
"@bablr/helpers": "0.26.4",
|
|
22
21
|
"@iter-tools/imm-stack": "1.2.0",
|
|
23
|
-
"bablr": "0.
|
|
22
|
+
"bablr": "0.12.4",
|
|
24
23
|
"classnames": "2.5.1"
|
|
25
24
|
},
|
|
26
25
|
"devDependencies": {
|
|
27
|
-
"@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#
|
|
26
|
+
"@bablr/eslint-config-base": "github:bablr-lang/eslint-config-base#23b94fb3bdfdbc3ac7ed9cb58d7979d8f07dce2b",
|
|
28
27
|
"@qnighy/dedent": "0.1.1",
|
|
29
28
|
"enhanced-resolve": "^5.12.0",
|
|
30
29
|
"eslint": "^8.32.0",
|