modern-text 0.2.20 → 0.2.22

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,11 +549,27 @@ 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() {
558
574
  if (!this.paths.length) {
559
575
  return void 0;
@@ -571,7 +587,7 @@ class Highlighter extends Feature {
571
587
  characters.forEach((character) => {
572
588
  const highlight = character.parent.highlight;
573
589
  if (highlight?.url) {
574
- 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) {
575
591
  group.push(character);
576
592
  } else {
577
593
  group = [];
@@ -583,8 +599,8 @@ class Highlighter extends Feature {
583
599
  });
584
600
  this.paths = groups.filter((characters2) => characters2.length).map((characters2) => {
585
601
  return {
586
- url: characters2[0].parent.highlight.url,
587
- 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)),
588
604
  baseline: Math.max(...characters2.map((c) => c.baseline)),
589
605
  fontSize: characters2[0].fontSize
590
606
  };
@@ -598,60 +614,57 @@ class Highlighter extends Feature {
598
614
  paths.forEach((path) => path.getMinMax(min, max));
599
615
  return {
600
616
  paths,
601
- box: new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y),
602
- 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)
603
618
  };
604
619
  }
605
620
  _parseGroup(group) {
606
- const { url, box: groupBox, baseline, fontSize } = group;
607
- const { box, viewBox, paths } = this._parseSvg(url);
608
- 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);
609
628
  const result = [];
610
- const type = centerY > box.top ? 0 : 1;
611
- function transformPathStyle(path, scale) {
612
- if (path.style.strokeWidth) {
613
- path.style.strokeWidth *= scale;
614
- }
615
- if (path.style.strokeMiterlimit) {
616
- path.style.strokeMiterlimit *= scale;
617
- }
618
- if (path.style.strokeDashoffset) {
619
- path.style.strokeDashoffset *= scale;
620
- }
621
- if (path.style.strokeDasharray) {
622
- path.style.strokeDasharray = path.style.strokeDasharray.map((v) => v * scale);
623
- }
624
- }
625
- if (type === 0) {
626
- const offset = {
627
- x: groupBox.left - fontSize * 0.2,
628
- y: groupBox.top
629
- };
630
- const scaleX = (groupBox.width + fontSize * 0.2 * 2) / box.width;
631
- const scaleY = groupBox.height / box.height;
632
- 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);
633
644
  paths.forEach((original) => {
634
- const path = original.clone().transform(m);
635
- transformPathStyle(path, scaleX);
636
- result.push({ path });
637
- });
638
- } else if (type === 1) {
639
- const scale = fontSize / box.width;
640
- const width = box.width * scale;
641
- const length = Math.ceil(groupBox.width / width);
642
- const offset = {
643
- x: groupBox.left,
644
- y: groupBox.top + baseline + fontSize * 0.1
645
- };
646
- const m = new modernPath2d.Matrix3().translate(-box.x, -box.y).scale(scale, scale).translate(offset.x, offset.y);
647
- for (let i = 0; i < length; i++) {
648
- const _m = m.clone().translate(i * width, 0);
649
- paths.forEach((original) => {
650
- const path = original.clone().transform(_m);
651
- transformPathStyle(path, scale);
652
- 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
653
666
  });
654
- }
667
+ });
655
668
  }
656
669
  return result;
657
670
  }
@@ -666,7 +679,10 @@ class Highlighter extends Feature {
666
679
  });
667
680
  return this;
668
681
  }
669
- }
682
+ };
683
+ __publicField$1(_Highlighter, "_refer", defaultHighlightRefer);
684
+ __publicField$1(_Highlighter, "parsedRefer", modernPath2d.parseSvg(_Highlighter._refer));
685
+ let Highlighter = _Highlighter;
670
686
 
671
687
  class Measurer extends Feature {
672
688
  _styleToDomStyle(style) {
@@ -1077,13 +1093,14 @@ class Text {
1077
1093
  this.boundingBox = boundingBox;
1078
1094
  const characters = this.characters;
1079
1095
  characters.forEach((c) => c.update());
1080
- this.highlighter.highlight();
1081
1096
  if (this.deformation) {
1082
1097
  this.deformer.deform();
1098
+ } else {
1099
+ this.highlighter.highlight();
1083
1100
  }
1084
1101
  const min = modernPath2d.Vector2.MAX;
1085
1102
  const max = modernPath2d.Vector2.MIN;
1086
- characters.forEach((c) => c.getMinMax(min, max));
1103
+ characters.forEach((c) => c.getGlyphMinMax(min, max));
1087
1104
  this.renderBoundingBox = new modernPath2d.BoundingBox(min.x, min.y, max.x - min.x, max.y - min.y);
1088
1105
  return this;
1089
1106
  }
@@ -1131,6 +1148,7 @@ exports.Parser = Parser;
1131
1148
  exports.Reflector = Reflector;
1132
1149
  exports.Renderer2D = Renderer2D;
1133
1150
  exports.Text = Text;
1151
+ exports.defaultHighlightRefer = defaultHighlightRefer;
1134
1152
  exports.defaultTextStyles = defaultTextStyles;
1135
1153
  exports.drawPath = drawPath;
1136
1154
  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
  }[];
244
+ getReferBoundingBox(): BoundingBox;
236
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
  }[];
244
+ getReferBoundingBox(): BoundingBox;
236
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
  }[];
244
+ getReferBoundingBox(): BoundingBox;
236
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 };