@kensio/colophon 2.14.0 → 2.15.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.
Files changed (144) hide show
  1. package/README.md +3 -3
  2. package/dist/config/defaults.d.ts +9 -5
  3. package/dist/config/defaults.d.ts.map +1 -1
  4. package/dist/config/defaults.js +8 -4
  5. package/dist/config/defaults.js.map +1 -1
  6. package/dist/highlight/grid.d.ts +5 -8
  7. package/dist/highlight/grid.d.ts.map +1 -1
  8. package/dist/highlight/grid.js +5 -5
  9. package/dist/highlight/grid.js.map +1 -1
  10. package/dist/highlight/index.d.ts.map +1 -1
  11. package/dist/highlight/index.js +1 -8
  12. package/dist/highlight/index.js.map +1 -1
  13. package/dist/highlight/types.d.ts +9 -6
  14. package/dist/highlight/types.d.ts.map +1 -1
  15. package/dist/layout/block.d.ts +6 -0
  16. package/dist/layout/block.d.ts.map +1 -1
  17. package/dist/layout/block.js.map +1 -1
  18. package/dist/layout/draw.d.ts.map +1 -1
  19. package/dist/layout/draw.js +3 -0
  20. package/dist/layout/draw.js.map +1 -1
  21. package/dist/layout/index.d.ts +1 -1
  22. package/dist/layout/index.d.ts.map +1 -1
  23. package/dist/layout/index.js +1 -1
  24. package/dist/layout/index.js.map +1 -1
  25. package/dist/measure/index.js +0 -0
  26. package/dist/measure/index.js.map +1 -1
  27. package/dist/measure/runs.d.ts +13 -2
  28. package/dist/measure/runs.d.ts.map +1 -1
  29. package/dist/measure/runs.js +37 -2
  30. package/dist/measure/runs.js.map +1 -1
  31. package/dist/templates/code/advance.d.ts +25 -0
  32. package/dist/templates/code/advance.d.ts.map +1 -0
  33. package/dist/templates/code/advance.js +36 -0
  34. package/dist/templates/code/advance.js.map +1 -0
  35. package/dist/templates/code/clip.d.ts +4 -3
  36. package/dist/templates/code/clip.d.ts.map +1 -1
  37. package/dist/templates/code/clip.js +18 -11
  38. package/dist/templates/code/clip.js.map +1 -1
  39. package/dist/templates/code/extent.d.ts +39 -0
  40. package/dist/templates/code/extent.d.ts.map +1 -0
  41. package/dist/templates/code/extent.js +54 -0
  42. package/dist/templates/code/extent.js.map +1 -0
  43. package/dist/templates/code/fit.d.ts +10 -8
  44. package/dist/templates/code/fit.d.ts.map +1 -1
  45. package/dist/templates/code/fit.js +5 -18
  46. package/dist/templates/code/fit.js.map +1 -1
  47. package/dist/templates/code/index.d.ts.map +1 -1
  48. package/dist/templates/code/index.js +7 -6
  49. package/dist/templates/code/index.js.map +1 -1
  50. package/dist/templates/code/layout.d.ts +6 -3
  51. package/dist/templates/code/layout.d.ts.map +1 -1
  52. package/dist/templates/code/layout.js +20 -7
  53. package/dist/templates/code/layout.js.map +1 -1
  54. package/dist/templates/code/mark/draw.d.ts +1 -0
  55. package/dist/templates/code/mark/draw.d.ts.map +1 -1
  56. package/dist/templates/code/mark/draw.js +3 -3
  57. package/dist/templates/code/mark/draw.js.map +1 -1
  58. package/dist/templates/code/mark/index.d.ts +2 -1
  59. package/dist/templates/code/mark/index.d.ts.map +1 -1
  60. package/dist/templates/code/mark/index.js +2 -2
  61. package/dist/templates/code/mark/index.js.map +1 -1
  62. package/dist/templates/code/mark/locate.d.ts +9 -7
  63. package/dist/templates/code/mark/locate.d.ts.map +1 -1
  64. package/dist/templates/code/mark/locate.js +28 -26
  65. package/dist/templates/code/mark/locate.js.map +1 -1
  66. package/dist/templates/code/spans.d.ts +5 -3
  67. package/dist/templates/code/spans.d.ts.map +1 -1
  68. package/dist/templates/code/spans.js +8 -6
  69. package/dist/templates/code/spans.js.map +1 -1
  70. package/dist/templates/code/truncate.d.ts +13 -0
  71. package/dist/templates/code/truncate.d.ts.map +1 -0
  72. package/dist/templates/code/truncate.js +23 -0
  73. package/dist/templates/code/truncate.js.map +1 -0
  74. package/dist/templates/cover/lines.d.ts.map +1 -1
  75. package/dist/templates/cover/lines.js +6 -2
  76. package/dist/templates/cover/lines.js.map +1 -1
  77. package/dist/templates/cover/lockup.d.ts +8 -1
  78. package/dist/templates/cover/lockup.d.ts.map +1 -1
  79. package/dist/templates/cover/lockup.js +11 -4
  80. package/dist/templates/cover/lockup.js.map +1 -1
  81. package/dist/templates/cover/tracking.d.ts +16 -0
  82. package/dist/templates/cover/tracking.d.ts.map +1 -0
  83. package/dist/templates/cover/tracking.js +40 -0
  84. package/dist/templates/cover/tracking.js.map +1 -0
  85. package/dist/templates/terminal/index.d.ts.map +1 -1
  86. package/dist/templates/terminal/index.js +7 -5
  87. package/dist/templates/terminal/index.js.map +1 -1
  88. package/dist/templates/terminal/session.d.ts.map +1 -1
  89. package/dist/templates/terminal/session.js +1 -12
  90. package/dist/templates/terminal/session.js.map +1 -1
  91. package/dist/text/element.d.ts +5 -0
  92. package/dist/text/element.d.ts.map +1 -1
  93. package/dist/text/element.js +4 -1
  94. package/dist/text/element.js.map +1 -1
  95. package/dist/text/index.d.ts +1 -0
  96. package/dist/text/index.d.ts.map +1 -1
  97. package/dist/text/index.js +1 -0
  98. package/dist/text/index.js.map +1 -1
  99. package/dist/text/track.d.ts +30 -0
  100. package/dist/text/track.d.ts.map +1 -0
  101. package/dist/text/track.js +44 -0
  102. package/dist/text/track.js.map +1 -0
  103. package/dist/texture/chevrons.js +1 -1
  104. package/dist/texture/grid.js +1 -1
  105. package/dist/texture/grid.js.map +1 -1
  106. package/dist/texture/halftone.js +2 -2
  107. package/dist/texture/honeycomb.js +1 -1
  108. package/dist/texture/honeycomb.js.map +1 -1
  109. package/dist/texture/index.d.ts.map +1 -1
  110. package/dist/texture/index.js +1 -3
  111. package/dist/texture/index.js.map +1 -1
  112. package/dist/texture/moire.js +1 -1
  113. package/dist/texture/moire.js.map +1 -1
  114. package/dist/texture/pattern.js +3 -3
  115. package/dist/texture/pattern.js.map +1 -1
  116. package/dist/texture/rays.js +1 -1
  117. package/dist/texture/resolve.d.ts +1 -2
  118. package/dist/texture/resolve.d.ts.map +1 -1
  119. package/dist/texture/resolve.js +4 -6
  120. package/dist/texture/resolve.js.map +1 -1
  121. package/dist/texture/scallops.js +1 -1
  122. package/dist/texture/topographic/index.js +2 -2
  123. package/dist/texture/topographic/index.js.map +1 -1
  124. package/dist/texture/waves.js +1 -1
  125. package/dist/theme/presets.d.ts +6 -6
  126. package/dist/theme/presets.js +6 -6
  127. package/dist/types.d.ts +36 -40
  128. package/dist/types.d.ts.map +1 -1
  129. package/dist/validate/keys.d.ts +0 -2
  130. package/dist/validate/keys.d.ts.map +1 -1
  131. package/dist/validate/keys.js +0 -8
  132. package/dist/validate/keys.js.map +1 -1
  133. package/dist/validate/values.d.ts.map +1 -1
  134. package/dist/validate/values.js +21 -0
  135. package/dist/validate/values.js.map +1 -1
  136. package/package.json +1 -1
  137. package/dist/templates/code/width.d.ts +0 -10
  138. package/dist/templates/code/width.d.ts.map +0 -1
  139. package/dist/templates/code/width.js +0 -26
  140. package/dist/templates/code/width.js.map +0 -1
  141. package/dist/texture/grain.d.ts +0 -17
  142. package/dist/texture/grain.d.ts.map +0 -1
  143. package/dist/texture/grain.js +0 -29
  144. package/dist/texture/grain.js.map +0 -1
