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.
Files changed (82) hide show
  1. package/LICENSE +5 -2
  2. package/README.md +245 -54
  3. package/dist/agent/vendor/hyphen-en-us/LICENSE +14 -0
  4. package/dist/agent/vendor/hyphen-en-us/SOURCE.json +33 -0
  5. package/dist/agent/vendor/hyphen-en-us/hyph-en-us.hyp.txt +14 -0
  6. package/dist/agent/vendor/hyphen-en-us/hyph-en-us.pat.txt +4938 -0
  7. package/dist/agent/vendor/hyphen-en-us/patterns.js +25 -0
  8. package/dist/agent/vendor/pretext/LICENSE +208 -0
  9. package/dist/agent/vendor/pretext/NOTICE +26 -13
  10. package/dist/agent/vendor/pretext/SOURCE.json +213 -45
  11. package/dist/agent/vendor/pretext/analysis.js +675 -1224
  12. package/dist/agent/vendor/pretext/entry-geometry.js +183 -0
  13. package/dist/agent/vendor/pretext/gecko-line-breaks.js +688 -0
  14. package/dist/agent/vendor/pretext/generated/engine-break-data.js +57 -0
  15. package/dist/agent/vendor/pretext/generated/webkit-generic-families.js +80 -0
  16. package/dist/agent/vendor/pretext/graphemes.js +98 -0
  17. package/dist/agent/vendor/pretext/han-kerning.js +253 -0
  18. package/dist/agent/vendor/pretext/layout.js +352 -290
  19. package/dist/agent/vendor/pretext/line-break.js +1154 -588
  20. package/dist/agent/vendor/pretext/line-breaks.js +892 -0
  21. package/dist/agent/vendor/pretext/line-text.js +81 -39
  22. package/dist/agent/vendor/pretext/measurement.js +1105 -176
  23. package/dist/agent/vendor/pretext/prepare.js +807 -0
  24. package/dist/agent/vendor/pretext/rich-inline.js +1242 -273
  25. package/dist/agent/will.mjs +2 -0
  26. package/dist/images/gif.mjs +47 -0
  27. package/dist/images/playback.mjs +101 -0
  28. package/dist/kit/assets.mjs +5 -1
  29. package/dist/kit/conformance/03-wrap-around-silhouette.md +1 -1
  30. package/dist/kit/conformance/04-wrap-box.md +1 -1
  31. package/dist/kit/conformance/05-behind.md +1 -1
  32. package/dist/kit/conformance/06-front.md +1 -1
  33. package/dist/kit/conformance/07-rotate-raster.md +1 -1
  34. package/dist/kit/conformance/08-drawing-rotation.md +1 -1
  35. package/dist/kit/conformance/09-drawing-ring-interior.expected.json +18 -18
  36. package/dist/kit/conformance/09-drawing-ring-interior.md +1 -1
  37. package/dist/kit/conformance/10-both-sides.md +1 -1
  38. package/dist/kit/conformance/11-neighbour-skips-image.md +1 -1
  39. package/dist/kit/conformance/{12-heading-barrier.expected.json → 12-rule-barrier.expected.json} +1 -1
  40. package/dist/kit/conformance/{12-heading-barrier.md → 12-rule-barrier.md} +2 -2
  41. package/dist/kit/conformance/README.md +19 -28
  42. package/dist/kit/conformance/run.mjs +13 -11
  43. package/dist/kit/export-fonts.mjs +26 -11
  44. package/dist/kit/index.mjs +1 -0
  45. package/dist/kit/ledger/carried.mjs +17 -10
  46. package/dist/kit/ledger/data.mjs +73 -13
  47. package/dist/kit/ledger/format.mjs +176 -54
  48. package/dist/kit/ledger/hash.mjs +91 -18
  49. package/dist/kit/ledger/history.mjs +156 -116
  50. package/dist/kit/ledger/inverse-source.mjs +158 -19
  51. package/dist/kit/ledger/journal-records.mjs +292 -67
  52. package/dist/kit/ledger/merge.mjs +4 -3
  53. package/dist/kit/model.mjs +1 -1
  54. package/dist/kit/pdf-glyphs.mjs +4 -4
  55. package/dist/kit/pdf-vectors.mjs +4 -1
  56. package/dist/kit/rapier-ledger.mjs +2 -2
  57. package/dist/kit/render-ink.mjs +1 -1
  58. package/dist/kit/render-markdown.mjs +400 -148
  59. package/dist/kit/render-print.mjs +131 -55
  60. package/dist/kit/render-sanitize.mjs +30 -7
  61. package/dist/kit/render-work.mjs +99 -20
  62. package/dist/kit/render.mjs +133 -140
  63. package/dist/kit/typography.mjs +2 -0
  64. package/dist/layout/hyphenation.mjs +127 -0
  65. package/dist/layout/line-plan.mjs +88 -96
  66. package/dist/layout/model.mjs +71 -88
  67. package/dist/layout/paragraph-fit.mjs +191 -0
  68. package/dist/layout/preparation.mjs +373 -0
  69. package/dist/layout/prepared-paragraph.mjs +223 -0
  70. package/dist/layout/typography.mjs +345 -111
  71. package/dist/packages/rapier-diff/index.mjs +359 -224
  72. package/dist/spec/document-fonts.mjs +14 -5
  73. package/dist/spec/document-settings.mjs +11 -164
  74. package/dist/spec/html-blocks.mjs +618 -79
  75. package/dist/spec/md-assets.mjs +178 -36
  76. package/dist/spec/md-layout.mjs +13 -2
  77. package/dist/spec/md-marks.mjs +220 -127
  78. package/dist/spec/md-source.mjs +157 -0
  79. package/package.json +2 -1
  80. package/style.css +15 -50
  81. package/dist/agent/vendor/pretext/bidi.js +0 -151
  82. 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:not([data-md-space]):not([data-md-space] *) :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)}
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:not([data-md-space]):not([data-md-space] *) p:has(>:is(.math-display-wrap,.rapier-hscroll--math):only-child){margin-bottom:var(--md-gap-block)}
499
- .md-render:not([data-md-space]):not([data-md-space] *) p>:is(.math-display-wrap,.rapier-hscroll--math):only-child{margin:0}
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 spacing: one body line, native collapsed gaps, and whole-line block boxes. */
745
- :is(.md-render[data-md-space],[data-md-space] .md-render){
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
- }