modern-text 0.2.19 → 0.2.21

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/dist/index.cjs CHANGED
@@ -68,7 +68,7 @@ function drawPath(options) {
68
68
  shadowColor: options.shadowColor
69
69
  };
70
70
  if (clipRect) {
71
- ctx.rect(clipRect.x, clipRect.y, clipRect.width, clipRect.height);
71
+ ctx.rect(clipRect.left, clipRect.top, clipRect.width, clipRect.height);
72
72
  ctx.clip();
73
73
  ctx.beginPath();
74
74
  }
@@ -188,8 +188,8 @@ class Character {
188
188
  return this;
189
189
  }
190
190
  const { unitsPerEm, ascender, descender, os2, post } = font;
191
- const { content, computedStyle, boundingBox, isVertical } = this;
192
- const { left, top, height } = boundingBox;
191
+ const { content, computedStyle, boundingBox } = this;
192
+ const { height } = boundingBox;
193
193
  const { fontSize } = computedStyle;
194
194
  const rate = unitsPerEm / fontSize;
195
195
  const glyphWidth = font.getAdvanceWidth(content, fontSize);
@@ -207,8 +207,6 @@ class Character {
207
207
  this.yStrikeoutSize = yStrikeoutSize;
208
208
  this.baseline = baseline;
209
209
  this.centerDiviation = 0.5 * height - baseline;
210
- this.glyphBox = isVertical ? new modernPath2d.BoundingBox(left, top, glyphHeight, glyphWidth) : new modernPath2d.BoundingBox(left, top, glyphWidth, glyphHeight);
211
- this.centerPoint = this.glyphBox.getCenterPoint();
212
210
  return this;
213
211
  }
214
212
  updatePath() {
@@ -290,6 +288,8 @@ class Character {
290
288
  strokeWidth: computedStyle.textStrokeWidth ? computedStyle.textStrokeWidth * fontSize * 0.03 : 0
291
289
  };
292
290
  this.path = path;
291
+ this.glyphBox = this.getGlyphBoundingBox();
292
+ this.center = this.glyphBox.getCenterPoint();
293
293
  return this;
294
294
  }
295
295
  update() {
@@ -378,11 +378,11 @@ class Character {
378
378
  return cmd;
379
379
  });
380
380
  }
