@next2d/text 1.18.11 → 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.
- package/package.json +14 -18
- package/src/TextArea/service/TextAreaMovePositionService.d.ts +11 -0
- package/src/TextArea/service/TextAreaMovePositionService.js +42 -0
- package/src/TextArea/usecase/TextAreaCompositionEndUseCase.d.ts +9 -0
- package/src/TextArea/usecase/TextAreaCompositionEndUseCase.js +17 -0
- package/src/TextArea/usecase/TextAreaCompositionStartUseCase.d.ts +9 -0
- package/src/TextArea/usecase/TextAreaCompositionStartUseCase.js +17 -0
- package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaCompositionUpdateUseCase.js +18 -0
- package/src/TextArea/usecase/TextAreaInputUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaInputUseCase.js +25 -0
- package/src/TextArea/usecase/TextAreaRegisterEventUseCase.d.ts +10 -0
- package/src/TextArea/usecase/TextAreaRegisterEventUseCase.js +21 -0
- package/src/TextData.d.ts +103 -0
- package/src/TextData.js +183 -0
- package/src/TextField/service/TextFieldApplyChangesService.d.ts +11 -0
- package/src/TextField/service/TextFieldApplyChangesService.js +16 -0
- package/src/TextField/service/TextFieldBlinkingClearTimeoutService.d.ts +9 -0
- package/src/TextField/service/TextFieldBlinkingClearTimeoutService.js +16 -0
- package/src/TextField/service/TextFieldCompositionStartService.d.ts +11 -0
- package/src/TextField/service/TextFieldCompositionStartService.js +12 -0
- package/src/TextField/service/TextFieldPasteService.d.ts +11 -0
- package/src/TextField/service/TextFieldPasteService.js +16 -0
- package/src/TextField/usecase/TextFieldArrowDownUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowDownUseCase.js +191 -0
- package/src/TextField/usecase/TextFieldArrowLeftUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowLeftUseCase.js +98 -0
- package/src/TextField/usecase/TextFieldArrowRightUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowRightUseCase.js +92 -0
- package/src/TextField/usecase/TextFieldArrowUpUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldArrowUpUseCase.js +156 -0
- package/src/TextField/usecase/TextFieldBlinkingUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldBlinkingUseCase.js +21 -0
- package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.d.ts +13 -0
- package/src/TextField/usecase/TextFieldBuildFromCharacterUseCase.js +58 -0
- package/src/TextField/usecase/TextFieldCompositionEndUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldCompositionEndUseCase.js +32 -0
- package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldCompositionUpdateUseCase.js +109 -0
- package/src/TextField/usecase/TextFieldCopyUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldCopyUseCase.js +38 -0
- package/src/TextField/usecase/TextFieldDeleteTextUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldDeleteTextUseCase.js +108 -0
- package/src/TextField/usecase/TextFieldGetLineTextUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldGetLineTextUseCase.js +32 -0
- package/src/TextField/usecase/TextFieldGetTextDataUseCase.d.ts +15 -0
- package/src/TextField/usecase/TextFieldGetTextDataUseCase.js +26 -0
- package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldHtmlTextToRawTextUseCase.js +31 -0
- package/src/TextField/usecase/TextFieldInsertTextUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldInsertTextUseCase.js +79 -0
- package/src/TextField/usecase/TextFieldKeyDownEventUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldKeyDownEventUseCase.js +60 -0
- package/src/TextField/usecase/TextFieldReloadUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldReloadUseCase.js +25 -0
- package/src/TextField/usecase/TextFieldReplaceTextUseCase.d.ts +14 -0
- package/src/TextField/usecase/TextFieldReplaceTextUseCase.js +24 -0
- package/src/TextField/usecase/TextFieldResetUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResetUseCase.js +20 -0
- package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResizeAutoFontSizeUseCase.js +37 -0
- package/src/TextField/usecase/TextFieldResizeUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldResizeUseCase.js +49 -0
- package/src/TextField/usecase/TextFieldSelectAllUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSelectAllUseCase.js +20 -0
- package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSelectedFocusMoveUseCase.js +90 -0
- package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.d.ts +14 -0
- package/src/TextField/usecase/TextFieldSetFocusIndexUseCase.js +197 -0
- package/src/TextField/usecase/TextFieldSetFocusUseCase.d.ts +11 -0
- package/src/TextField/usecase/TextFieldSetFocusUseCase.js +43 -0
- package/src/TextField/usecase/TextFieldSetScrollXUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldSetScrollXUseCase.js +66 -0
- package/src/TextField/usecase/TextFieldSetScrollYUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldSetScrollYUseCase.js +66 -0
- package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.d.ts +12 -0
- package/src/TextField/usecase/TextFieldUpdateStopIndexUseCase.js +82 -0
- package/src/TextField.d.ts +602 -0
- package/src/TextField.js +1292 -0
- package/src/TextFormat/service/TextFormatGenerateFontStyleService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatGenerateFontStyleService.js +19 -0
- package/src/TextFormat/service/TextFormatGetWidthMarginService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatGetWidthMarginService.js +19 -0
- package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatHtmlTextGenerateStyleService.js +51 -0
- package/src/TextFormat/service/TextFormatIsSameService.d.ts +12 -0
- package/src/TextFormat/service/TextFormatIsSameService.js +28 -0
- package/src/TextFormat/service/TextFormatSetDefaultService.d.ts +11 -0
- package/src/TextFormat/service/TextFormatSetDefaultService.js +22 -0
- package/{dist → src}/TextFormat.d.ts +42 -128
- package/src/TextFormat.js +233 -0
- package/src/TextParser/service/TextParserAdjustmentHeightService.d.ts +11 -0
- package/src/TextParser/service/TextParserAdjustmentHeightService.js +24 -0
- package/src/TextParser/service/TextParserParseStyleService.d.ts +11 -0
- package/src/TextParser/service/TextParserParseStyleService.js +80 -0
- package/src/TextParser/usecase/TextParserCreateNewLineUseCase.d.ts +13 -0
- package/src/TextParser/usecase/TextParserCreateNewLineUseCase.js +35 -0
- package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.d.ts +15 -0
- package/src/TextParser/usecase/TextParserParseHtmlTextUseCase.js +37 -0
- package/src/TextParser/usecase/TextParserParseTagUseCase.d.ts +17 -0
- package/src/TextParser/usecase/TextParserParseTagUseCase.js +57 -0
- package/src/TextParser/usecase/TextParserParseTextUseCase.d.ts +16 -0
- package/src/TextParser/usecase/TextParserParseTextUseCase.js +140 -0
- package/src/TextParser/usecase/TextParserSetAttributesUseCase.d.ts +14 -0
- package/src/TextParser/usecase/TextParserSetAttributesUseCase.js +63 -0
- package/src/TextUtil.d.ts +114 -0
- package/src/TextUtil.js +186 -0
- package/src/index.d.ts +3 -0
- package/src/index.js +3 -0
- package/src/interface/IAttributeObject.d.ts +4 -0
- package/src/interface/IBlendMode.d.ts +1 -0
- package/src/interface/IBounds.d.ts +6 -0
- package/src/interface/ICharacter.d.ts +5 -0
- package/src/interface/ICharacter.js +1 -0
- package/src/interface/IDictionaryTag.d.ts +8 -0
- package/src/interface/IDictionaryTag.js +1 -0
- package/src/interface/IElementPosition.d.ts +4 -0
- package/src/interface/IElementPosition.js +1 -0
- package/src/interface/IFilterArray.d.ts +2 -0
- package/src/interface/IFilterArray.js +1 -0
- package/src/interface/IGrid.d.ts +6 -0
- package/src/interface/IGrid.js +1 -0
- package/src/interface/ILoopConfig.d.ts +8 -0
- package/src/interface/ILoopConfig.js +1 -0
- package/src/interface/ILoopType.d.ts +1 -0
- package/src/interface/ILoopType.js +1 -0
- package/src/interface/IMovieClipActionObject.d.ts +5 -0
- package/src/interface/IMovieClipActionObject.js +1 -0
- package/src/interface/IMovieClipCharacter.d.ts +17 -0
- package/src/interface/IMovieClipCharacter.js +1 -0
- package/src/interface/IMovieClipLabelObject.d.ts +4 -0
- package/src/interface/IMovieClipLabelObject.js +1 -0
- package/src/interface/IMovieClipSoundObject.d.ts +5 -0
- package/src/interface/IMovieClipSoundObject.js +1 -0
- package/src/interface/IOptions.d.ts +8 -0
- package/src/interface/IOptions.js +1 -0
- package/src/interface/IPlaceObject.d.ts +14 -0
- package/src/interface/IPlaceObject.js +1 -0
- package/src/interface/IRGBA.d.ts +6 -0
- package/src/interface/IRGBA.js +1 -0
- package/src/interface/IShapeCharacter.d.ts +14 -0
- package/src/interface/IShapeCharacter.js +1 -0
- package/src/interface/ISoundTag.d.ts +6 -0
- package/src/interface/ISoundTag.js +1 -0
- package/src/interface/ISurfaceFilter.d.ts +6 -0
- package/src/interface/ISurfaceFilter.js +1 -0
- package/src/interface/ITextFieldAutoSize.d.ts +1 -0
- package/src/interface/ITextFieldAutoSize.js +1 -0
- package/src/interface/ITextFieldCharacter copy.d.ts +26 -0
- package/src/interface/ITextFieldCharacter copy.js +1 -0
- package/src/interface/ITextFieldCharacter.d.ts +26 -0
- package/src/interface/ITextFieldCharacter.js +1 -0
- package/src/interface/ITextFieldType copy.d.ts +1 -0
- package/src/interface/ITextFieldType copy.js +1 -0
- package/src/interface/ITextFieldType.d.ts +1 -0
- package/src/interface/ITextFieldType.js +1 -0
- package/src/interface/ITextFormatAlign copy.d.ts +1 -0
- package/src/interface/ITextFormatAlign copy.js +1 -0
- package/src/interface/ITextFormatAlign.d.ts +1 -0
- package/src/interface/ITextFormatAlign.js +1 -0
- package/src/interface/ITextFormatObject.d.ts +14 -0
- package/src/interface/ITextFormatObject.js +1 -0
- package/src/interface/ITextObject.d.ts +12 -0
- package/src/interface/ITextObject.js +1 -0
- package/src/interface/ITextObjectMode.d.ts +1 -0
- package/src/interface/ITextObjectMode.js +1 -0
- package/src/interface/IVideoCharacter.d.ts +11 -0
- package/src/interface/IVideoCharacter.js +1 -0
- package/dist/TextData.d.ts +0 -74
- package/dist/TextData.js +0 -132
- package/dist/TextFormat.js +0 -493
- package/dist/TextParser.d.ts +0 -23
- package/dist/TextParser.js +0 -459
- package/dist/index.d.ts +0 -3
- package/dist/index.js +0 -3
- package/dist/interface/OptionsImpl.d.ts +0 -8
- package/dist/interface/TextObjectImpl.d.ts +0 -12
- package/dist/interface/TextObjectModeImpl.d.ts +0 -1
- /package/{dist/interface/OptionsImpl.js → src/interface/IAttributeObject.js} +0 -0
- /package/{dist/interface/TextObjectImpl.js → src/interface/IBlendMode.js} +0 -0
- /package/{dist/interface/TextObjectModeImpl.js → src/interface/IBounds.js} +0 -0
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドのコンポジションエンドイベントを処理します。
|
|
4
|
+
* Processes the composition end event of the text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { $textArea } from "../../TextUtil";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "../../TextField/usecase/TextFieldGetTextDataUseCase";
|
|
3
|
+
/**
|
|
4
|
+
* @description テキストフィールドのコンポジションエンドイベントを処理します。
|
|
5
|
+
* Processes the composition end event of the text field.
|
|
6
|
+
*
|
|
7
|
+
* @param {TextField} text_field
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field) => {
|
|
13
|
+
if (text_field.compositionEndIndex > -1) {
|
|
14
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
15
|
+
for (let idx = text_field.compositionStartIndex; idx < text_field.compositionEndIndex; ++idx) {
|
|
16
|
+
const textObject = textData.textTable[idx];
|
|
17
|
+
if (!textObject) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
textObject.textFormat.underline = false;
|
|
21
|
+
}
|
|
22
|
+
text_field.focusIndex = text_field.compositionEndIndex;
|
|
23
|
+
}
|
|
24
|
+
$textArea.blur();
|
|
25
|
+
$textArea.value = "";
|
|
26
|
+
if (text_field.focus) {
|
|
27
|
+
$textArea.focus();
|
|
28
|
+
}
|
|
29
|
+
text_field.selectIndex = -1;
|
|
30
|
+
text_field.compositionStartIndex = -1;
|
|
31
|
+
text_field.compositionEndIndex = -1;
|
|
32
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 新しい文字が入力されたときのイベント処理関数
|
|
4
|
+
* Event processing function when a new character is entered
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {string} texts
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (text_field: TextField, texts: string) => void;
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { TextFormat } from "../../TextFormat";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "../../TextField/usecase/TextFieldGetTextDataUseCase";
|
|
3
|
+
import { execute as textFieldDeleteTextUseCase } from "../../TextField/usecase/TextFieldDeleteTextUseCase";
|
|
4
|
+
/**
|
|
5
|
+
* @description 新しい文字が入力されたときのイベント処理関数
|
|
6
|
+
* Event processing function when a new character is entered
|
|
7
|
+
*
|
|
8
|
+
* @param {TextField} text_field
|
|
9
|
+
* @param {string} texts
|
|
10
|
+
* @return {void}
|
|
11
|
+
* @method
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
export const execute = (text_field, texts) => {
|
|
15
|
+
if (text_field.compositionEndIndex > -1) {
|
|
16
|
+
const cacheIndex = text_field.compositionStartIndex;
|
|
17
|
+
text_field.focusIndex = text_field.compositionStartIndex;
|
|
18
|
+
text_field.selectIndex = text_field.compositionEndIndex - 1;
|
|
19
|
+
text_field.compositionStartIndex = -1;
|
|
20
|
+
textFieldDeleteTextUseCase(text_field);
|
|
21
|
+
// reset
|
|
22
|
+
text_field.compositionStartIndex = cacheIndex;
|
|
23
|
+
text_field.selectIndex = -1;
|
|
24
|
+
}
|
|
25
|
+
let textData = textFieldGetTextDataUseCase(text_field);
|
|
26
|
+
const textFormats = [];
|
|
27
|
+
const length = texts.length;
|
|
28
|
+
let newText = "";
|
|
29
|
+
if (2 > textData.textTable.length) {
|
|
30
|
+
newText = texts;
|
|
31
|
+
text_field.focusIndex = 1;
|
|
32
|
+
text_field.compositionStartIndex = 1;
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
for (let idx = 1; idx < textData.textTable.length; ++idx) {
|
|
36
|
+
const textObject = textData.textTable[idx];
|
|
37
|
+
if (!textObject) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
if (text_field.compositionStartIndex === idx) {
|
|
41
|
+
for (let idx = 0; idx < length; ++idx) {
|
|
42
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
43
|
+
newText += texts[idx];
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
switch (textObject.mode) {
|
|
47
|
+
case "break":
|
|
48
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
49
|
+
newText += "\n";
|
|
50
|
+
break;
|
|
51
|
+
case "text":
|
|
52
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
53
|
+
newText += textObject.text;
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
// last text
|
|
60
|
+
if (text_field.compositionStartIndex === textData.textTable.length) {
|
|
61
|
+
const textObject = textData.textTable[text_field.compositionStartIndex - 1];
|
|
62
|
+
if (!textObject) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
for (let idx = 0; idx < length; ++idx) {
|
|
66
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
67
|
+
newText += texts[idx];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// update
|
|
72
|
+
if (textFormats.length) {
|
|
73
|
+
text_field.$textFormats = textFormats;
|
|
74
|
+
}
|
|
75
|
+
// fixed logic
|
|
76
|
+
text_field.text = newText;
|
|
77
|
+
// fixed logic
|
|
78
|
+
text_field.$textFormats = null;
|
|
79
|
+
textData = textFieldGetTextDataUseCase(text_field);
|
|
80
|
+
let index = text_field.compositionStartIndex + length;
|
|
81
|
+
for (let idx = text_field.compositionStartIndex; idx < index; ++idx) {
|
|
82
|
+
const textObject = textData.textTable[idx];
|
|
83
|
+
if (!textObject) {
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
textObject.textFormat.underline = true;
|
|
87
|
+
if (textObject.mode !== "wrap") {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (idx === text_field.compositionStartIndex) {
|
|
91
|
+
let subIndex = 1;
|
|
92
|
+
for (;;) {
|
|
93
|
+
const textObject = textData.textTable[idx - subIndex];
|
|
94
|
+
if (!textObject) {
|
|
95
|
+
break;
|
|
96
|
+
}
|
|
97
|
+
if (textObject.mode === "text") {
|
|
98
|
+
textObject.textFormat.underline = true;
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
subIndex++;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
if (idx > text_field.compositionStartIndex) {
|
|
105
|
+
index++;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
text_field.compositionEndIndex = text_field.focusIndex = index;
|
|
109
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの選択範囲のテキストを返却します。
|
|
4
|
+
* Returns the text of the selection in the text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {Promise<void>}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => Promise<void>;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの選択範囲のテキストを返却します。
|
|
4
|
+
* Returns the text of the selection in the text field.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {Promise<void>}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export const execute = async (text_field) => {
|
|
12
|
+
if (text_field.focusIndex === -1 || text_field.selectIndex === -1) {
|
|
13
|
+
return;
|
|
14
|
+
}
|
|
15
|
+
let text = "";
|
|
16
|
+
const minIndex = Math.min(text_field.focusIndex, text_field.selectIndex);
|
|
17
|
+
const maxIndex = Math.max(text_field.focusIndex, text_field.selectIndex) + 1;
|
|
18
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
19
|
+
for (let idx = minIndex; idx < maxIndex; ++idx) {
|
|
20
|
+
const textObject = textData.textTable[idx];
|
|
21
|
+
if (!textObject) {
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
switch (textObject.mode) {
|
|
25
|
+
case "text":
|
|
26
|
+
text += textObject.text;
|
|
27
|
+
break;
|
|
28
|
+
case "break":
|
|
29
|
+
text += "\n";
|
|
30
|
+
break;
|
|
31
|
+
default:
|
|
32
|
+
break;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
await navigator
|
|
36
|
+
.clipboard
|
|
37
|
+
.writeText(text);
|
|
38
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 選択中のテキストを削除します。
|
|
4
|
+
* Deletes the selected text.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { TextFormat } from "../../TextFormat";
|
|
2
|
+
import { execute as textFieldGetTextDataUseCase } from "../../TextField/usecase/TextFieldGetTextDataUseCase";
|
|
3
|
+
/**
|
|
4
|
+
* @description 選択中のテキストを削除します。
|
|
5
|
+
* Deletes the selected text.
|
|
6
|
+
*
|
|
7
|
+
* @param {TextField} text_field
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field) => {
|
|
13
|
+
if (text_field.compositionStartIndex > -1) {
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
let minIndex = 0;
|
|
17
|
+
let maxIndex = 0;
|
|
18
|
+
if (text_field.selectIndex > -1) {
|
|
19
|
+
minIndex = Math.min(text_field.focusIndex, text_field.selectIndex);
|
|
20
|
+
maxIndex = Math.max(text_field.focusIndex, text_field.selectIndex) + 1;
|
|
21
|
+
text_field.focusIndex = minIndex;
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
if (2 > text_field.focusIndex) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
text_field.focusIndex--;
|
|
28
|
+
}
|
|
29
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
30
|
+
const textObject = textData.textTable[text_field.focusIndex];
|
|
31
|
+
if (textObject && textObject.mode === "wrap") {
|
|
32
|
+
text_field.focusIndex--;
|
|
33
|
+
}
|
|
34
|
+
const textFormats = [];
|
|
35
|
+
let newText = "";
|
|
36
|
+
for (let idx = 1; idx < textData.textTable.length; ++idx) {
|
|
37
|
+
const textObject = textData.textTable[idx];
|
|
38
|
+
if (!textObject) {
|
|
39
|
+
continue;
|
|
40
|
+
}
|
|
41
|
+
if (text_field.focusIndex === idx
|
|
42
|
+
|| minIndex <= idx && maxIndex > idx) {
|
|
43
|
+
continue;
|
|
44
|
+
}
|
|
45
|
+
switch (textObject.mode) {
|
|
46
|
+
case "break":
|
|
47
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
48
|
+
newText += "\n";
|
|
49
|
+
break;
|
|
50
|
+
case "text":
|
|
51
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
52
|
+
newText += textObject.text;
|
|
53
|
+
break;
|
|
54
|
+
default:
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
if (textData.textTable.length === text_field.focusIndex) {
|
|
59
|
+
textFormats.pop();
|
|
60
|
+
newText = newText.slice(0, -1);
|
|
61
|
+
}
|
|
62
|
+
text_field.selectIndex = -1;
|
|
63
|
+
if (!newText) {
|
|
64
|
+
// reset
|
|
65
|
+
text_field.text = "";
|
|
66
|
+
text_field.focusIndex = 1;
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
const beforeTextWidth = text_field.textWidth;
|
|
70
|
+
const beforeTextHeight = text_field.textHeight;
|
|
71
|
+
// fixed logic
|
|
72
|
+
text_field.$textFormats = textFormats;
|
|
73
|
+
// fixed logic
|
|
74
|
+
text_field.text = newText;
|
|
75
|
+
if (text_field.scrollX > 0) {
|
|
76
|
+
const textWidth = text_field.textWidth;
|
|
77
|
+
const width = text_field.width;
|
|
78
|
+
switch (true) {
|
|
79
|
+
case width > textWidth:
|
|
80
|
+
text_field.$scrollX = 0;
|
|
81
|
+
break;
|
|
82
|
+
case beforeTextWidth !== textWidth:
|
|
83
|
+
text_field.$scrollX -= (beforeTextWidth - textWidth)
|
|
84
|
+
/ (textWidth / width);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (text_field.scrollY > 0) {
|
|
91
|
+
const textHeight = text_field.textHeight;
|
|
92
|
+
const height = text_field.height;
|
|
93
|
+
switch (true) {
|
|
94
|
+
case height > textHeight:
|
|
95
|
+
text_field.$scrollY = 0;
|
|
96
|
+
break;
|
|
97
|
+
case beforeTextHeight !== textHeight:
|
|
98
|
+
text_field.$scrollY -= (beforeTextHeight - textHeight)
|
|
99
|
+
/ (textHeight / height);
|
|
100
|
+
break;
|
|
101
|
+
default:
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// fixed logic
|
|
106
|
+
text_field.$textFormats = null;
|
|
107
|
+
}
|
|
108
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description 指定された行のテキストを返します。
|
|
4
|
+
* Returns the text of a given line.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {number} index
|
|
8
|
+
* @return {string}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (text_field: TextField, index: number) => string;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description 指定された行のテキストを返します。
|
|
4
|
+
* Returns the text of a given line.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {number} index
|
|
8
|
+
* @return {string}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export const execute = (text_field, index) => {
|
|
13
|
+
let text = "";
|
|
14
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
15
|
+
for (let idx = 1; idx < textData.textTable.length; idx++) {
|
|
16
|
+
const textObject = textData.textTable[idx];
|
|
17
|
+
if (!textObject) {
|
|
18
|
+
continue;
|
|
19
|
+
}
|
|
20
|
+
if (textObject.line > index) {
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
if (textObject.line !== index) {
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
if (textObject.mode !== "text") {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
text += textObject.text;
|
|
30
|
+
}
|
|
31
|
+
return text;
|
|
32
|
+
};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { TextData } from "../../TextData";
|
|
2
|
+
import type { TextField } from "../../TextField";
|
|
3
|
+
/**
|
|
4
|
+
* @description テキスト情報を元に描画用のデータを生成して返します。
|
|
5
|
+
* 生成済みのデータがある場合は、そのデータを返します。
|
|
6
|
+
* Generates and returns data for drawing based on text information.
|
|
7
|
+
* If data has already been generated, that data is returned.
|
|
8
|
+
*
|
|
9
|
+
* @param {TextField} text_field
|
|
10
|
+
* @param {number} sub_font_size
|
|
11
|
+
* @return {TextData}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export declare const execute: (text_field: TextField, sub_font_size?: number) => TextData;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { execute as textParserParseHtmlTextUseCase } from "../../TextParser/usecase/TextParserParseHtmlTextUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキスト情報を元に描画用のデータを生成して返します。
|
|
4
|
+
* 生成済みのデータがある場合は、そのデータを返します。
|
|
5
|
+
* Generates and returns data for drawing based on text information.
|
|
6
|
+
* If data has already been generated, that data is returned.
|
|
7
|
+
*
|
|
8
|
+
* @param {TextField} text_field
|
|
9
|
+
* @param {number} sub_font_size
|
|
10
|
+
* @return {TextData}
|
|
11
|
+
* @method
|
|
12
|
+
* @protected
|
|
13
|
+
*/
|
|
14
|
+
export const execute = (text_field, sub_font_size = 0) => {
|
|
15
|
+
if (text_field.$textData) {
|
|
16
|
+
return text_field.$textData;
|
|
17
|
+
}
|
|
18
|
+
text_field.$textData = textParserParseHtmlTextUseCase(text_field.htmlText, text_field.defaultTextFormat, {
|
|
19
|
+
"width": text_field.width,
|
|
20
|
+
"multiline": text_field.multiline,
|
|
21
|
+
"wordWrap": text_field.wordWrap,
|
|
22
|
+
"subFontSize": sub_font_size,
|
|
23
|
+
"textFormats": text_field.$textFormats
|
|
24
|
+
});
|
|
25
|
+
return text_field.$textData;
|
|
26
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description HTMLテキストをプレーンテキストに変換します。
|
|
4
|
+
* Convert HTML text to plain text.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {string}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => string;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { execute as textFieldGetTextDataUseCase } from "./TextFieldGetTextDataUseCase";
|
|
2
|
+
/**
|
|
3
|
+
* @description HTMLテキストをプレーンテキストに変換します。
|
|
4
|
+
* Convert HTML text to plain text.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {string}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export const execute = (text_field) => {
|
|
12
|
+
let text = "";
|
|
13
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
14
|
+
for (let idx = 1; idx < textData.textTable.length; ++idx) {
|
|
15
|
+
const textObject = textData.textTable[idx];
|
|
16
|
+
if (!textObject) {
|
|
17
|
+
continue;
|
|
18
|
+
}
|
|
19
|
+
switch (textObject.mode) {
|
|
20
|
+
case "text":
|
|
21
|
+
text += textObject.text;
|
|
22
|
+
break;
|
|
23
|
+
case "break":
|
|
24
|
+
text += "\r";
|
|
25
|
+
break;
|
|
26
|
+
default:
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return text;
|
|
31
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description TextField にテキストを挿入します。
|
|
4
|
+
* Inserts text into the TextField.
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {string} texts
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (text_field: TextField, texts: string) => void;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { TextFormat } from "../../TextFormat";
|
|
2
|
+
import { $textArea } from "../../TextUtil";
|
|
3
|
+
import { execute as textFieldDeleteTextUseCase } from "../../TextField/usecase/TextFieldDeleteTextUseCase";
|
|
4
|
+
import { execute as textFieldGetTextDataUseCase } from "../../TextField/usecase/TextFieldGetTextDataUseCase";
|
|
5
|
+
/**
|
|
6
|
+
* @description TextField にテキストを挿入します。
|
|
7
|
+
* Inserts text into the TextField.
|
|
8
|
+
*
|
|
9
|
+
* @param {TextField} text_field
|
|
10
|
+
* @param {string} texts
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (text_field, texts) => {
|
|
16
|
+
if (text_field.focusIndex === -1
|
|
17
|
+
|| text_field.compositionStartIndex > -1) {
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
if (text_field.selectIndex > -1) {
|
|
21
|
+
textFieldDeleteTextUseCase(text_field);
|
|
22
|
+
}
|
|
23
|
+
const textData = textFieldGetTextDataUseCase(text_field);
|
|
24
|
+
if (2 > textData.textTable.length) {
|
|
25
|
+
text_field.focusIndex = 2;
|
|
26
|
+
text_field.appendText(texts);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const textFormats = [];
|
|
30
|
+
let newText = "";
|
|
31
|
+
for (let idx = 1; idx < textData.textTable.length; ++idx) {
|
|
32
|
+
const textObject = textData.textTable[idx];
|
|
33
|
+
if (!textObject) {
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (text_field.focusIndex === idx) {
|
|
37
|
+
for (let idx = 0; idx < texts.length; ++idx) {
|
|
38
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
39
|
+
newText += texts[idx];
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
switch (textObject.mode) {
|
|
43
|
+
case "break":
|
|
44
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
45
|
+
newText += "\n";
|
|
46
|
+
break;
|
|
47
|
+
case "text":
|
|
48
|
+
textFormats.push(new TextFormat(...Object.values(textObject.textFormat)));
|
|
49
|
+
newText += textObject.text;
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (textData.textTable.length === text_field.focusIndex) {
|
|
56
|
+
let textFormat;
|
|
57
|
+
if (textData.textTable.length) {
|
|
58
|
+
const textObject = textData.textTable[textData.textTable.length - 1];
|
|
59
|
+
textFormat = new TextFormat(...Object.values(textObject.textFormat));
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
textFormat = text_field.defaultTextFormat;
|
|
63
|
+
text_field.focusIndex++;
|
|
64
|
+
}
|
|
65
|
+
for (let idx = 0; idx < texts.length; ++idx) {
|
|
66
|
+
textFormats.push(new TextFormat(...Object.values(textFormat.toObject())));
|
|
67
|
+
newText += texts[idx];
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// fixed logic
|
|
71
|
+
text_field.$textFormats = textFormats;
|
|
72
|
+
// fixed logic
|
|
73
|
+
text_field.text = newText;
|
|
74
|
+
// fixed logic
|
|
75
|
+
text_field.$textFormats = null;
|
|
76
|
+
text_field.focusIndex += texts.length;
|
|
77
|
+
text_field.selectIndex = -1;
|
|
78
|
+
$textArea.value = "";
|
|
79
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドのキーボードダウンイベントを実行する
|
|
4
|
+
* Execute the keyboard down event of the text field
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @param {KeyboardEvent} event
|
|
8
|
+
* @return {void}
|
|
9
|
+
* @method
|
|
10
|
+
* @protected
|
|
11
|
+
*/
|
|
12
|
+
export declare const execute: (text_field: TextField, event: KeyboardEvent) => void;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { execute as textFieldArrowDownUseCase } from "../../TextField/usecase/TextFieldArrowDownUseCase";
|
|
2
|
+
import { execute as textFieldArrowUpUseCase } from "../../TextField/usecase/TextFieldArrowUpUseCase";
|
|
3
|
+
import { execute as textFieldArrowLeftUseCase } from "../../TextField/usecase/TextFieldArrowLeftUseCase";
|
|
4
|
+
import { execute as textFieldArrowRightUseCase } from "../../TextField/usecase/TextFieldArrowRightUseCase";
|
|
5
|
+
/**
|
|
6
|
+
* @description テキストフィールドのキーボードダウンイベントを実行する
|
|
7
|
+
* Execute the keyboard down event of the text field
|
|
8
|
+
*
|
|
9
|
+
* @param {TextField} text_field
|
|
10
|
+
* @param {KeyboardEvent} event
|
|
11
|
+
* @return {void}
|
|
12
|
+
* @method
|
|
13
|
+
* @protected
|
|
14
|
+
*/
|
|
15
|
+
export const execute = (text_field, event) => {
|
|
16
|
+
if (text_field.focusIndex === -1) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
switch (event.key) {
|
|
20
|
+
case "Backspace":
|
|
21
|
+
case "Delete":
|
|
22
|
+
text_field.deleteText();
|
|
23
|
+
break;
|
|
24
|
+
case "Enter":
|
|
25
|
+
text_field.insertText("\n");
|
|
26
|
+
break;
|
|
27
|
+
case "ArrowLeft":
|
|
28
|
+
textFieldArrowLeftUseCase(text_field, event.shiftKey);
|
|
29
|
+
break;
|
|
30
|
+
case "ArrowRight":
|
|
31
|
+
textFieldArrowRightUseCase(text_field, event.shiftKey);
|
|
32
|
+
break;
|
|
33
|
+
case "ArrowUp":
|
|
34
|
+
textFieldArrowUpUseCase(text_field, event.shiftKey);
|
|
35
|
+
break;
|
|
36
|
+
case "ArrowDown":
|
|
37
|
+
textFieldArrowDownUseCase(text_field, event.shiftKey);
|
|
38
|
+
break;
|
|
39
|
+
case "a":
|
|
40
|
+
if (event.metaKey || event.ctrlKey) {
|
|
41
|
+
event.preventDefault();
|
|
42
|
+
text_field.selectAll();
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case "c":
|
|
46
|
+
if (event.metaKey || event.ctrlKey) {
|
|
47
|
+
event.preventDefault();
|
|
48
|
+
text_field.copy();
|
|
49
|
+
}
|
|
50
|
+
break;
|
|
51
|
+
case "v":
|
|
52
|
+
if (event.metaKey || event.ctrlKey) {
|
|
53
|
+
event.preventDefault();
|
|
54
|
+
text_field.paste();
|
|
55
|
+
}
|
|
56
|
+
break;
|
|
57
|
+
default:
|
|
58
|
+
break;
|
|
59
|
+
}
|
|
60
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TextField } from "../../TextField";
|
|
2
|
+
/**
|
|
3
|
+
* @description テキストフィールドの描画生成情報を再計算します
|
|
4
|
+
* Recalculates the drawing generation information of the text field
|
|
5
|
+
*
|
|
6
|
+
* @param {TextField} text_field
|
|
7
|
+
* @return {void}
|
|
8
|
+
* @method
|
|
9
|
+
* @protected
|
|
10
|
+
*/
|
|
11
|
+
export declare const execute: (text_field: TextField) => void;
|