three-text 0.4.2 → 0.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -36,6 +36,9 @@ export declare class GlyphGeometryBuilder {
36
36
  private contourCache;
37
37
  private clusteringCache;
38
38
  private emptyGlyphs;
39
+ private clusterPositions;
40
+ private clusterContoursScratch;
41
+ private taskScratch;
39
42
  constructor(cache: Cache<string, GlyphData>, loadedFont: LoadedFont);
40
43
  getOptimizationStats(): import("../geometry/PathOptimizer").OptimizationStats;
41
44
  setCurveFidelityConfig(config?: CurveFidelityConfig): void;
@@ -1,8 +1,12 @@
1
1
  import type { Path, ProcessedGeometry } from '../types';
2
2
  export declare class Tessellator {
3
3
  process(paths: Path[], removeOverlaps?: boolean, isCFF?: boolean, needsExtrusionContours?: boolean): ProcessedGeometry;
4
+ processContours(contours: number[][], removeOverlaps?: boolean, isCFF?: boolean, needsExtrusionContours?: boolean): ProcessedGeometry;
4
5
  private tessellate;
6
+ private tessellateContours;
5
7
  private pathsToContours;
8
+ private reverseContours;
9
+ private reverseContour;
6
10
  private performTessellation;
7
11
  private boundaryToContours;
8
12
  private needsWindingNormalization;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "three-text",
3
- "version": "0.4.2",
3
+ "version": "0.4.3",
4
4
  "description": "3D mesh font geometry and text layout engine for the web",
5
5
  "main": "dist/three/index.cjs",
6
6
  "module": "dist/three/index.js",
@@ -1,97 +0,0 @@
1
- import type { TextAlign, TextDirection, LineInfo, HyphenationPatternsMap } from '../types';
2
- export declare enum ItemType {
3
- BOX = 0,
4
- GLUE = 1,
5
- PENALTY = 2,
6
- DISCRETIONARY = 3
7
- }
8
- export declare enum FitnessClass {
9
- VERY_LOOSE = 0,
10
- LOOSE = 1,
11
- DECENT = 2,
12
- TIGHT = 3
13
- }
14
- interface Item {
15
- type: ItemType;
16
- width: number;
17
- text?: string;
18
- originIndex?: number;
19
- }
20
- export interface Box extends Item {
21
- type: ItemType.BOX;
22
- }
23
- export interface Glue extends Item {
24
- type: ItemType.GLUE;
25
- stretch: number;
26
- shrink: number;
27
- }
28
- export interface Penalty extends Item {
29
- type: ItemType.PENALTY;
30
- penalty: number;
31
- flagged?: boolean;
32
- }
33
- export interface Discretionary extends Item {
34
- type: ItemType.DISCRETIONARY;
35
- preBreak: string;
36
- postBreak: string;
37
- noBreak: string;
38
- preBreakWidth: number;
39
- penalty: number;
40
- flagged?: boolean;
41
- }
42
- export interface LineBreakOptions {
43
- text: string;
44
- width?: number;
45
- align?: TextAlign;
46
- direction?: TextDirection;
47
- hyphenate?: boolean;
48
- language?: string;
49
- measureText: (text: string) => number;
50
- measureTextWidths?: (text: string) => number[];
51
- respectExistingBreaks?: boolean;
52
- hyphenationPatterns?: HyphenationPatternsMap;
53
- unitsPerEm?: number;
54
- letterSpacing?: number;
55
- tolerance?: number;
56
- pretolerance?: number;
57
- emergencyStretch?: number;
58
- autoEmergencyStretch?: number;
59
- lefthyphenmin?: number;
60
- righthyphenmin?: number;
61
- linepenalty?: number;
62
- adjdemerits?: number;
63
- hyphenpenalty?: number;
64
- exhyphenpenalty?: number;
65
- doublehyphendemerits?: number;
66
- finalhyphendemerits?: number;
67
- }
68
- interface LineBreakContext {
69
- linePenalty: number;
70
- adjDemerits: number;
71
- doubleHyphenDemerits: number;
72
- finalHyphenDemerits: number;
73
- hyphenPenalty: number;
74
- exHyphenPenalty: number;
75
- currentAlign: TextAlign;
76
- unitsPerEm?: number;
77
- letterSpacingFU?: number;
78
- }
79
- export declare class LineBreakDelta {
80
- private static badness;
81
- private static fitnessClass;
82
- static findHyphenationPoints(word: string, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number): number[];
83
- static itemizeText(text: string, measureText: (text: string) => number, measureTextWidths: ((text: string) => number[]) | undefined, hyphenate?: boolean, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number, context?: LineBreakContext, lineWidth?: number): Item[];
84
- static isCJK(char: string): boolean;
85
- static isCJClosingPunctuation(char: string): boolean;
86
- static isCJOpeningPunctuation(char: string): boolean;
87
- static isCJPunctuation(char: string): boolean;
88
- private static itemizeCJKText;
89
- private static itemizeParagraph;
90
- private static itemizeWordBased;
91
- private static lineBreak;
92
- private static insertAfterNode;
93
- private static removeNode;
94
- static breakText(options: LineBreakOptions): LineInfo[];
95
- private static postLineBreak;
96
- }
97
- export {};
@@ -1,100 +0,0 @@
1
- import type { TextAlign, TextDirection, LineInfo, HyphenationPatternsMap } from '../types';
2
- export declare enum ItemType {
3
- BOX = 0,
4
- GLUE = 1,
5
- PENALTY = 2,
6
- DISCRETIONARY = 3
7
- }
8
- export declare enum FitnessClass {
9
- TIGHT = 0,
10
- DECENT = 1,
11
- LOOSE = 2,
12
- VERY_LOOSE = 3
13
- }
14
- interface Item {
15
- type: ItemType;
16
- width: number;
17
- text?: string;
18
- originIndex?: number;
19
- }
20
- export interface Box extends Item {
21
- type: ItemType.BOX;
22
- }
23
- export interface Glue extends Item {
24
- type: ItemType.GLUE;
25
- stretch: number;
26
- shrink: number;
27
- }
28
- export interface Penalty extends Item {
29
- type: ItemType.PENALTY;
30
- penalty: number;
31
- flagged?: boolean;
32
- }
33
- export interface Discretionary extends Item {
34
- type: ItemType.DISCRETIONARY;
35
- preBreak: string;
36
- postBreak: string;
37
- noBreak: string;
38
- preBreakWidth: number;
39
- penalty: number;
40
- flagged?: boolean;
41
- }
42
- export interface LineBreakOptions {
43
- text: string;
44
- width?: number;
45
- align?: TextAlign;
46
- direction?: TextDirection;
47
- hyphenate?: boolean;
48
- language?: string;
49
- measureText: (text: string) => number;
50
- measureTextWidths?: (text: string) => number[];
51
- respectExistingBreaks?: boolean;
52
- hyphenationPatterns?: HyphenationPatternsMap;
53
- unitsPerEm?: number;
54
- letterSpacing?: number;
55
- tolerance?: number;
56
- pretolerance?: number;
57
- emergencyStretch?: number;
58
- autoEmergencyStretch?: number;
59
- lefthyphenmin?: number;
60
- righthyphenmin?: number;
61
- linepenalty?: number;
62
- adjdemerits?: number;
63
- hyphenpenalty?: number;
64
- exhyphenpenalty?: number;
65
- doublehyphendemerits?: number;
66
- finalhyphendemerits?: number;
67
- looseness?: number;
68
- disableShortLineDetection?: boolean;
69
- shortLineThreshold?: number;
70
- }
71
- interface LineBreakContext {
72
- linePenalty: number;
73
- adjDemerits: number;
74
- doubleHyphenDemerits: number;
75
- finalHyphenDemerits: number;
76
- hyphenPenalty: number;
77
- exHyphenPenalty: number;
78
- currentAlign: TextAlign;
79
- unitsPerEm?: number;
80
- letterSpacingFU?: number;
81
- }
82
- export declare class LineBreak {
83
- private static badness;
84
- private static fitnessClass;
85
- private static computeCumulativeWidths;
86
- static findHyphenationPoints(word: string, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number): number[];
87
- static itemizeText(text: string, measureText: (text: string) => number, measureTextWidths: ((text: string) => number[]) | undefined, hyphenate?: boolean, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number, context?: LineBreakContext): Item[];
88
- static isCJK(char: string): boolean;
89
- static isCJClosingPunctuation(char: string): boolean;
90
- static isCJOpeningPunctuation(char: string): boolean;
91
- static isCJPunctuation(char: string): boolean;
92
- private static itemizeCJKText;
93
- private static itemizeParagraph;
94
- private static itemizeWordBased;
95
- private static findBreakpoints;
96
- private static hasShortLines;
97
- static breakText(options: LineBreakOptions): LineInfo[];
98
- private static createLines;
99
- }
100
- export {};
@@ -1,103 +0,0 @@
1
- import type { TextAlign, TextDirection, LineInfo, HyphenationPatternsMap } from '../types';
2
- export declare enum ItemType {
3
- BOX = 0,// a character or word with a fixed width
4
- GLUE = 1,// stretchable space between boxes
5
- PENALTY = 2,// potential breakpoint with an associated penalty
6
- DISCRETIONARY = 3
7
- }
8
- export declare enum FitnessClass {
9
- TIGHT = 0,
10
- NORMAL = 1,
11
- LOOSE = 2,
12
- VERY_LOOSE = 3
13
- }
14
- interface Item {
15
- type: ItemType;
16
- width: number;
17
- text?: string;
18
- originIndex?: number;
19
- }
20
- export interface Box extends Item {
21
- type: ItemType.BOX;
22
- }
23
- export interface Glue extends Item {
24
- type: ItemType.GLUE;
25
- stretch: number;
26
- shrink: number;
27
- }
28
- export interface Penalty extends Item {
29
- type: ItemType.PENALTY;
30
- penalty: number;
31
- flagged?: boolean;
32
- }
33
- export interface Discretionary extends Item {
34
- type: ItemType.DISCRETIONARY;
35
- preBreak: string;
36
- postBreak: string;
37
- noBreak: string;
38
- preBreakWidth: number;
39
- penalty: number;
40
- flagged?: boolean;
41
- }
42
- export interface LineBreakOptions {
43
- text: string;
44
- width?: number;
45
- align?: TextAlign;
46
- direction?: TextDirection;
47
- hyphenate?: boolean;
48
- language?: string;
49
- measureText: (text: string) => number;
50
- measureTextWidths?: (text: string) => number[];
51
- respectExistingBreaks?: boolean;
52
- hyphenationPatterns?: HyphenationPatternsMap;
53
- unitsPerEm?: number;
54
- letterSpacing?: number;
55
- tolerance?: number;
56
- pretolerance?: number;
57
- emergencyStretch?: number;
58
- autoEmergencyStretch?: number;
59
- lefthyphenmin?: number;
60
- righthyphenmin?: number;
61
- linepenalty?: number;
62
- adjdemerits?: number;
63
- hyphenpenalty?: number;
64
- exhyphenpenalty?: number;
65
- doublehyphendemerits?: number;
66
- looseness?: number;
67
- disableShortLineDetection?: boolean;
68
- shortLineThreshold?: number;
69
- }
70
- interface LineBreakContext {
71
- linePenalty: number;
72
- adjDemerits: number;
73
- doubleHyphenDemerits: number;
74
- hyphenPenalty: number;
75
- exHyphenPenalty: number;
76
- currentAlign: TextAlign;
77
- unitsPerEm?: number;
78
- letterSpacingFU?: number;
79
- }
80
- export declare class LineBreak {
81
- private static badness;
82
- static findHyphenationPoints(word: string, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number): number[];
83
- static itemizeText(text: string, measureText: (text: string) => number, // function to measure text width
84
- measureTextWidths: ((text: string) => number[]) | undefined, hyphenate?: boolean, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number, context?: LineBreakContext): Item[];
85
- static isCJK(char: string): boolean;
86
- static isCJClosingPunctuation(char: string): boolean;
87
- static isCJOpeningPunctuation(char: string): boolean;
88
- static isCJPunctuation(char: string): boolean;
89
- private static itemizeCJKText;
90
- private static itemizeParagraph;
91
- private static itemizeWordBased;
92
- private static hasShortLines;
93
- static breakText(options: LineBreakOptions): LineInfo[];
94
- private static findBreakpoints;
95
- private static considerBreak;
96
- private static computeAdjustmentRatio;
97
- private static computeFitnessClass;
98
- private static computeFitnessClassFromRatio;
99
- private static computeCumulativeWidths;
100
- private static deactivateNodes;
101
- private static createLines;
102
- }
103
- export {};
@@ -1,103 +0,0 @@
1
- import type { TextAlign, TextDirection, LineInfo, HyphenationPatternsMap } from '../types';
2
- export declare enum ItemType {
3
- BOX = 0,// a character or word with a fixed width
4
- GLUE = 1,// stretchable space between boxes
5
- PENALTY = 2,// potential breakpoint with an associated penalty
6
- DISCRETIONARY = 3
7
- }
8
- export declare enum FitnessClass {
9
- TIGHT = 0,
10
- NORMAL = 1,
11
- LOOSE = 2,
12
- VERY_LOOSE = 3
13
- }
14
- interface Item {
15
- type: ItemType;
16
- width: number;
17
- text?: string;
18
- originIndex?: number;
19
- }
20
- export interface Box extends Item {
21
- type: ItemType.BOX;
22
- }
23
- export interface Glue extends Item {
24
- type: ItemType.GLUE;
25
- stretch: number;
26
- shrink: number;
27
- }
28
- export interface Penalty extends Item {
29
- type: ItemType.PENALTY;
30
- penalty: number;
31
- flagged?: boolean;
32
- }
33
- export interface Discretionary extends Item {
34
- type: ItemType.DISCRETIONARY;
35
- preBreak: string;
36
- postBreak: string;
37
- noBreak: string;
38
- preBreakWidth: number;
39
- penalty: number;
40
- flagged?: boolean;
41
- }
42
- export interface LineBreakOptions {
43
- text: string;
44
- width?: number;
45
- align?: TextAlign;
46
- direction?: TextDirection;
47
- hyphenate?: boolean;
48
- language?: string;
49
- measureText: (text: string) => number;
50
- measureTextWidths?: (text: string) => number[];
51
- respectExistingBreaks?: boolean;
52
- hyphenationPatterns?: HyphenationPatternsMap;
53
- unitsPerEm?: number;
54
- letterSpacing?: number;
55
- tolerance?: number;
56
- pretolerance?: number;
57
- emergencyStretch?: number;
58
- autoEmergencyStretch?: number;
59
- lefthyphenmin?: number;
60
- righthyphenmin?: number;
61
- linepenalty?: number;
62
- adjdemerits?: number;
63
- hyphenpenalty?: number;
64
- exhyphenpenalty?: number;
65
- doublehyphendemerits?: number;
66
- looseness?: number;
67
- disableShortLineDetection?: boolean;
68
- shortLineThreshold?: number;
69
- }
70
- interface LineBreakContext {
71
- linePenalty: number;
72
- adjDemerits: number;
73
- doubleHyphenDemerits: number;
74
- hyphenPenalty: number;
75
- exHyphenPenalty: number;
76
- currentAlign: TextAlign;
77
- unitsPerEm?: number;
78
- letterSpacingFU?: number;
79
- }
80
- export declare class LineBreak {
81
- private static badness;
82
- static findHyphenationPoints(word: string, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number): number[];
83
- static itemizeText(text: string, measureText: (text: string) => number, // function to measure text width
84
- measureTextWidths: ((text: string) => number[]) | undefined, hyphenate?: boolean, language?: string, availablePatterns?: HyphenationPatternsMap, lefthyphenmin?: number, righthyphenmin?: number, context?: LineBreakContext): Item[];
85
- static isCJK(char: string): boolean;
86
- static isCJClosingPunctuation(char: string): boolean;
87
- static isCJOpeningPunctuation(char: string): boolean;
88
- static isCJPunctuation(char: string): boolean;
89
- private static itemizeCJKText;
90
- private static itemizeParagraph;
91
- private static itemizeWordBased;
92
- private static hasShortLines;
93
- static breakText(options: LineBreakOptions): LineInfo[];
94
- private static findBreakpoints;
95
- private static considerBreak;
96
- private static computeAdjustmentRatio;
97
- private static computeFitnessClass;
98
- private static computeFitnessClassFromRatio;
99
- private static computeCumulativeWidths;
100
- private static deactivateNodes;
101
- private static createLines;
102
- }
103
- export {};