@next2d/text 1.18.12 → 2.0.0

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.
Files changed (181) hide show
  1. package/package.json +14 -18
  2. package/src/TextArea/service/TextAreaMovePositionService.d.ts +11 -0
  3. package/src/TextArea/service/TextAreaMovePositionService.js +42 -0
  4. package/src/TextArea/usecase/TextAreaCompositionEndUseCase.d.ts +9 -0
  5. package/src/TextArea/usecase/TextAreaCompositionEndUseCase.js +17 -0
  6. package/src/TextArea/usecase/TextAreaCompositionStartUseCase.d.ts +9 -0
  7. package/src/TextArea/usecase/TextAreaCompositionStartUseCase.js +17 -0
  8. package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.d.ts +10 -0
  9. package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.js +18 -0
  10. package/src/TextArea/usecase/TextAreaInputUseCase.d.ts +10 -0
  11. package/src/TextArea/usecase/TextAreaInputUseCase.js +25 -0
  12. package/src/TextArea/usecase/TextAreaRegisterEventUseCase.d.ts +10 -0
  13. package/src/TextArea/usecase/TextAreaRegisterEventUseCase.js +21 -0
  14. package/src/TextData.d.ts +103 -0
  15. package/src/TextData.js +183 -0
  16. package/src/TextField/service/TextFieldApplyChangesService.d.ts +11 -0
  17. package/src/TextField/service/TextFieldApplyChangesService.js +16 -0
  18. package/src/TextField/service/TextFieldBlinkingClearTimeoutService.d.ts +9 -0
  19. package/src/TextField/service/TextFieldBlinkingClearTimeoutService.js +16 -0
  20. package/src/TextField/service/TextFieldCompositionStartService.d.ts +11 -0
  21. package/src/TextField/service/TextFieldCompositionStartService.js +12 -0
  22. package/src/TextField/service/TextFieldPasteService.d.ts +11 -0
  23. package/src/TextField/service/TextFieldPasteService.js +16 -0
  24. package/src/TextField/usecase/TextFieldArrowDownUseCase.d.ts +12 -0
  25. package/src/TextField/usecase/TextFieldArrowDownUseCase.js +191 -0
  26. package/src/TextField/usecase/TextFieldArrowLeftUseCase.d.ts +12 -0
  27. package/src/TextField/usecase/TextFieldArrowLeftUseCase.js +98 -0
  28. package/src/TextField/usecase/TextFieldArrowRightUseCase.d.ts +12 -0
  29. package/src/TextField/usecase/TextFieldArrowRightUseCase.js +92 -0
  30. package/src/TextField/usecase/TextFieldArrowUpUseCase.d.ts +12 -0
  31. package/src/TextField/usecase/TextFieldArrowUpUseCase.js +156 -0
  32. package/src/TextField/usecase/TextFieldBlinkingUseCase.d.ts +11 -0
  33. package/src/TextField/usecase/TextFieldBlinkingUseCase.js +21 -0
  34. package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.d.ts +13 -0
  35. package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.js +58 -0
  36. package/src/TextField/usecase/TextFieldCompositionEndUseCase.d.ts +11 -0
  37. package/src/TextField/usecase/TextFieldCompositionEndUseCase.js +32 -0
  38. package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.d.ts +12 -0
  39. package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.js +109 -0
  40. package/src/TextField/usecase/TextFieldCopyUseCase.d.ts +11 -0
  41. package/src/TextField/usecase/TextFieldCopyUseCase.js +38 -0
  42. package/src/TextField/usecase/TextFieldDeleteTextUseCase.d.ts +11 -0
  43. package/src/TextField/usecase/TextFieldDeleteTextUseCase.js +108 -0
  44. package/src/TextField/usecase/TextFieldGetLineTextUseCase.d.ts +12 -0
  45. package/src/TextField/usecase/TextFieldGetLineTextUseCase.js +32 -0
  46. package/src/TextField/usecase/TextFieldGetTextDataUseCase.d.ts +15 -0
  47. package/src/TextField/usecase/TextFieldGetTextDataUseCase.js +26 -0
  48. package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.d.ts +11 -0
  49. package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.js +31 -0
  50. package/src/TextField/usecase/TextFieldInsertTextUseCase.d.ts +12 -0
  51. package/src/TextField/usecase/TextFieldInsertTextUseCase.js +79 -0
  52. package/src/TextField/usecase/TextFieldKeyDownEventUseCase.d.ts +12 -0
  53. package/src/TextField/usecase/TextFieldKeyDownEventUseCase.js +60 -0
  54. package/src/TextField/usecase/TextFieldReloadUseCase.d.ts +11 -0
  55. package/src/TextField/usecase/TextFieldReloadUseCase.js +25 -0
  56. package/src/TextField/usecase/TextFieldReplaceTextUseCase.d.ts +14 -0
  57. package/src/TextField/usecase/TextFieldReplaceTextUseCase.js +24 -0
  58. package/src/TextField/usecase/TextFieldResetUseCase.d.ts +11 -0
  59. package/src/TextField/usecase/TextFieldResetUseCase.js +20 -0
  60. package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.d.ts +11 -0
  61. package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.js +37 -0
  62. package/src/TextField/usecase/TextFieldResizeUseCase.d.ts +11 -0
  63. package/src/TextField/usecase/TextFieldResizeUseCase.js +49 -0
  64. package/src/TextField/usecase/TextFieldSelectAllUseCase.d.ts +11 -0
  65. package/src/TextField/usecase/TextFieldSelectAllUseCase.js +20 -0
  66. package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.d.ts +11 -0
  67. package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.js +90 -0
  68. package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.d.ts +14 -0
  69. package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.js +197 -0
  70. package/src/TextField/usecase/TextFieldSetFocusUseCase.d.ts +11 -0
  71. package/src/TextField/usecase/TextFieldSetFocusUseCase.js +43 -0
  72. package/src/TextField/usecase/TextFieldSetScrollXUseCase.d.ts +12 -0
  73. package/src/TextField/usecase/TextFieldSetScrollXUseCase.js +66 -0
  74. package/src/TextField/usecase/TextFieldSetScrollYUseCase.d.ts +12 -0
  75. package/src/TextField/usecase/TextFieldSetScrollYUseCase.js +66 -0
  76. package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.d.ts +12 -0
  77. package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.js +82 -0
  78. package/src/TextField.d.ts +602 -0
  79. package/src/TextField.js +1292 -0
  80. package/src/TextFormat/service/TextFormatGenerateFontStyleService.d.ts +11 -0
  81. package/src/TextFormat/service/TextFormatGenerateFontStyleService.js +19 -0
  82. package/src/TextFormat/service/TextFormatGetWidthMarginService.d.ts +11 -0
  83. package/src/TextFormat/service/TextFormatGetWidthMarginService.js +19 -0
  84. package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.d.ts +11 -0
  85. package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.js +51 -0
  86. package/src/TextFormat/service/TextFormatIsSameService.d.ts +12 -0
  87. package/src/TextFormat/service/TextFormatIsSameService.js +28 -0
  88. package/src/TextFormat/service/TextFormatSetDefaultService.d.ts +11 -0
  89. package/src/TextFormat/service/TextFormatSetDefaultService.js +22 -0
  90. package/{dist → src}/TextFormat.d.ts +42 -128
  91. package/src/TextFormat.js +233 -0
  92. package/src/TextParser/service/TextParserAdjustmentHeightService.d.ts +11 -0
  93. package/src/TextParser/service/TextParserAdjustmentHeightService.js +24 -0
  94. package/src/TextParser/service/TextParserParseStyleService.d.ts +11 -0
  95. package/src/TextParser/service/TextParserParseStyleService.js +80 -0
  96. package/src/TextParser/usecase/TextParserCreateNewLineUseCase.d.ts +13 -0
  97. package/src/TextParser/usecase/TextParserCreateNewLineUseCase.js +35 -0
  98. package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.d.ts +15 -0
  99. package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.js +37 -0
  100. package/src/TextParser/usecase/TextParserParseTagUseCase.d.ts +17 -0
  101. package/src/TextParser/usecase/TextParserParseTagUseCase.js +57 -0
  102. package/src/TextParser/usecase/TextParserParseTextUseCase.d.ts +16 -0
  103. package/src/TextParser/usecase/TextParserParseTextUseCase.js +140 -0
  104. package/src/TextParser/usecase/TextParserSetAttributesUseCase.d.ts +14 -0
  105. package/src/TextParser/usecase/TextParserSetAttributesUseCase.js +63 -0
  106. package/src/TextUtil.d.ts +114 -0
  107. package/src/TextUtil.js +186 -0
  108. package/src/index.d.ts +3 -0
  109. package/src/index.js +3 -0
  110. package/src/interface/IAttributeObject.d.ts +4 -0
  111. package/src/interface/IBlendMode.d.ts +1 -0
  112. package/src/interface/IBounds.d.ts +6 -0
  113. package/src/interface/ICharacter.d.ts +5 -0
  114. package/src/interface/ICharacter.js +1 -0
  115. package/src/interface/IDictionaryTag.d.ts +8 -0
  116. package/src/interface/IDictionaryTag.js +1 -0
  117. package/src/interface/IElementPosition.d.ts +4 -0
  118. package/src/interface/IElementPosition.js +1 -0
  119. package/src/interface/IFilterArray.d.ts +2 -0
  120. package/src/interface/IFilterArray.js +1 -0
  121. package/src/interface/IGrid.d.ts +6 -0
  122. package/src/interface/IGrid.js +1 -0
  123. package/src/interface/ILoopConfig.d.ts +8 -0
  124. package/src/interface/ILoopConfig.js +1 -0
  125. package/src/interface/ILoopType.d.ts +1 -0
  126. package/src/interface/ILoopType.js +1 -0
  127. package/src/interface/IMovieClipActionObject.d.ts +5 -0
  128. package/src/interface/IMovieClipActionObject.js +1 -0
  129. package/src/interface/IMovieClipCharacter.d.ts +17 -0
  130. package/src/interface/IMovieClipCharacter.js +1 -0
  131. package/src/interface/IMovieClipLabelObject.d.ts +4 -0
  132. package/src/interface/IMovieClipLabelObject.js +1 -0
  133. package/src/interface/IMovieClipSoundObject.d.ts +5 -0
  134. package/src/interface/IMovieClipSoundObject.js +1 -0
  135. package/src/interface/IOptions.d.ts +8 -0
  136. package/src/interface/IOptions.js +1 -0
  137. package/src/interface/IPlaceObject.d.ts +14 -0
  138. package/src/interface/IPlaceObject.js +1 -0
  139. package/src/interface/IRGBA.d.ts +6 -0
  140. package/src/interface/IRGBA.js +1 -0
  141. package/src/interface/IShapeCharacter.d.ts +14 -0
  142. package/src/interface/IShapeCharacter.js +1 -0
  143. package/src/interface/ISoundTag.d.ts +6 -0
  144. package/src/interface/ISoundTag.js +1 -0
  145. package/src/interface/ISurfaceFilter.d.ts +6 -0
  146. package/src/interface/ISurfaceFilter.js +1 -0
  147. package/src/interface/ITextFieldAutoSize.d.ts +1 -0
  148. package/src/interface/ITextFieldAutoSize.js +1 -0
  149. package/src/interface/ITextFieldCharacter copy.d.ts +26 -0
  150. package/src/interface/ITextFieldCharacter copy.js +1 -0
  151. package/src/interface/ITextFieldCharacter.d.ts +26 -0
  152. package/src/interface/ITextFieldCharacter.js +1 -0
  153. package/src/interface/ITextFieldType copy.d.ts +1 -0
  154. package/src/interface/ITextFieldType copy.js +1 -0
  155. package/src/interface/ITextFieldType.d.ts +1 -0
  156. package/src/interface/ITextFieldType.js +1 -0
  157. package/src/interface/ITextFormatAlign copy.d.ts +1 -0
  158. package/src/interface/ITextFormatAlign copy.js +1 -0
  159. package/src/interface/ITextFormatAlign.d.ts +1 -0
  160. package/src/interface/ITextFormatAlign.js +1 -0
  161. package/src/interface/ITextFormatObject.d.ts +14 -0
  162. package/src/interface/ITextFormatObject.js +1 -0
  163. package/src/interface/ITextObject.d.ts +12 -0
  164. package/src/interface/ITextObject.js +1 -0
  165. package/src/interface/ITextObjectMode.d.ts +1 -0
  166. package/src/interface/ITextObjectMode.js +1 -0
  167. package/src/interface/IVideoCharacter.d.ts +11 -0
  168. package/src/interface/IVideoCharacter.js +1 -0
  169. package/dist/TextData.d.ts +0 -74
  170. package/dist/TextData.js +0 -132
  171. package/dist/TextFormat.js +0 -493
  172. package/dist/TextParser.d.ts +0 -23
  173. package/dist/TextParser.js +0 -459
  174. package/dist/index.d.ts +0 -3
  175. package/dist/index.js +0 -3
  176. package/dist/interface/OptionsImpl.d.ts +0 -8
  177. package/dist/interface/TextObjectImpl.d.ts +0 -12
  178. package/dist/interface/TextObjectModeImpl.d.ts +0 -1
  179. /package/{dist/interface/OptionsImpl.js → src/interface/IAttributeObject.js} +0 -0
  180. /package/{dist/interface/TextObjectImpl.js → src/interface/IBlendMode.js} +0 -0
  181. /package/{dist/interface/TextObjectModeImpl.js → src/interface/IBounds.js} +0 -0