package/README.md CHANGED
@@ -24,8 +24,8 @@ work.
24
24
  frontmatter with real VS Code theme colours.
25
25
  - **Configurable branding.** Colours, gradient, fonts, footer and badge come from
26
26
  config, not from any one site's stylesheet.
27
- - **Themes.** Eight named looks, or your own colours with a mesh, grain, a dot
28
- grid or ruled lines over them.
27
+ - **Themes.** Eight named looks, or your own colours with a mesh, a dot grid or
28
+ ruled lines over them.
29
29
  - **Multiple sizes from one input.** A 1:1 square and a 1.91:1 landscape by
30
30
  default, or whatever set you configure.
31
31
  - **Manifest and meta tags.** A JSON record of what was generated, and the Open
@@ -105,7 +105,7 @@ Full documentation is in [`docs/`](./docs/).
105
105
  - [Astro](./docs/astro/ "The integration and the meta tags component")
106
106
  - [The browser-safe core](./docs/core/ "Running the template layer outside Node")
107
107
  - [The layout toolkit](./docs/layout/ "The primitives templates are built from")
108
- - [Themes and background treatments](./docs/configuration/themes/ "Named looks, meshes, grain, dots and rules")
108
+ - [Themes and background treatments](./docs/configuration/themes/ "Named looks, meshes, dots and rules")
109
109
  - [Logos and photographs](./docs/configuration/images/ "Branding an image with a logo, avatar or background photo")
110
110
  - [Configuration](./docs/configuration/ "Every option, and what happens to an unknown one")
111
111
  - [Output formats](./docs/configuration/formats/ "WebP, JPEG and AVIF, quality, size caps and the SVG source")
@@ -3,13 +3,17 @@ import type { BrandColors, CodeStyle, OutputFormat, OutputSize } from "../types.
3
3
  * How much larger a texture is drawn on the `thumbnail` preset.
4
4
  *
5
5
  * A thumbnail is uploaded at 1280 wide and shown at somewhere between about
6
- * 360 and 170, so a dot grid at its default 44px spacing arrives at the reader
7
- * about 10px apart, which is not a texture any more but a slightly dirty
8
- * background. Three is the factor for the largest of those, and it is the
6
+ * 360 and 170, so a dot grid at its default 66px spacing arrives at the reader
7
+ * about 15px apart, which is not a texture any more but a slightly dirty
8
+ * background. Two is the factor for the largest of those, and it is the
9
9
  * conservative choice: a treatment that is a little too coarse still reads as
10
10
  * a treatment, where one that is too fine reads as nothing at all.
11
+ *
12
+ * It was three while the treatments themselves were half again finer. What it
13
+ * corrects for is the display size, so when the base geometry grew this came
14
+ * down by the same factor and the finished thumbnail is unchanged.
11
15
  */
12
- export declare const DEFAULT_THUMBNAIL_TEXTURE_SCALE = 3;
16
+ export declare const DEFAULT_THUMBNAIL_TEXTURE_SCALE = 2;
13
17
  /**
14
18
  * The texture scale everything else is drawn at, which is to say, unchanged.
15
19
  */
@@ -64,7 +68,7 @@ export declare const SIZE_PRESETS: {
64
68
  readonly name: "thumbnail";
65
69
  readonly width: 1280;
66
70
  readonly height: 720;
67
- readonly textureScale: 3;
71
+ readonly textureScale: 2;
68
72
  };
