@shijiu/jsview 1.9.719

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 (148) hide show
  1. package/dom/bin/jsview-browser-debug-dom.min.js +1 -0
  2. package/dom/bin/jsview-dom.min.js +1 -0
  3. package/dom/bin/jsview-engine-js-browser.min.js +1 -0
  4. package/dom/bin/jsview-forge-define.min.js +1 -0
  5. package/dom/browser-root-style.css +21 -0
  6. package/dom/jsv-browser-debug-dom.js +8 -0
  7. package/dom/jsv-dom.js +6 -0
  8. package/dom/jsv-engine-js-browser.js +6 -0
  9. package/dom/jsv-forge-define.js +6 -0
  10. package/dom/jsview-dom/README.md +5 -0
  11. package/dom/jsview-dom/package-lock.json-perfect +3898 -0
  12. package/dom/jsview-dom/package.json +23 -0
  13. package/dom/jsview-dom/rollup/browser-debug-dom.rollup.config.js +15 -0
  14. package/dom/jsview-dom/rollup/dom.rollup.config.js +14 -0
  15. package/dom/jsview-dom/rollup/engine-js-browser.rollup.config.js +14 -0
  16. package/dom/jsview-dom/rollup/forge-define.rollup.config.js +14 -0
  17. package/dom/jsview-dom/scripts/release_dist.sh +36 -0
  18. package/dom/jsview-dom/src/dom-browser-hook/HookDocument.js +118 -0
  19. package/dom/jsview-dom/src/dom-browser-hook/OriginDocument.js +19 -0
  20. package/dom/jsview-dom/src/dom-browser-hook/StyleFormatCheck.js +559 -0
  21. package/dom/jsview-dom/src/dom-browser-hook/index.js +6 -0
  22. package/dom/jsview-dom/src/dom-wrapper/ForgeExtension.js +226 -0
  23. package/dom/jsview-dom/src/dom-wrapper/JsViewForgeApp.js +85 -0
  24. package/dom/jsview-dom/src/dom-wrapper/JsViewProxy.js +51 -0
  25. package/dom/jsview-dom/src/dom-wrapper/event/AnimationEvent.js +7 -0
  26. package/dom/jsview-dom/src/dom-wrapper/event/Event.js +12 -0
  27. package/dom/jsview-dom/src/dom-wrapper/event/FocusEvent.js +9 -0
  28. package/dom/jsview-dom/src/dom-wrapper/event/KeyboardEvent.js +43 -0
  29. package/dom/jsview-dom/src/dom-wrapper/event/LoadEvent.js +8 -0
  30. package/dom/jsview-dom/src/dom-wrapper/index.js +16 -0
  31. package/dom/jsview-dom/src/dom-wrapper/node/AnchorElement.js +24 -0
  32. package/dom/jsview-dom/src/dom-wrapper/node/AudioElement.js +60 -0
  33. package/dom/jsview-dom/src/dom-wrapper/node/Comment.js +10 -0
  34. package/dom/jsview-dom/src/dom-wrapper/node/DivElement.js +498 -0
  35. package/dom/jsview-dom/src/dom-wrapper/node/Document.js +274 -0
  36. package/dom/jsview-dom/src/dom-wrapper/node/Element.js +852 -0
  37. package/dom/jsview-dom/src/dom-wrapper/node/FDivElement.js +48 -0
  38. package/dom/jsview-dom/src/dom-wrapper/node/HeadElement.js +47 -0
  39. package/dom/jsview-dom/src/dom-wrapper/node/ImageElement.js +203 -0
  40. package/dom/jsview-dom/src/dom-wrapper/node/JsvAudioTrackElement.js +22 -0
  41. package/dom/jsview-dom/src/dom-wrapper/node/JsvElement.js +40 -0
  42. package/dom/jsview-dom/src/dom-wrapper/node/LinkElement.js +48 -0
  43. package/dom/jsview-dom/src/dom-wrapper/node/MediaElement.js +230 -0
  44. package/dom/jsview-dom/src/dom-wrapper/node/Node.js +178 -0
  45. package/dom/jsview-dom/src/dom-wrapper/node/SVGElement.js +9 -0
  46. package/dom/jsview-dom/src/dom-wrapper/node/ScriptElement.js +45 -0
  47. package/dom/jsview-dom/src/dom-wrapper/node/StyleElement.js +33 -0
  48. package/dom/jsview-dom/src/dom-wrapper/node/StyleElementCache.js +41 -0
  49. package/dom/jsview-dom/src/dom-wrapper/node/Text.js +22 -0
  50. package/dom/jsview-dom/src/dom-wrapper/node/UnknownElement.js +4 -0
  51. package/dom/jsview-dom/src/dom-wrapper/node/VideoElement.js +237 -0
  52. package/dom/jsview-dom/src/dom-wrapper/style/BorderImage.js +25 -0
  53. package/dom/jsview-dom/src/dom-wrapper/style/Inset.js +26 -0
  54. package/dom/jsview-dom/src/dom-wrapper/style/JsvStyleVariable.js +65 -0
  55. package/dom/jsview-dom/src/dom-wrapper/style/KeyframeRule.js +11 -0
  56. package/dom/jsview-dom/src/dom-wrapper/style/StyleDeclaration.js +609 -0
  57. package/dom/jsview-dom/src/dom-wrapper/style/StyleSheet.js +51 -0
  58. package/dom/jsview-dom/src/dom-wrapper/style/StyleValue.js +385 -0
  59. package/dom/jsview-dom/src/dom-wrapper/style/TextStylePackMap.js +43 -0
  60. package/dom/jsview-dom/src/dom-wrapper/style/URL.js +144 -0
  61. package/dom/jsview-dom/src/dom-wrapper/utils/EventHandler.js +42 -0
  62. package/dom/jsview-dom/src/dom-wrapper/utils/FDivRoot.js +86 -0
  63. package/dom/jsview-dom/src/dom-wrapper/utils/JsvLazySyncCache.js +64 -0
  64. package/dom/jsview-dom/src/dom-wrapper/utils/Log.js +42 -0
  65. package/dom/jsview-dom/src/dom-wrapper/utils/MutationObserver.js +32 -0
  66. package/dom/jsview-dom/src/dom-wrapper/utils/focusableNode.js +715 -0
  67. package/dom/jsview-dom/src/engine-js/ForgeDefine.js +8 -0
  68. package/dom/jsview-dom/src/engine-js/ForgeExtensionDefine.js +14 -0
  69. package/dom/jsview-dom/src/engine-js/browser/PlatformUtils.js +100 -0
  70. package/dom/jsview-dom/src/engine-js/browser/animation_base.js +313 -0
  71. package/dom/jsview-dom/src/engine-js/browser/animation_keyframe.js +64 -0
  72. package/dom/jsview-dom/src/engine-js/browser/animation_progress.js +287 -0
  73. package/dom/jsview-dom/src/engine-js/browser/animation_proxy.js +906 -0
  74. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/demux.js +143 -0
  75. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/gifDecoder.js +12 -0
  76. package/dom/jsview-dom/src/engine-js/browser/apic_decoder/libwebp-0.6.0.min.js +160 -0
  77. package/dom/jsview-dom/src/engine-js/browser/console_log.js +25 -0
  78. package/dom/jsview-dom/src/engine-js/browser/dynamic_key_frames.js +95 -0
  79. package/dom/jsview-dom/src/engine-js/browser/easing.js +114 -0
  80. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/element_transform.js +122 -0
  81. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/gjk.js +450 -0
  82. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/mat.js +102 -0
  83. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/range_model.js +296 -0
  84. package/dom/jsview-dom/src/engine-js/browser/html_shared_tools/test_collide.js +10 -0
  85. package/dom/jsview-dom/src/engine-js/browser/index.js +38 -0
  86. package/dom/jsview-dom/src/engine-js/browser/latex_parse.js +336 -0
  87. package/dom/jsview-dom/src/engine-js/browser/layout_params.js +113 -0
  88. package/dom/jsview-dom/src/engine-js/browser/layout_view.js +3545 -0
  89. package/dom/jsview-dom/src/engine-js/browser/layout_view_debug.js +15 -0
  90. package/dom/jsview-dom/src/engine-js/browser/media.js +379 -0
  91. package/dom/jsview-dom/src/engine-js/browser/page_base.js +941 -0
  92. package/dom/jsview-dom/src/engine-js/browser/particle_view.js +526 -0
  93. package/dom/jsview-dom/src/engine-js/browser/platform_timer.js +61 -0
  94. package/dom/jsview-dom/src/engine-js/browser/react_utils.js +5 -0
  95. package/dom/jsview-dom/src/engine-js/browser/rect_utils.js +91 -0
  96. package/dom/jsview-dom/src/engine-js/browser/render_bridge.js +128 -0
  97. package/dom/jsview-dom/src/engine-js/browser/render_texture_proxy.js +155 -0
  98. package/dom/jsview-dom/src/engine-js/browser/renderer_deprecated.js +75 -0
  99. package/dom/jsview-dom/src/engine-js/browser/sound_pool.js +139 -0
  100. package/dom/jsview-dom/src/engine-js/browser/steps_animation.js +192 -0
  101. package/dom/jsview-dom/src/engine-js/browser/text_style_cache.js +454 -0
  102. package/dom/jsview-dom/src/engine-js/browser/text_utils.js +299 -0
  103. package/dom/jsview-dom/src/engine-js/browser/text_view.js +428 -0
  104. package/dom/jsview-dom/src/engine-js/browser/texture_manager.js +1060 -0
  105. package/dom/jsview-dom/src/engine-js/browser/url.js +69 -0
  106. package/dom/jsview-dom/src/engine-js/browser/velocity.js +40 -0
  107. package/dom/jsview-dom/src/engine-js/browser/view_sensor/autofroze_sensor.js +77 -0
  108. package/dom/jsview-dom/src/engine-js/browser/view_sensor/drag_impact_sensor.js +67 -0
  109. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor.js +98 -0
  110. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_callback.js +21 -0
  111. package/dom/jsview-dom/src/engine-js/browser/view_sensor/impact_sensor_manager.js +24 -0
  112. package/dom/jsview-dom/src/engine-js/browser/view_sensor/index.js +9 -0
  113. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor.js +268 -0
  114. package/dom/jsview-dom/src/engine-js/browser/view_sensor/view_sensor_manager.js +84 -0
  115. package/dom/jsview-dom/src/engine-js/browser/view_sensor/visible_sensor.js +213 -0
  116. package/dom/jsview-dom/src/engine-js/browser/view_store.js +41 -0
  117. package/dom/jsview-dom/src/engine-js/index.js +2 -0
  118. package/dom/jsview-dom/src/engine-js/native/README.md +1 -0
  119. package/dom/target_core_revision.mjs +15 -0
  120. package/index.js +0 -0
  121. package/loader/header_script_loader.js +134 -0
  122. package/loader/jsview-main.js +42 -0
  123. package/loader/jsview.config.default.js +37 -0
  124. package/loader/jsview.default.config.js +37 -0
  125. package/loader/loader.js +183 -0
  126. package/loader/loader_webkit.js +40 -0
  127. package/package.json +31 -0
  128. package/patches/node_modules/@vitejs/plugin-react/dist/index.cjs +520 -0
  129. package/patches/node_modules/@vue/compiler-sfc/dist/compiler-sfc.cjs.js +17609 -0
  130. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-css-to-js.js +335 -0
  131. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-format.js +446 -0
  132. package/patches/node_modules/@vue/compiler-sfc/dist/jsview-style-types.js +91 -0
  133. package/patches/node_modules/@vue/runtime-core/dist/runtime-core.esm-bundler.js +8038 -0
  134. package/patches/node_modules/@vue/runtime-dom/dist/runtime-dom.esm-bundler.js +1700 -0
  135. package/patches/node_modules/postcss-js/objectifier.js +90 -0
  136. package/patches/node_modules/vite/dist/node/chunks/dep-0fc8e132.js +63175 -0
  137. package/patches/node_modules/vite/dist/node/jsview-react.vite.config.js +7 -0
  138. package/patches/node_modules/vite/dist/node/jsview-vue.vite.config.js +7 -0
  139. package/patches/node_modules/vite/dist/node/jsview.vite.config.js +56 -0
  140. package/patches/node_modules/vue-router/dist/vue-router.mjs +3595 -0
  141. package/tools/common.js +58 -0
  142. package/tools/jsview-jsmap-serve.js +105 -0
  143. package/tools/jsview-post-build.js +184 -0
  144. package/tools/jsview-post-install-react.js +13 -0
  145. package/tools/jsview-post-install-vue.js +16 -0
  146. package/tools/jsview-post-install.js +116 -0
  147. package/tools/jsview-run-android.js +67 -0
  148. package/tsconfig.json +34 -0