@@ -1,459 +0,0 @@
1
- import { parseDocument } from "htmlparser2";
2
- import { TextData } from "./TextData";
3
- import { $toColorInt } from "@next2d/share";
4
- /**
5
- * @type {OffscreenCanvasRenderingContext2D}
6
- * @private
7
- */
8
- const $context = new OffscreenCanvas(1, 1).getContext("2d");
9
- /**
10
- * @type {number}
11
- * @private
12
- */
13
- let $currentWidth = 0;
14
- /**
15
- * @param {string} texts
16
- * @param {TextFormat} text_format
17
- * @param {TextData} text_data
18
- * @param {object} options
19
- * @return {void}
20
- * @method
21
- * @private
22
- */
23
- const _$parseText = (texts, text_format, text_data, options) => {
24
- let line = text_data.lineTable.length - 1;
25
- const maxWidth = options.width - text_format._$widthMargin() - 4;
26
- for (let idx = 0; idx < texts.length; ++idx) {
27
- const textFormat = options.textFormats === null
28
- ? text_format
29
- : options.textFormats.shift();
30
- const text = texts[idx];
31
- const object = {
32
- "mode": "text",
33
- "text": text,
34
- "x": 0,
35
- "y": 0,
36
- "w": 0,
37
- "h": 0,
38
- "line": line,
39
- "textFormat": textFormat._$clone()
40
- };
41
- $context.font = textFormat._$generateFontStyle();
42
- const mesure = $context.measureText(text || "");
43
- let width = mesure.width;
44
- if (textFormat.letterSpacing) {
45
- width += textFormat.letterSpacing;
46
- }
47
- let height = mesure.fontBoundingBoxAscent + mesure.fontBoundingBoxDescent;
48
- if (textFormat.leading) {
49
- height += textFormat.leading;
50
- }
51
- // setup
52
- object.x = 0;
53
- object.y = mesure.fontBoundingBoxAscent;
54
- object.w = width;
55
- object.h = height;
56
- $currentWidth += width;
57
- if (options.wordWrap && $currentWidth > maxWidth) {
58
- $currentWidth = width;
59
- // update
60
- line++;
61
- object.line = line;
62
- // break object
63
- const wrapObject = {
64
- "mode": "wrap",
65
- "text": "",
66
- "x": 0,
67
- "y": 0,
68
- "w": 0,
69
- "h": 0,
70
- "line": line,
71
- "textFormat": textFormat._$clone()
72
- };
73
- let chunkLength = 1;
74
- let isSeparated = true;
75
- const pattern = /[0-9a-zA-Z?!;:.,?!。、;:〜]/g;
76
- for (;;) {
77
- const index = text_data.textTable.length - chunkLength;
78
- if (0 >= index) {
79
- isSeparated = false;
80
- chunkLength = 0;
81
- break;
82
- }
83
- const prevObj = text_data.textTable[index];
84
- if (!prevObj) {
85
- isSeparated = false;
86
- chunkLength = 0;
87
- break;
88
- }
89
- if (prevObj.mode !== "text") {
90
- isSeparated = false;
91
- break;
92
- }
93
- if (prevObj.text === " ") {
94
- chunkLength--;
95
- break;
96
- }
97
- if (!prevObj.text.match(pattern)) {
98
- chunkLength--;
99
- break;
100
- }
101
- chunkLength++;
102
- }
103
- // new line
104
- text_data.widthTable[line] = 0;
105
- text_data.heightTable[line] = 0;
106
- text_data.ascentTable[line] = 0;
107
- if (chunkLength > 0 && isSeparated) {
108
- const insertIdx = text_data.textTable.length - chunkLength;
109
- text_data.textTable.splice(insertIdx, 0, wrapObject);
110
- text_data.lineTable.push(wrapObject);
111
- const prevLine = line - 1;
112
- // reset
113
- text_data.widthTable[prevLine] = 0;
114
- text_data.heightTable[prevLine] = 0;
115
- text_data.ascentTable[prevLine] = 0;
116
- for (let idx = 0; idx < insertIdx; ++idx) {
117
- const textObject = text_data.textTable[idx];
118
- if (textObject.line !== prevLine) {
119
- continue;
120
- }
121
- if (textObject.mode !== "text") {
122
- continue;
123
- }
124
- text_data.widthTable[prevLine] += textObject.w;
125
- text_data.heightTable[prevLine] = Math.max(text_data.heightTable[prevLine], textObject.h);
126
- text_data.ascentTable[prevLine] = Math.max(text_data.ascentTable[prevLine], textObject.y);
127
- }
128
- // reset
129
- $currentWidth = 0;
130
- for (let idx = insertIdx + 1; idx < text_data.textTable.length; ++idx) {
131
- const textObject = text_data.textTable[idx];
132
- textObject.line = line;
133
- $currentWidth += textObject.w;
134
- }
135
- }
136
- else {
137
- text_data.textTable.push(wrapObject);
138
- text_data.lineTable.push(wrapObject);
139
- }
140
- }
141
- text_data.widthTable[line] = $currentWidth;
142
- text_data.heightTable[line] = Math.max(text_data.heightTable[line], height);
143
- text_data.ascentTable[line] = Math.max(text_data.ascentTable[line], object.y);
144
- text_data.textTable.push(object);
145
- }
146
- };
147
- /**
148
- * @param {string} value
149
- * @param {TextFormat} text_format
150
- * @return {void}
151
- * @method
152
- * @private
153
- */
154
- const _$parseStyle = (value, text_format, options) => {
155
- const values = value
156
- .trim()
157
- .split(";");
158
- const attributes = [];
159
- for (let idx = 0; idx < values.length; ++idx) {
160
- const styleValue = values[idx];
161
- if (!styleValue) {
162
- continue;
163
- }
164
- const styles = styleValue.split(":");
165
- const name = styles[0].trim();
166
- const value = styles[1].trim();
167
- switch (name) {
168
- case "font-size":
169
- attributes.push({
170
- "name": "size",
171
- "value": parseFloat(value)
172
- });
173
- break;
174
- case "font-family":
175
- attributes.push({
176
- "name": "face",
177
- "value": value.replace(/'|"/g, "")
178
- });
179
- break;
180
- case "letter-spacing":
181
- attributes.push({
182
- "name": "letterSpacing",
183
- "value": value
184
- });
185
- break;
186
- case "margin-bottom":
187
- attributes.push({
188
- "name": "leading",
189
- "value": parseFloat(value)
190
- });
191
- break;
192
- case "margin-left":
193
- attributes.push({
194
- "name": "leftMargin",
195
- "value": parseFloat(value)
196
- });
197
- break;
198
- case "margin-right":
199
- attributes.push({
200
- "name": "rightMargin",
201
- "value": parseFloat(value)
202
- });
203
- break;
204
- case "color":
205
- case "align":
206
- attributes.push({
207
- "name": name,
208
- "value": value
209
- });
210
- break;
211
- case "text-decoration":
212
- case "font-weight":
213
- case "font-style":
214
- attributes.push({
215
- "name": value,
216
- "value": true
217
- });
218
- break;
219
- default:
220
- break;
221
- }
222
- }
223
- // eslint-disable-next-line no-use-before-define
224
- _$setAttributes(attributes, text_format, options);
225
- };
226
- /**
227
- * @param {array} attributes
228
- * @param {TextFormat} text_format
229
- * @param {object} options
230
- * @return {void}
231
- * @method
232
- * @private
233
- */
234
- const _$setAttributes = (attributes, text_format, options) => {
235
- for (let idx = 0; idx < attributes.length; ++idx) {
236
- const object = attributes[idx];
237
- switch (object.name) {
238
- case "style":
239
- _$parseStyle(object.value, text_format, options);
240
- break;
241
- case "align":
242
- text_format.align = object.value;
243
- break;
244
- case "face":
245
- text_format.font = object.value;
246
- break;
247
- case "size":
248
- text_format.size = +object.value;
249
- if (options.subFontSize) {
250
- text_format.size -= options.subFontSize;
251
- if (1 > text_format.size) {
252
- text_format.size = 1;
253
- }
254
- }
255
- break;
256
- case "color":
257
- text_format.color = $toColorInt(object.value);
258
- break;
259
- case "letterSpacing":
260
- text_format.letterSpacing = +object.value;
261
- break;
262
- case "leading":
263
- text_format.leading = +object.value;
264
- break;
265
- case "leftMargin":
266
- text_format.leftMargin = +object.value;
267
- break;
268
- case "rightMargin":
269
- text_format.rightMargin = +object.value;
270
- break;
271
- case "underline":
272
- text_format.underline = true;
273
- break;
274
- case "bold":
275
- text_format.bold = true;
276
- break;
277
- case "italic":
278
- text_format.italic = true;
279
- break;
280
- default:
281
- break;
282
- }
283
- }
284
- };
285
- /**
286
- * @param {TextData} text_data
287
- * @param {TextFormat} text_format
288
- * @return {void}
289
- * @method
290
- * @private
291
- */
292
- const _$createNewLine = (text_data, text_format) => {
293
- $currentWidth = 0;
294
- const line = text_data.lineTable.length;
295
- $context.font = text_format._$generateFontStyle();
296
- const mesure = $context.measureText("");
297
- const object = {
298
- "mode": "break",
299
- "text": "",
300
- "x": 0,
301
- "y": 0,
302
- "w": 0,
303
- "h": mesure.fontBoundingBoxAscent + mesure.fontBoundingBoxDescent,
304
- "line": line,
305
- "textFormat": text_format._$clone()
306
- };
307
- text_data.heightTable[line] = 0;
308
- text_data.ascentTable[line] = 0;
309
- text_data.widthTable[line] = 0;
310
- // register
311
- text_data.lineTable.push(object);
312
- text_data.textTable.push(object);
313
- };
314
- /**
315
- * @param {object} document
316
- * @param {TextFormat} text_format
317
- * @param {TextData} text_data
318
- * @param {object} options
319
- * @return {void}
320
- * @method
321
- * @private
322
- */
323
- const _$parseTag = (document, text_format, text_data, options) => {
324
- for (let idx = 0; idx < document.children.length; ++idx) {
325
- const node = document.children[idx];
326
- if (node.nodeType === 3) {
327
- _$parseText(node.nodeValue || "", text_format, text_data, options);
328
- continue;
329
- }
330
- const tf = text_format._$clone();
331
- switch (node.name.toUpperCase()) {
332
- case "DIV": // div tag
333
- case "P": // p tag
334
- _$setAttributes(node.attributes, tf, options);
335
- if (options.multiline) {
336
- _$createNewLine(text_data, tf);
337
- }
338
- _$parseTag(node, tf, text_data, options);
339
- if (options.multiline) {
340
- _$createNewLine(text_data, tf);
341
- }
342
- continue;
343
- case "U": // underline
344
- tf.underline = true;
345
- break;
346
- case "B": // bold
347
- tf.bold = true;
348
- break;
349
- case "I": // italic
350
- tf.italic = true;
351
- break;
352
- case "FONT": // FONT tag
353
- case "SPAN": // SPAN tag
354
- _$setAttributes(node.attributes, tf, options);
355
- break;
356
- case "BR":
357
- if (!options.multiline) {
358
- continue;
359
- }
360
- _$createNewLine(text_data, tf);
361
- break;
362
- default:
363
- break;
364
- }
365
- _$parseTag(node, tf, text_data, options);
366
- }
367
- };
368
- /**
369
- * @param {TextData} text_data
370
- * @return {void}
371
- * @method
372
- * @private
373
- */
374
- const _$adjustmentHeight = (text_data) => {
375
- const length = text_data.heightTable.length - 1;
376
- for (let idx = 1; idx < length; ++idx) {
377
- const height = text_data.heightTable[idx];
378
- if (height > 0) {
379
- continue;
380
- }
381
- // 改行があって、高さの設定がなければ前の行の高さを設定する
382
- const object = text_data.lineTable[idx];
383
- text_data.heightTable[idx] = object.h = text_data.heightTable[idx - 1];
384
- }
385
- };
386
- /**
387
- * @description 文字列のテキストを分解・解析して配列戻す
388
- *
389
- * @param {string} text
390
- * @param {object} [options = null]
391
- * @return {TextData}
392
- * @method
393
- * @public
394
- */
395
- export const parsePlainText = (text, text_format, options) => {
396
- const textData = new TextData();
397
- if (!text) {
398
- return textData;
399
- }
400
- const lineText = options.multiline
401
- ? text.split("\n")
402
- : [text.replace("\n", "")];
403
- for (let idx = 0; idx < lineText.length; ++idx) {
404
- let textFormat = text_format._$clone();
405
- if (options.textFormats) {
406
- textFormat = idx === 0
407
- ? options.textFormats[0]
408
- : options.textFormats.shift();
409
- }
410
- if (options.subFontSize
411
- && options.subFontSize > 0 && textFormat.size) {
412
- textFormat.size -= options.subFontSize;
413
- if (1 > textFormat.size) {
414
- textFormat.size = 1;
415
- }
416
- }
417
- if (idx === 0 || options.wordWrap || options.multiline) {
418
- _$createNewLine(textData, textFormat);
419
- }
420
- const texts = lineText[idx];
421
- if (texts) {
422
- $currentWidth = 0;
423
- _$parseText(texts, textFormat, textData, options);
424
- }
425
- }
426
- _$adjustmentHeight(textData);
427
- return textData;
428
- };
429
- /**
430
- * @description HTMLを分解・解析して配列戻す
431
- *
432
- * @param {string} html_text
433
- * @param {object} [options = null]
434
- * @return {array}
435
- * @method
436
- * @public
437
- */
438
- export const parseHtmlText = (html_text, text_format, options) => {
439
- const textData = new TextData();
440
- if (!html_text) {
441
- return textData;
442
- }
443
- const htmlText = html_text
444
- .trim()
445
- .replace(/\r?\n/g, "")
446
- .replace(/\t/g, "");
447
- const textFormat = text_format._$clone();
448
- if (options.subFontSize && options.subFontSize > 0 && textFormat.size) {
449
- textFormat.size -= options.subFontSize;
450
- if (1 > textFormat.size) {
451
- textFormat.size = 1;
452
- }
453
- }
454
- const document = parseDocument(htmlText);
455
- _$createNewLine(textData, textFormat);
456
- _$parseTag(document, textFormat, textData, options);
457
- _$adjustmentHeight(textData);
458
- return textData;
459
- };
package/dist/index.d.ts DELETED
@@ -1,3 +0,0 @@
1
- export * from "./TextFormat";
2
- export * from "./TextParser";
3
- export * from "./TextData";
package/dist/index.js DELETED
@@ -1,3 +0,0 @@
1
- export * from "./TextFormat";
2
- export * from "./TextParser";
3
- export * from "./TextData";
@@ -1,8 +0,0 @@
1
- import { TextFormat } from "../TextFormat";
2
- export interface OptionsImpl {
3
- width: number;
4
- multiline: boolean;
5
- wordWrap: boolean;
6
- textFormats: TextFormat[] | null;
7
- subFontSize?: number;
8
- }
@@ -1,12 +0,0 @@
1
- import { TextFormat } from "../TextFormat";
2
- import { TextObjectModeImpl } from "./TextObjectModeImpl";
3
- export interface TextObjectImpl {
4
- mode: TextObjectModeImpl;
5
- text: string;
6
- textFormat: TextFormat;
7
- x: number;
8
- y: number;
9
- w: number;
10
- h: number;
11
- line: number;
12
- }
@@ -1 +0,0 @@
1
- export type TextObjectModeImpl = "break" | "wrap" | "image" | "text";