69
73
  readonly xCover: {
70
74
  readonly name: "x-cover";
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAErB;;;;;;;;;GASG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAevC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,YAAY;;iBACjB,IAAI,EAAE,IAAI;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBAChC,IAAI,EAAE,QAAQ;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;;iBACxC,IAAI,EAAE,SAAS;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBACvC,IAAI,EAAE,WAAW;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;;iBAEvD,IAAI,EAAE,WAAW;iBACjB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,YAAY;;;iBAGZ,IAAI,EAAE,SAAS;iBACf,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,IAAI;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG5D,IAAI,EAAE,gBAAgB;iBACtB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,GAAG;qBAAE,KAAK,EAAE,GAAG;qBAAE,MAAM,EAAE,GAAG;qBAAE,IAAI,EAAE,IAAI;;;;iBAGzD,IAAI,EAAE,qBAAqB;iBAC3B,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,IAAI;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG5D,IAAI,EAAE,eAAe;iBACrB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,IAAI;iBACZ,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,GAAG;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG3D,IAAI,EAAE,eAAe;iBACrB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,IAAI;iBACZ,QAAQ;qBACN,GAAG;qBACH,KAAK;qBACL,MAAM;qBACN,IAAI;;;CAGqC,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,UAAU,EAG9C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,6DAC0B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,wEAAwE;AACxE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAKhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,8FACkD,CAAC;AAExF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAalD,CAAC"}
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,WAAW,EACX,SAAS,EACT,YAAY,EACZ,UAAU,EACX,MAAM,aAAa,CAAC;AAErB;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,+BAA+B,IAAI,CAAC;AAEjD;;GAEG;AACH,eAAO,MAAM,qBAAqB,IAAI,CAAC;AAevC;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,eAAO,MAAM,YAAY;;iBACjB,IAAI,EAAE,IAAI;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBAChC,IAAI,EAAE,QAAQ;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;;iBACxC,IAAI,EAAE,SAAS;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,GAAG;;;iBACvC,IAAI,EAAE,WAAW;iBAAE,KAAK,EAAE,IAAI;iBAAE,MAAM,EAAE,IAAI;;;iBAEvD,IAAI,EAAE,WAAW;iBACjB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,YAAY;;;iBAGZ,IAAI,EAAE,SAAS;iBACf,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,IAAI;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG5D,IAAI,EAAE,gBAAgB;iBACtB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,GAAG;qBAAE,KAAK,EAAE,GAAG;qBAAE,MAAM,EAAE,GAAG;qBAAE,IAAI,EAAE,IAAI;;;;iBAGzD,IAAI,EAAE,qBAAqB;iBAC3B,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,GAAG;iBACX,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,IAAI;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG5D,IAAI,EAAE,eAAe;iBACrB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,IAAI;iBACZ,QAAQ;qBAAI,GAAG,EAAE,IAAI;qBAAE,KAAK,EAAE,GAAG;qBAAE,MAAM,EAAE,IAAI;qBAAE,IAAI,EAAE,IAAI;;;;iBAG3D,IAAI,EAAE,eAAe;iBACrB,KAAK,EAAE,IAAI;iBACX,MAAM,EAAE,IAAI;iBACZ,QAAQ;qBACN,GAAG;qBACH,KAAK;qBACL,MAAM;qBACN,IAAI;;;CAGqC,CAAC;AAEhD;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,UAAU,EAG9C,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,mBAAmB,6DAC0B,CAAC;AAE3D;;;;;;;;GAQG;AACH,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C;;;GAGG;AACH,eAAO,MAAM,cAAc,EAAE,YAAoB,CAAC;AAElD;;;;;;;GAOG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC;;;;;GAKG;AACH,eAAO,MAAM,YAAY,KAAK,CAAC;AAE/B,wEAAwE;AACxE,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,WAAW,CAKhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,8FACkD,CAAC;AAExF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAalD,CAAC"}
@@ -2,13 +2,17 @@
2
2
  * How much larger a texture is drawn on the `thumbnail` preset.
3
3
  *
4
4
  * A thumbnail is uploaded at 1280 wide and shown at somewhere between about
5
- * 360 and 170, so a dot grid at its default 44px spacing arrives at the reader
6
- * about 10px apart, which is not a texture any more but a slightly dirty
7
- * background. Three is the factor for the largest of those, and it is the
5
+ * 360 and 170, so a dot grid at its default 66px spacing arrives at the reader
6
+ * about 15px apart, which is not a texture any more but a slightly dirty
7
+ * background. Two is the factor for the largest of those, and it is the
8
8
  * conservative choice: a treatment that is a little too coarse still reads as
9
9
  * a treatment, where one that is too fine reads as nothing at all.
10
+ *
11
+ * It was three while the treatments themselves were half again finer. What it
12
+ * corrects for is the display size, so when the base geometry grew this came
13
+ * down by the same factor and the finished thumbnail is unchanged.
10
14
  */
11
- export const DEFAULT_THUMBNAIL_TEXTURE_SCALE = 3;
15
+ export const DEFAULT_THUMBNAIL_TEXTURE_SCALE = 2;
12
16
  /**
13
17
  * The texture scale everything else is drawn at, which is to say, unchanged.
14
18
  */
@@ -1 +1 @@
1
- {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,11 @@
1
1
  import type { ThemedToken } from "shiki";
2
2
  import type { CodeToken } from "./types.js";
3
3
  /**
4
- * The character grid one tokenised line becomes, and the column it ends at.
4
+ * The runs one tokenised line becomes.
5
5
  *
6
- * Whitespace-only runs are dropped and each remaining run keeps its starting
7
- * column, so the renderer can position every run absolutely instead of relying
8
- * on SVG text flow to preserve indentation.
6
+ * Whitespace-only runs are dropped and each remaining run keeps the character
7
+ * column it starts at, so the renderer can position every run absolutely
8
+ * instead of relying on SVG text flow to preserve indentation.
9
9
  */
10
- export declare function gridLine(tokens: readonly ThemedToken[]): {
11
- line: CodeToken[];
12
- width: number;
13
- };
10
+ export declare function gridLine(tokens: readonly ThemedToken[]): CodeToken[];
14
11
  //# sourceMappingURL=grid.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/highlight/grid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG;IACxD,IAAI,EAAE,SAAS,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf,CA6BA"}
1
+ {"version":3,"file":"grid.d.ts","sourceRoot":"","sources":["../../src/highlight/grid.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAGzC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAM5C;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,CA6BpE"}
@@ -3,11 +3,11 @@ import { splitColor } from "./color.js";
3
3
  const italicFlag = 1;
4
4
  const boldFlag = 2;
5
5
  /**
6
- * The character grid one tokenised line becomes, and the column it ends at.
6
+ * The runs one tokenised line becomes.
7
7
  *
8
- * Whitespace-only runs are dropped and each remaining run keeps its starting
9
- * column, so the renderer can position every run absolutely instead of relying
10
- * on SVG text flow to preserve indentation.
8
+ * Whitespace-only runs are dropped and each remaining run keeps the character
9
+ * column it starts at, so the renderer can position every run absolutely
10
+ * instead of relying on SVG text flow to preserve indentation.
11
11
  */
12
12
  export function gridLine(tokens) {
13
13
  let column = 0;
@@ -31,6 +31,6 @@ export function gridLine(tokens) {
31
31
  italic: (fontStyle & italicFlag) !== 0,
32
32
  });
33
33
  }
34
- return { line, width: column };
34
+ return line;
35
35
  }
36
36
  //# sourceMappingURL=grid.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/highlight/grid.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,kEAAkE;AAClE,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,QAAQ,GAAG,CAAC,CAAC;AAEnB;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA8B;IAIrD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAgB,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,MAAM,EAAE,KAAK,GAAG,OAAO;YACvB,KAAK;YACL,OAAO;YACP,IAAI,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;YAClC,MAAM,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACjC,CAAC"}
1
+ {"version":3,"file":"grid.js","sourceRoot":"","sources":["../../src/highlight/grid.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAGxC,kEAAkE;AAClE,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,QAAQ,GAAG,CAAC,CAAC;AAEnB;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,MAA8B;IACrD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,MAAM,IAAI,GAAgB,EAAE,CAAC;IAE7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC;QACrB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAE/B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC;QACxE,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAElC,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;YAChB,SAAS;QACX,CAAC;QAED,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,IAAI,CAAC;YACR,IAAI;YACJ,MAAM,EAAE,KAAK,GAAG,OAAO;YACvB,KAAK;YACL,OAAO;YACP,IAAI,EAAE,CAAC,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC;YAClC,MAAM,EAAE,CAAC,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAoB1B"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAEpE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AACzE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE/E;;;;;GAKG;AACH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC,CAW1B"}
@@ -15,17 +15,10 @@ export async function highlightCode(code, options) {
15
15
  lang: resolveLanguage(options.language),
16
16
  theme: await loadTheme(options.theme),
17
17
  });
18
- let longestLine = 0;
19
- const lines = result.tokens.map((tokens) => {
20
- const { line, width } = gridLine(tokens);
21
- longestLine = Math.max(longestLine, width);
22
- return line;
23
- });
24
18
  return {
25
- lines,
19
+ lines: result.tokens.map((tokens) => gridLine(tokens)),
26
20
  foreground: result.fg ?? "#ffffff",
27
21
  background: result.bg ?? "#000000",
28
- longestLine,
29
22
  };
30
23
  }
31
24
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGzE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;QACzE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC;IAEH,IAAI,WAAW,GAAG,CAAC,CAAC;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QACzC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK;QACL,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS;QAClC,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS;QAClC,WAAW;KACZ,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/highlight/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,OAAO,CAAC;AAErC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAGlD,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGzE;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAyB;IAEzB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,OAAO,CAAC,EAAE;QACzE,IAAI,EAAE,eAAe,CAAC,OAAO,CAAC,QAAQ,CAAC;QACvC,KAAK,EAAE,MAAM,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;KACtC,CAAC,CAAC;IAEH,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACtD,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS;QAClC,UAAU,EAAE,MAAM,CAAC,EAAE,IAAI,SAAS;KACnC,CAAC;AACJ,CAAC"}
@@ -1,6 +1,6 @@
1
1
  /**
2
- * One highlighted run of text on a line, positioned by character column so the
3
- * renderer can lay it out on a fixed monospace grid.
2
+ * One highlighted run of text on a line, carrying the character column it
3
+ * starts at so the renderer can position it absolutely.
4
4
  */
5
5
  export interface CodeToken {
6
6
  readonly text: string;
@@ -14,8 +14,13 @@ export interface CodeToken {
14
14
  readonly italic: boolean;
15
15
  }
16
16
  /**
17
- * A tokenised snippet ready for layout: the grid of lines, the theme's own
18
- * colours, and its longest line in characters.
17
+ * A tokenised snippet ready for layout: the lines, and the theme's own
18
+ * colours.
19
+ *
20
+ * There is no width here, and there was: the longest line in characters. How
21
+ * wide a line is depends on the face it is drawn in, since an ideograph takes
22
+ * a full em where a Latin letter takes a fraction of one, so the width is
23
+ * measured where the font is known rather than counted here where it is not.
19
24
  */
20
25
  export interface HighlightedCode {
21
26
  readonly lines: readonly (readonly CodeToken[])[];
@@ -23,8 +28,6 @@ export interface HighlightedCode {
23
28
  readonly foreground: string;
24
29
  /** Theme background, used to fill the code panel. */
25
30
  readonly background: string;
26
- /** Length in characters of the longest line, for width fitting. */
27
- readonly longestLine: number;
28
31
  }
29
32
  /**
30
33
  * Options for `highlightCode`.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/highlight/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC;IAClD,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,mEAAmE;IACnE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/highlight/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yDAAyD;IACzD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,6EAA6E;IAC7E,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IACnC,8DAA8D;IAC9D,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;CAC1B;AAED;;;;;;;;GAQG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC;IAClD,qEAAqE;IACrE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,qDAAqD;IACrD,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,wBAAwB;IACxB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,+BAA+B;IAC/B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B"}
@@ -26,6 +26,12 @@ export interface TextLine {
26
26
  readonly fontWeight: number;
27
27
  readonly opacity: number;
28
28
  readonly gapBefore?: number;
29
+ /**
30
+ * Extra space between this line's characters, from `trackingFor`. Fitting
31
+ * never sets it, because it is a decision about how a line sits against
32
+ * another one rather than about how the words fit their own box.
33
+ */
34
+ readonly letterSpacing?: number;
29
35
  }
30
36
  /**
31
37
  * Fit one group of a template's text, from a prop that may not be there, and
@@ -1 +1 @@
1
- {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/layout/block.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,GACjB,QAAQ,EAAE,CAoBZ"}
1
+ {"version":3,"file":"block.d.ts","sourceRoot":"","sources":["../../src/layout/block.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,4EAA4E;AAC5E,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAY,SAAQ,SAAS;IAC5C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,0EAA0E;AAC1E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;OAIG;IACH,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,WAAW,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,WAAW,GACjB,QAAQ,EAAE,CAoBZ"}
@@ -1 +1 @@
1
- {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/layout/block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAiCzC;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,KAAc,EACd,OAAoB,EACpB,UAAkB,EAClB,KAAkB;IAElB,MAAM,MAAM,GAAe,OAAO,CAChC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAC3B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,EAChD;QACE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;KACtD,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,CAAC,KAAK,KAAK,CAAC;YACb,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;KACnE,CAAC,CAAC,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"block.js","sourceRoot":"","sources":["../../src/layout/block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAuCzC;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CACxB,KAAc,EACd,OAAoB,EACpB,UAAkB,EAClB,KAAkB;IAElB,MAAM,MAAM,GAAe,OAAO,CAChC,cAAc,CAAC,KAAK,CAAC,IAAI,EAAE,EAC3B,SAAS,CAAC,OAAO,EAAE,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,EAChD;QACE,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC;KACtD,CACF,CAAC;IAEF,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;QACxC,IAAI;QACJ,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,CAAC,KAAK,KAAK,CAAC;YACb,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;KACnE,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/layout/draw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9C,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAWD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,UAAU,GAChB,MAAM,CAuBR"}
1
+ {"version":3,"file":"draw.d.ts","sourceRoot":"","sources":["../../src/layout/draw.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9C,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,GAAG,QAAQ,GAAG,KAAK,CAAC;IAC7C,yEAAyE;IACzE,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC;CACxB;AAWD;;;;GAIG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,QAAQ,EAAE,EAC1B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,UAAU,GAChB,MAAM,CA0BR"}
@@ -26,6 +26,9 @@ export function drawLines(lines, area, style) {
26
26
  fill: style.fill,
27
27
  fillOpacity: line.opacity,
28
28
  ...(style.anchor !== undefined && { anchor: style.anchor }),
29
+ ...(line.letterSpacing !== undefined && {
30
+ letterSpacing: line.letterSpacing,
31
+ }),
29
32
  }))
30
33
  .join("");
31
34
  }
@@ -1 +1 @@
1
- {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../src/layout/draw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAexC,4DAA4D;AAC5D,SAAS,OAAO,CAAC,IAAU,EAAE,MAA4B;IACvD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0B,EAC1B,IAAU,EACV,KAAiB;IAEjB,MAAM,MAAM,GAAG,UAAU,CACvB,KAAK,EACL,IAAI,EACJ,KAAK,CAAC,UAAU,IAAI,iBAAiB,EACrC,KAAK,CAAC,KAAK,IAAI,QAAQ,CACxB,CAAC;IACF,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,CAAC;QACD,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;KAC5D,CAAC,CACH;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"draw.js","sourceRoot":"","sources":["../../src/layout/draw.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAexC,4DAA4D;AAC5D,SAAS,OAAO,CAAC,IAAU,EAAE,MAA4B;IACvD,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;IAC7C,CAAC;IAED,OAAO,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,KAA0B,EAC1B,IAAU,EACV,KAAiB;IAEjB,MAAM,MAAM,GAAG,UAAU,CACvB,KAAK,EACL,IAAI,EACJ,KAAK,CAAC,UAAU,IAAI,iBAAiB,EACrC,KAAK,CAAC,KAAK,IAAI,QAAQ,CACxB,CAAC;IACF,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;IAEtC,OAAO,KAAK;SACT,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE;QACrB,CAAC;QACD,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC;QAC7B,UAAU,EAAE,KAAK,CAAC,UAAU;QAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,WAAW,EAAE,IAAI,CAAC,OAAO;QACzB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;QAC3D,GAAG,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS,IAAI;YACtC,aAAa,EAAE,IAAI,CAAC,aAAa;SAClC,CAAC;KACH,CAAC,CACH;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC"}
@@ -39,7 +39,7 @@ export { baselineFor, placeLines } from "./lines.js";
39
39
  export type { PlacedLine } from "./lines.js";
40
40
  export { measureIn } from "./measure.js";
41
41
  export { optionalString, stringList } from "../props.js";
42
- export { clampLine, escapeXml, fillText, fitText, textElement, wrapText, } from "../text/index.js";
42
+ export { clampLine, escapeXml, fillText, fitText, textElement, trackedWidth, trackingFor, wrapText, } from "../text/index.js";
43
43
  export type { FillOptions, FitOptions, FittedText, MeasureAt, MeasureLine, TextAttributes, } from "../text/index.js";
44
44
  export type { Dimensions, MeasureText, MetaImageProps, ResolvedConfig, Template, TemplateContext, TextStyle, } from "../types.js";
45
45
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,QAAQ,EACR,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,YAAY,EAAE,OAAO,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,YAAY,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAC9C,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,YAAY,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,WAAW,EACX,UAAU,EACV,UAAU,EACV,SAAS,EACT,WAAW,EACX,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EACV,UAAU,EACV,WAAW,EACX,cAAc,EACd,cAAc,EACd,QAAQ,EACR,eAAe,EACf,SAAS,GACV,MAAM,aAAa,CAAC"}
@@ -29,5 +29,5 @@ export { drawLines } from "./draw.js";
29
29
  export { baselineFor, placeLines } from "./lines.js";
30
30
  export { measureIn } from "./measure.js";
31
31
  export { optionalString, stringList } from "../props.js";
32
- export { clampLine, escapeXml, fillText, fitText, textElement, wrapText, } from "../text/index.js";
32
+ export { clampLine, escapeXml, fillText, fitText, textElement, trackedWidth, trackingFor, wrapText, } from "../text/index.js";
33
33
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,QAAQ,GACT,MAAM,kBAAkB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/layout/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAE/B,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAErD,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,EACL,SAAS,EACT,SAAS,EACT,QAAQ,EACR,OAAO,EACP,WAAW,EACX,YAAY,EACZ,WAAW,EACX,QAAQ,GACT,MAAM,kBAAkB,CAAC"}
Binary file
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/measure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;;;;;GAQG;AACH,SAAS,OAAO,CACd,KAAsB,EACtB,KAAgB,EAChB,cAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IAEvC,OAAO,CACL,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAC3C,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAChB,IAAY,EACZ,KAAgB,EAChB,KAAsB,EACtB,cAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAEtD,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACrD,GAAG;YACD,GAAG,CAAC,IAAI,KAAK,SAAS;gBACpB,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC;gBACzD,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB;IAEtB,wEAAwE;IACxE,wEAAwE;IACxE,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9B,MAAM,CAAC,SAAS,CACjB,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,OAAO,CAAC,IAAY,EAAE,KAAgB,EAAU,EAAE;QAChD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAClH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/measure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAE9C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIzC;;;;;;;;GAQG;AACH,SAAS,OAAO,CACd,KAAsB,EACtB,KAAgB,EAChB,cAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IAEvC,OAAO,CACL,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,EAAE,MAAM,CAAC;QAC3C,CAAC,cAAc,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CACxC,CAAC;AACJ,CAAC;AAED,gEAAgE;AAChE,SAAS,SAAS,CAChB,IAAY,EACZ,KAAgB,EAChB,KAAsB,EACtB,cAAuB;IAEvB,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;IACvC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC;IAEtD,IAAI,GAAG,GAAG,CAAC,CAAC;IAEZ,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,QAAQ,GACZ,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;QAEnE,GAAG,IAAI,QAAQ,IAAI,aAAa,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,aAAa,CAAC,CAAC;IAC7E,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,MAAsB;IAEtB,wEAAwE;IACxE,wEAAwE;IACxE,gBAAgB;IAChB,MAAM,KAAK,GAAG,MAAM,SAAS,CAC3B,gBAAgB,CAAC,MAAM,CAAC,KAAK,CAAC,EAC9B,MAAM,CAAC,SAAS,CACjB,CAAC;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAExC,OAAO,CAAC,IAAY,EAAE,KAAgB,EAAU,EAAE;QAChD,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,aAAa,IAAI,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;QAClH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAE7B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;YACxB,OAAO,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC;QAChC,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAC9D,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACpB,OAAO,GAAG,GAAG,KAAK,CAAC,QAAQ,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
@@ -7,8 +7,19 @@ export interface TextRun {
7
7
  readonly text: string;
8
8
  readonly face: Face | undefined;
9
9
  }
10
- /** Advance width of `text` in `face`, as a multiple of the font size. */
11
- export declare function emWidth(text: string, face: Face): number;
10
+ /**
11
+ * Advance width of `text` in `face`, as a multiple of the font size, or
12
+ * nothing where the face cannot give one and the width has to be estimated.
13
+ *
14
+ * Shaping the whole string is what accounts for kerning and ligatures, and it
15
+ * is also what can fail: a font file is data, and fontkit reads more of it
16
+ * than an advance needs. JetBrains Mono shapes `--` to a ligature followed by
17
+ * an empty spacer, that spacer is the last glyph in the file, and fontkit
18
+ * reads its bounding box off the end of the outline table and throws. Taking
19
+ * the characters one at a time is the answer when that happens, and it is
20
+ * exact for a monospace face and close for the rest.
21
+ */
22
+ export declare function emWidth(text: string, face: Face): number | undefined;
12
23
  /**
13
24
  * Split `text` into the longest runs that one face can draw. Text a build has
14
25
  * supplied fonts for comes back as a single run, which is the common case.
@@ -1 +1 @@
1
- {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/measure/runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACjC;AAED,yEAAyE;AACzE,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,CAExD;AA0BD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,SAAS,EACzB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,SAAS,OAAO,EAAE,CAepB"}
1
+ {"version":3,"file":"runs.d.ts","sourceRoot":"","sources":["../../src/measure/runs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;GAGG;AACH,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,IAAI,GAAG,SAAS,CAAC;CACjC;AA2BD;;;;;;;;;;;GAWG;AACH,wBAAgB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,SAAS,CAIpE;AA0BD;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,IAAI,GAAG,SAAS,EACzB,KAAK,EAAE,SAAS,IAAI,EAAE,GACrB,SAAS,OAAO,EAAE,CAepB"}
@@ -1,6 +1,41 @@
1
- /** Advance width of `text` in `face`, as a multiple of the font size. */
1
+ /** Advance width of `text` in `face` as the font itself will shape it. */
2
+ function shapedWidth(text, face) {
3
+ try {
4
+ return face.font.layout(text).advanceWidth;
5
+ }
6
+ catch {
7
+ return undefined;
8
+ }
9
+ }
10
+ /** Advance width of `text` in `face` from the characters taken one by one. */
11
+ function glyphWidth(text, face) {
12
+ let units = 0;
13
+ try {
14
+ for (const character of text) {
15
+ const point = character.codePointAt(0) ?? 0;
16
+ units += face.font.glyphForCodePoint(point).advanceWidth;
17
+ }
18
+ }
19
+ catch {
20
+ return undefined;
21
+ }
22
+ return units;
23
+ }
24
+ /**
25
+ * Advance width of `text` in `face`, as a multiple of the font size, or
26
+ * nothing where the face cannot give one and the width has to be estimated.
27
+ *
28
+ * Shaping the whole string is what accounts for kerning and ligatures, and it
29
+ * is also what can fail: a font file is data, and fontkit reads more of it
30
+ * than an advance needs. JetBrains Mono shapes `--` to a ligature followed by
31
+ * an empty spacer, that spacer is the last glyph in the file, and fontkit
32
+ * reads its bounding box off the end of the outline table and throws. Taking
33
+ * the characters one at a time is the answer when that happens, and it is
34
+ * exact for a monospace face and close for the rest.
35
+ */
2
36
  export function emWidth(text, face) {
3
- return face.font.layout(text).advanceWidth / face.font.unitsPerEm;
37
+ const units = shapedWidth(text, face) ?? glyphWidth(text, face);
38
+ return units === undefined ? undefined : units / face.font.unitsPerEm;
4
39
  }
5
40
  /**
6
41
  * The face that will draw one character: the one the style resolved to, or the
@@ -1 +1 @@
1
- {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/measure/runs.ts"],"names":[],"mappings":"AAWA,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAU;IAC9C,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACpE,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,SAAiB,EACjB,OAAyB,EACzB,KAAsB;IAEtB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,OAAyB,EACzB,KAAsB;IAEtB,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"runs.js","sourceRoot":"","sources":["../../src/measure/runs.ts"],"names":[],"mappings":"AAWA,0EAA0E;AAC1E,SAAS,WAAW,CAAC,IAAY,EAAE,IAAU;IAC3C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,SAAS,UAAU,CAAC,IAAY,EAAE,IAAU;IAC1C,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,IAAI,CAAC;QACH,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC5C,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC;QAC3D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,OAAO,CAAC,IAAY,EAAE,IAAU;IAC9C,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAEhE,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,SAAS,YAAY,CACnB,SAAiB,EACjB,OAAyB,EACzB,KAAsB;IAEtB,MAAM,KAAK,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IAEvC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,IAAI,OAAO,EAAE,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;QACvD,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,CAAC;AACrE,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,IAAY,EACZ,OAAyB,EACzB,KAAsB;IAEtB,MAAM,IAAI,GAAc,EAAE,CAAC;IAE3B,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;QACrD,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QAEzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;YAC7C,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvC,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,GAAG,SAAS,EAAE,IAAI,EAAE,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,25 @@
1
+ import type { MeasureText } from "../../types.js";
2
+ /** How wide a piece of the snippet is, as a multiple of the font size. */
3
+ export type Advance = (text: string) => number;
4
+ /**
5
+ * Measure text in the face the snippet is drawn in.
6
+ *
7
+ * The template used to place each token at its character index times a fixed
8
+ * cell, which is right only where every character is one cell wide. A hanzi is
9
+ * a full em in a cell sized for six tenths of one, so a token after one was
10
+ * drawn some 40% of a cell too far left for every full-width character before
11
+ * it, and the tokens overlapped. Measuring the text instead asks the face what
12
+ * it is going to draw, which is the same question the measurer already answers
13
+ * for every other template.
14
+ */
15
+ export declare function codeAdvance(measure: MeasureText, fontFamily: string): Advance;
16
+ /**
17
+ * Width of one cell of the monospace grid.
18
+ *
19
+ * Some of the layout really is a grid of cells rather than a run of text: the
20
+ * line numbers are digits in a monospace face, and the gap between them and
21
+ * the code is a count of spaces. Measuring a digit is enough for those, since
22
+ * whichever character is measured the advance is the same.
23
+ */
24
+ export declare function cellWidth(advance: Advance): number;
25
+ //# sourceMappingURL=advance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.d.ts","sourceRoot":"","sources":["../../../src/templates/code/advance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAalD,0EAA0E;AAC1E,MAAM,MAAM,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;AAE/C;;;;;;;;;;GAUG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAG7E;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAElD"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Advance width to assume when the monospace stack names no font the build
3
+ * loaded. `0.6` suits most monospace faces, including Source Code Pro, Menlo
4
+ * and DejaVu Sans Mono; Consolas is nearer `0.55`.
5
+ *
6
+ * This used to be `config.code.charWidthRatio`, a number every project had to
7
+ * work out for itself and keep in step with its font. It is a fallback now:
8
+ * supply the face as a file and the real advance is read from it.
9
+ */
10
+ const fallbackRatio = 0.6;
11
+ /**
12
+ * Measure text in the face the snippet is drawn in.
13
+ *
14
+ * The template used to place each token at its character index times a fixed
15
+ * cell, which is right only where every character is one cell wide. A hanzi is
16
+ * a full em in a cell sized for six tenths of one, so a token after one was
17
+ * drawn some 40% of a cell too far left for every full-width character before
18
+ * it, and the tokens overlapped. Measuring the text instead asks the face what
19
+ * it is going to draw, which is the same question the measurer already answers
20
+ * for every other template.
21
+ */
22
+ export function codeAdvance(measure, fontFamily) {
23
+ return (text) => measure(text, { fontFamily, fontSize: 1, fontWeight: 400, fallbackRatio });
24
+ }
25
+ /**
26
+ * Width of one cell of the monospace grid.
27
+ *
28
+ * Some of the layout really is a grid of cells rather than a run of text: the
29
+ * line numbers are digits in a monospace face, and the gap between them and
30
+ * the code is a count of spaces. Measuring a digit is enough for those, since
31
+ * whichever character is measured the advance is the same.
32
+ */
33
+ export function cellWidth(advance) {
34
+ return advance("0");
35
+ }
36
+ //# sourceMappingURL=advance.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advance.js","sourceRoot":"","sources":["../../../src/templates/code/advance.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,GAAG,CAAC;AAK1B;;;;;;;;;;GAUG;AACH,MAAM,UAAU,WAAW,CAAC,OAAoB,EAAE,UAAkB;IAClE,OAAO,CAAC,IAAY,EAAU,EAAE,CAC9B,OAAO,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC;AAC/E,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC"}
@@ -1,17 +1,18 @@
1
1
  import type { CodeToken } from "../../highlight/index.js";
2
+ import type { Advance } from "./advance.js";
2
3
  /**
3
- * Clip a line to the columns that fit, ending it with an ellipsis. The font
4
+ * Clip a line to the width that fits, ending it with an ellipsis. The font
4
5
  * size is floored for legibility, so a wide enough snippet can still overrun
5
6
  * the panel, and clipping keeps it inside instead of bleeding off the image.
6
7
  *
7
8
  * Returns the line unchanged when it already fits, so the caller can count the
8
9
  * clipped lines by identity.
9
10
  */
10
- export declare function clipLine(tokens: readonly CodeToken[], maxColumns: number): readonly CodeToken[];
11
+ export declare function clipLine(tokens: readonly CodeToken[], maxWidth: number, advance: Advance): readonly CodeToken[];
11
12
  /**
12
13
  * Clip every line to the panel width, and count how many had to give ground.
13
14
  */
14
- export declare function clipLines(lines: readonly (readonly CodeToken[])[], maxColumns: number): {
15
+ export declare function clipLines(lines: readonly (readonly CodeToken[])[], maxWidth: number, advance: Advance): {
15
16
  lines: readonly (readonly CodeToken[])[];
16
17
  clipped: number;
17
18
  };
@@ -1 +1 @@
1
- {"version":3,"file":"clip.d.ts","sourceRoot":"","sources":["../../../src/templates/code/clip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAG1D;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,UAAU,EAAE,MAAM,GACjB,SAAS,SAAS,EAAE,CA0BtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,EACxC,UAAU,EAAE,MAAM,GACjB;IAAE,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAc/D"}
1
+ {"version":3,"file":"clip.d.ts","sourceRoot":"","sources":["../../../src/templates/code/clip.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAI5C;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,MAAM,EAAE,SAAS,SAAS,EAAE,EAC5B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf,SAAS,SAAS,EAAE,CA+BtB;AAED;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,EACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GACf;IAAE,KAAK,EAAE,SAAS,CAAC,SAAS,SAAS,EAAE,CAAC,EAAE,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAc/D"}
@@ -1,28 +1,35 @@
1
1
  import { ellipsis } from "../../text/ellipsis.js";
2
+ import { placeTokens } from "./extent.js";
3
+ import { truncate } from "./truncate.js";
2
4
  /**
3
- * Clip a line to the columns that fit, ending it with an ellipsis. The font
5
+ * Clip a line to the width that fits, ending it with an ellipsis. The font
4
6
  * size is floored for legibility, so a wide enough snippet can still overrun
5
7
  * the panel, and clipping keeps it inside instead of bleeding off the image.
6
8
  *
7
9
  * Returns the line unchanged when it already fits, so the caller can count the
8
10
  * clipped lines by identity.
9
11
  */
10
- export function clipLine(tokens, maxColumns) {
11
- const last = tokens.at(-1);
12
- if (last === undefined || last.column + last.text.length <= maxColumns) {
12
+ export function clipLine(tokens, maxWidth, advance) {
13
+ const placed = placeTokens(tokens, advance);
14
+ const last = placed.at(-1);
15
+ if (last === undefined || last.x + advance(last.token.text) <= maxWidth) {
13
16
  return tokens;
14
17
  }
15
18
  const clipped = [];
16
- for (const token of tokens) {
17
- if (token.column >= maxColumns) {
19
+ const mark = advance(ellipsis);
20
+ for (const { token, x } of placed) {
21
+ const room = maxWidth - x;
22
+ // Not even room for the marker, so there is nothing worth drawing here:
23
+ // whatever it were cut to would be the ellipsis on its own, overhanging
24
+ // the width the rest of the line was held to.
25
+ if (room < mark) {
18
26
  break;
19
27
  }
20
- const room = maxColumns - token.column;
21
- if (token.text.length <= room) {
28
+ if (advance(token.text) <= room) {
22
29
  clipped.push(token);
23
30
  continue;
24
31
  }
25
- clipped.push({ ...token, text: token.text.slice(0, room - 1) + ellipsis });
32
+ clipped.push({ ...token, text: truncate(token.text, room, advance) });
26
33
  break;
27
34
  }
28
35
  return clipped;
@@ -30,10 +37,10 @@ export function clipLine(tokens, maxColumns) {
30
37
  /**
31
38
  * Clip every line to the panel width, and count how many had to give ground.
32
39
  */
33
- export function clipLines(lines, maxColumns) {
40
+ export function clipLines(lines, maxWidth, advance) {
34
41
  let clipped = 0;
35
42
  const fitted = lines.map((tokens) => {
36
- const line = clipLine(tokens, maxColumns);
43
+ const line = clipLine(tokens, maxWidth, advance);
37
44
  if (line !== tokens) {
38
45
  clipped += 1;
39
46
  }
@@ -1 +1 @@
1
- {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../src/templates/code/clip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,MAA4B,EAC5B,UAAkB;IAElB,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;QACvE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAEhC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;YAC/B,MAAM;QACR,CAAC;QAED,MAAM,IAAI,GAAG,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;QAEvC,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,EAAE,CAAC;YAC9B,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,QAAQ,EAAE,CAAC,CAAC;QAC3E,MAAM;IACR,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,KAAwC,EACxC,UAAkB;IAElB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAE1C,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"clip.js","sourceRoot":"","sources":["../../../src/templates/code/clip.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,MAA4B,EAC5B,QAAgB,EAChB,OAAgB;IAEhB,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAE3B,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;QACxE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,OAAO,GAAgB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE/B,KAAK,MAAM,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,QAAQ,GAAG,CAAC,CAAC;QAE1B,wEAAwE;QACxE,wEAAwE;QACxE,8CAA8C;QAC9C,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;YAChB,MAAM;QACR,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,SAAS;QACX,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;QACtE,MAAM;IACR,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CACvB,KAAwC,EACxC,QAAgB,EAChB,OAAgB;IAEhB,IAAI,OAAO,GAAG,CAAC,CAAC;IAEhB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE;QAClC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QAEjD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,IAAI,CAAC,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;AACpC,CAAC"}