postext 0.1.12 → 0.1.13
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/__tests__/knuthPlass.test.d.ts +2 -0
- package/dist/__tests__/knuthPlass.test.d.ts.map +1 -0
- package/dist/__tests__/knuthPlass.test.js +209 -0
- package/dist/__tests__/knuthPlass.test.js.map +1 -0
- package/dist/defaults/bodyText.d.ts +2 -2
- package/dist/defaults/bodyText.d.ts.map +1 -1
- package/dist/defaults/bodyText.js +9 -3
- package/dist/defaults/bodyText.js.map +1 -1
- package/dist/hyphenate.d.ts +2 -5
- package/dist/hyphenate.d.ts.map +1 -1
- package/dist/hyphenate.js +28 -128
- package/dist/hyphenate.js.map +1 -1
- package/dist/knuthPlass.d.ts +76 -0
- package/dist/knuthPlass.d.ts.map +1 -0
- package/dist/knuthPlass.js +653 -0
- package/dist/knuthPlass.js.map +1 -0
- package/dist/measure.d.ts +6 -0
- package/dist/measure.d.ts.map +1 -1
- package/dist/measure.js +63 -4
- package/dist/measure.js.map +1 -1
- package/dist/pipeline/build.d.ts.map +1 -1
- package/dist/pipeline/build.js +3 -0
- package/dist/pipeline/build.js.map +1 -1
- package/dist/types.d.ts +6 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +11 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knuthPlass.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/knuthPlass.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
import { describe, it, expect } from 'vitest';
|
|
2
|
+
import { computeBreakpoints, richTokensToItems, } from '../knuthPlass';
|
|
3
|
+
// ---------------------------------------------------------------------------
|
|
4
|
+
// Helpers to build items manually
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
function box(width, sourceIndex = 0) {
|
|
7
|
+
return { type: 'box', width, sourceIndex };
|
|
8
|
+
}
|
|
9
|
+
function glue(width, stretch, shrink, sourceIndex = 0) {
|
|
10
|
+
return { type: 'glue', width, stretch, shrink, sourceIndex };
|
|
11
|
+
}
|
|
12
|
+
function penalty(width, pen, flagged = false, sourceIndex = 0) {
|
|
13
|
+
return { type: 'penalty', width, penalty: pen, flagged, sourceIndex };
|
|
14
|
+
}
|
|
15
|
+
function finalItems() {
|
|
16
|
+
return [
|
|
17
|
+
glue(0, Number.MAX_SAFE_INTEGER, 0, -1),
|
|
18
|
+
penalty(0, -10000, false, -1),
|
|
19
|
+
];
|
|
20
|
+
}
|
|
21
|
+
const defaultOptions = {
|
|
22
|
+
lineWidth: () => 100,
|
|
23
|
+
normalSpaceWidth: 10,
|
|
24
|
+
maxStretchRatio: 1.5,
|
|
25
|
+
minShrinkRatio: 0.8,
|
|
26
|
+
};
|
|
27
|
+
// ---------------------------------------------------------------------------
|
|
28
|
+
// Core algorithm tests
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
describe('computeBreakpoints', () => {
|
|
31
|
+
it('produces a single break for text that fits one line', () => {
|
|
32
|
+
const items = [
|
|
33
|
+
box(30, 0),
|
|
34
|
+
glue(10, 5, 2, 1),
|
|
35
|
+
box(30, 2),
|
|
36
|
+
...finalItems(),
|
|
37
|
+
];
|
|
38
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
39
|
+
// Should break at the forced penalty (last item)
|
|
40
|
+
expect(breaks.length).toBe(1);
|
|
41
|
+
});
|
|
42
|
+
it('produces two breaks when content exceeds one line', () => {
|
|
43
|
+
const items = [
|
|
44
|
+
box(40, 0),
|
|
45
|
+
glue(10, 5, 2, 1),
|
|
46
|
+
box(40, 2),
|
|
47
|
+
glue(10, 5, 2, 3),
|
|
48
|
+
box(40, 4),
|
|
49
|
+
...finalItems(),
|
|
50
|
+
];
|
|
51
|
+
// Total natural width: 40+10+40+10+40 = 140 > 100
|
|
52
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
53
|
+
expect(breaks.length).toBe(2);
|
|
54
|
+
});
|
|
55
|
+
it('handles forced breaks (hard line breaks)', () => {
|
|
56
|
+
const items = [
|
|
57
|
+
box(20, 0),
|
|
58
|
+
penalty(0, -10000, false, 1), // forced break
|
|
59
|
+
box(20, 2),
|
|
60
|
+
...finalItems(),
|
|
61
|
+
];
|
|
62
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
63
|
+
expect(breaks.length).toBe(2);
|
|
64
|
+
// First break at the forced penalty
|
|
65
|
+
expect(breaks[0]).toBe(1);
|
|
66
|
+
});
|
|
67
|
+
it('handles empty item list gracefully', () => {
|
|
68
|
+
const items = finalItems();
|
|
69
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
70
|
+
expect(breaks.length).toBe(1); // Just the forced final break
|
|
71
|
+
});
|
|
72
|
+
it('handles a single oversized box via emergency fallback', () => {
|
|
73
|
+
const items = [
|
|
74
|
+
box(200, 0), // way wider than 100
|
|
75
|
+
...finalItems(),
|
|
76
|
+
];
|
|
77
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
78
|
+
expect(breaks.length).toBeGreaterThanOrEqual(1);
|
|
79
|
+
});
|
|
80
|
+
it('respects variable line widths', () => {
|
|
81
|
+
const items = [
|
|
82
|
+
box(30, 0),
|
|
83
|
+
glue(10, 5, 2, 1),
|
|
84
|
+
box(30, 2),
|
|
85
|
+
glue(10, 5, 2, 3),
|
|
86
|
+
box(30, 4),
|
|
87
|
+
...finalItems(),
|
|
88
|
+
];
|
|
89
|
+
// First line narrow, subsequent lines wide
|
|
90
|
+
const breaks = computeBreakpoints(items, {
|
|
91
|
+
...defaultOptions,
|
|
92
|
+
lineWidth: (li) => li === 0 ? 50 : 200,
|
|
93
|
+
});
|
|
94
|
+
// Line 0 can only fit ~50px, so first word breaks early
|
|
95
|
+
expect(breaks.length).toBe(2);
|
|
96
|
+
});
|
|
97
|
+
it('penalizes consecutive hyphens', () => {
|
|
98
|
+
// Two words with soft-hyphen breaks
|
|
99
|
+
const items = [
|
|
100
|
+
box(35, 0), // "exam"
|
|
101
|
+
penalty(5, 50, true, 1), // soft hyphen
|
|
102
|
+
box(20, 2), // "ple"
|
|
103
|
+
glue(10, 5, 2, 3),
|
|
104
|
+
box(35, 4), // "docu"
|
|
105
|
+
penalty(5, 50, true, 5), // soft hyphen
|
|
106
|
+
box(20, 6), // "ment"
|
|
107
|
+
...finalItems(),
|
|
108
|
+
];
|
|
109
|
+
const breaks = computeBreakpoints(items, {
|
|
110
|
+
...defaultOptions,
|
|
111
|
+
lineWidth: () => 60,
|
|
112
|
+
});
|
|
113
|
+
expect(breaks.length).toBeGreaterThanOrEqual(1);
|
|
114
|
+
});
|
|
115
|
+
it('produces ragged last line (no demerits for short final line)', () => {
|
|
116
|
+
const items = [
|
|
117
|
+
box(40, 0),
|
|
118
|
+
glue(10, 5, 2, 1),
|
|
119
|
+
box(40, 2),
|
|
120
|
+
glue(10, 5, 2, 3),
|
|
121
|
+
box(10, 4), // short last word
|
|
122
|
+
...finalItems(),
|
|
123
|
+
];
|
|
124
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
125
|
+
// The algorithm should produce breaks without penalizing the short last line
|
|
126
|
+
expect(breaks.length).toBeGreaterThanOrEqual(1);
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
// Adapter: richTokensToItems
|
|
131
|
+
// ---------------------------------------------------------------------------
|
|
132
|
+
describe('richTokensToItems', () => {
|
|
133
|
+
it('converts space tokens to glue items', () => {
|
|
134
|
+
const tokens = [
|
|
135
|
+
{ text: 'hello', bold: false, italic: false, kind: 'text', width: 50 },
|
|
136
|
+
{ text: ' ', bold: false, italic: false, kind: 'space', width: 10 },
|
|
137
|
+
{ text: 'world', bold: false, italic: false, kind: 'text', width: 50 },
|
|
138
|
+
];
|
|
139
|
+
const items = richTokensToItems(tokens, 10, 1.5, 0.8);
|
|
140
|
+
// box, glue, box, final-glue, final-penalty
|
|
141
|
+
expect(items.length).toBe(5);
|
|
142
|
+
expect(items[0].type).toBe('box');
|
|
143
|
+
expect(items[1].type).toBe('glue');
|
|
144
|
+
expect(items[2].type).toBe('box');
|
|
145
|
+
});
|
|
146
|
+
it('decomposes hyphenatable words into sub-boxes with penalties', () => {
|
|
147
|
+
const tokens = [
|
|
148
|
+
{
|
|
149
|
+
text: 'example',
|
|
150
|
+
bold: false,
|
|
151
|
+
italic: false,
|
|
152
|
+
kind: 'text',
|
|
153
|
+
width: 70,
|
|
154
|
+
breakPoints: [{ charIndex: 4, widthBefore: 40 }],
|
|
155
|
+
hyphenWidth: 5,
|
|
156
|
+
},
|
|
157
|
+
];
|
|
158
|
+
const items = richTokensToItems(tokens, 10, 1.5, 0.8);
|
|
159
|
+
// box("exam"), penalty, box("ple"), final-glue, final-penalty
|
|
160
|
+
expect(items.length).toBe(5);
|
|
161
|
+
expect(items[0].type).toBe('box');
|
|
162
|
+
expect(items[0].width).toBe(40);
|
|
163
|
+
expect(items[1].type).toBe('penalty');
|
|
164
|
+
expect(items[1].flagged).toBe(true);
|
|
165
|
+
expect(items[1].width).toBe(5);
|
|
166
|
+
expect(items[2].type).toBe('box');
|
|
167
|
+
expect(items[2].width).toBe(30); // 70 - 40
|
|
168
|
+
});
|
|
169
|
+
it('preserves bold/italic metadata', () => {
|
|
170
|
+
const tokens = [
|
|
171
|
+
{ text: 'bold', bold: true, italic: false, kind: 'text', width: 40 },
|
|
172
|
+
];
|
|
173
|
+
const items = richTokensToItems(tokens, 10, 1.5, 0.8);
|
|
174
|
+
const meta = items[0].meta;
|
|
175
|
+
expect(meta.bold).toBe(true);
|
|
176
|
+
expect(meta.italic).toBe(false);
|
|
177
|
+
});
|
|
178
|
+
});
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
// Integration: K-P produces fewer loose lines than greedy
|
|
181
|
+
// ---------------------------------------------------------------------------
|
|
182
|
+
describe('K-P vs greedy quality', () => {
|
|
183
|
+
it('K-P can redistribute words for more even spacing', () => {
|
|
184
|
+
// Simulate: 5 words of varying width, line width = 100
|
|
185
|
+
// Greedy would stuff first line, leaving second line loose
|
|
186
|
+
const items = [
|
|
187
|
+
box(45, 0), // word1
|
|
188
|
+
glue(10, 5, 2, 1), // space
|
|
189
|
+
box(45, 2), // word2 (greedy: line 1 = 45+10+45 = 100, perfect)
|
|
190
|
+
glue(10, 5, 2, 3), // space
|
|
191
|
+
box(20, 4), // word3
|
|
192
|
+
glue(10, 5, 2, 5), // space
|
|
193
|
+
box(15, 6), // word4 (greedy: line 2 = 20+10+15 = 45, very loose)
|
|
194
|
+
...finalItems(),
|
|
195
|
+
];
|
|
196
|
+
const breaks = computeBreakpoints(items, defaultOptions);
|
|
197
|
+
expect(breaks.length).toBe(2);
|
|
198
|
+
// K-P might choose to break after word1 instead, making:
|
|
199
|
+
// Line 1: word1 (45) - stretched but not terrible
|
|
200
|
+
// Line 2: word2 + word3 + word4 (45+10+20+10+15 = 100) - perfect
|
|
201
|
+
// Or keep the greedy solution if it's actually optimal.
|
|
202
|
+
// Either way, the algorithm should produce valid breaks.
|
|
203
|
+
for (const b of breaks) {
|
|
204
|
+
expect(b).toBeGreaterThanOrEqual(0);
|
|
205
|
+
expect(b).toBeLessThan(items.length);
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
});
|
|
209
|
+
//# sourceMappingURL=knuthPlass.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knuthPlass.test.js","sourceRoot":"","sources":["../../src/__tests__/knuthPlass.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { BodyTextConfig, ResolvedBodyTextConfig, HyphenationConfig } from '../types';
|
|
1
|
+
import type { BodyTextConfig, ResolvedBodyTextConfig, HyphenationConfig, HyphenationLocale } from '../types';
|
|
2
2
|
export declare const DEFAULT_HYPHENATION_CONFIG: ResolvedBodyTextConfig['hyphenation'];
|
|
3
3
|
export declare const DEFAULT_BODY_TEXT_CONFIG: ResolvedBodyTextConfig;
|
|
4
4
|
export declare function hyphenationEqual(a: HyphenationConfig | undefined, b: HyphenationConfig | undefined): boolean;
|
|
5
|
-
export declare function resolveBodyTextConfig(partial?: BodyTextConfig): ResolvedBodyTextConfig;
|
|
5
|
+
export declare function resolveBodyTextConfig(partial?: BodyTextConfig, documentLocale?: HyphenationLocale): ResolvedBodyTextConfig;
|
|
6
6
|
export declare function stripBodyTextDefaults(bodyText?: BodyTextConfig): BodyTextConfig | undefined;
|
|
7
7
|
//# sourceMappingURL=bodyText.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodyText.d.ts","sourceRoot":"","sources":["../../src/defaults/bodyText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"bodyText.d.ts","sourceRoot":"","sources":["../../src/defaults/bodyText.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7G,eAAO,MAAM,0BAA0B,EAAE,sBAAsB,CAAC,aAAa,CAG5E,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,sBAetC,CAAC;AAEF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,iBAAiB,GAAG,SAAS,EAAE,CAAC,EAAE,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAK5G;AAED,wBAAgB,qBAAqB,CAAC,OAAO,CAAC,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,iBAAiB,GAAG,sBAAsB,CAwB1H;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,cAAc,GAAG,cAAc,GAAG,SAAS,CAwE3F"}
|
|
@@ -17,6 +17,7 @@ export const DEFAULT_BODY_TEXT_CONFIG = {
|
|
|
17
17
|
hangingIndent: false,
|
|
18
18
|
maxWordSpacing: 1.5,
|
|
19
19
|
minWordSpacing: 0.8,
|
|
20
|
+
optimalLineBreaking: true,
|
|
20
21
|
};
|
|
21
22
|
export function hyphenationEqual(a, b) {
|
|
22
23
|
if (!a && !b)
|
|
@@ -26,9 +27,9 @@ export function hyphenationEqual(a, b) {
|
|
|
26
27
|
return (a.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled) === (b.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled)
|
|
27
28
|
&& (a.locale ?? DEFAULT_HYPHENATION_CONFIG.locale) === (b.locale ?? DEFAULT_HYPHENATION_CONFIG.locale);
|
|
28
29
|
}
|
|
29
|
-
export function resolveBodyTextConfig(partial) {
|
|
30
|
+
export function resolveBodyTextConfig(partial, documentLocale) {
|
|
30
31
|
if (!partial)
|
|
31
|
-
return { ...DEFAULT_BODY_TEXT_CONFIG, hyphenation: { ...DEFAULT_HYPHENATION_CONFIG } };
|
|
32
|
+
return { ...DEFAULT_BODY_TEXT_CONFIG, hyphenation: { ...DEFAULT_HYPHENATION_CONFIG, locale: documentLocale ?? DEFAULT_HYPHENATION_CONFIG.locale } };
|
|
32
33
|
return {
|
|
33
34
|
fontFamily: partial.fontFamily ?? DEFAULT_BODY_TEXT_CONFIG.fontFamily,
|
|
34
35
|
fontSize: partial.fontSize ?? DEFAULT_BODY_TEXT_CONFIG.fontSize,
|
|
@@ -42,12 +43,13 @@ export function resolveBodyTextConfig(partial) {
|
|
|
42
43
|
boldFontWeight: partial.boldFontWeight ?? DEFAULT_BODY_TEXT_CONFIG.boldFontWeight,
|
|
43
44
|
hyphenation: {
|
|
44
45
|
enabled: partial.hyphenation?.enabled ?? DEFAULT_HYPHENATION_CONFIG.enabled,
|
|
45
|
-
locale: partial.hyphenation?.locale ?? DEFAULT_HYPHENATION_CONFIG.locale,
|
|
46
|
+
locale: partial.hyphenation?.locale ?? documentLocale ?? DEFAULT_HYPHENATION_CONFIG.locale,
|
|
46
47
|
},
|
|
47
48
|
firstLineIndent: partial.firstLineIndent ?? DEFAULT_BODY_TEXT_CONFIG.firstLineIndent,
|
|
48
49
|
hangingIndent: partial.hangingIndent ?? DEFAULT_BODY_TEXT_CONFIG.hangingIndent,
|
|
49
50
|
maxWordSpacing: partial.maxWordSpacing ?? DEFAULT_BODY_TEXT_CONFIG.maxWordSpacing,
|
|
50
51
|
minWordSpacing: partial.minWordSpacing ?? DEFAULT_BODY_TEXT_CONFIG.minWordSpacing,
|
|
52
|
+
optimalLineBreaking: partial.optimalLineBreaking ?? DEFAULT_BODY_TEXT_CONFIG.optimalLineBreaking,
|
|
51
53
|
};
|
|
52
54
|
}
|
|
53
55
|
export function stripBodyTextDefaults(bodyText) {
|
|
@@ -115,6 +117,10 @@ export function stripBodyTextDefaults(bodyText) {
|
|
|
115
117
|
result.minWordSpacing = bodyText.minWordSpacing;
|
|
116
118
|
hasOverride = true;
|
|
117
119
|
}
|
|
120
|
+
if (bodyText.optimalLineBreaking !== undefined && bodyText.optimalLineBreaking !== DEFAULT_BODY_TEXT_CONFIG.optimalLineBreaking) {
|
|
121
|
+
result.optimalLineBreaking = bodyText.optimalLineBreaking;
|
|
122
|
+
hasOverride = true;
|
|
123
|
+
}
|
|
118
124
|
return hasOverride ? result : undefined;
|
|
119
125
|
}
|
|
120
126
|
//# sourceMappingURL=bodyText.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bodyText.js","sourceRoot":"","sources":["../../src/defaults/bodyText.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAExD,MAAM,CAAC,MAAM,0BAA0B,GAA0C;IAC/E,OAAO,EAAE,IAAI;IACb,MAAM,EAAE,OAAO;CAChB,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAA2B;IAC9D,UAAU,EAAE,aAAa;IACzB,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE;IAClC,UAAU,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;IACtC,gBAAgB,EAAE,KAAK;IACvB,KAAK,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE;IACxC,SAAS,EAAE,SAAS;IACpB,UAAU,EAAE,GAAG;IACf,cAAc,EAAE,GAAG;IACnB,WAAW,EAAE,EAAE,GAAG,0BAA0B,EAAE;IAC9C,eAAe,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE;IAC3C,aAAa,EAAE,KAAK;IACpB,cAAc,EAAE,GAAG;IACnB,cAAc,EAAE,GAAG;
|
|
1
|
+
{"version":3,"file":"bodyText.js","sourceRoot":"","sources":["../../src/defaults/bodyText.ts"],"names":[],"mappings":"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"}
|
package/dist/hyphenate.d.ts
CHANGED
|
@@ -1,11 +1,8 @@
|
|
|
1
1
|
import type { HyphenationLocale } from './types';
|
|
2
|
-
/**
|
|
3
|
-
* Set the current hyphenation locale.
|
|
4
|
-
*/
|
|
5
2
|
export declare function setHyphenationLocale(locale: HyphenationLocale): void;
|
|
6
3
|
/**
|
|
7
|
-
* Hyphenate a full text string by inserting soft hyphens at syllable boundaries
|
|
8
|
-
*
|
|
4
|
+
* Hyphenate a full text string by inserting soft hyphens at syllable boundaries
|
|
5
|
+
* using TeX/Liang patterns for the active locale.
|
|
9
6
|
*/
|
|
10
7
|
export declare function hyphenateText(text: string, locale?: HyphenationLocale): string;
|
|
11
8
|
//# sourceMappingURL=hyphenate.d.ts.map
|
package/dist/hyphenate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyphenate.d.ts","sourceRoot":"","sources":["../src/hyphenate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hyphenate.d.ts","sourceRoot":"","sources":["../src/hyphenate.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA0BjD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,iBAAiB,GAAG,IAAI,CAEpE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAE9E"}
|
package/dist/hyphenate.js
CHANGED
|
@@ -1,140 +1,40 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
'
|
|
12
|
-
'
|
|
13
|
-
'
|
|
14
|
-
'
|
|
15
|
-
'
|
|
16
|
-
'
|
|
1
|
+
import Hypher from 'hypher';
|
|
2
|
+
import enUs from 'hyphenation.en-us';
|
|
3
|
+
import es from 'hyphenation.es';
|
|
4
|
+
import fr from 'hyphenation.fr';
|
|
5
|
+
import de from 'hyphenation.de';
|
|
6
|
+
import it from 'hyphenation.it';
|
|
7
|
+
import pt from 'hyphenation.pt';
|
|
8
|
+
import ca from 'hyphenation.ca';
|
|
9
|
+
import nl from 'hyphenation.nl';
|
|
10
|
+
const PATTERNS = {
|
|
11
|
+
'en-us': enUs,
|
|
12
|
+
'es': es,
|
|
13
|
+
'fr': fr,
|
|
14
|
+
'de': de,
|
|
15
|
+
'it': it,
|
|
16
|
+
'pt': pt,
|
|
17
|
+
'ca': ca,
|
|
18
|
+
'nl': nl,
|
|
17
19
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
'fr': ['contre', 'entre', 'inter', 'trans', 'super', 'anti', 'auto', 'pré', 'post', 'semi', 'sous', 'sur', 'dé', 're'],
|
|
25
|
-
'de': ['über', 'unter', 'zwischen', 'gegen', 'wider', 'vor', 'nach', 'aus', 'ein', 'um', 'ab', 'an', 'auf', 'ver', 'zer', 'ent', 'emp', 'be', 'ge', 'miss'],
|
|
26
|
-
'it': ['contro', 'inter', 'trans', 'sopra', 'sotto', 'anti', 'auto', 'pre', 'post', 'semi', 'dis', 'ri', 'in'],
|
|
27
|
-
'pt': ['des', 'inter', 'trans', 'sobre', 'contra', 'anti', 'auto', 'pré', 'pós', 'semi', 'sub', 'in', 're'],
|
|
28
|
-
'ca': ['des', 'inter', 'trans', 'sobre', 'contra', 'anti', 'auto', 'pre', 'post', 'semi', 'sub', 'in', 're'],
|
|
29
|
-
'nl': ['over', 'onder', 'tussen', 'tegen', 'voor', 'ver', 'her', 'ont', 'be', 'ge'],
|
|
30
|
-
};
|
|
31
|
-
const COMMON_SUFFIXES = {
|
|
32
|
-
'en-us': ['tion', 'sion', 'ment', 'ness', 'able', 'ible', 'ful', 'less', 'ous', 'ive', 'ing', 'ence', 'ance', 'ity'],
|
|
33
|
-
'es': ['ción', 'sión', 'mente', 'miento', 'idad', 'ble', 'oso', 'ivo', 'ando', 'endo', 'ción', 'dad'],
|
|
34
|
-
'fr': ['tion', 'sion', 'ment', 'eur', 'euse', 'able', 'ible', 'eux', 'ive', 'ence', 'ance', 'ité'],
|
|
35
|
-
'de': ['ung', 'heit', 'keit', 'lich', 'isch', 'schaft', 'ment', 'tion', 'bar', 'sam', 'haft'],
|
|
36
|
-
'it': ['zione', 'sione', 'mente', 'mento', 'ità', 'bile', 'oso', 'ivo', 'ando', 'endo'],
|
|
37
|
-
'pt': ['ção', 'são', 'mente', 'mento', 'dade', 'vel', 'oso', 'ivo', 'ando', 'endo'],
|
|
38
|
-
'ca': ['ció', 'sió', 'ment', 'tat', 'ble', 'ós', 'iu', 'ant', 'ent'],
|
|
39
|
-
'nl': ['heid', 'lijk', 'ting', 'baar', 'zaam', 'isch', 'ment', 'sel'],
|
|
40
|
-
};
|
|
41
|
-
// ---------------------------------------------------------------------------
|
|
42
|
-
// Core hyphenation algorithm
|
|
43
|
-
// ---------------------------------------------------------------------------
|
|
44
|
-
function isVowel(char, vowelSet) {
|
|
45
|
-
return vowelSet.has(char);
|
|
46
|
-
}
|
|
47
|
-
function isConsonant(char, vowelSet) {
|
|
48
|
-
return /\p{L}/u.test(char) && !vowelSet.has(char);
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Find syllable break points in a word using vowel/consonant patterns.
|
|
52
|
-
* Returns an array of indices where soft hyphens should be inserted.
|
|
53
|
-
*/
|
|
54
|
-
function findBreakPoints(word, locale) {
|
|
55
|
-
if (word.length < MIN_WORD_LENGTH)
|
|
56
|
-
return [];
|
|
57
|
-
const vowelSet = VOWELS[locale] ?? VOWELS['en-us'];
|
|
58
|
-
const lower = word.toLowerCase();
|
|
59
|
-
const breaks = [];
|
|
60
|
-
// Check for prefix break
|
|
61
|
-
const prefixes = COMMON_PREFIXES[locale] ?? COMMON_PREFIXES['en-us'];
|
|
62
|
-
for (const prefix of prefixes) {
|
|
63
|
-
if (lower.startsWith(prefix) && word.length - prefix.length >= MIN_SUFFIX) {
|
|
64
|
-
breaks.push(prefix.length);
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
// Check for suffix break
|
|
69
|
-
const suffixes = COMMON_SUFFIXES[locale] ?? COMMON_SUFFIXES['en-us'];
|
|
70
|
-
for (const suffix of suffixes) {
|
|
71
|
-
if (lower.endsWith(suffix) && word.length - suffix.length >= MIN_PREFIX) {
|
|
72
|
-
const idx = word.length - suffix.length;
|
|
73
|
-
if (!breaks.includes(idx))
|
|
74
|
-
breaks.push(idx);
|
|
75
|
-
break;
|
|
76
|
-
}
|
|
20
|
+
const instances = new Map();
|
|
21
|
+
function getHyphenator(locale) {
|
|
22
|
+
let h = instances.get(locale);
|
|
23
|
+
if (!h) {
|
|
24
|
+
h = new Hypher(PATTERNS[locale] ?? PATTERNS['en-us']);
|
|
25
|
+
instances.set(locale, h);
|
|
77
26
|
}
|
|
78
|
-
|
|
79
|
-
// VC-CV pattern: break between consonants when surrounded by vowels
|
|
80
|
-
for (let i = MIN_PREFIX; i < word.length - MIN_SUFFIX + 1; i++) {
|
|
81
|
-
if (breaks.includes(i))
|
|
82
|
-
continue;
|
|
83
|
-
const prev = word[i - 1];
|
|
84
|
-
const curr = word[i];
|
|
85
|
-
const next = i + 1 < word.length ? word[i + 1] : '';
|
|
86
|
-
// Break before consonant + vowel (V-CV)
|
|
87
|
-
if (isVowel(prev, vowelSet) && isConsonant(curr, vowelSet) && next && isVowel(next, vowelSet)) {
|
|
88
|
-
breaks.push(i);
|
|
89
|
-
continue;
|
|
90
|
-
}
|
|
91
|
-
// Break between two consonants (VC-CV)
|
|
92
|
-
if (i >= 2) {
|
|
93
|
-
const prevPrev = word[i - 2];
|
|
94
|
-
if (isVowel(prevPrev, vowelSet) && isConsonant(prev, vowelSet) && isConsonant(curr, vowelSet) && next && isVowel(next, vowelSet)) {
|
|
95
|
-
breaks.push(i);
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
return breaks.sort((a, b) => a - b);
|
|
27
|
+
return h;
|
|
100
28
|
}
|
|
101
|
-
/**
|
|
102
|
-
* Insert soft hyphens into a word at syllable boundaries.
|
|
103
|
-
*/
|
|
104
|
-
function hyphenateWord(word, locale) {
|
|
105
|
-
// Skip short words, words with existing hyphens, numbers, etc.
|
|
106
|
-
if (word.length < MIN_WORD_LENGTH)
|
|
107
|
-
return word;
|
|
108
|
-
if (/[\d]/.test(word))
|
|
109
|
-
return word;
|
|
110
|
-
const breakPoints = findBreakPoints(word, locale);
|
|
111
|
-
if (breakPoints.length === 0)
|
|
112
|
-
return word;
|
|
113
|
-
let result = '';
|
|
114
|
-
let lastIdx = 0;
|
|
115
|
-
for (const bp of breakPoints) {
|
|
116
|
-
result += word.slice(lastIdx, bp) + SOFT_HYPHEN;
|
|
117
|
-
lastIdx = bp;
|
|
118
|
-
}
|
|
119
|
-
result += word.slice(lastIdx);
|
|
120
|
-
return result;
|
|
121
|
-
}
|
|
122
|
-
// ---------------------------------------------------------------------------
|
|
123
|
-
// Public API
|
|
124
|
-
// ---------------------------------------------------------------------------
|
|
125
29
|
let currentLocale = 'en-us';
|
|
126
|
-
/**
|
|
127
|
-
* Set the current hyphenation locale.
|
|
128
|
-
*/
|
|
129
30
|
export function setHyphenationLocale(locale) {
|
|
130
31
|
currentLocale = locale;
|
|
131
32
|
}
|
|
132
33
|
/**
|
|
133
|
-
* Hyphenate a full text string by inserting soft hyphens at syllable boundaries
|
|
134
|
-
*
|
|
34
|
+
* Hyphenate a full text string by inserting soft hyphens at syllable boundaries
|
|
35
|
+
* using TeX/Liang patterns for the active locale.
|
|
135
36
|
*/
|
|
136
37
|
export function hyphenateText(text, locale) {
|
|
137
|
-
|
|
138
|
-
return text.replace(/\p{L}+/gu, (word) => hyphenateWord(word, loc));
|
|
38
|
+
return getHyphenator(locale ?? currentLocale).hyphenateText(text);
|
|
139
39
|
}
|
|
140
40
|
//# sourceMappingURL=hyphenate.js.map
|
package/dist/hyphenate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hyphenate.js","sourceRoot":"","sources":["../src/hyphenate.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"hyphenate.js","sourceRoot":"","sources":["../src/hyphenate.ts"],"names":[],"mappings":"AAAA,OAAO,MAAoC,MAAM,QAAQ,CAAC;AAC1D,OAAO,IAAI,MAAM,mBAAmB,CAAC;AACrC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAChC,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAGhC,MAAM,QAAQ,GAAmD;IAC/D,OAAO,EAAE,IAAI;IACb,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;IACR,IAAI,EAAE,EAAE;CACT,CAAC;AAEF,MAAM,SAAS,GAAG,IAAI,GAAG,EAA6B,CAAC;AAEvD,SAAS,aAAa,CAAC,MAAyB;IAC9C,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAC9B,IAAI,CAAC,CAAC,EAAE,CAAC;QACP,CAAC,GAAG,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QACtD,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC3B,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,IAAI,aAAa,GAAsB,OAAO,CAAC;AAE/C,MAAM,UAAU,oBAAoB,CAAC,MAAyB;IAC5D,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAA0B;IACpE,OAAO,aAAa,CAAC,MAAM,IAAI,aAAa,CAAC,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Knuth-Plass optimal paragraph line-breaking algorithm.
|
|
3
|
+
*
|
|
4
|
+
* Replaces the greedy first-fit line breaker with a dynamic-programming
|
|
5
|
+
* approach that minimizes total demerits across all lines of a paragraph,
|
|
6
|
+
* producing more even word-spacing and fewer "loose" lines.
|
|
7
|
+
*/
|
|
8
|
+
import type { PreparedTextWithSegments } from '@chenglou/pretext';
|
|
9
|
+
import type { VDTLine } from './vdt';
|
|
10
|
+
import type { TextAlign } from './types';
|
|
11
|
+
export interface KPBox {
|
|
12
|
+
type: 'box';
|
|
13
|
+
width: number;
|
|
14
|
+
sourceIndex: number;
|
|
15
|
+
meta?: unknown;
|
|
16
|
+
}
|
|
17
|
+
export interface KPGlue {
|
|
18
|
+
type: 'glue';
|
|
19
|
+
width: number;
|
|
20
|
+
stretch: number;
|
|
21
|
+
shrink: number;
|
|
22
|
+
sourceIndex: number;
|
|
23
|
+
meta?: unknown;
|
|
24
|
+
}
|
|
25
|
+
export interface KPPenalty {
|
|
26
|
+
type: 'penalty';
|
|
27
|
+
width: number;
|
|
28
|
+
penalty: number;
|
|
29
|
+
flagged: boolean;
|
|
30
|
+
sourceIndex: number;
|
|
31
|
+
meta?: unknown;
|
|
32
|
+
}
|
|
33
|
+
export type KPItem = KPBox | KPGlue | KPPenalty;
|
|
34
|
+
export interface KPOptions {
|
|
35
|
+
/** Available width for each line (varies with indent). */
|
|
36
|
+
lineWidth: (lineIndex: number) => number;
|
|
37
|
+
/** Normal space width for the font. */
|
|
38
|
+
normalSpaceWidth: number;
|
|
39
|
+
/** Max space stretch as multiplier of normalSpaceWidth (e.g. 1.5). */
|
|
40
|
+
maxStretchRatio: number;
|
|
41
|
+
/** Min space width as multiplier of normalSpaceWidth (e.g. 0.8). */
|
|
42
|
+
minShrinkRatio: number;
|
|
43
|
+
/** Penalty for two consecutive hyphenated lines. */
|
|
44
|
+
consecutiveHyphenDemerit?: number;
|
|
45
|
+
/** Penalty for adjacent lines of very different tightness. */
|
|
46
|
+
fitnessClassDemerit?: number;
|
|
47
|
+
}
|
|
48
|
+
export declare function computeBreakpoints(items: KPItem[], options: KPOptions): number[];
|
|
49
|
+
export declare function pretextSegmentsToItems(prepared: PreparedTextWithSegments, normalSpaceWidth: number, maxStretchRatio: number, minShrinkRatio: number): KPItem[];
|
|
50
|
+
interface RichBreakPoint {
|
|
51
|
+
charIndex: number;
|
|
52
|
+
widthBefore: number;
|
|
53
|
+
}
|
|
54
|
+
interface RichToken {
|
|
55
|
+
text: string;
|
|
56
|
+
bold: boolean;
|
|
57
|
+
italic: boolean;
|
|
58
|
+
kind: 'text' | 'space';
|
|
59
|
+
width: number;
|
|
60
|
+
breakPoints?: RichBreakPoint[];
|
|
61
|
+
hyphenWidth?: number;
|
|
62
|
+
}
|
|
63
|
+
export interface RichTokenMeta {
|
|
64
|
+
bold: boolean;
|
|
65
|
+
italic: boolean;
|
|
66
|
+
originalTokenIndex: number;
|
|
67
|
+
/** Character index within the original token where this sub-box starts. */
|
|
68
|
+
subStart?: number;
|
|
69
|
+
/** Character index within the original token where this sub-box ends. */
|
|
70
|
+
subEnd?: number;
|
|
71
|
+
}
|
|
72
|
+
export declare function richTokensToItems(tokens: RichToken[], normalSpaceWidth: number, maxStretchRatio: number, minShrinkRatio: number): KPItem[];
|
|
73
|
+
export declare function reconstructPretextLines(items: KPItem[], breaks: number[], prepared: PreparedTextWithSegments, lineHeightPx: number, lineWidthFn: (lineIndex: number) => number, lineIndentFn: (lineIndex: number) => number, normalSpaceWidth: number, textAlign: TextAlign): VDTLine[];
|
|
74
|
+
export declare function reconstructRichLines(items: KPItem[], breaks: number[], tokens: RichToken[], lineHeightPx: number, lineWidthFn: (lineIndex: number) => number, lineIndentFn: (lineIndex: number) => number, normalSpaceWidth: number, textAlign: TextAlign): VDTLine[];
|
|
75
|
+
export {};
|
|
76
|
+
//# sourceMappingURL=knuthPlass.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knuthPlass.d.ts","sourceRoot":"","sources":["../src/knuthPlass.ts"],"names":[],"mappings":"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"}
|