@@ -0,0 +1,336 @@
1
+ /* eslint-disable no-unused-vars */
2
+
3
+ const WordType = {
4
+ STRING: Symbol("STRING"),
5
+ FUNCTION: Symbol("FUNCTION"),
6
+ LINE_FEED: Symbol("LINE_FEED"),
7
+ LEFT_BRACE: Symbol("LEFT_BRACE"),
8
+ RIGHT_BRACE: Symbol("RIGHT_BRACE"),
9
+ };
10
+
11
+ function lexicalAnalyze(arr) {
12
+ const result = [];
13
+ let i = 0;
14
+ while (i < arr.length) {
15
+ if (arr[i] === '\\') {
16
+ if (i < arr.length - 1) {
17
+ if (arr[i + 1] === '\\' || arr[i + 1] === '{' || arr[i + 1] === '}') {
18
+ // 普通字符
19
+ const pair = [i + 1, i + 2];
20
+ const word = {
21
+ type: WordType.STRING,
22
+ indexPair: pair,
23
+ };
24
+ result.push(word);
25
+ i += 2;
26
+ } else {
27
+ // 函数
28
+ ++i;
29
+ const start_i = i;
30
+ let end_i = i;
31
+ let has_char = false; // 函数名后有空字符的处理
32
+ while (i < arr.length && arr[i] !== '{' && arr[i] !== '}') {
33
+ if (arr[i] !== ' ') {
34
+ has_char = true;
35
+ }
36
+ if (!(arr[i] === ' ' && has_char)) {
37
+ // 字符串后的空字符不计入
38
+ end_i = ++i;
39
+ } else {
40
+ ++i;
41
+ }
42
+ }
43
+ const pair = [start_i, end_i];
44
+ const word = {
45
+ type: WordType.FUNCTION,
46
+ indexPair: pair,
47
+ };
48
+ result.push(word);
49
+ }
50
+ } else {
51
+ console.error("backslash at end.");
52
+ }
53
+ } else if (arr[i] === '{') {
54
+ const word = {
55
+ type: WordType.LEFT_BRACE,
56
+ indexPair: null,
57
+ };
58
+ result.push(word);
59
+ ++i;
60
+ } else if (arr[i] === '}') {
61
+ const word = {
62
+ type: WordType.RIGHT_BRACE,
63
+ indexPair: null,
64
+ };
65
+ result.push(word);
66
+ ++i;
67
+ } else if (arr[i] === '\n') {
68
+ const word = {
69
+ type: WordType.LINE_FEED,
70
+ indexPair: null,
71
+ };
72
+ result.push(word);
73
+ ++i;
74
+ } else {
75
+ // 普通字符
76
+ const start = i;
77
+ let end = i;
78
+ while (i < arr.length) {
79
+ if (arr[i] === '\\' || arr[i] === '{' || arr[i] === '}' || arr[i] === '\n') {
80
+ break;
81
+ } else {
82
+ ++i;
83
+ end = i;
84
+ }
85
+ }
86
+ const pair = [start, end];
87
+ const word = {
88
+ type: WordType.STRING,
89
+ indexPair: pair,
90
+ };
91
+ result.push(word);
92
+ }
93
+ }
94
+ // 清理
95
+ for (let index = result.length - 1; index >= 0; index--) {
96
+ const info = result[index];
97
+ if (info.type === WordType.STRING) {
98
+ let all_blank = true;
99
+ for (let j = info.indexPair[0]; j < info.indexPair[1]; j++) {
100
+ if (arr[j] !== ' ') {
101
+ all_blank = false;
102
+ break;
103
+ }
104
+ }
105
+ // 纯空字符的片段
106
+ if (all_blank && index > 0 && index < result.length - 1 && (result[index - 1].type === WordType.LEFT_BRACE || result[index - 1].type === WordType.RIGHT_BRACE) && (result[index + 1].type === WordType.RIGHT_BRACE || result[index + 1].type === WordType.LEFT_BRACE)) {
107
+ // 参数中间的空字符串该删除
108
+ result.splice(index, 1);
109
+ // result.remove(index);
110
+ }
111
+ }
112
+ }
113
+ return result;
114
+ }
115
+
116
+
117
+ const LEFT_BRACE = {};
118
+ // const RIGHT_BRACE = {};
119
+
120
+ const Style = {
121
+ BASE: Symbol("BASE"),
122
+ COLOR: Symbol("COLOR"),
123
+ BOLD: Symbol("BOLD"),
124
+ ITALIC: Symbol("ITALIC"),
125
+ DECORATION: Symbol("DECORATION"),
126
+ SUPERSCRIPT: Symbol("SUPERSCRIPT"),
127
+ SUBSCRIPT: Symbol("SUBSCRIPT"),
128
+ };
129
+
130
+ class TextStyle {
131
+ constructor() {
132
+ this.style;
133
+
134
+ this.styleValue = "";
135
+ }
136
+ }
137
+
138
+ class BaseNode {
139
+ constructor() {
140
+ this.textStyle = new TextStyle();
141
+
142
+ this.childNodes = [];
143
+
144
+ this.parent;
145
+ }
146
+ }
147
+
148
+ class LeafNode extends BaseNode {
149
+ constructor() {
150
+ super();
151
+
152
+ this.styleList = [];
153
+
154
+ this.indexPair;
155
+
156
+ this.lineFeedNode = false;
157
+
158
+ this.testValue;
159
+ }
160
+ }
161
+
162
+ function parseLatex(text) {
163
+ if (text === null || text.length === 0) { return null; }
164
+ const word_list = lexicalAnalyze(text);
165
+ const stack = [];
166
+ const leaf_list = [];
167
+ let i = 0;
168
+ while (i < word_list.length) {
169
+ const word = word_list[i];
170
+ if (word.type === WordType.STRING) {
171
+ const node = new LeafNode();
172
+ leaf_list.push(node);
173
+ node.indexPair = word.indexPair;
174
+ node.textStyle.style = Style.BASE;
175
+ stack.push(node);
176
+ } else if (word.type === WordType.LINE_FEED) {
177
+ const node = new LeafNode();
178
+ leaf_list.push(node);
179
+ node.lineFeedNode = true;
180
+ } else if (word.type === WordType.LEFT_BRACE) {
181
+ stack.push(LEFT_BRACE);
182
+ } else if (word.type === WordType.RIGHT_BRACE) {
183
+ if (stack.length > 0) {
184
+ const tmp_stack = [];
185
+ let node = stack.pop();
186
+ while (node !== LEFT_BRACE) {
187
+ tmp_stack.push(node);
188
+ if (stack.length > 0) {
189
+ node = stack.pop();
190
+ } else {
191
+ break;
192
+ }
193
+ }
194
+ if (stack.length > 0) {
195
+ const func_node = stack[stack.length - 1];
196
+ if (func_node.textStyle.style === Style.BASE) {
197
+ console.error("lack of function");
198
+ } else {
199
+ while (tmp_stack.length > 0) {
200
+ const n = tmp_stack.pop();
201
+ func_node.childNodes.push(n);
202
+ n.parent = func_node;
203
+ }
204
+ }
205
+ } else {
206
+ console.error("lack of function");
207
+ }
208
+ } else {
209
+ console.error("extra }");
210
+ }
211
+ } else if (word.type === WordType.FUNCTION) {
212
+ const func_name = text.substring(word.indexPair[0], word.indexPair[1]);
213
+
214
+ const node = new BaseNode();
215
+ switch (func_name) {
216
+ case "textcolor":
217
+ if (i < word_list.length - 3) {
218
+ node.textStyle.style = Style.COLOR;
219
+ const l_b = word_list[i + 1];
220
+ const setting = word_list[i + 2];
221
+ const r_b = word_list[i + 3];
222
+ if (l_b.type === WordType.LEFT_BRACE && setting.type === WordType.STRING && r_b.type === WordType.RIGHT_BRACE) {
223
+ node.textStyle.styleValue = text.substring(setting.indexPair[0], setting.indexPair[1]);
224
+ i += 3;
225
+ } else {
226
+ console.error("textcolor param format error.");
227
+ }
228
+ } else {
229
+ console.error("textcolor param format error.");
230
+ }
231
+ break;
232
+ case "textb":
233
+ node.textStyle.style = Style.BOLD;
234
+ break;
235
+ case "texti":
236
+ node.textStyle.style = Style.ITALIC;
237
+ break;
238
+ case "textdecoration":
239
+ if (i < word_list.length - 3) {
240
+ node.textStyle.style = Style.DECORATION;
241
+ const l_b = word_list[i + 1];
242
+ const setting = word_list[i + 2];
243
+ const r_b = word_list[i + 3];
244
+ if (l_b.type === WordType.LEFT_BRACE && setting.type === WordType.STRING && r_b.type === WordType.RIGHT_BRACE) {
245
+ node.textStyle.styleValue = text.substring(setting.indexPair[0], setting.indexPair[1]);
246
+ i += 3;
247
+ } else {
248
+ console.error("textdecoration param format error.");
249
+ }
250
+ } else {
251
+ console.error("textdecoration param format error.");
252
+ }
253
+ break;
254
+ case "textsup":
255
+ node.textStyle.style = Style.SUPERSCRIPT;
256
+ break;
257
+ case "textsub":
258
+ node.textStyle.style = Style.SUBSCRIPT;
259
+ break;
260
+ default:
261
+ console.error(`undefined style type: ${func_name}`);
262
+ break;
263
+ }
264
+ stack.push(node);
265
+ }
266
+ ++i;
267
+ }
268
+
269
+ leaf_list.forEach((n, index, arr) => {
270
+ let node = n.parent;
271
+ while (node) {
272
+ n.styleList.push(node.textStyle);
273
+ node = node.parent;
274
+ }
275
+ });
276
+
277
+ // 将语法树转为描画列表
278
+ return {
279
+ nodeList: leaf_list,
280
+ text
281
+ };
282
+ }
283
+
284
+ function toHtml(root, node_info) {
285
+ const origin_str = node_info.text;
286
+ for (const node of node_info.nodeList) {
287
+ if (node.lineFeedNode) {
288
+ root.appendChild(window.originDocument.createElement("br"));
289
+ continue;
290
+ }
291
+ const str = origin_str.substring(node.indexPair[0], node.indexPair[1]);
292
+ const span = window.originDocument.createElement("span");
293
+ let ele = span;
294
+ let tmp_ele;
295
+ for (const style of node.styleList) {
296
+ switch (style.style) {
297
+ case Style.BASE:
298
+ break;
299
+ case Style.BOLD:
300
+ tmp_ele = window.originDocument.createElement("b");
301
+ ele.appendChild(tmp_ele);
302
+ ele = tmp_ele;
303
+ break;
304
+ case Style.ITALIC:
305
+ tmp_ele = window.originDocument.createElement("i");
306
+ ele.appendChild(tmp_ele);
307
+ ele = tmp_ele;
308
+ break;
309
+ case Style.COLOR:
310
+ span.style.color = style.styleValue;
311
+ break;
312
+ case Style.DECORATION:
313
+ span.style.textDecoration = style.styleValue;
314
+ break;
315
+ case Style.SUPERSCRIPT:
316
+ tmp_ele = window.originDocument.createElement("sup");
317
+ ele.appendChild(tmp_ele);
318
+ ele = tmp_ele;
319
+ break;
320
+ case Style.SUBSCRIPT:
321
+ tmp_ele = window.originDocument.createElement("sub");
322
+ ele.appendChild(tmp_ele);
323
+ ele = tmp_ele;
324
+ break;
325
+ default:
326
+ break;
327
+ }
328
+ }
329
+ ele.textContent = str;
330
+ root.appendChild(span);
331
+ }
332
+ }
333
+ export {
334
+ parseLatex,
335
+ toHtml
336
+ };
@@ -0,0 +1,113 @@
1
+ import Forge from "../ForgeDefine";
2
+
3
+ class LayoutParamsBase {
4
+ constructor() {
5
+ this.Width = 0;
6
+ this.Height = 0;
7
+ this.MarginTop = 0;
8
+ this.MarginLeft = 0;
9
+ this.MarginRight = 0;
10
+ this.MarginBottom = 0;
11
+ this.Z = 0;
12
+ this.SizeAdjust = false;
13
+ }
14
+
15
+ SetPosition(x, y, z) {
16
+ this.MarginTop = y;
17
+ this.MarginLeft = x;
18
+ if (z) {
19
+ this.Z = z;
20
+ }
21
+ }
22
+
23
+ SetSize(w, h) {
24
+ this.Width = w;
25
+ this.Height = h;
26
+ }
27
+
28
+ Clone() {
29
+ const new_layout_params = new LayoutParamsBase(null);
30
+ new_layout_params.Width = this.Width;
31
+ new_layout_params.Height = this.Height;
32
+ new_layout_params.MarginTop = this.MarginTop;
33
+ new_layout_params.MarginLeft = this.MarginLeft;
34
+ new_layout_params.MarginRight = this.MarginRight;
35
+ new_layout_params.MarginBottom = this.MarginBottom;
36
+ new_layout_params.Z = this.Z;
37
+ new_layout_params.SizeAdjust = this.SizeAdjust;
38
+ return new_layout_params;
39
+ }
40
+
41
+ Equals(other_layout_params) {
42
+ return (other_layout_params.Width === this.Width
43
+ && other_layout_params.Height === this.Height
44
+ && other_layout_params.MarginTop === this.MarginTop
45
+ && other_layout_params.MarginLeft === this.MarginLeft
46
+ && other_layout_params.MarginRight === this.MarginRight
47
+ && other_layout_params.MarginBottom === this.MarginBottom
48
+ && other_layout_params.Z === this.Z);
49
+ }
50
+ }
51
+ Forge.LayoutParamsBase = LayoutParamsBase;
52
+
53
+ class LayoutParams extends Forge.LayoutParamsBase {
54
+ constructor(settings) {
55
+ super();
56
+
57
+ if (settings instanceof Forge.RectArea) { settings = { x: settings.x, y: settings.y, width: settings.width, height: settings.height }; }
58
+
59
+ if (settings) {
60
+ // Reset marginLeft
61
+ if (settings.x) {
62
+ this.MarginLeft = settings.x;
63
+ } else if (settings.marginLeft) {
64
+ this.MarginLeft = settings.marginLeft;
65
+ }
66
+
67
+ // Reset marginTop
68
+ if (settings.y) {
69
+ this.MarginTop = settings.y;
70
+ } else if (settings.marginTop) {
71
+ this.MarginTop = settings.marginTop;
72
+ }
73
+ if (settings.z) {
74
+ this.Z = settings.z;
75
+ }
76
+
77
+ // Reset width
78
+ if (settings.width) {
79
+ this.Width = settings.width;
80
+ }
81
+
82
+ // Reset height
83
+ if (settings.height) {
84
+ this.Height = settings.height;
85
+ }
86
+ // 参数检查
87
+ if (isNaN(this.MarginTop)) {
88
+ Forge.LogE("isNaN(this.MarginTop)!");
89
+ this.MarginTop = 0;
90
+ }
91
+ if (isNaN(this.MarginLeft)) {
92
+ Forge.LogE("isNaN(this.MarginLeft)!");
93
+ this.MarginLeft = 0;
94
+ }
95
+ if (this.Width !== "MatchParent") {
96
+ if (isNaN(this.Width)) {
97
+ Forge.LogE("isNaN(this.Width)!");
98
+ }
99
+ } else {
100
+ this.SizeAdjust = true;
101
+ }
102
+ if (this.Height !== "MatchParent") {
103
+ if (isNaN(this.Height)) {
104
+ Forge.LogE("isNaN(this.Height)!");
105
+ }
106
+ } else {
107
+ this.SizeAdjust = true;
108
+ }
109
+ }
110
+ }
111
+ }
112
+ Forge.LayoutParams = LayoutParams;
113
+ window.LayoutParams = Forge.LayoutParams; // export class