381
- getMinMax(min, max) {
381
+ getGlyphMinMax(min, max) {
382
382
  return this.path.getMinMax(min, max);
383
383
  }
384
- getBoundingBox() {
385
- return this.path.getBoundingBox();
384
+ getGlyphBoundingBox(withStyle) {
385
+ return this.path.getBoundingBox(withStyle);
386
386
  }
387
387
  drawTo(ctx, config = {}) {
388
388
  drawPath({
@@ -502,7 +502,7 @@ class Effector extends Feature {
502
502
  const boxes = [];
503
503
  characters.forEach((character) => {
504
504
  effects?.forEach((style) => {
505
- const aabb = character.boundingBox.clone();
505
+ const aabb = character.glyphBox.clone();
506
506
  const m = this.getTransform2D(style);
507
507
  tempV1.set(aabb.left, aabb.top);
508
508
  tempV1.applyMatrix3(m);
@@ -549,12 +549,31 @@ var __publicField$1 = (obj, key, value) => {
549
549
  __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value);
550
550
  return value;
551
551
  };
552
- class Highlighter extends Feature {
552
+ const defaultHighlightRefer = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgdmlld0JveD0iMCAwIDcyIDcyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMyLjQwMjkgMjhIMzUuMTU5NFYzMy4xNzcxQzM1Ljk4MjEgMzIuMzExNSAzNi45NzEgMzEuODczNyAzOC4wOTQ4IDMxLjg3MzdDMzkuNjY3NiAzMS44NzM3IDQwLjkxNjYgMzIuNDI5NSA0MS44MzkgMzMuNTQzN0w0MS44NDAzIDMzLjU0NTNDNDIuNjcxNyAzNC41NzA1IDQzLjA5MTUgMzUuODU1OSA0My4wOTE1IDM3LjM4NzdDNDMuMDkxNSAzOC45NzYxIDQyLjY3MjkgNDAuMzAyOCA0MS44MTgzIDQxLjMzMDRMNDEuODE3MSA0MS4zMzE4QzQwLjg3MzEgNDIuNDQ2MSAzOS41ODMyIDQzIDM3Ljk3MjEgNDNDMzYuNzQ3NyA0MyAzNS43NDg4IDQyLjY1OTkgMzQuOTk1OCA0MS45NjkzVjQyLjcyNDdIMzIuNDAyOVYyOFpNMzcuNTQyOCAzNC4wOTI0QzM2Ljg1NDkgMzQuMDkyNCAzNi4zMDE0IDM0LjM1NjEgMzUuODQ4NyAzNC45MDA0TDM1Ljg0NTIgMzQuOTA0NkMzNS4zMzU4IDM1LjQ4NTMgMzUuMDc3NiAzNi4yOTc2IDM1LjA3NzYgMzcuMzQ4NFYzNy41MDU3QzM1LjA3NzYgMzguNDY0IDM1LjI3NzIgMzkuMjQ0MyAzNS42OTQzIDM5LjgyNzlDMzYuMTQ0MSA0MC40NTg3IDM2Ljc3MjYgNDAuNzgxMyAzNy42MjQ1IDQwLjc4MTNDMzguNTg3NCA0MC43ODEzIDM5LjI3MDcgNDAuNDUyNyAzOS43MTUyIDM5LjgxMjdDNDAuMDcyOCAzOS4yNjg0IDQwLjI3MzcgMzguNDY3MyA0MC4yNzM3IDM3LjM4NzdDNDAuMjczNyAzNi4zMTA1IDQwLjA1MzMgMzUuNTMxMyAzOS42NzgzIDM1LjAwNzdDMzkuMjM3MSAzNC40MDcxIDM4LjUzNDIgMzQuMDkyNCAzNy41NDI4IDM0LjA5MjRaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZD0iTTQ5Ljg2MTQgMzEuODczN0M0OC4xNTM1IDMxLjg3MzcgNDYuODAxNiAzMi40MjM5IDQ1LjgzNDggMzMuNTM5MkM0NC45MzcgMzQuNTQ3MiA0NC40OTY2IDM1Ljg1NiA0NC40OTY2IDM3LjQyN0M0NC40OTY2IDM5LjAzNjggNDQuOTM2NyA0MC4zNjU5IDQ1Ljg1NTkgNDEuMzk0M0M0Ni44MDMxIDQyLjQ3MDYgNDguMTM0OCA0MyA0OS44MjA1IDQzQzUxLjIyNiA0MyA1Mi4zODI2IDQyLjY1NjMgNTMuMjQ3OSA0MS45Njk3QzU0LjEzNTkgNDEuMjYxNCA1NC43MDYxIDQwLjE4ODcgNTQuOTU3MyAzOC43NzkxTDU1IDM4LjUzOTdINTIuMjQ4NEw1Mi4yMjU5IDM4LjcyMDFDNTIuMTM3OSAzOS40MjUxIDUxLjg5MjUgMzkuOTI3OCA1MS41MTA5IDQwLjI1NThDNTEuMTI5NSA0MC41ODM1IDUwLjU4MzEgNDAuNzYxNiA0OS44NDA5IDQwLjc2MTZDNDkuMDAwMSA0MC43NjE2IDQ4LjM5NDkgNDAuNDcxNSA0Ny45OTA3IDM5LjkyMzdMNDcuOTg3NCAzOS45MTk0QzQ3LjUzNTYgMzkuMzQwMSA0Ny4zMTQ0IDM4LjUwNjIgNDcuMzE0NCAzNy40MDc0QzQ3LjMxNDQgMzYuMzMyMiA0Ny41NTQ0IDM1LjUxNzcgNDguMDA1OCAzNC45NTY4TDQ4LjAwNzggMzQuOTU0M0M0OC40NTM3IDM0LjM4MjUgNDkuMDYxOCAzNC4xMTIxIDQ5Ljg2MTQgMzQuMTEyMUM1MC41MjMgMzQuMTEyMSA1MS4wNDUxIDM0LjI2MTUgNTEuNDI3MiAzNC41NDA3QzUxLjc4ODQgMzQuODE5NCA1Mi4wNTMgMzUuMjQ0NyA1Mi4xODgxIDM1Ljg1NzFMNTIuMjIzOSAzNi4wMTk0SDU0Ljk1NDhMNTQuOTE3IDM1Ljc4MzVDNTQuNzA2MyAzNC40NjYgNTQuMTUzNiAzMy40NzAxIDUzLjI2MzQgMzIuODAxOUw1My4yNjAyIDMyLjc5OTVDNTIuMzk1MSAzMi4xNzU1IDUxLjI2MjEgMzEuODczNyA0OS44NjE0IDMxLjg3MzdaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS43NTYxIDI4LjI3NTNIMjIuNzQ0TDE3IDQyLjcyNDdIMjAuMDE0MUwyMS4zNDI5IDM5LjIwNDlIMjcuMTU3MkwyOC40ODYgNDIuNzI0N0gzMS41MDAxTDI1Ljc1NjEgMjguMjc1M1pNMjIuMjEyNSAzNi45MDc2TDI0LjI1OTYgMzEuNDUzOUwyNi4yODg1IDM2LjkwNzZIMjIuMjEyNVoiIGZpbGw9IiMyMjI1MjkiLz48L3N2Zz4=";
553
+ const _Highlighter = class _Highlighter extends Feature {
553
554
  constructor() {
554
555
  super(...arguments);
555
556
  __publicField$1(this, "paths", []);
556
557
  }
558
+ static get refer() {
559
+ return this._refer;
560
+ }
561
+ static set refer(refer) {
562
+ this._refer = refer;
563
+ this.parsedRefer = modernPath2d.parseSvg(refer);
564
+ }
565
+ getReferBoundingBox() {
566
+ const max = modernPath2d.Vector2.MIN;
567
+ const min = modernPath2d.Vector2.MAX;
568
+ _Highlighter.parsedRefer.forEach((path) => {
569
+ path.getMinMax(min, max);
570
+ });
571
+ return new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y);
572
+ }
557
573
  getBoundingBox() {
574
+ if (!this.paths.length) {
575
+ return void 0;
576
+ }
558
577
  const min = modernPath2d.Vector2.MAX;
559
578
  const max = modernPath2d.Vector2.MIN;
560
579
  this.paths.forEach((v) => v.path.getMinMax(min, max));
@@ -568,7 +587,7 @@ class Highlighter extends Feature {
568
587
  characters.forEach((character) => {
569
588
  const highlight = character.parent.highlight;
570
589
  if (highlight?.url) {
571
- if (prevHighlight?.url === highlight.url && (group.length && group[0].boundingBox.top === character.boundingBox.top && group[0].fontSize === character.fontSize)) {
590
+ if (prevHighlight?.url === highlight.url && prevHighlight?.strokeWidth === highlight.strokeWidth && prevHighlight?.repeatXByFontsize === highlight.repeatXByFontsize && prevHighlight?.overflowXHidden === highlight.overflowXHidden && group.length && group[0].boundingBox.top === character.boundingBox.top && group[0].fontSize === character.fontSize) {
572
591
  group.push(character);
573
592
  } else {
574
593
  group = [];
@@ -580,8 +599,8 @@ class Highlighter extends Feature {
580
599
  });
581
600
  this.paths = groups.filter((characters2) => characters2.length).map((characters2) => {
582
601
  return {
583
- url: characters2[0].parent.highlight.url,
584
- box: modernPath2d.BoundingBox.from(...characters2.map((c) => c.boundingBox)),
602
+ highlight: characters2[0].parent.highlight,
603
+ box: modernPath2d.BoundingBox.from(...characters2.map((c) => c.glyphBox)),
585
604
  baseline: Math.max(...characters2.map((c) => c.baseline)),
586
605
  fontSize: characters2[0].fontSize
587
606
  };
@@ -595,60 +614,57 @@ class Highlighter extends Feature {
595
614
  paths.forEach((path) => path.getMinMax(min, max));
596
615
  return {
597
616
  paths,
598
- box: new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y),
599
- viewBox: new modernPath2d.BoundingBox(...svg.getAttribute("viewBox").split(" ").map(Number))
617
+ box: new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y)
600
618
  };
601
619
  }
602
620
  _parseGroup(group) {
603
- const { url, box: groupBox, baseline, fontSize } = group;
604
- const { box, viewBox, paths } = this._parseSvg(url);
605
- const centerY = viewBox.top + viewBox.height / 2;
621
+ const { highlight, box: groupBox, fontSize } = group;
622
+ const {
623
+ strokeWidth = 1,
624
+ repeatXByFontsize = 0,
625
+ overflowXHidden = Boolean(repeatXByFontsize)
626
+ } = highlight;
627
+ const { box, paths } = this._parseSvg(highlight.url);
606
628
  const result = [];
607
- const type = centerY > box.top ? 0 : 1;
608
- function transformPathStyle(path, scale) {
609
- if (path.style.strokeWidth) {
610
- path.style.strokeWidth *= scale;
611
- }
612
- if (path.style.strokeMiterlimit) {
613
- path.style.strokeMiterlimit *= scale;
614
- }
615
- if (path.style.strokeDashoffset) {
616
- path.style.strokeDashoffset *= scale;
617
- }
618
- if (path.style.strokeDasharray) {
619
- path.style.strokeDasharray = path.style.strokeDasharray.map((v) => v * scale);
620
- }
621
- }
622
- if (type === 0) {
623
- const offset = {
624
- x: groupBox.left - fontSize * 0.2,
625
- y: groupBox.top
626
- };
627
- const scaleX = (groupBox.width + fontSize * 0.2 * 2) / box.width;
628
- const scaleY = groupBox.height / box.height;
629
- const m = new modernPath2d.Matrix3().translate(-box.x, -box.y).scale(scaleX, scaleY).translate(offset.x, offset.y);
629
+ const referBoundingBox = this.getReferBoundingBox();
630
+ const scale = {
631
+ x: repeatXByFontsize ? fontSize * repeatXByFontsize * (box.width / referBoundingBox.width) / box.width : groupBox.width * (box.width / referBoundingBox.width) / box.width,
632
+ y: groupBox.height * (box.height / referBoundingBox.height) / box.height
633
+ };
634
+ const styleScale = fontSize / box.width * 2;
635
+ const unitWidth = box.width * scale.x;
636
+ const total = Math.ceil(groupBox.width / unitWidth);
637
+ const offset = {
638
+ x: (box.left - referBoundingBox.left) * scale.x,
639
+ y: (box.top - referBoundingBox.top) * scale.y
640
+ };
641
+ const transform = new modernPath2d.Matrix3().translate(-box.left, -box.top).scale(scale.x, scale.y).translate(groupBox.left, groupBox.top).translate(offset.x, offset.y);
642
+ for (let i = 0; i < total; i++) {
643
+ const _transform = transform.clone().translate(i * unitWidth, 0);
630
644
  paths.forEach((original) => {
631
- const path = original.clone().transform(m);
632
- transformPathStyle(path, scaleX);
633
- result.push({ path });
634
- });
635
- } else if (type === 1) {
636
- const scale = fontSize / box.width;
637
- const width = box.width * scale;
638
- const length = Math.ceil(groupBox.width / width);
639
- const offset = {
640
- x: groupBox.left,
641
- y: groupBox.top + baseline + fontSize * 0.1
642
- };
643
- const m = new modernPath2d.Matrix3().translate(-box.x, -box.y).scale(scale, scale).translate(offset.x, offset.y);
644
- for (let i = 0; i < length; i++) {
645
- const _m = m.clone().translate(i * width, 0);
646
- paths.forEach((original) => {
647
- const path = original.clone().transform(_m);
648
- transformPathStyle(path, scale);
649
- result.push({ clipRect: groupBox, path });
645
+ const path = original.clone().transform(_transform);
646
+ if (path.style.strokeWidth) {
647
+ path.style.strokeWidth *= styleScale * strokeWidth;
648
+ }
649
+ if (path.style.strokeMiterlimit) {
650
+ path.style.strokeMiterlimit *= styleScale;
651
+ }
652
+ if (path.style.strokeDashoffset) {
653
+ path.style.strokeDashoffset *= styleScale;
654
+ }
655
+ if (path.style.strokeDasharray) {
656
+ path.style.strokeDasharray = path.style.strokeDasharray.map((v) => v * styleScale);
657
+ }
658
+ result.push({
659
+ clipRect: overflowXHidden ? new modernPath2d.BoundingBox(
660
+ groupBox.left + offset.x * 2,
661
+ groupBox.top - groupBox.height,
662
+ groupBox.width - offset.x * 2,
663
+ groupBox.height * 3
664
+ ) : void 0,
665
+ path
650
666
  });
651
- }
667
+ });
652
668
  }
653
669
  return result;
654
670
  }
@@ -663,7 +679,10 @@ class Highlighter extends Feature {
663
679
  });
664
680
  return this;
665
681
  }
666
- }
682
+ };
683
+ __publicField$1(_Highlighter, "_refer", defaultHighlightRefer);
684
+ __publicField$1(_Highlighter, "parsedRefer", modernPath2d.parseSvg(_Highlighter._refer));
685
+ let Highlighter = _Highlighter;
667
686
 
668
687
  class Measurer extends Feature {
669
688
  _styleToDomStyle(style) {
@@ -1074,13 +1093,13 @@ class Text {
1074
1093
  this.boundingBox = boundingBox;
1075
1094
  const characters = this.characters;
1076
1095
  characters.forEach((c) => c.update());
1077
- this.highlighter.highlight();
1078
1096
  if (this.deformation) {
1079
1097
  this.deformer.deform();
1080
1098
  }
1099
+ this.highlighter.highlight();
1081
1100
  const min = modernPath2d.Vector2.MAX;
1082
1101
  const max = modernPath2d.Vector2.MIN;
1083
- characters.forEach((c) => c.getMinMax(min, max));
1102
+ characters.forEach((c) => c.getGlyphMinMax(min, max));
1084
1103
  this.renderBoundingBox = new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y);
1085
1104
  return this;
1086
1105
  }
@@ -1094,16 +1113,16 @@ class Text {
1094
1113
  this.update();
1095
1114
  }
1096
1115
  if (this.effects?.length) {
1097
- this.renderBoundingBox = modernPath2d.BoundingBox.from(
1116
+ this.renderBoundingBox = modernPath2d.BoundingBox.from(...[
1098
1117
  this.renderBoundingBox,
1099
1118
  this.effector.getBoundingBox(),
1100
1119
  this.highlighter.getBoundingBox()
1101
- );
1120
+ ].filter(Boolean));
1102
1121
  } else {
1103
- this.renderBoundingBox = modernPath2d.BoundingBox.from(
1122
+ this.renderBoundingBox = modernPath2d.BoundingBox.from(...[
1104
1123
  this.renderBoundingBox,
1105
1124
  this.highlighter.getBoundingBox()
1106
- );
1125
+ ].filter(Boolean));
1107
1126
  }
1108
1127
  this.renderer2D.setupView({ pixelRatio, ctx });
1109
1128
  this.renderer2D.uploadColors({ ctx });
@@ -1128,6 +1147,7 @@ exports.Parser = Parser;
1128
1147
  exports.Reflector = Reflector;
1129
1148
  exports.Renderer2D = Renderer2D;
1130
1149
  exports.Text = Text;
1150
+ exports.defaultHighlightRefer = defaultHighlightRefer;
1131
1151
  exports.defaultTextStyles = defaultTextStyles;
1132
1152
  exports.drawPath = drawPath;
1133
1153
  exports.filterEmpty = filterEmpty;
package/dist/index.d.cts CHANGED
@@ -57,6 +57,9 @@ type TextEffect = Partial<TextDrawStyle & {
57
57
  type TextDeformation = () => void;
58
58
  interface FragmentHighlight {
59
59
  url: string;
60
+ strokeWidth?: number;
61
+ repeatXByFontsize?: number;
62
+ overflowXHidden?: boolean;
60
63
  }
61
64
 
62
65
  declare function parseColor(ctx: CanvasRenderingContext2D, source: string | CanvasGradient | CanvasPattern, box: BoundingBox): string | CanvasGradient | CanvasPattern;
@@ -111,7 +114,7 @@ declare class Character {
111
114
  baseline: number;
112
115
  centerDiviation: number;
113
116
  glyphBox: BoundingBox;
114
- centerPoint: VectorLike;
117
+ center: VectorLike;
115
118
  get computedStyle(): TextStyle;
116
119
  get isVertical(): boolean;
117
120
  get fontSize(): number;
@@ -124,11 +127,11 @@ declare class Character {
124
127
  protected _italic(commands: GlyphPathCommand[], startPoint?: VectorLike): GlyphPathCommand[];
125
128
  protected _rotation90(commands: GlyphPathCommand[], point: VectorLike): GlyphPathCommand[];
126
129
  protected _transform(commands: GlyphPathCommand[], cb: (x: number, y: number) => number[]): GlyphPathCommand[];
127
- getMinMax(min?: Vector2, max?: Vector2): {
130
+ getGlyphMinMax(min?: Vector2, max?: Vector2): {
128
131
  min: Vector2;
129
132
  max: Vector2;
130
133
  };
131
- getBoundingBox(): BoundingBox;
134
+ getGlyphBoundingBox(withStyle?: boolean): BoundingBox;
132
135
  drawTo(ctx: CanvasRenderingContext2D, config?: Partial<TextEffect>): void;
133
136
  }
134
137
 
@@ -223,22 +226,27 @@ declare class Effector extends Feature {
223
226
  }
224
227
 
225
228
  interface HighlightGroup {
226
- url: string;
229
+ highlight: FragmentHighlight;
227
230
  box: BoundingBox;
228
231
  baseline: number;
229
232
  fontSize: number;
230
233
  }
234
+ declare const defaultHighlightRefer = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgdmlld0JveD0iMCAwIDcyIDcyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMyLjQwMjkgMjhIMzUuMTU5NFYzMy4xNzcxQzM1Ljk4MjEgMzIuMzExNSAzNi45NzEgMzEuODczNyAzOC4wOTQ4IDMxLjg3MzdDMzkuNjY3NiAzMS44NzM3IDQwLjkxNjYgMzIuNDI5NSA0MS44MzkgMzMuNTQzN0w0MS44NDAzIDMzLjU0NTNDNDIuNjcxNyAzNC41NzA1IDQzLjA5MTUgMzUuODU1OSA0My4wOTE1IDM3LjM4NzdDNDMuMDkxNSAzOC45NzYxIDQyLjY3MjkgNDAuMzAyOCA0MS44MTgzIDQxLjMzMDRMNDEuODE3MSA0MS4zMzE4QzQwLjg3MzEgNDIuNDQ2MSAzOS41ODMyIDQzIDM3Ljk3MjEgNDNDMzYuNzQ3NyA0MyAzNS43NDg4IDQyLjY1OTkgMzQuOTk1OCA0MS45NjkzVjQyLjcyNDdIMzIuNDAyOVYyOFpNMzcuNTQyOCAzNC4wOTI0QzM2Ljg1NDkgMzQuMDkyNCAzNi4zMDE0IDM0LjM1NjEgMzUuODQ4NyAzNC45MDA0TDM1Ljg0NTIgMzQuOTA0NkMzNS4zMzU4IDM1LjQ4NTMgMzUuMDc3NiAzNi4yOTc2IDM1LjA3NzYgMzcuMzQ4NFYzNy41MDU3QzM1LjA3NzYgMzguNDY0IDM1LjI3NzIgMzkuMjQ0MyAzNS42OTQzIDM5LjgyNzlDMzYuMTQ0MSA0MC40NTg3IDM2Ljc3MjYgNDAuNzgxMyAzNy42MjQ1IDQwLjc4MTNDMzguNTg3NCA0MC43ODEzIDM5LjI3MDcgNDAuNDUyNyAzOS43MTUyIDM5LjgxMjdDNDAuMDcyOCAzOS4yNjg0IDQwLjI3MzcgMzguNDY3MyA0MC4yNzM3IDM3LjM4NzdDNDAuMjczNyAzNi4zMTA1IDQwLjA1MzMgMzUuNTMxMyAzOS42NzgzIDM1LjAwNzdDMzkuMjM3MSAzNC40MDcxIDM4LjUzNDIgMzQuMDkyNCAzNy41NDI4IDM0LjA5MjRaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZD0iTTQ5Ljg2MTQgMzEuODczN0M0OC4xNTM1IDMxLjg3MzcgNDYuODAxNiAzMi40MjM5IDQ1LjgzNDggMzMuNTM5MkM0NC45MzcgMzQuNTQ3MiA0NC40OTY2IDM1Ljg1NiA0NC40OTY2IDM3LjQyN0M0NC40OTY2IDM5LjAzNjggNDQuOTM2NyA0MC4zNjU5IDQ1Ljg1NTkgNDEuMzk0M0M0Ni44MDMxIDQyLjQ3MDYgNDguMTM0OCA0MyA0OS44MjA1IDQzQzUxLjIyNiA0MyA1Mi4zODI2IDQyLjY1NjMgNTMuMjQ3OSA0MS45Njk3QzU0LjEzNTkgNDEuMjYxNCA1NC43MDYxIDQwLjE4ODcgNTQuOTU3MyAzOC43NzkxTDU1IDM4LjUzOTdINTIuMjQ4NEw1Mi4yMjU5IDM4LjcyMDFDNTIuMTM3OSAzOS40MjUxIDUxLjg5MjUgMzkuOTI3OCA1MS41MTA5IDQwLjI1NThDNTEuMTI5NSA0MC41ODM1IDUwLjU4MzEgNDAuNzYxNiA0OS44NDA5IDQwLjc2MTZDNDkuMDAwMSA0MC43NjE2IDQ4LjM5NDkgNDAuNDcxNSA0Ny45OTA3IDM5LjkyMzdMNDcuOTg3NCAzOS45MTk0QzQ3LjUzNTYgMzkuMzQwMSA0Ny4zMTQ0IDM4LjUwNjIgNDcuMzE0NCAzNy40MDc0QzQ3LjMxNDQgMzYuMzMyMiA0Ny41NTQ0IDM1LjUxNzcgNDguMDA1OCAzNC45NTY4TDQ4LjAwNzggMzQuOTU0M0M0OC40NTM3IDM0LjM4MjUgNDkuMDYxOCAzNC4xMTIxIDQ5Ljg2MTQgMzQuMTEyMUM1MC41MjMgMzQuMTEyMSA1MS4wNDUxIDM0LjI2MTUgNTEuNDI3MiAzNC41NDA3QzUxLjc4ODQgMzQuODE5NCA1Mi4wNTMgMzUuMjQ0NyA1Mi4xODgxIDM1Ljg1NzFMNTIuMjIzOSAzNi4wMTk0SDU0Ljk1NDhMNTQuOTE3IDM1Ljc4MzVDNTQuNzA2MyAzNC40NjYgNTQuMTUzNiAzMy40NzAxIDUzLjI2MzQgMzIuODAxOUw1My4yNjAyIDMyLjc5OTVDNTIuMzk1MSAzMi4xNzU1IDUxLjI2MjEgMzEuODczNyA0OS44NjE0IDMxLjg3MzdaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS43NTYxIDI4LjI3NTNIMjIuNzQ0TDE3IDQyLjcyNDdIMjAuMDE0MUwyMS4zNDI5IDM5LjIwNDlIMjcuMTU3MkwyOC40ODYgNDIuNzI0N0gzMS41MDAxTDI1Ljc1NjEgMjguMjc1M1pNMjIuMjEyNSAzNi45MDc2TDI0LjI1OTYgMzEuNDUzOUwyNi4yODg1IDM2LjkwNzZIMjIuMjEyNVoiIGZpbGw9IiMyMjI1MjkiLz48L3N2Zz4=";
231
235
  declare class Highlighter extends Feature {
236
+ protected static _refer: string;
237
+ static parsedRefer: Path2D[];
238
+ static get refer(): string;
239
+ static set refer(refer: string);
232
240
  paths: {
233
241
  clipRect?: BoundingBox;
234
242
  path: Path2D;
235
243
  }[];
236
- getBoundingBox(): BoundingBox;
244
+ getReferBoundingBox(): BoundingBox;
245
+ getBoundingBox(): BoundingBox | undefined;
237
246
  highlight(): void;
238
247
  protected _parseSvg(url: string): {
239
248
  paths: Path2D[];
240
249
  box: BoundingBox;
241
- viewBox: BoundingBox;
242
250
  };
243
251
  protected _parseGroup(group: HighlightGroup): {
244
252
  clipRect?: BoundingBox;
@@ -348,4 +356,4 @@ declare function getPointPosition(point: {
348
356
  y: number;
349
357
  };
350
358
 
351
- export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };
359
+ export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultHighlightRefer, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };
package/dist/index.d.mts CHANGED
@@ -57,6 +57,9 @@ type TextEffect = Partial<TextDrawStyle & {
57
57
  type TextDeformation = () => void;
58
58
  interface FragmentHighlight {
59
59
  url: string;
60
+ strokeWidth?: number;
61
+ repeatXByFontsize?: number;
62
+ overflowXHidden?: boolean;
60
63
  }
61
64
 
62
65
  declare function parseColor(ctx: CanvasRenderingContext2D, source: string | CanvasGradient | CanvasPattern, box: BoundingBox): string | CanvasGradient | CanvasPattern;
@@ -111,7 +114,7 @@ declare class Character {
111
114
  baseline: number;
112
115
  centerDiviation: number;
113
116
  glyphBox: BoundingBox;
114
- centerPoint: VectorLike;
117
+ center: VectorLike;
115
118
  get computedStyle(): TextStyle;
116
119
  get isVertical(): boolean;
117
120
  get fontSize(): number;
@@ -124,11 +127,11 @@ declare class Character {
124
127
  protected _italic(commands: GlyphPathCommand[], startPoint?: VectorLike): GlyphPathCommand[];
125
128
  protected _rotation90(commands: GlyphPathCommand[], point: VectorLike): GlyphPathCommand[];
126
129
  protected _transform(commands: GlyphPathCommand[], cb: (x: number, y: number) => number[]): GlyphPathCommand[];
127
- getMinMax(min?: Vector2, max?: Vector2): {
130
+ getGlyphMinMax(min?: Vector2, max?: Vector2): {
128
131
  min: Vector2;
129
132
  max: Vector2;
130
133
  };
131
- getBoundingBox(): BoundingBox;
134
+ getGlyphBoundingBox(withStyle?: boolean): BoundingBox;
132
135
  drawTo(ctx: CanvasRenderingContext2D, config?: Partial<TextEffect>): void;
133
136
  }
134
137
 
@@ -223,22 +226,27 @@ declare class Effector extends Feature {
223
226
  }
224
227
 
225
228
  interface HighlightGroup {
226
- url: string;
229
+ highlight: FragmentHighlight;
227
230
  box: BoundingBox;
228
231
  baseline: number;
229
232
  fontSize: number;
230
233
  }
234
+ declare const defaultHighlightRefer = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgdmlld0JveD0iMCAwIDcyIDcyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMyLjQwMjkgMjhIMzUuMTU5NFYzMy4xNzcxQzM1Ljk4MjEgMzIuMzExNSAzNi45NzEgMzEuODczNyAzOC4wOTQ4IDMxLjg3MzdDMzkuNjY3NiAzMS44NzM3IDQwLjkxNjYgMzIuNDI5NSA0MS44MzkgMzMuNTQzN0w0MS44NDAzIDMzLjU0NTNDNDIuNjcxNyAzNC41NzA1IDQzLjA5MTUgMzUuODU1OSA0My4wOTE1IDM3LjM4NzdDNDMuMDkxNSAzOC45NzYxIDQyLjY3MjkgNDAuMzAyOCA0MS44MTgzIDQxLjMzMDRMNDEuODE3MSA0MS4zMzE4QzQwLjg3MzEgNDIuNDQ2MSAzOS41ODMyIDQzIDM3Ljk3MjEgNDNDMzYuNzQ3NyA0MyAzNS43NDg4IDQyLjY1OTkgMzQuOTk1OCA0MS45NjkzVjQyLjcyNDdIMzIuNDAyOVYyOFpNMzcuNTQyOCAzNC4wOTI0QzM2Ljg1NDkgMzQuMDkyNCAzNi4zMDE0IDM0LjM1NjEgMzUuODQ4NyAzNC45MDA0TDM1Ljg0NTIgMzQuOTA0NkMzNS4zMzU4IDM1LjQ4NTMgMzUuMDc3NiAzNi4yOTc2IDM1LjA3NzYgMzcuMzQ4NFYzNy41MDU3QzM1LjA3NzYgMzguNDY0IDM1LjI3NzIgMzkuMjQ0MyAzNS42OTQzIDM5LjgyNzlDMzYuMTQ0MSA0MC40NTg3IDM2Ljc3MjYgNDAuNzgxMyAzNy42MjQ1IDQwLjc4MTNDMzguNTg3NCA0MC43ODEzIDM5LjI3MDcgNDAuNDUyNyAzOS43MTUyIDM5LjgxMjdDNDAuMDcyOCAzOS4yNjg0IDQwLjI3MzcgMzguNDY3MyA0MC4yNzM3IDM3LjM4NzdDNDAuMjczNyAzNi4zMTA1IDQwLjA1MzMgMzUuNTMxMyAzOS42NzgzIDM1LjAwNzdDMzkuMjM3MSAzNC40MDcxIDM4LjUzNDIgMzQuMDkyNCAzNy41NDI4IDM0LjA5MjRaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZD0iTTQ5Ljg2MTQgMzEuODczN0M0OC4xNTM1IDMxLjg3MzcgNDYuODAxNiAzMi40MjM5IDQ1LjgzNDggMzMuNTM5MkM0NC45MzcgMzQuNTQ3MiA0NC40OTY2IDM1Ljg1NiA0NC40OTY2IDM3LjQyN0M0NC40OTY2IDM5LjAzNjggNDQuOTM2NyA0MC4zNjU5IDQ1Ljg1NTkgNDEuMzk0M0M0Ni44MDMxIDQyLjQ3MDYgNDguMTM0OCA0MyA0OS44MjA1IDQzQzUxLjIyNiA0MyA1Mi4zODI2IDQyLjY1NjMgNTMuMjQ3OSA0MS45Njk3QzU0LjEzNTkgNDEuMjYxNCA1NC43MDYxIDQwLjE4ODcgNTQuOTU3MyAzOC43NzkxTDU1IDM4LjUzOTdINTIuMjQ4NEw1Mi4yMjU5IDM4LjcyMDFDNTIuMTM3OSAzOS40MjUxIDUxLjg5MjUgMzkuOTI3OCA1MS41MTA5IDQwLjI1NThDNTEuMTI5NSA0MC41ODM1IDUwLjU4MzEgNDAuNzYxNiA0OS44NDA5IDQwLjc2MTZDNDkuMDAwMSA0MC43NjE2IDQ4LjM5NDkgNDAuNDcxNSA0Ny45OTA3IDM5LjkyMzdMNDcuOTg3NCAzOS45MTk0QzQ3LjUzNTYgMzkuMzQwMSA0Ny4zMTQ0IDM4LjUwNjIgNDcuMzE0NCAzNy40MDc0QzQ3LjMxNDQgMzYuMzMyMiA0Ny41NTQ0IDM1LjUxNzcgNDguMDA1OCAzNC45NTY4TDQ4LjAwNzggMzQuOTU0M0M0OC40NTM3IDM0LjM4MjUgNDkuMDYxOCAzNC4xMTIxIDQ5Ljg2MTQgMzQuMTEyMUM1MC41MjMgMzQuMTEyMSA1MS4wNDUxIDM0LjI2MTUgNTEuNDI3MiAzNC41NDA3QzUxLjc4ODQgMzQuODE5NCA1Mi4wNTMgMzUuMjQ0NyA1Mi4xODgxIDM1Ljg1NzFMNTIuMjIzOSAzNi4wMTk0SDU0Ljk1NDhMNTQuOTE3IDM1Ljc4MzVDNTQuNzA2MyAzNC40NjYgNTQuMTUzNiAzMy40NzAxIDUzLjI2MzQgMzIuODAxOUw1My4yNjAyIDMyLjc5OTVDNTIuMzk1MSAzMi4xNzU1IDUxLjI2MjEgMzEuODczNyA0OS44NjE0IDMxLjg3MzdaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS43NTYxIDI4LjI3NTNIMjIuNzQ0TDE3IDQyLjcyNDdIMjAuMDE0MUwyMS4zNDI5IDM5LjIwNDlIMjcuMTU3MkwyOC40ODYgNDIuNzI0N0gzMS41MDAxTDI1Ljc1NjEgMjguMjc1M1pNMjIuMjEyNSAzNi45MDc2TDI0LjI1OTYgMzEuNDUzOUwyNi4yODg1IDM2LjkwNzZIMjIuMjEyNVoiIGZpbGw9IiMyMjI1MjkiLz48L3N2Zz4=";
231
235
  declare class Highlighter extends Feature {
236
+ protected static _refer: string;
237
+ static parsedRefer: Path2D[];
238
+ static get refer(): string;
239
+ static set refer(refer: string);
232
240
  paths: {
233
241
  clipRect?: BoundingBox;
234
242
  path: Path2D;
235
243
  }[];
236
- getBoundingBox(): BoundingBox;
244
+ getReferBoundingBox(): BoundingBox;
245
+ getBoundingBox(): BoundingBox | undefined;
237
246
  highlight(): void;
238
247
  protected _parseSvg(url: string): {
239
248
  paths: Path2D[];
240
249
  box: BoundingBox;
241
- viewBox: BoundingBox;
242
250
  };
243
251
  protected _parseGroup(group: HighlightGroup): {
244
252
  clipRect?: BoundingBox;
@@ -348,4 +356,4 @@ declare function getPointPosition(point: {
348
356
  y: number;
349
357
  };
350
358
 
351
- export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };
359
+ export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultHighlightRefer, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };
package/dist/index.d.ts CHANGED
@@ -57,6 +57,9 @@ type TextEffect = Partial<TextDrawStyle & {
57
57
  type TextDeformation = () => void;
58
58
  interface FragmentHighlight {
59
59
  url: string;
60
+ strokeWidth?: number;
61
+ repeatXByFontsize?: number;
62
+ overflowXHidden?: boolean;
60
63
  }
61
64
 
62
65
  declare function parseColor(ctx: CanvasRenderingContext2D, source: string | CanvasGradient | CanvasPattern, box: BoundingBox): string | CanvasGradient | CanvasPattern;
@@ -111,7 +114,7 @@ declare class Character {
111
114
  baseline: number;
112
115
  centerDiviation: number;
113
116
  glyphBox: BoundingBox;
114
- centerPoint: VectorLike;
117
+ center: VectorLike;
115
118
  get computedStyle(): TextStyle;
116
119
  get isVertical(): boolean;
117
120
  get fontSize(): number;
@@ -124,11 +127,11 @@ declare class Character {
124
127
  protected _italic(commands: GlyphPathCommand[], startPoint?: VectorLike): GlyphPathCommand[];
125
128
  protected _rotation90(commands: GlyphPathCommand[], point: VectorLike): GlyphPathCommand[];
126
129
  protected _transform(commands: GlyphPathCommand[], cb: (x: number, y: number) => number[]): GlyphPathCommand[];
127
- getMinMax(min?: Vector2, max?: Vector2): {
130
+ getGlyphMinMax(min?: Vector2, max?: Vector2): {
128
131
  min: Vector2;
129
132
  max: Vector2;
130
133
  };
131
- getBoundingBox(): BoundingBox;
134
+ getGlyphBoundingBox(withStyle?: boolean): BoundingBox;
132
135
  drawTo(ctx: CanvasRenderingContext2D, config?: Partial<TextEffect>): void;
133
136
  }
134
137
 
@@ -223,22 +226,27 @@ declare class Effector extends Feature {
223
226
  }
224
227
 
225
228
  interface HighlightGroup {
226
- url: string;
229
+ highlight: FragmentHighlight;
227
230
  box: BoundingBox;
228
231
  baseline: number;
229
232
  fontSize: number;
230
233
  }
234
+ declare const defaultHighlightRefer = "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3MiIgaGVpZ2h0PSI3MiIgdmlld0JveD0iMCAwIDcyIDcyIiBmaWxsPSJub25lIj48cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGNsaXAtcnVsZT0iZXZlbm9kZCIgZD0iTTMyLjQwMjkgMjhIMzUuMTU5NFYzMy4xNzcxQzM1Ljk4MjEgMzIuMzExNSAzNi45NzEgMzEuODczNyAzOC4wOTQ4IDMxLjg3MzdDMzkuNjY3NiAzMS44NzM3IDQwLjkxNjYgMzIuNDI5NSA0MS44MzkgMzMuNTQzN0w0MS44NDAzIDMzLjU0NTNDNDIuNjcxNyAzNC41NzA1IDQzLjA5MTUgMzUuODU1OSA0My4wOTE1IDM3LjM4NzdDNDMuMDkxNSAzOC45NzYxIDQyLjY3MjkgNDAuMzAyOCA0MS44MTgzIDQxLjMzMDRMNDEuODE3MSA0MS4zMzE4QzQwLjg3MzEgNDIuNDQ2MSAzOS41ODMyIDQzIDM3Ljk3MjEgNDNDMzYuNzQ3NyA0MyAzNS43NDg4IDQyLjY1OTkgMzQuOTk1OCA0MS45NjkzVjQyLjcyNDdIMzIuNDAyOVYyOFpNMzcuNTQyOCAzNC4wOTI0QzM2Ljg1NDkgMzQuMDkyNCAzNi4zMDE0IDM0LjM1NjEgMzUuODQ4NyAzNC45MDA0TDM1Ljg0NTIgMzQuOTA0NkMzNS4zMzU4IDM1LjQ4NTMgMzUuMDc3NiAzNi4yOTc2IDM1LjA3NzYgMzcuMzQ4NFYzNy41MDU3QzM1LjA3NzYgMzguNDY0IDM1LjI3NzIgMzkuMjQ0MyAzNS42OTQzIDM5LjgyNzlDMzYuMTQ0MSA0MC40NTg3IDM2Ljc3MjYgNDAuNzgxMyAzNy42MjQ1IDQwLjc4MTNDMzguNTg3NCA0MC43ODEzIDM5LjI3MDcgNDAuNDUyNyAzOS43MTUyIDM5LjgxMjdDNDAuMDcyOCAzOS4yNjg0IDQwLjI3MzcgMzguNDY3MyA0MC4yNzM3IDM3LjM4NzdDNDAuMjczNyAzNi4zMTA1IDQwLjA1MzMgMzUuNTMxMyAzOS42NzgzIDM1LjAwNzdDMzkuMjM3MSAzNC40MDcxIDM4LjUzNDIgMzQuMDkyNCAzNy41NDI4IDM0LjA5MjRaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZD0iTTQ5Ljg2MTQgMzEuODczN0M0OC4xNTM1IDMxLjg3MzcgNDYuODAxNiAzMi40MjM5IDQ1LjgzNDggMzMuNTM5MkM0NC45MzcgMzQuNTQ3MiA0NC40OTY2IDM1Ljg1NiA0NC40OTY2IDM3LjQyN0M0NC40OTY2IDM5LjAzNjggNDQuOTM2NyA0MC4zNjU5IDQ1Ljg1NTkgNDEuMzk0M0M0Ni44MDMxIDQyLjQ3MDYgNDguMTM0OCA0MyA0OS44MjA1IDQzQzUxLjIyNiA0MyA1Mi4zODI2IDQyLjY1NjMgNTMuMjQ3OSA0MS45Njk3QzU0LjEzNTkgNDEuMjYxNCA1NC43MDYxIDQwLjE4ODcgNTQuOTU3MyAzOC43NzkxTDU1IDM4LjUzOTdINTIuMjQ4NEw1Mi4yMjU5IDM4LjcyMDFDNTIuMTM3OSAzOS40MjUxIDUxLjg5MjUgMzkuOTI3OCA1MS41MTA5IDQwLjI1NThDNTEuMTI5NSA0MC41ODM1IDUwLjU4MzEgNDAuNzYxNiA0OS44NDA5IDQwLjc2MTZDNDkuMDAwMSA0MC43NjE2IDQ4LjM5NDkgNDAuNDcxNSA0Ny45OTA3IDM5LjkyMzdMNDcuOTg3NCAzOS45MTk0QzQ3LjUzNTYgMzkuMzQwMSA0Ny4zMTQ0IDM4LjUwNjIgNDcuMzE0NCAzNy40MDc0QzQ3LjMxNDQgMzYuMzMyMiA0Ny41NTQ0IDM1LjUxNzcgNDguMDA1OCAzNC45NTY4TDQ4LjAwNzggMzQuOTU0M0M0OC40NTM3IDM0LjM4MjUgNDkuMDYxOCAzNC4xMTIxIDQ5Ljg2MTQgMzQuMTEyMUM1MC41MjMgMzQuMTEyMSA1MS4wNDUxIDM0LjI2MTUgNTEuNDI3MiAzNC41NDA3QzUxLjc4ODQgMzQuODE5NCA1Mi4wNTMgMzUuMjQ0NyA1Mi4xODgxIDM1Ljg1NzFMNTIuMjIzOSAzNi4wMTk0SDU0Ljk1NDhMNTQuOTE3IDM1Ljc4MzVDNTQuNzA2MyAzNC40NjYgNTQuMTUzNiAzMy40NzAxIDUzLjI2MzQgMzIuODAxOUw1My4yNjAyIDMyLjc5OTVDNTIuMzk1MSAzMi4xNzU1IDUxLjI2MjEgMzEuODczNyA0OS44NjE0IDMxLjg3MzdaIiBmaWxsPSIjMjIyNTI5Ii8+PHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0yNS43NTYxIDI4LjI3NTNIMjIuNzQ0TDE3IDQyLjcyNDdIMjAuMDE0MUwyMS4zNDI5IDM5LjIwNDlIMjcuMTU3MkwyOC40ODYgNDIuNzI0N0gzMS41MDAxTDI1Ljc1NjEgMjguMjc1M1pNMjIuMjEyNSAzNi45MDc2TDI0LjI1OTYgMzEuNDUzOUwyNi4yODg1IDM2LjkwNzZIMjIuMjEyNVoiIGZpbGw9IiMyMjI1MjkiLz48L3N2Zz4=";
231
235
  declare class Highlighter extends Feature {
236
+ protected static _refer: string;
237
+ static parsedRefer: Path2D[];
238
+ static get refer(): string;
239
+ static set refer(refer: string);
232
240
  paths: {
233
241
  clipRect?: BoundingBox;
234
242
  path: Path2D;
235
243
  }[];
236
- getBoundingBox(): BoundingBox;
244
+ getReferBoundingBox(): BoundingBox;
245
+ getBoundingBox(): BoundingBox | undefined;
237
246
  highlight(): void;
238
247
  protected _parseSvg(url: string): {
239
248
  paths: Path2D[];
240
249
  box: BoundingBox;
241
- viewBox: BoundingBox;
242
250
  };
243
251
  protected _parseGroup(group: HighlightGroup): {
244
252
  clipRect?: BoundingBox;
@@ -348,4 +356,4 @@ declare function getPointPosition(point: {
348
356
  y: number;
349
357
  };
350
358
 
351
- export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };
359
+ export { Character, Deformer, type DrawShapePathsOptions, type EffectOptions, Effector, type FontKerning, type FontStyle, type FontWeight, Fragment, type FragmentContent, type FragmentHighlight, Highlighter, type LinearGradient, type MeasuredCharacter, type MeasuredFragment, type MeasuredParagraph, type MeasuredResult, Measurer, Paragraph, type ParagraphContent, Parser, Reflector, type Render2dOptions, Renderer2D, Text, type TextAlign, type TextContent, type TextDecoration, type TextDeformation, type TextDrawStyle, type TextEffect, type TextLayoutStyle, type TextOptions, type TextOrientation, type TextRenderOptions, type TextStyle, type TextTransform, type TextWrap, type VerticalAlign, type WritingMode, defaultHighlightRefer, defaultTextStyles, drawPath, filterEmpty, getPointPosition, getRotationPoint, getScalePoint, getSkewPoint, parseColor, uploadColor };