@kurot/core 2.1.1 → 2.2.1
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/CHANGELOG.md +72 -0
- package/README.md +50 -2
- package/dist/kurot/display/DisplayObject.d.ts +2 -1
- package/dist/kurot/display/DisplayObject.d.ts.map +1 -1
- package/dist/kurot/display/DisplayObject.js.map +1 -1
- package/dist/kurot/player/canvas/CanvasRenderer.d.ts +2 -0
- package/dist/kurot/player/canvas/CanvasRenderer.d.ts.map +1 -1
- package/dist/kurot/player/canvas/CanvasRenderer.js +37 -1
- package/dist/kurot/player/canvas/CanvasRenderer.js.map +1 -1
- package/dist/kurot/player/pipes/BitmapTextPipe.d.ts +20 -0
- package/dist/kurot/player/pipes/BitmapTextPipe.d.ts.map +1 -0
- package/dist/kurot/player/pipes/BitmapTextPipe.js +27 -0
- package/dist/kurot/player/pipes/BitmapTextPipe.js.map +1 -0
- package/dist/kurot/player/pipes/index.d.ts +2 -0
- package/dist/kurot/player/pipes/index.d.ts.map +1 -1
- package/dist/kurot/player/pipes/index.js +1 -0
- package/dist/kurot/player/pipes/index.js.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderer.d.ts +1 -0
- package/dist/kurot/player/webgl/WebGLRenderer.d.ts.map +1 -1
- package/dist/kurot/player/webgl/WebGLRenderer.js +8 -0
- package/dist/kurot/player/webgl/WebGLRenderer.js.map +1 -1
- package/dist/kurot/resource/Resource.d.ts.map +1 -1
- package/dist/kurot/resource/Resource.js +4 -0
- package/dist/kurot/resource/Resource.js.map +1 -1
- package/dist/kurot/resource/ResourceItem.d.ts +1 -0
- package/dist/kurot/resource/ResourceItem.d.ts.map +1 -1
- package/dist/kurot/resource/ResourceItem.js +1 -0
- package/dist/kurot/resource/ResourceItem.js.map +1 -1
- package/dist/kurot/resource/analyzers/FontAnalyzer.d.ts +16 -0
- package/dist/kurot/resource/analyzers/FontAnalyzer.d.ts.map +1 -0
- package/dist/kurot/resource/analyzers/FontAnalyzer.js +75 -0
- package/dist/kurot/resource/analyzers/FontAnalyzer.js.map +1 -0
- package/dist/kurot/resource/analyzers/index.d.ts +1 -0
- package/dist/kurot/resource/analyzers/index.d.ts.map +1 -1
- package/dist/kurot/resource/analyzers/index.js +1 -0
- package/dist/kurot/resource/analyzers/index.js.map +1 -1
- package/dist/kurot/resource/index.d.ts +1 -0
- package/dist/kurot/resource/index.d.ts.map +1 -1
- package/dist/kurot/resource/index.js +1 -0
- package/dist/kurot/resource/index.js.map +1 -1
- package/dist/kurot/text/BitmapFont.d.ts +15 -21
- package/dist/kurot/text/BitmapFont.d.ts.map +1 -1
- package/dist/kurot/text/BitmapFont.js +59 -66
- package/dist/kurot/text/BitmapFont.js.map +1 -1
- package/dist/kurot/text/BitmapText.d.ts +29 -19
- package/dist/kurot/text/BitmapText.d.ts.map +1 -1
- package/dist/kurot/text/BitmapText.js +93 -141
- package/dist/kurot/text/BitmapText.js.map +1 -1
- package/dist/kurot/text/LineBreaks.d.ts +2 -1
- package/dist/kurot/text/LineBreaks.d.ts.map +1 -1
- package/dist/kurot/text/LineBreaks.js +13 -9
- package/dist/kurot/text/LineBreaks.js.map +1 -1
- package/dist/kurot/text/TextLineLayout.d.ts.map +1 -1
- package/dist/kurot/text/TextLineLayout.js +5 -12
- package/dist/kurot/text/TextLineLayout.js.map +1 -1
- package/dist/kurot/text/TextSegmentation.d.ts +7 -0
- package/dist/kurot/text/TextSegmentation.d.ts.map +1 -0
- package/dist/kurot/text/TextSegmentation.js +17 -0
- package/dist/kurot/text/TextSegmentation.js.map +1 -0
- package/dist/kurot/text/WordWrap.d.ts.map +1 -1
- package/dist/kurot/text/WordWrap.js +3 -11
- package/dist/kurot/text/WordWrap.js.map +1 -1
- package/dist/kurot/text/index.d.ts +1 -0
- package/dist/kurot/text/index.d.ts.map +1 -1
- package/dist/kurot/text/index.js.map +1 -1
- package/docs/ai-context.md +33 -9
- package/docs/architecture.md +332 -279
- package/docs/bitmap-fonts.md +85 -0
- package/docs/resource.md +185 -156
- package/docs/text-layout.md +71 -8
- package/package.json +4 -2
|
@@ -1,48 +1,62 @@
|
|
|
1
|
+
import { layoutBitmapText } from '@kurot/bitmap-font';
|
|
1
2
|
import { DisplayObject } from '../display/DisplayObject.js';
|
|
2
|
-
import { HorizontalAlign } from './enums/HorizontalAlign.js';
|
|
3
|
-
import { VerticalAlign } from './enums/VerticalAlign.js';
|
|
4
3
|
/**
|
|
5
|
-
*
|
|
4
|
+
* Draws atlas glyphs directly through WebGL batching or Canvas 2D.
|
|
5
|
+
* Width wraps by code point; use multiline=false for one unwrapped line.
|
|
6
|
+
* Fonts are borrowed. Missing glyphs are skipped; U+0020 has a fallback advance.
|
|
6
7
|
*/
|
|
7
8
|
export class BitmapText extends DisplayObject {
|
|
9
|
+
// ── Static fields ─────────────────────────────────────────────────────────
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated Font layout uses its explicit spaceAdvance metric.
|
|
12
|
+
* Set that metric in font data before constructing a font.
|
|
13
|
+
*/
|
|
8
14
|
static EMPTY_FACTOR = 0.33;
|
|
15
|
+
// ── Instance fields ──────────────────────────────────────────────────────
|
|
9
16
|
_text = '';
|
|
10
17
|
_font;
|
|
11
18
|
_lineSpacing = 0;
|
|
12
19
|
_letterSpacing = 0;
|
|
13
|
-
_textAlign =
|
|
14
|
-
_verticalAlign =
|
|
20
|
+
_textAlign = 'left';
|
|
21
|
+
_verticalAlign = 'top';
|
|
22
|
+
_smoothing = true;
|
|
23
|
+
_multiline = true;
|
|
24
|
+
_layout;
|
|
25
|
+
// ── Constructor ──────────────────────────────────────────────────────────
|
|
26
|
+
constructor() {
|
|
27
|
+
super();
|
|
28
|
+
this.$renderObjectType = 7 /* RenderObjectType.BITMAP_TEXT */;
|
|
29
|
+
}
|
|
30
|
+
// ── Getters / Setters ─────────────────────────────────────────────────────
|
|
31
|
+
get width() {
|
|
32
|
+
return super.width;
|
|
33
|
+
}
|
|
15
34
|
set width(value) {
|
|
16
|
-
|
|
17
|
-
if (this.$explicitWidth === v)
|
|
35
|
+
if (Object.is(this.$explicitWidth, value))
|
|
18
36
|
return;
|
|
19
|
-
|
|
37
|
+
if (!Number.isNaN(value) && (!Number.isFinite(value) || value < 0))
|
|
38
|
+
throw new RangeError('BitmapText.width must be nonnegative or NaN.');
|
|
39
|
+
this.$explicitWidth = value;
|
|
20
40
|
this._invalidate();
|
|
21
41
|
}
|
|
42
|
+
get height() {
|
|
43
|
+
return super.height;
|
|
44
|
+
}
|
|
22
45
|
set height(value) {
|
|
23
|
-
|
|
24
|
-
if (this.$explicitHeight === v)
|
|
46
|
+
if (Object.is(this.$explicitHeight, value))
|
|
25
47
|
return;
|
|
26
|
-
|
|
48
|
+
if (!Number.isNaN(value) && (!Number.isFinite(value) || value < 0))
|
|
49
|
+
throw new RangeError('BitmapText.height must be nonnegative or NaN.');
|
|
50
|
+
this.$explicitHeight = value;
|
|
27
51
|
this._invalidate();
|
|
28
52
|
}
|
|
29
|
-
_smoothing = true;
|
|
30
|
-
_textLinesChanged = false;
|
|
31
|
-
_textLines = [];
|
|
32
|
-
_textLinesWidth = [];
|
|
33
|
-
_lineHeights = [];
|
|
34
|
-
_textWidth = 0;
|
|
35
|
-
_textHeight = 0;
|
|
36
|
-
_textStartX = 0;
|
|
37
|
-
_textStartY = 0;
|
|
38
53
|
get text() {
|
|
39
54
|
return this._text;
|
|
40
55
|
}
|
|
41
56
|
set text(value) {
|
|
42
|
-
|
|
43
|
-
if (this._text === v)
|
|
57
|
+
if (this._text === value)
|
|
44
58
|
return;
|
|
45
|
-
this._text =
|
|
59
|
+
this._text = value;
|
|
46
60
|
this._invalidate();
|
|
47
61
|
}
|
|
48
62
|
get font() {
|
|
@@ -60,6 +74,8 @@ export class BitmapText extends DisplayObject {
|
|
|
60
74
|
set lineSpacing(value) {
|
|
61
75
|
if (this._lineSpacing === value)
|
|
62
76
|
return;
|
|
77
|
+
if (!Number.isFinite(value) || value < 0)
|
|
78
|
+
throw new RangeError('BitmapText.lineSpacing must be finite and nonnegative.');
|
|
63
79
|
this._lineSpacing = value;
|
|
64
80
|
this._invalidate();
|
|
65
81
|
}
|
|
@@ -69,6 +85,8 @@ export class BitmapText extends DisplayObject {
|
|
|
69
85
|
set letterSpacing(value) {
|
|
70
86
|
if (this._letterSpacing === value)
|
|
71
87
|
return;
|
|
88
|
+
if (!Number.isFinite(value))
|
|
89
|
+
throw new RangeError('BitmapText.letterSpacing must be finite.');
|
|
72
90
|
this._letterSpacing = value;
|
|
73
91
|
this._invalidate();
|
|
74
92
|
}
|
|
@@ -78,6 +96,8 @@ export class BitmapText extends DisplayObject {
|
|
|
78
96
|
set textAlign(value) {
|
|
79
97
|
if (this._textAlign === value)
|
|
80
98
|
return;
|
|
99
|
+
if (!['left', 'center', 'right'].includes(value))
|
|
100
|
+
throw new RangeError('Invalid bitmap text alignment.');
|
|
81
101
|
this._textAlign = value;
|
|
82
102
|
this._invalidate();
|
|
83
103
|
}
|
|
@@ -87,6 +107,8 @@ export class BitmapText extends DisplayObject {
|
|
|
87
107
|
set verticalAlign(value) {
|
|
88
108
|
if (this._verticalAlign === value)
|
|
89
109
|
return;
|
|
110
|
+
if (!['top', 'middle', 'bottom'].includes(value))
|
|
111
|
+
throw new RangeError('Invalid bitmap text vertical alignment.');
|
|
90
112
|
this._verticalAlign = value;
|
|
91
113
|
this._invalidate();
|
|
92
114
|
}
|
|
@@ -99,141 +121,71 @@ export class BitmapText extends DisplayObject {
|
|
|
99
121
|
this._smoothing = value;
|
|
100
122
|
this.$markDirty();
|
|
101
123
|
}
|
|
124
|
+
get multiline() {
|
|
125
|
+
return this._multiline;
|
|
126
|
+
}
|
|
127
|
+
set multiline(value) {
|
|
128
|
+
if (this._multiline === value)
|
|
129
|
+
return;
|
|
130
|
+
this._multiline = value;
|
|
131
|
+
this._invalidate();
|
|
132
|
+
}
|
|
102
133
|
get textWidth() {
|
|
103
|
-
this.
|
|
104
|
-
return this._textWidth;
|
|
134
|
+
return this.getLayout().width;
|
|
105
135
|
}
|
|
106
136
|
get textHeight() {
|
|
107
|
-
this.
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
this.
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
137
|
+
return this.getLayout().height;
|
|
138
|
+
}
|
|
139
|
+
// ── Public methods ───────────────────────────────────────────────────────
|
|
140
|
+
getLayout() {
|
|
141
|
+
this._layout ??= this.measureText(this.$explicitWidth, this.$explicitHeight);
|
|
142
|
+
return this._layout;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Measures with independent constraints without changing the rendered field.
|
|
146
|
+
* NaN means unconstrained; font, spacing, alignment and multiline are retained.
|
|
147
|
+
*/
|
|
148
|
+
measureText(width = NaN, height = NaN) {
|
|
149
|
+
return this._font
|
|
150
|
+
? layoutBitmapText(this._font.data, this._text, {
|
|
151
|
+
width: Number.isNaN(width) ? undefined : width,
|
|
152
|
+
height: Number.isNaN(height) ? undefined : height,
|
|
153
|
+
lineSpacing: this._lineSpacing,
|
|
154
|
+
letterSpacing: this._letterSpacing,
|
|
155
|
+
textAlign: this._textAlign,
|
|
156
|
+
verticalAlign: this._verticalAlign,
|
|
157
|
+
multiline: this._multiline,
|
|
158
|
+
})
|
|
159
|
+
: { glyphs: [], lines: [], width: 0, height: 0, startX: 0, startY: 0, bounds: { x: 0, y: 0, width: 0, height: 0 } };
|
|
160
|
+
}
|
|
161
|
+
getGlyphs() {
|
|
162
|
+
return this.getLayout().glyphs;
|
|
118
163
|
}
|
|
119
164
|
getTextLines() {
|
|
120
|
-
return this.
|
|
165
|
+
return this.getLayout().lines.map(line => line.text);
|
|
121
166
|
}
|
|
122
167
|
getTextLinesWidth() {
|
|
123
|
-
this.
|
|
124
|
-
return this._textLinesWidth;
|
|
168
|
+
return this.getLayout().lines.map(line => line.width);
|
|
125
169
|
}
|
|
126
170
|
getLineHeights() {
|
|
127
|
-
this.
|
|
128
|
-
return this._lineHeights;
|
|
171
|
+
return this.getLayout().lines.map(line => line.height);
|
|
129
172
|
}
|
|
130
173
|
getTextStartX() {
|
|
131
|
-
this.
|
|
132
|
-
return this._textStartX;
|
|
174
|
+
return this.getLayout().startX;
|
|
133
175
|
}
|
|
134
176
|
getTextStartY() {
|
|
135
|
-
this.
|
|
136
|
-
return this._textStartY;
|
|
177
|
+
return this.getLayout().startY;
|
|
137
178
|
}
|
|
179
|
+
// ── Override methods ─────────────────────────────────────────────────────
|
|
180
|
+
$measureContentBounds(bounds) {
|
|
181
|
+
const measured = this.getLayout().bounds;
|
|
182
|
+
bounds.setTo(measured.x, measured.y, measured.width, measured.height);
|
|
183
|
+
}
|
|
184
|
+
// ── Private methods ──────────────────────────────────────────────────────
|
|
138
185
|
_invalidate() {
|
|
139
|
-
this.
|
|
186
|
+
this._layout = undefined;
|
|
140
187
|
this.$renderDirty = true;
|
|
141
188
|
this.$markDirty();
|
|
142
189
|
}
|
|
143
|
-
_ensureLines() {
|
|
144
|
-
if (!this._textLinesChanged)
|
|
145
|
-
return this._textLines;
|
|
146
|
-
this._textLinesChanged = false;
|
|
147
|
-
this._textLines = [];
|
|
148
|
-
this._textLinesWidth = [];
|
|
149
|
-
this._lineHeights = [];
|
|
150
|
-
this._textWidth = 0;
|
|
151
|
-
this._textHeight = 0;
|
|
152
|
-
const font = this._font;
|
|
153
|
-
if (!this._text || !font)
|
|
154
|
-
return this._textLines;
|
|
155
|
-
const hasWidthSet = !isNaN(this.$explicitWidth);
|
|
156
|
-
const fieldWidth = this.$explicitWidth;
|
|
157
|
-
const fieldHeight = this.$explicitHeight;
|
|
158
|
-
const emptyHeight = font.getFirstCharHeight();
|
|
159
|
-
const emptyWidth = Math.ceil(emptyHeight * BitmapText.EMPTY_FACTOR);
|
|
160
|
-
const textArr = this._text.split(/(?:\r\n|\r|\n)/);
|
|
161
|
-
let totalWidth = 0;
|
|
162
|
-
let totalHeight = 0;
|
|
163
|
-
const pushLine = (str, lh, lw) => {
|
|
164
|
-
if (!isNaN(fieldHeight) && this._textLines.length > 0 && totalHeight > fieldHeight)
|
|
165
|
-
return false;
|
|
166
|
-
totalHeight += lh + this._lineSpacing;
|
|
167
|
-
this._textLines.push(str);
|
|
168
|
-
this._lineHeights.push(lh);
|
|
169
|
-
this._textLinesWidth.push(lw);
|
|
170
|
-
totalWidth = Math.max(lw, totalWidth);
|
|
171
|
-
return true;
|
|
172
|
-
};
|
|
173
|
-
for (let i = 0; i < textArr.length; i++) {
|
|
174
|
-
let line = textArr[i];
|
|
175
|
-
let len = line.length;
|
|
176
|
-
let lineHeight = 0;
|
|
177
|
-
let xPos = 0;
|
|
178
|
-
let isFirstChar = true;
|
|
179
|
-
for (let j = 0; j < len; j++) {
|
|
180
|
-
if (!isFirstChar)
|
|
181
|
-
xPos += this._letterSpacing;
|
|
182
|
-
const ch = line.charAt(j);
|
|
183
|
-
const texture = font.getTexture(ch);
|
|
184
|
-
let texW;
|
|
185
|
-
let texH;
|
|
186
|
-
if (!texture) {
|
|
187
|
-
if (ch === ' ') {
|
|
188
|
-
texW = emptyWidth;
|
|
189
|
-
texH = emptyHeight;
|
|
190
|
-
}
|
|
191
|
-
else {
|
|
192
|
-
if (isFirstChar)
|
|
193
|
-
isFirstChar = false;
|
|
194
|
-
continue;
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
else {
|
|
198
|
-
texW = texture.textureWidth;
|
|
199
|
-
texH = texture.textureHeight;
|
|
200
|
-
}
|
|
201
|
-
if (isFirstChar)
|
|
202
|
-
isFirstChar = false;
|
|
203
|
-
if (hasWidthSet && j > 0 && xPos + texW > fieldWidth) {
|
|
204
|
-
if (!pushLine(line.substring(0, j), lineHeight, xPos))
|
|
205
|
-
break;
|
|
206
|
-
line = line.substring(j);
|
|
207
|
-
len = line.length;
|
|
208
|
-
j = 0;
|
|
209
|
-
xPos = len === 1 ? texW : font.getConfig(ch, 'xadvance') || texW;
|
|
210
|
-
lineHeight = texH;
|
|
211
|
-
continue;
|
|
212
|
-
}
|
|
213
|
-
xPos += j === len - 1 ? texW : font.getConfig(ch, 'xadvance') || texW;
|
|
214
|
-
lineHeight = Math.max(texH, lineHeight);
|
|
215
|
-
}
|
|
216
|
-
if (!isNaN(fieldHeight) && i > 0 && totalHeight > fieldHeight)
|
|
217
|
-
break;
|
|
218
|
-
pushLine(line, lineHeight, xPos);
|
|
219
|
-
}
|
|
220
|
-
this._textWidth = totalWidth;
|
|
221
|
-
this._textHeight = Math.max(0, totalHeight - this._lineSpacing);
|
|
222
|
-
this._textStartX = 0;
|
|
223
|
-
this._textStartY = 0;
|
|
224
|
-
if (hasWidthSet && fieldWidth > totalWidth) {
|
|
225
|
-
if (this._textAlign === HorizontalAlign.RIGHT)
|
|
226
|
-
this._textStartX = fieldWidth - totalWidth;
|
|
227
|
-
else if (this._textAlign === HorizontalAlign.CENTER)
|
|
228
|
-
this._textStartX = Math.floor((fieldWidth - totalWidth) / 2);
|
|
229
|
-
}
|
|
230
|
-
if (!isNaN(fieldHeight) && fieldHeight > this._textHeight) {
|
|
231
|
-
if (this._verticalAlign === VerticalAlign.BOTTOM)
|
|
232
|
-
this._textStartY = fieldHeight - this._textHeight;
|
|
233
|
-
else if (this._verticalAlign === VerticalAlign.MIDDLE)
|
|
234
|
-
this._textStartY = Math.floor((fieldHeight - this._textHeight) / 2);
|
|
235
|
-
}
|
|
236
|
-
return this._textLines;
|
|
237
|
-
}
|
|
238
190
|
}
|
|
239
191
|
//# sourceMappingURL=BitmapText.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BitmapText.js","sourceRoot":"","sources":["../../../src/kurot/text/BitmapText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"BitmapText.js","sourceRoot":"","sources":["../../../src/kurot/text/BitmapText.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,6 +12,7 @@ export declare function getDefaultLineBreaks(text: string): LineBreakOpportunity
|
|
|
12
12
|
* Dictionary boundaries tailor complex-context scripts (Thai, Lao, Khmer).
|
|
13
13
|
* Emergency wrapping relaxes alphabetic word protection only; punctuation,
|
|
14
14
|
* non-breaking spaces and word joiners retain their Unicode constraints.
|
|
15
|
+
* Layout may reuse a paragraph's UTF-16 grapheme ends across both profiles.
|
|
15
16
|
*/
|
|
16
|
-
export declare function getWordLineBreaks(text: string, emergency?: boolean): LineBreakOpportunity[];
|
|
17
|
+
export declare function getWordLineBreaks(text: string, emergency?: boolean, graphemeEnds?: readonly number[]): LineBreakOpportunity[];
|
|
17
18
|
//# sourceMappingURL=LineBreaks.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineBreaks.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/LineBreaks.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"LineBreaks.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/LineBreaks.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;CAClB;AAMD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,oBAAoB,EAAE,CAEzE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAChC,IAAI,EAAE,MAAM,EACZ,SAAS,UAAQ,EACjB,YAAY,GAAE,SAAS,MAAM,EAAkC,GAC7D,oBAAoB,EAAE,CAcxB"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { LineBreak, LineBreakClasses, MAY_BREAK, PASS, Rules } from '@cto.af/linebreak';
|
|
1
|
+
import { LB28, LineBreak, LineBreakClasses, MAY_BREAK, PASS, Rules } from '@cto.af/linebreak';
|
|
2
|
+
import { getGraphemeEndPositions, getWordSegments } from './TextSegmentation.js';
|
|
2
3
|
const defaultRules = new Rules();
|
|
3
4
|
const emergencyRules = new Rules();
|
|
4
|
-
emergencyRules.
|
|
5
|
-
let wordSegmenter;
|
|
5
|
+
emergencyRules.rules = emergencyRules.rules.filter(rule => rule !== LB28);
|
|
6
6
|
/**
|
|
7
7
|
* Unicode 17.0 UAX #14 boundaries, expressed as UTF-16 offsets.
|
|
8
8
|
* The default profile is kept separate from dictionary and overflow tailoring
|
|
@@ -15,21 +15,25 @@ export function getDefaultLineBreaks(text) {
|
|
|
15
15
|
* Dictionary boundaries tailor complex-context scripts (Thai, Lao, Khmer).
|
|
16
16
|
* Emergency wrapping relaxes alphabetic word protection only; punctuation,
|
|
17
17
|
* non-breaking spaces and word joiners retain their Unicode constraints.
|
|
18
|
+
* Layout may reuse a paragraph's UTF-16 grapheme ends across both profiles.
|
|
18
19
|
*/
|
|
19
|
-
export function getWordLineBreaks(text, emergency = false) {
|
|
20
|
+
export function getWordLineBreaks(text, emergency = false, graphemeEnds = getGraphemeEndPositions(text)) {
|
|
20
21
|
const base = emergency ? emergencyRules : defaultRules;
|
|
21
22
|
if (emergency || !Array.from(text).some(character => isComplexContext(character.codePointAt(0)))) {
|
|
22
|
-
return
|
|
23
|
+
return collectProtectedBreaks(base, text, graphemeEnds);
|
|
23
24
|
}
|
|
24
|
-
|
|
25
|
-
const boundaries = new Set(Array.from(wordSegmenter.segment(text), segment => segment.index));
|
|
25
|
+
const boundaries = new Set(Array.from(getWordSegments(text), segment => segment.index));
|
|
26
26
|
const rules = new Rules();
|
|
27
|
-
rules.
|
|
27
|
+
rules.rules.splice(rules.rules.indexOf(LB28), 0, state => {
|
|
28
28
|
return boundaries.has(state.cur.len) && isComplexContext(state.cur.cp) && isComplexContext(state.next.cp)
|
|
29
29
|
? MAY_BREAK
|
|
30
30
|
: PASS;
|
|
31
31
|
});
|
|
32
|
-
return
|
|
32
|
+
return collectProtectedBreaks(rules, text, graphemeEnds);
|
|
33
|
+
}
|
|
34
|
+
function collectProtectedBreaks(rules, text, graphemeEnds) {
|
|
35
|
+
const boundaries = new Set(graphemeEnds);
|
|
36
|
+
return Array.from(rules.breaks(text), ({ position, required }) => ({ position, required })).filter(point => point.required || boundaries.has(point.position));
|
|
33
37
|
}
|
|
34
38
|
function isComplexContext(codePoint) {
|
|
35
39
|
return codePoint >= 0 && LineBreak.get(codePoint) === LineBreakClasses.SA;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LineBreaks.js","sourceRoot":"","sources":["../../../src/kurot/text/LineBreaks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"LineBreaks.js","sourceRoot":"","sources":["../../../src/kurot/text/LineBreaks.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOjF,MAAM,YAAY,GAAG,IAAI,KAAK,EAAE,CAAC;AACjC,MAAM,cAAc,GAAG,IAAI,KAAK,EAAE,CAAC;AACnC,cAAc,CAAC,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;AAE1E;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAChD,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;AACpG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAChC,IAAY,EACZ,SAAS,GAAG,KAAK,EACjB,eAAkC,uBAAuB,CAAC,IAAI,CAAC;IAE/D,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,YAAY,CAAC;IACvD,IAAI,SAAS,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,gBAAgB,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAE,CAAC,CAAC,EAAE,CAAC;QACnG,OAAO,sBAAsB,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;IACxF,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;IAC1B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,EAAE;QACxD,OAAO,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACxG,CAAC,CAAC,SAAS;YACX,CAAC,CAAC,IAAI,CAAC;IACT,CAAC,CAAC,CAAC;IACH,OAAO,sBAAsB,CAAC,KAAK,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC;AAC1D,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAY,EAAE,IAAY,EAAE,YAA+B;IAC1F,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;IACzC,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,MAAM,CACjG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,CACzD,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAiB;IAC1C,OAAO,SAAS,IAAI,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,gBAAgB,CAAC,EAAE,CAAC;AAC3E,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextLineLayout.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/TextLineLayout.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TextLineLayout.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/TextLineLayout.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAA6B,MAAM,yBAAyB,CAAC;AAErG,MAAM,WAAW,qBAAqB;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;CACjB;AAQD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,EAAE,EAAE,OAAO,EAAE,qBAAqB,GAAG,YAAY,EAAE,CAuJxG"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getWordLineBreaks } from './LineBreaks.js';
|
|
2
2
|
import { measureText } from './TextMeasurer.js';
|
|
3
|
+
import { getGraphemeEndPositions } from './TextSegmentation.js';
|
|
3
4
|
/**
|
|
4
5
|
* Layout uses the complete text so style boundaries cannot create line breaks.
|
|
5
6
|
* Soft-wrap separator spaces are omitted from painting and measured width,
|
|
@@ -39,9 +40,10 @@ export function layoutTextLines(elements, options) {
|
|
|
39
40
|
lines.push(line);
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
43
|
+
const graphemeEnds = getGraphemeEndPositions(paragraph);
|
|
42
44
|
const positions = options.wordWrap
|
|
43
|
-
? getWordLineBreaks(paragraph).map(point => start + point.position)
|
|
44
|
-
:
|
|
45
|
+
? getWordLineBreaks(paragraph, false, graphemeEnds).map(point => start + point.position)
|
|
46
|
+
: graphemeEnds.map(position => start + position);
|
|
45
47
|
let emergencyPositions;
|
|
46
48
|
let emergencyIndex = 0;
|
|
47
49
|
let oversizedBoundary = -1;
|
|
@@ -71,7 +73,7 @@ export function layoutTextLines(elements, options) {
|
|
|
71
73
|
candidateIndex++;
|
|
72
74
|
}
|
|
73
75
|
if (chosen === lineStart) {
|
|
74
|
-
emergencyPositions ??= getWordLineBreaks(paragraph, true).map(point => start + point.position);
|
|
76
|
+
emergencyPositions ??= getWordLineBreaks(paragraph, true, graphemeEnds).map(point => start + point.position);
|
|
75
77
|
const firstBoundary = positions[positionIndex];
|
|
76
78
|
oversizedBoundary = firstBoundary;
|
|
77
79
|
while (emergencyPositions[emergencyIndex] <= lineStart) {
|
|
@@ -139,13 +141,4 @@ export function layoutTextLines(elements, options) {
|
|
|
139
141
|
return { width, height, charNum: end - start, hasNextLine: false, elements: lineElements };
|
|
140
142
|
}
|
|
141
143
|
}
|
|
142
|
-
function characterPositions(text) {
|
|
143
|
-
const positions = [];
|
|
144
|
-
let position = 0;
|
|
145
|
-
for (const character of text) {
|
|
146
|
-
position += character.length;
|
|
147
|
-
positions.push(position);
|
|
148
|
-
}
|
|
149
|
-
return positions;
|
|
150
|
-
}
|
|
151
144
|
//# sourceMappingURL=TextLineLayout.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextLineLayout.js","sourceRoot":"","sources":["../../../src/kurot/text/TextLineLayout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"TextLineLayout.js","sourceRoot":"","sources":["../../../src/kurot/text/TextLineLayout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function getWordSegments(text: string): Intl.Segments;
|
|
2
|
+
export declare function getGraphemeSegments(text: string): Intl.Segments;
|
|
3
|
+
/**
|
|
4
|
+
* End offsets use UTF-16 units, matching TextField's source and caret indices.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getGraphemeEndPositions(text: string): number[];
|
|
7
|
+
//# sourceMappingURL=TextSegmentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextSegmentation.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/TextSegmentation.ts"],"names":[],"mappings":"AAGA,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAG3D;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC,QAAQ,CAG/D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAE9D"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
let wordSegmenter;
|
|
2
|
+
let graphemeSegmenter;
|
|
3
|
+
export function getWordSegments(text) {
|
|
4
|
+
wordSegmenter ??= new Intl.Segmenter(undefined, { granularity: 'word' });
|
|
5
|
+
return wordSegmenter.segment(text);
|
|
6
|
+
}
|
|
7
|
+
export function getGraphemeSegments(text) {
|
|
8
|
+
graphemeSegmenter ??= new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
9
|
+
return graphemeSegmenter.segment(text);
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* End offsets use UTF-16 units, matching TextField's source and caret indices.
|
|
13
|
+
*/
|
|
14
|
+
export function getGraphemeEndPositions(text) {
|
|
15
|
+
return Array.from(getGraphemeSegments(text), segment => segment.index + segment.segment.length);
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=TextSegmentation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TextSegmentation.js","sourceRoot":"","sources":["../../../src/kurot/text/TextSegmentation.ts"],"names":[],"mappings":"AAAA,IAAI,aAAyC,CAAC;AAC9C,IAAI,iBAA6C,CAAC;AAElD,MAAM,UAAU,eAAe,CAAC,IAAY;IAC3C,aAAa,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC;IACzE,OAAO,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC/C,iBAAiB,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IACjF,OAAO,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACxC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,IAAY;IACnD,OAAO,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;AACjG,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WordWrap.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/WordWrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"WordWrap.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/WordWrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AA6BH;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAsC/C;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CASrD"}
|
|
@@ -8,15 +8,8 @@
|
|
|
8
8
|
* Falls back to character-by-character splitting when `Intl.Segmenter` is
|
|
9
9
|
* unavailable.
|
|
10
10
|
*/
|
|
11
|
-
|
|
12
|
-
let _segmenter;
|
|
11
|
+
import { getGraphemeSegments, getWordSegments } from './TextSegmentation.js';
|
|
13
12
|
const hasSegmenter = typeof Intl !== 'undefined' && typeof Intl.Segmenter === 'function';
|
|
14
|
-
function getSegmenter() {
|
|
15
|
-
if (!_segmenter) {
|
|
16
|
-
_segmenter = new Intl.Segmenter(undefined, { granularity: 'word' });
|
|
17
|
-
}
|
|
18
|
-
return _segmenter;
|
|
19
|
-
}
|
|
20
13
|
// ── Breaking space / newline tables ─────────────────────────────────────────
|
|
21
14
|
const BREAKING_SPACES = new Set([
|
|
22
15
|
0x0009, // tab
|
|
@@ -50,7 +43,7 @@ export function tokenize(text) {
|
|
|
50
43
|
return [];
|
|
51
44
|
if (hasSegmenter) {
|
|
52
45
|
const result = [];
|
|
53
|
-
for (const seg of
|
|
46
|
+
for (const seg of getWordSegments(text)) {
|
|
54
47
|
const s = seg.segment;
|
|
55
48
|
if (!s)
|
|
56
49
|
continue;
|
|
@@ -93,9 +86,8 @@ export function tokenize(text) {
|
|
|
93
86
|
*/
|
|
94
87
|
export function splitGraphemes(text) {
|
|
95
88
|
if (hasSegmenter) {
|
|
96
|
-
const seg = new Intl.Segmenter(undefined, { granularity: 'grapheme' });
|
|
97
89
|
const result = [];
|
|
98
|
-
for (const s of
|
|
90
|
+
for (const s of getGraphemeSegments(text)) {
|
|
99
91
|
result.push(s.segment);
|
|
100
92
|
}
|
|
101
93
|
return result;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WordWrap.js","sourceRoot":"","sources":["../../../src/kurot/text/WordWrap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH
|
|
1
|
+
{"version":3,"file":"WordWrap.js","sourceRoot":"","sources":["../../../src/kurot/text/WordWrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ export { TextFieldType } from './enums/TextFieldType.js';
|
|
|
4
4
|
export { TextFieldInputType } from './enums/TextFieldInputType.js';
|
|
5
5
|
export type { ITextStyle, ITextElement, IWTextElement, ILineElement, IHitTextElement } from './types/ITextElement.js';
|
|
6
6
|
export { HtmlTextParser } from './HtmlTextParser.js';
|
|
7
|
+
export type { BitmapFontOptions } from './BitmapFont.js';
|
|
7
8
|
export { BitmapFont } from './BitmapFont.js';
|
|
8
9
|
export { BitmapText } from './BitmapText.js';
|
|
9
10
|
export { measureText, getFontString } from './TextMeasurer.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/kurot/text/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACnE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AACtH,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,YAAY,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC"}
|