rapier-markdown-kit 1.1.102 → 1.2.3
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/LICENSE +5 -2
- package/README.md +245 -54
- package/dist/agent/vendor/hyphen-en-us/LICENSE +14 -0
- package/dist/agent/vendor/hyphen-en-us/SOURCE.json +33 -0
- package/dist/agent/vendor/hyphen-en-us/hyph-en-us.hyp.txt +14 -0
- package/dist/agent/vendor/hyphen-en-us/hyph-en-us.pat.txt +4938 -0
- package/dist/agent/vendor/hyphen-en-us/patterns.js +25 -0
- package/dist/agent/vendor/pretext/LICENSE +208 -0
- package/dist/agent/vendor/pretext/NOTICE +26 -13
- package/dist/agent/vendor/pretext/SOURCE.json +213 -45
- package/dist/agent/vendor/pretext/analysis.js +675 -1224
- package/dist/agent/vendor/pretext/entry-geometry.js +183 -0
- package/dist/agent/vendor/pretext/gecko-line-breaks.js +688 -0
- package/dist/agent/vendor/pretext/generated/engine-break-data.js +57 -0
- package/dist/agent/vendor/pretext/generated/webkit-generic-families.js +80 -0
- package/dist/agent/vendor/pretext/graphemes.js +98 -0
- package/dist/agent/vendor/pretext/han-kerning.js +253 -0
- package/dist/agent/vendor/pretext/layout.js +352 -290
- package/dist/agent/vendor/pretext/line-break.js +1154 -588
- package/dist/agent/vendor/pretext/line-breaks.js +892 -0
- package/dist/agent/vendor/pretext/line-text.js +81 -39
- package/dist/agent/vendor/pretext/measurement.js +1105 -176
- package/dist/agent/vendor/pretext/prepare.js +807 -0
- package/dist/agent/vendor/pretext/rich-inline.js +1242 -273
- package/dist/agent/will.mjs +2 -0
- package/dist/images/gif.mjs +47 -0
- package/dist/images/playback.mjs +101 -0
- package/dist/kit/assets.mjs +5 -1
- package/dist/kit/conformance/03-wrap-around-silhouette.md +1 -1
- package/dist/kit/conformance/04-wrap-box.md +1 -1
- package/dist/kit/conformance/05-behind.md +1 -1
- package/dist/kit/conformance/06-front.md +1 -1
- package/dist/kit/conformance/07-rotate-raster.md +1 -1
- package/dist/kit/conformance/08-drawing-rotation.md +1 -1
- package/dist/kit/conformance/09-drawing-ring-interior.expected.json +18 -18
- package/dist/kit/conformance/09-drawing-ring-interior.md +1 -1
- package/dist/kit/conformance/10-both-sides.md +1 -1
- package/dist/kit/conformance/11-neighbour-skips-image.md +1 -1
- package/dist/kit/conformance/{12-heading-barrier.expected.json → 12-rule-barrier.expected.json} +1 -1
- package/dist/kit/conformance/{12-heading-barrier.md → 12-rule-barrier.md} +2 -2
- package/dist/kit/conformance/README.md +19 -28
- package/dist/kit/conformance/run.mjs +13 -11
- package/dist/kit/export-fonts.mjs +26 -11
- package/dist/kit/index.mjs +1 -0
- package/dist/kit/ledger/carried.mjs +17 -10
- package/dist/kit/ledger/data.mjs +73 -13
- package/dist/kit/ledger/format.mjs +176 -54
- package/dist/kit/ledger/hash.mjs +91 -18
- package/dist/kit/ledger/history.mjs +156 -116
- package/dist/kit/ledger/inverse-source.mjs +158 -19
- package/dist/kit/ledger/journal-records.mjs +292 -67
- package/dist/kit/ledger/merge.mjs +4 -3
- package/dist/kit/model.mjs +1 -1
- package/dist/kit/pdf-glyphs.mjs +4 -4
- package/dist/kit/pdf-vectors.mjs +4 -1
- package/dist/kit/rapier-ledger.mjs +2 -2
- package/dist/kit/render-ink.mjs +1 -1
- package/dist/kit/render-markdown.mjs +400 -148
- package/dist/kit/render-print.mjs +131 -55
- package/dist/kit/render-sanitize.mjs +30 -7
- package/dist/kit/render-work.mjs +99 -20
- package/dist/kit/render.mjs +133 -140
- package/dist/kit/typography.mjs +2 -0
- package/dist/layout/hyphenation.mjs +127 -0
- package/dist/layout/line-plan.mjs +88 -96
- package/dist/layout/model.mjs +71 -88
- package/dist/layout/paragraph-fit.mjs +191 -0
- package/dist/layout/preparation.mjs +373 -0
- package/dist/layout/prepared-paragraph.mjs +223 -0
- package/dist/layout/typography.mjs +345 -111
- package/dist/packages/rapier-diff/index.mjs +359 -224
- package/dist/spec/document-fonts.mjs +14 -5
- package/dist/spec/document-settings.mjs +11 -164
- package/dist/spec/html-blocks.mjs +618 -79
- package/dist/spec/md-assets.mjs +178 -36
- package/dist/spec/md-layout.mjs +13 -2
- package/dist/spec/md-marks.mjs +220 -127
- package/dist/spec/md-source.mjs +157 -0
- package/package.json +2 -1
- package/style.css +15 -50
- package/dist/agent/vendor/pretext/bidi.js +0 -151
- package/dist/agent/vendor/pretext/generated/bidi-data.js +0 -3831
package/style.css
CHANGED
|
@@ -138,6 +138,10 @@
|
|
|
138
138
|
.md-render p[data-md-hyphens="auto"]{hyphens:auto;text-wrap:pretty}
|
|
139
139
|
.md-render p[data-md-hyphens="auto"] :is(code,kbd,samp,math){hyphens:none;text-wrap:wrap;text-justify:none}
|
|
140
140
|
.md-render [data-rapier-typography-break]::after{content:'\A';white-space:pre}
|
|
141
|
+
.md-render p[data-rapier-typography-fit]{text-align:justify!important;text-align-last:start;text-wrap:nowrap;hyphens:none;hanging-punctuation:none}
|
|
142
|
+
.md-render p[data-rapier-typography-fit] :is(a,span,em,i,strong,b,del,s,mark,code,kbd,samp,u,ins,abbr){text-wrap:nowrap;hyphens:none;hanging-punctuation:none}
|
|
143
|
+
.md-render [data-rapier-typography-separator]{font-size:0;line-height:0;word-spacing:0!important;letter-spacing:0!important}
|
|
144
|
+
.md-render [data-rapier-typography-break="hyphen"]::before{content:var(--md-fit-hyphen,'-')}
|
|
141
145
|
.md-render p[data-rapier-typography-ragged]{text-align:start!important}
|
|
142
146
|
.md-render p[data-md-lines]:not([data-rapier-typography-protected-initial])::first-letter{
|
|
143
147
|
initial-letter:var(--md-drop-lines,normal);
|
|
@@ -403,7 +407,7 @@
|
|
|
403
407
|
border-inline-start:3px dotted var(--md-color-line);
|
|
404
408
|
z-index:0;
|
|
405
409
|
}
|
|
406
|
-
.md-render
|
|
410
|
+
.md-render :is(h1,h2,h3,h4,h5,h6)[data-rapier-list-through]:has(+:is(h1,h2,h3,h4,h5,h6)){--md-list-heading-after:var(--md-gap-heading-before)}
|
|
407
411
|
.md-render li{margin:0 0 calc(var(--md-line) / 4)}
|
|
408
412
|
.md-render li:last-child{margin-bottom:0}
|
|
409
413
|
.md-render li>ul,.md-render li>ol{margin:calc(var(--md-line) / 4) 0 0}
|
|
@@ -495,8 +499,8 @@
|
|
|
495
499
|
vertical-align:middle;
|
|
496
500
|
}
|
|
497
501
|
.md-render p>.math-display-wrap{margin:calc(var(--md-line) / 4) 0 var(--md-gap-block)}
|
|
498
|
-
.md-render
|
|
499
|
-
.md-render
|
|
502
|
+
.md-render p:has(>:is(.math-display-wrap,.rapier-hscroll--math):only-child){margin-bottom:var(--md-gap-block)}
|
|
503
|
+
.md-render p>:is(.math-display-wrap,.rapier-hscroll--math):only-child{margin:0}
|
|
500
504
|
/* Diagram MathML keeps the metrics used by its renderer. */
|
|
501
505
|
.md-render math[display="block"]:not(svg *){font-size:1.12em}
|
|
502
506
|
.md-render math:not([display="block"]):not(svg *){font-size:1em}
|
|
@@ -638,12 +642,17 @@
|
|
|
638
642
|
font-size: var(--md-text-sm);
|
|
639
643
|
color: var(--md-color-text-secondary);
|
|
640
644
|
}
|
|
645
|
+
/* A view preference can keep embedded SVGs on their original light-paper colours. */
|
|
646
|
+
html[data-invert-image-alpha="off"] :is(img,.md-render svg.rapier-native-flowchart){color-scheme:light}
|
|
641
647
|
.md-render img{
|
|
642
648
|
max-width:100%;height:auto;
|
|
643
649
|
border:0;
|
|
644
650
|
vertical-align:middle;
|
|
645
651
|
}
|
|
646
652
|
.md-render img[data-rapier-image-size]{width:min(var(--md-image-width),100%);height:auto}
|
|
653
|
+
/* AUTO stays relative to its column. Authored and gesture-owned inline sizing wins;
|
|
654
|
+
Plain reads the intrinsic attributes without rerendering ordinary image blocks. */
|
|
655
|
+
html:not([data-layout="plain"]) .md-render img[data-rapier-image-geometry="auto"]{width:min(var(--rapier-image-auto-width),var(--rapier-image-natural-width));height:auto}
|
|
647
656
|
.md-render img:is([data-rapier-asset],[data-rapier-image-url]):not([data-rapier-asset-state="ready"]){background:color-mix(in srgb,var(--md-color-text) 5%,transparent)}
|
|
648
657
|
|
|
649
658
|
.md-render dl{margin:0 0 var(--md-gap-block)}
|
|
@@ -691,7 +700,7 @@
|
|
|
691
700
|
.md-render [data-md-color="#be185d"]{--md-color-dark:#f9a8d4}
|
|
692
701
|
.md-render [data-md-color="#57606a"]{--md-color-dark:#aab1bb}
|
|
693
702
|
.md-render abbr[title]{text-decoration:underline dotted;text-decoration-color:var(--md-color-text-muted);text-underline-offset:2px;cursor:help}
|
|
694
|
-
.md-render ins{text-decoration:underline;color:var(--md-color-success)}
|
|
703
|
+
.md-render :is(ins,u){text-decoration:underline;color:var(--md-color-success)}
|
|
695
704
|
/* The document owns its selection accent, including on an exported page. */
|
|
696
705
|
.md-render ::selection{background:color-mix(in srgb,var(--md-color-accent) 48%,transparent)}
|
|
697
706
|
.md-render del,.md-render s{color:var(--md-color-text-muted);text-decoration:line-through}
|
|
@@ -741,49 +750,5 @@
|
|
|
741
750
|
.md-render [data-md-break]::after{content:none!important}
|
|
742
751
|
}
|
|
743
752
|
|
|
744
|
-
/* Authored
|
|
745
|
-
|
|
746
|
-
--md-list-heading-before:var(--md-line);
|
|
747
|
-
--md-list-heading-after:calc(var(--md-line) / 2);
|
|
748
|
-
--md-gap-paragraph:calc(var(--md-space-paragraph,.5) * var(--md-line));
|
|
749
|
-
--md-gap-heading-before:calc(var(--md-space-heading-before,1.5) * var(--md-line));
|
|
750
|
-
--md-gap-heading-after:calc(var(--md-space-heading-after,.5) * var(--md-line));
|
|
751
|
-
--md-gap-block:calc(var(--md-space-block,1) * var(--md-line));
|
|
752
|
-
}
|
|
753
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :where(p,h1,h2,h3,h4,h5,h6,ul,ol,blockquote,pre,details,dl,figure,.diagram-block,.math-display-wrap,.table-scroll-wrap,.rapier-hscroll,.md-space-block){
|
|
754
|
-
margin-block:var(--md-gap-block);
|
|
755
|
-
height:calc-size(auto,round(up,size,var(--md-line)));
|
|
756
|
-
}
|
|
757
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) .md-space-block{display:flow-root}
|
|
758
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) p{margin-block:0 var(--md-gap-paragraph)}
|
|
759
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(h1,h2,h3,h4,h5,h6){margin-block:var(--md-gap-heading-before) var(--md-gap-heading-after)}
|
|
760
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(h2,h3){line-height:calc(2 * var(--md-line))}
|
|
761
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(p[data-md-picture],p:has(>.math-display-wrap:only-child)){margin-block:var(--md-gap-block)}
|
|
762
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) p[data-md-picture]{line-height:0}
|
|
763
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(li,dd){margin-block:0 var(--md-gap-paragraph)}
|
|
764
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(li:last-child,dd:last-child){margin-block-end:0}
|
|
765
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) dt{margin-block:var(--md-gap-paragraph) 0}
|
|
766
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) blockquote{padding-block:calc(var(--md-line) / 2)}
|
|
767
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) .callout__label{margin-block:0 var(--md-gap-paragraph);height:auto}
|
|
768
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) pre{padding-block:calc(var(--md-line) / 2 - 1px);line-height:var(--md-line)}
|
|
769
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) pre code{display:block;line-height:var(--md-line)}
|
|
770
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) pre[data-rapier-code-lines]{padding-block-start:calc(var(--md-line) * 1.5 - 1px)}
|
|
771
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) details{padding-block:calc(var(--md-line) / 2 - var(--md-hair));}
|
|
772
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) summary{padding-block:0;line-height:var(--md-line)}
|
|
773
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) details[open]>summary{margin-block-end:var(--md-gap-paragraph)}
|
|
774
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) details[open]:not(:has(>:not(summary))){padding-block-end:calc(var(--md-line) * 1.5 - var(--md-hair))}
|
|
775
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(th,td){line-height:var(--md-line);padding-block:calc(var(--md-line) / 2 - var(--md-hair) / 2);
|
|
776
|
-
border:0;border-inline-end:var(--md-hair) solid color-mix(in srgb,var(--md-color-line) 74%,transparent);border-block-end:var(--md-hair) solid color-mix(in srgb,var(--md-color-line) 74%,transparent)}
|
|
777
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) thead th{border-block-end:2px solid var(--md-color-line);padding-block-end:calc(var(--md-line) / 2 + var(--md-hair) / 2 - 2px)}
|
|
778
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) table{margin-block:var(--md-gap-block);border:0;border-collapse:separate;border-spacing:0;outline:calc(2 * var(--md-hair)) solid var(--md-color-line);outline-offset:calc(-2 * var(--md-hair))}
|
|
779
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) thead{outline:calc(2 * var(--md-hair)) solid var(--md-color-line);outline-offset:calc(-2 * var(--md-hair))}
|
|
780
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(.table-scroll-wrap,.rapier-hscroll--table){padding-block:0}
|
|
781
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(.table-scroll-wrap,.rapier-hscroll)>:is(table,pre,.math-display-wrap),
|
|
782
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) p>.math-display-wrap{margin-block:0}
|
|
783
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) hr{margin-block:var(--md-gap-block);height:var(--md-line);box-sizing:border-box}
|
|
784
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render)>:first-child,
|
|
785
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(blockquote,li,td,th,dd,details,.md-space-block)>:first-child{margin-block-start:0}
|
|
786
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) :is(blockquote,td,th,dd,details,.md-space-block)>:last-child{margin-block-end:0}
|
|
787
|
-
@media print{
|
|
788
|
-
:is(.md-render[data-md-space],[data-md-space] .md-render) pre[data-rapier-code-lines]{padding-block-start:calc(var(--md-line) / 2 - 1px)!important}
|
|
789
|
-
}
|
|
753
|
+
/* Authored run sizes supply their own line box; surrounding block rhythm is unchanged. */
|
|
754
|
+
.md-render [data-md-size]{line-height:normal}
|
|
@@ -1,151 +0,0 @@
|
|
|
1
|
-
/*! Pretext 0.0.9 | MIT | Copyright (c) 2026 Pretext contributors */
|
|
2
|
-
import { latin1BidiTypes, nonLatin1BidiRanges } from './generated/bidi-data.js';
|
|
3
|
-
function classifyCodePoint(codePoint) {
|
|
4
|
-
if (codePoint <= 0x00FF) return latin1BidiTypes[codePoint];
|
|
5
|
-
let lo = 0;
|
|
6
|
-
let hi = nonLatin1BidiRanges.length - 1;
|
|
7
|
-
while(lo <= hi){
|
|
8
|
-
const mid = lo + hi >> 1;
|
|
9
|
-
const range = nonLatin1BidiRanges[mid];
|
|
10
|
-
if (codePoint < range[0]) {
|
|
11
|
-
hi = mid - 1;
|
|
12
|
-
continue;
|
|
13
|
-
}
|
|
14
|
-
if (codePoint > range[1]) {
|
|
15
|
-
lo = mid + 1;
|
|
16
|
-
continue;
|
|
17
|
-
}
|
|
18
|
-
return range[2];
|
|
19
|
-
}
|
|
20
|
-
return 'L';
|
|
21
|
-
}
|
|
22
|
-
function computeBidiLevels(str) {
|
|
23
|
-
const len = str.length;
|
|
24
|
-
if (len === 0) return null;
|
|
25
|
-
const types = new Array(len);
|
|
26
|
-
let paragraphHasBidi = false;
|
|
27
|
-
let paragraphStart = 0;
|
|
28
|
-
let levels = null;
|
|
29
|
-
for(let i = 0; i < len;){
|
|
30
|
-
const first = str.charCodeAt(i);
|
|
31
|
-
let codePoint = first;
|
|
32
|
-
let codeUnitLength = 1;
|
|
33
|
-
if (first >= 0xD800 && first <= 0xDBFF && i + 1 < len) {
|
|
34
|
-
const second = str.charCodeAt(i + 1);
|
|
35
|
-
if (second >= 0xDC00 && second <= 0xDFFF) {
|
|
36
|
-
codePoint = (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
|
|
37
|
-
codeUnitLength = 2;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
const t = classifyCodePoint(codePoint);
|
|
41
|
-
if (t === 'R' || t === 'AL' || t === 'AN') paragraphHasBidi = true;
|
|
42
|
-
for(let j = 0; j < codeUnitLength; j++){
|
|
43
|
-
types[i + j] = t;
|
|
44
|
-
}
|
|
45
|
-
if (t === 'B') {
|
|
46
|
-
if (paragraphHasBidi) {
|
|
47
|
-
levels ??= new Int8Array(len);
|
|
48
|
-
levels[i] = resolveParagraphLevels(types, levels, paragraphStart, i);
|
|
49
|
-
}
|
|
50
|
-
paragraphStart = i + codeUnitLength;
|
|
51
|
-
paragraphHasBidi = false;
|
|
52
|
-
}
|
|
53
|
-
i += codeUnitLength;
|
|
54
|
-
}
|
|
55
|
-
if (paragraphHasBidi) {
|
|
56
|
-
levels ??= new Int8Array(len);
|
|
57
|
-
resolveParagraphLevels(types, levels, paragraphStart, len);
|
|
58
|
-
}
|
|
59
|
-
return levels;
|
|
60
|
-
}
|
|
61
|
-
function resolveParagraphLevels(types, levels, start, end) {
|
|
62
|
-
let startLevel = 0;
|
|
63
|
-
for(let i = start; i < end; i++){
|
|
64
|
-
const t = types[i];
|
|
65
|
-
if (t === 'L') {
|
|
66
|
-
startLevel = 0;
|
|
67
|
-
break;
|
|
68
|
-
}
|
|
69
|
-
if (t === 'R' || t === 'AL') {
|
|
70
|
-
startLevel = 1;
|
|
71
|
-
break;
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
const e = startLevel & 1 ? 'R' : 'L';
|
|
75
|
-
const sor = e;
|
|
76
|
-
let lastType = sor;
|
|
77
|
-
for(let i = start; i < end; i++){
|
|
78
|
-
if (types[i] === 'NSM') types[i] = lastType;
|
|
79
|
-
else lastType = types[i];
|
|
80
|
-
}
|
|
81
|
-
lastType = sor;
|
|
82
|
-
for(let i = start; i < end; i++){
|
|
83
|
-
const t = types[i];
|
|
84
|
-
if (t === 'EN') types[i] = lastType === 'AL' ? 'AN' : 'EN';
|
|
85
|
-
else if (t === 'R' || t === 'L' || t === 'AL') lastType = t;
|
|
86
|
-
}
|
|
87
|
-
for(let i = start; i < end; i++){
|
|
88
|
-
if (types[i] === 'AL') types[i] = 'R';
|
|
89
|
-
}
|
|
90
|
-
for(let i = start + 1; i < end - 1; i++){
|
|
91
|
-
if (types[i] === 'ES' && types[i - 1] === 'EN' && types[i + 1] === 'EN') {
|
|
92
|
-
types[i] = 'EN';
|
|
93
|
-
}
|
|
94
|
-
if (types[i] === 'CS' && (types[i - 1] === 'EN' || types[i - 1] === 'AN') && types[i + 1] === types[i - 1]) {
|
|
95
|
-
types[i] = types[i - 1];
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
for(let i = start; i < end; i++){
|
|
99
|
-
if (types[i] !== 'EN') continue;
|
|
100
|
-
let j;
|
|
101
|
-
for(j = i - 1; j >= start && types[j] === 'ET'; j--)types[j] = 'EN';
|
|
102
|
-
for(j = i + 1; j < end && types[j] === 'ET'; j++)types[j] = 'EN';
|
|
103
|
-
}
|
|
104
|
-
for(let i = start; i < end; i++){
|
|
105
|
-
const t = types[i];
|
|
106
|
-
if (t === 'WS' || t === 'ES' || t === 'ET' || t === 'CS') types[i] = 'ON';
|
|
107
|
-
}
|
|
108
|
-
lastType = sor;
|
|
109
|
-
for(let i = start; i < end; i++){
|
|
110
|
-
const t = types[i];
|
|
111
|
-
if (t === 'EN') types[i] = lastType === 'L' ? 'L' : 'EN';
|
|
112
|
-
else if (t === 'R' || t === 'L') lastType = t;
|
|
113
|
-
}
|
|
114
|
-
for(let i = start; i < end; i++){
|
|
115
|
-
if (types[i] !== 'ON') continue;
|
|
116
|
-
let runEnd = i + 1;
|
|
117
|
-
while(runEnd < end && types[runEnd] === 'ON')runEnd++;
|
|
118
|
-
const before = i > start ? types[i - 1] : sor;
|
|
119
|
-
const after = runEnd < end ? types[runEnd] : sor;
|
|
120
|
-
const bDir = before !== 'L' ? 'R' : 'L';
|
|
121
|
-
const aDir = after !== 'L' ? 'R' : 'L';
|
|
122
|
-
if (bDir === aDir) {
|
|
123
|
-
for(let j = i; j < runEnd; j++)types[j] = bDir;
|
|
124
|
-
}
|
|
125
|
-
i = runEnd - 1;
|
|
126
|
-
}
|
|
127
|
-
for(let i = start; i < end; i++){
|
|
128
|
-
if (types[i] === 'ON') types[i] = e;
|
|
129
|
-
}
|
|
130
|
-
for(let i = start; i < end; i++){
|
|
131
|
-
const t = types[i];
|
|
132
|
-
let level = startLevel;
|
|
133
|
-
if ((startLevel & 1) === 0) {
|
|
134
|
-
if (t === 'R') level++;
|
|
135
|
-
else if (t === 'AN' || t === 'EN') level += 2;
|
|
136
|
-
} else if (t === 'L' || t === 'AN' || t === 'EN') {
|
|
137
|
-
level++;
|
|
138
|
-
}
|
|
139
|
-
levels[i] = level;
|
|
140
|
-
}
|
|
141
|
-
return startLevel;
|
|
142
|
-
}
|
|
143
|
-
export function computeSegmentLevels(normalized, segStarts) {
|
|
144
|
-
const bidiLevels = computeBidiLevels(normalized);
|
|
145
|
-
if (bidiLevels === null) return null;
|
|
146
|
-
const segLevels = new Int8Array(segStarts.length);
|
|
147
|
-
for(let i = 0; i < segStarts.length; i++){
|
|
148
|
-
segLevels[i] = bidiLevels[segStarts[i]];
|
|
149
|
-
}
|
|
150
|
-
return segLevels;
|
|
151
|
-
}
|