kotonebot 0.5.0__py3-none-any.whl → 0.7.0__py3-none-any.whl

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 (107) hide show
  1. kotonebot/__init__.py +39 -39
  2. kotonebot/backend/bot.py +312 -312
  3. kotonebot/backend/color.py +525 -525
  4. kotonebot/backend/context/__init__.py +3 -3
  5. kotonebot/backend/context/context.py +1002 -1002
  6. kotonebot/backend/context/task_action.py +183 -183
  7. kotonebot/backend/core.py +86 -129
  8. kotonebot/backend/debug/entry.py +89 -89
  9. kotonebot/backend/debug/mock.py +78 -78
  10. kotonebot/backend/debug/server.py +222 -222
  11. kotonebot/backend/debug/vars.py +351 -351
  12. kotonebot/backend/dispatch.py +227 -227
  13. kotonebot/backend/flow_controller.py +196 -196
  14. kotonebot/backend/image.py +36 -5
  15. kotonebot/backend/loop.py +222 -208
  16. kotonebot/backend/ocr.py +535 -535
  17. kotonebot/backend/preprocessor.py +103 -103
  18. kotonebot/client/__init__.py +9 -9
  19. kotonebot/client/device.py +369 -529
  20. kotonebot/client/fast_screenshot.py +377 -377
  21. kotonebot/client/host/__init__.py +43 -43
  22. kotonebot/client/host/adb_common.py +101 -107
  23. kotonebot/client/host/custom.py +118 -118
  24. kotonebot/client/host/leidian_host.py +196 -196
  25. kotonebot/client/host/mumu12_host.py +353 -353
  26. kotonebot/client/host/protocol.py +214 -214
  27. kotonebot/client/host/windows_common.py +73 -58
  28. kotonebot/client/implements/__init__.py +65 -70
  29. kotonebot/client/implements/adb.py +89 -89
  30. kotonebot/client/implements/nemu_ipc/__init__.py +11 -11
  31. kotonebot/client/implements/nemu_ipc/external_renderer_ipc.py +284 -284
  32. kotonebot/client/implements/nemu_ipc/nemu_ipc.py +327 -327
  33. kotonebot/client/implements/remote_windows.py +188 -188
  34. kotonebot/client/implements/uiautomator2.py +85 -85
  35. kotonebot/client/implements/windows/__init__.py +1 -0
  36. kotonebot/client/implements/windows/print_window.py +133 -0
  37. kotonebot/client/implements/windows/send_message.py +324 -0
  38. kotonebot/client/implements/{windows.py → windows/windows.py} +175 -176
  39. kotonebot/client/protocol.py +69 -69
  40. kotonebot/client/registration.py +24 -24
  41. kotonebot/client/scaler.py +467 -0
  42. kotonebot/config/base_config.py +103 -96
  43. kotonebot/config/config.py +61 -0
  44. kotonebot/config/manager.py +36 -36
  45. kotonebot/core/__init__.py +13 -0
  46. kotonebot/core/entities/base.py +182 -0
  47. kotonebot/core/entities/compound.py +75 -0
  48. kotonebot/core/entities/ocr.py +117 -0
  49. kotonebot/core/entities/template_match.py +198 -0
  50. kotonebot/devtools/__init__.py +42 -0
  51. kotonebot/devtools/cli/__init__.py +6 -0
  52. kotonebot/devtools/cli/main.py +53 -0
  53. kotonebot/{tools → devtools}/mirror.py +354 -354
  54. kotonebot/devtools/project/project.py +41 -0
  55. kotonebot/devtools/project/scanner.py +202 -0
  56. kotonebot/devtools/project/schema.py +99 -0
  57. kotonebot/devtools/resgen/__init__.py +42 -0
  58. kotonebot/devtools/resgen/codegen.py +331 -0
  59. kotonebot/devtools/resgen/core.py +94 -0
  60. kotonebot/devtools/resgen/parsers.py +360 -0
  61. kotonebot/devtools/resgen/utils.py +158 -0
  62. kotonebot/devtools/resgen/validation.py +115 -0
  63. kotonebot/devtools/web/dist/assets/bootstrap-icons-BOrJxbIo.woff +0 -0
  64. kotonebot/devtools/web/dist/assets/bootstrap-icons-BtvjY1KL.woff2 +0 -0
  65. kotonebot/devtools/web/dist/assets/ext-language_tools-CD021WJ2.js +2577 -0
  66. kotonebot/devtools/web/dist/assets/index-B_m5f2LF.js +2836 -0
  67. kotonebot/devtools/web/dist/assets/index-BlEDyGGa.css +9 -0
  68. kotonebot/devtools/web/dist/assets/language-client-C9muzqaq.js +128 -0
  69. kotonebot/devtools/web/dist/assets/mode-python-CtHp76XS.js +476 -0
  70. kotonebot/devtools/web/dist/icons/symbol-class.svg +3 -0
  71. kotonebot/devtools/web/dist/icons/symbol-file.svg +3 -0
  72. kotonebot/devtools/web/dist/icons/symbol-method.svg +3 -0
  73. kotonebot/devtools/web/dist/index.html +25 -0
  74. kotonebot/devtools/web/server/__init__.py +0 -0
  75. kotonebot/devtools/web/server/rest_api.py +217 -0
  76. kotonebot/devtools/web/server/server.py +85 -0
  77. kotonebot/errors.py +76 -76
  78. kotonebot/interop/win/__init__.py +13 -9
  79. kotonebot/interop/win/_mouse.py +310 -310
  80. kotonebot/interop/win/message_box.py +313 -313
  81. kotonebot/interop/win/reg.py +37 -37
  82. kotonebot/interop/win/shake_mouse.py +224 -0
  83. kotonebot/interop/win/shortcut.py +43 -43
  84. kotonebot/interop/win/task_dialog.py +513 -513
  85. kotonebot/interop/win/window.py +89 -0
  86. kotonebot/logging/__init__.py +2 -2
  87. kotonebot/logging/log.py +17 -17
  88. kotonebot/primitives/__init__.py +19 -17
  89. kotonebot/primitives/geometry.py +1067 -862
  90. kotonebot/primitives/visual.py +143 -63
  91. kotonebot/ui/file_host/sensio.py +36 -36
  92. kotonebot/ui/file_host/tmp_send.py +54 -54
  93. kotonebot/ui/pushkit/__init__.py +3 -3
  94. kotonebot/ui/pushkit/image_host.py +88 -88
  95. kotonebot/ui/pushkit/protocol.py +13 -13
  96. kotonebot/ui/pushkit/wxpusher.py +54 -54
  97. kotonebot/ui/user.py +148 -148
  98. kotonebot/util.py +436 -436
  99. {kotonebot-0.5.0.dist-info → kotonebot-0.7.0.dist-info}/METADATA +84 -82
  100. kotonebot-0.7.0.dist-info/RECORD +109 -0
  101. {kotonebot-0.5.0.dist-info → kotonebot-0.7.0.dist-info}/WHEEL +1 -1
  102. kotonebot-0.7.0.dist-info/entry_points.txt +2 -0
  103. {kotonebot-0.5.0.dist-info → kotonebot-0.7.0.dist-info}/licenses/LICENSE +673 -673
  104. kotonebot/client/implements/adb_raw.py +0 -163
  105. kotonebot-0.5.0.dist-info/RECORD +0 -71
  106. /kotonebot/{tools → devtools/project}/__init__.py +0 -0
  107. {kotonebot-0.5.0.dist-info → kotonebot-0.7.0.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,476 @@
1
+ ace.define("ace/mode/python_highlight_rules",["require","exports","module","ace/lib/oop","ace/mode/text_highlight_rules"], function(require, exports, module){/*
2
+ * TODO: python delimiters
3
+ */
4
+ "use strict";
5
+ var oop = require("../lib/oop");
6
+ var TextHighlightRules = require("./text_highlight_rules").TextHighlightRules;
7
+ var PythonHighlightRules = function () {
8
+ var keywords = ("and|as|assert|break|class|continue|def|del|elif|else|except|exec|" +
9
+ "finally|for|from|global|if|import|in|is|lambda|not|or|pass|print|" +
10
+ "raise|return|try|while|with|yield|async|await|nonlocal");
11
+ var builtinConstants = ("True|False|None|NotImplemented|Ellipsis|__debug__");
12
+ var builtinFunctions = ("abs|divmod|input|open|staticmethod|all|enumerate|int|ord|str|any|" +
13
+ "eval|isinstance|pow|sum|basestring|execfile|issubclass|print|super|" +
14
+ "binfile|bin|iter|property|tuple|bool|filter|len|range|type|bytearray|" +
15
+ "float|list|raw_input|unichr|callable|format|locals|reduce|unicode|" +
16
+ "chr|frozenset|long|reload|vars|classmethod|getattr|map|repr|xrange|" +
17
+ "cmp|globals|max|reversed|zip|compile|hasattr|memoryview|round|" +
18
+ "__import__|complex|hash|min|apply|delattr|help|next|setattr|set|" +
19
+ "buffer|dict|hex|object|slice|coerce|dir|id|oct|sorted|intern|" +
20
+ "ascii|breakpoint|bytes");
21
+ var keywordMapper = this.createKeywordMapper({
22
+ "invalid.deprecated": "debugger",
23
+ "support.function": builtinFunctions,
24
+ "variable.language": "self|cls",
25
+ "constant.language": builtinConstants,
26
+ "keyword": keywords
27
+ }, "identifier");
28
+ var strPre = "[uU]?";
29
+ var strRawPre = "[rR]";
30
+ var strFormatPre = "[fF]";
31
+ var strRawFormatPre = "(?:[rR][fF]|[fF][rR])";
32
+ var decimalInteger = "(?:(?:[1-9]\\d*)|(?:0))";
33
+ var octInteger = "(?:0[oO]?[0-7]+)";
34
+ var hexInteger = "(?:0[xX][\\dA-Fa-f]+)";
35
+ var binInteger = "(?:0[bB][01]+)";
36
+ var integer = "(?:" + decimalInteger + "|" + octInteger + "|" + hexInteger + "|" + binInteger + ")";
37
+ var exponent = "(?:[eE][+-]?\\d+)";
38
+ var fraction = "(?:\\.\\d+)";
39
+ var intPart = "(?:\\d+)";
40
+ var pointFloat = "(?:(?:" + intPart + "?" + fraction + ")|(?:" + intPart + "\\.))";
41
+ var exponentFloat = "(?:(?:" + pointFloat + "|" + intPart + ")" + exponent + ")";
42
+ var floatNumber = "(?:" + exponentFloat + "|" + pointFloat + ")";
43
+ var stringEscape = "\\\\(x[0-9A-Fa-f]{2}|[0-7]{3}|[\\\\abfnrtv'\"]|U[0-9A-Fa-f]{8}|u[0-9A-Fa-f]{4})";
44
+ this.$rules = {
45
+ "start": [{
46
+ token: "comment",
47
+ regex: "#.*$"
48
+ }, {
49
+ token: "string", // multi line """ string start
50
+ regex: strPre + '"{3}',
51
+ next: "qqstring3"
52
+ }, {
53
+ token: "string", // " string
54
+ regex: strPre + '"(?=.)',
55
+ next: "qqstring"
56
+ }, {
57
+ token: "string", // multi line ''' string start
58
+ regex: strPre + "'{3}",
59
+ next: "qstring3"
60
+ }, {
61
+ token: "string", // ' string
62
+ regex: strPre + "'(?=.)",
63
+ next: "qstring"
64
+ }, {
65
+ token: "string",
66
+ regex: strRawPre + '"{3}',
67
+ next: "rawqqstring3"
68
+ }, {
69
+ token: "string",
70
+ regex: strRawPre + '"(?=.)',
71
+ next: "rawqqstring"
72
+ }, {
73
+ token: "string",
74
+ regex: strRawPre + "'{3}",
75
+ next: "rawqstring3"
76
+ }, {
77
+ token: "string",
78
+ regex: strRawPre + "'(?=.)",
79
+ next: "rawqstring"
80
+ }, {
81
+ token: "string",
82
+ regex: strFormatPre + '"{3}',
83
+ next: "fqqstring3"
84
+ }, {
85
+ token: "string",
86
+ regex: strFormatPre + '"(?=.)',
87
+ next: "fqqstring"
88
+ }, {
89
+ token: "string",
90
+ regex: strFormatPre + "'{3}",
91
+ next: "fqstring3"
92
+ }, {
93
+ token: "string",
94
+ regex: strFormatPre + "'(?=.)",
95
+ next: "fqstring"
96
+ }, {
97
+ token: "string",
98
+ regex: strRawFormatPre + '"{3}',
99
+ next: "rfqqstring3"
100
+ }, {
101
+ token: "string",
102
+ regex: strRawFormatPre + '"(?=.)',
103
+ next: "rfqqstring"
104
+ }, {
105
+ token: "string",
106
+ regex: strRawFormatPre + "'{3}",
107
+ next: "rfqstring3"
108
+ }, {
109
+ token: "string",
110
+ regex: strRawFormatPre + "'(?=.)",
111
+ next: "rfqstring"
112
+ }, {
113
+ token: "keyword.operator",
114
+ regex: "\\+|\\-|\\*|\\*\\*|\\/|\\/\\/|%|@|<<|>>|&|\\||\\^|~|<|>|<=|=>|==|!=|<>|="
115
+ }, {
116
+ token: "punctuation",
117
+ regex: ",|:|;|\\->|\\+=|\\-=|\\*=|\\/=|\\/\\/=|%=|@=|&=|\\|=|^=|>>=|<<=|\\*\\*="
118
+ }, {
119
+ token: "paren.lparen",
120
+ regex: "[\\[\\(\\{]"
121
+ }, {
122
+ token: "paren.rparen",
123
+ regex: "[\\]\\)\\}]"
124
+ }, {
125
+ token: ["keyword", "text", "entity.name.function"],
126
+ regex: "(def|class)(\\s+)([\\u00BF-\\u1FFF\\u2C00-\\uD7FF\\w]+)"
127
+ }, {
128
+ token: "text",
129
+ regex: "\\s+"
130
+ }, {
131
+ include: "constants"
132
+ }],
133
+ "qqstring3": [{
134
+ token: "constant.language.escape",
135
+ regex: stringEscape
136
+ }, {
137
+ token: "string", // multi line """ string end
138
+ regex: '"{3}',
139
+ next: "start"
140
+ }, {
141
+ defaultToken: "string"
142
+ }],
143
+ "qstring3": [{
144
+ token: "constant.language.escape",
145
+ regex: stringEscape
146
+ }, {
147
+ token: "string", // multi line ''' string end
148
+ regex: "'{3}",
149
+ next: "start"
150
+ }, {
151
+ defaultToken: "string"
152
+ }],
153
+ "qqstring": [{
154
+ token: "constant.language.escape",
155
+ regex: stringEscape
156
+ }, {
157
+ token: "string",
158
+ regex: "\\\\$",
159
+ next: "qqstring"
160
+ }, {
161
+ token: "string",
162
+ regex: '"|$',
163
+ next: "start"
164
+ }, {
165
+ defaultToken: "string"
166
+ }],
167
+ "qstring": [{
168
+ token: "constant.language.escape",
169
+ regex: stringEscape
170
+ }, {
171
+ token: "string",
172
+ regex: "\\\\$",
173
+ next: "qstring"
174
+ }, {
175
+ token: "string",
176
+ regex: "'|$",
177
+ next: "start"
178
+ }, {
179
+ defaultToken: "string"
180
+ }],
181
+ "rawqqstring3": [{
182
+ token: "string", // multi line """ string end
183
+ regex: '"{3}',
184
+ next: "start"
185
+ }, {
186
+ defaultToken: "string"
187
+ }],
188
+ "rawqstring3": [{
189
+ token: "string", // multi line ''' string end
190
+ regex: "'{3}",
191
+ next: "start"
192
+ }, {
193
+ defaultToken: "string"
194
+ }],
195
+ "rawqqstring": [{
196
+ token: "string",
197
+ regex: "\\\\$",
198
+ next: "rawqqstring"
199
+ }, {
200
+ token: "string",
201
+ regex: '"|$',
202
+ next: "start"
203
+ }, {
204
+ defaultToken: "string"
205
+ }],
206
+ "rawqstring": [{
207
+ token: "string",
208
+ regex: "\\\\$",
209
+ next: "rawqstring"
210
+ }, {
211
+ token: "string",
212
+ regex: "'|$",
213
+ next: "start"
214
+ }, {
215
+ defaultToken: "string"
216
+ }],
217
+ "fqqstring3": [{
218
+ token: "constant.language.escape",
219
+ regex: stringEscape
220
+ }, {
221
+ token: "string", // multi line """ string end
222
+ regex: '"{3}',
223
+ next: "start"
224
+ }, {
225
+ token: "paren.lparen",
226
+ regex: "{",
227
+ push: "fqstringParRules"
228
+ }, {
229
+ defaultToken: "string"
230
+ }],
231
+ "fqstring3": [{
232
+ token: "constant.language.escape",
233
+ regex: stringEscape
234
+ }, {
235
+ token: "string", // multi line ''' string end
236
+ regex: "'{3}",
237
+ next: "start"
238
+ }, {
239
+ token: "paren.lparen",
240
+ regex: "{",
241
+ push: "fqstringParRules"
242
+ }, {
243
+ defaultToken: "string"
244
+ }],
245
+ "fqqstring": [{
246
+ token: "constant.language.escape",
247
+ regex: stringEscape
248
+ }, {
249
+ token: "string",
250
+ regex: "\\\\$",
251
+ next: "fqqstring"
252
+ }, {
253
+ token: "string",
254
+ regex: '"|$',
255
+ next: "start"
256
+ }, {
257
+ token: "paren.lparen",
258
+ regex: "{",
259
+ push: "fqstringParRules"
260
+ }, {
261
+ defaultToken: "string"
262
+ }],
263
+ "fqstring": [{
264
+ token: "constant.language.escape",
265
+ regex: stringEscape
266
+ }, {
267
+ token: "string",
268
+ regex: "'|$",
269
+ next: "start"
270
+ }, {
271
+ token: "paren.lparen",
272
+ regex: "{",
273
+ push: "fqstringParRules"
274
+ }, {
275
+ defaultToken: "string"
276
+ }],
277
+ "rfqqstring3": [{
278
+ token: "string", // multi line """ string end
279
+ regex: '"{3}',
280
+ next: "start"
281
+ }, {
282
+ token: "paren.lparen",
283
+ regex: "{",
284
+ push: "fqstringParRules"
285
+ }, {
286
+ defaultToken: "string"
287
+ }],
288
+ "rfqstring3": [{
289
+ token: "string", // multi line ''' string end
290
+ regex: "'{3}",
291
+ next: "start"
292
+ }, {
293
+ token: "paren.lparen",
294
+ regex: "{",
295
+ push: "fqstringParRules"
296
+ }, {
297
+ defaultToken: "string"
298
+ }],
299
+ "rfqqstring": [{
300
+ token: "string",
301
+ regex: "\\\\$",
302
+ next: "rfqqstring"
303
+ }, {
304
+ token: "string",
305
+ regex: '"|$',
306
+ next: "start"
307
+ }, {
308
+ token: "paren.lparen",
309
+ regex: "{",
310
+ push: "fqstringParRules"
311
+ }, {
312
+ defaultToken: "string"
313
+ }],
314
+ "rfqstring": [{
315
+ token: "string",
316
+ regex: "'|$",
317
+ next: "start"
318
+ }, {
319
+ token: "paren.lparen",
320
+ regex: "{",
321
+ push: "fqstringParRules"
322
+ }, {
323
+ defaultToken: "string"
324
+ }],
325
+ "fqstringParRules": [{
326
+ token: "paren.lparen",
327
+ regex: "[\\[\\(]"
328
+ }, {
329
+ token: "paren.rparen",
330
+ regex: "[\\]\\)]"
331
+ }, {
332
+ token: "string",
333
+ regex: "\\s+"
334
+ }, {
335
+ token: "string",
336
+ regex: "'[^']*'"
337
+ }, {
338
+ token: "string",
339
+ regex: '"[^"]*"'
340
+ }, {
341
+ token: "function.support",
342
+ regex: "(!s|!r|!a)"
343
+ }, {
344
+ include: "constants"
345
+ }, {
346
+ token: 'paren.rparen',
347
+ regex: "}",
348
+ next: 'pop'
349
+ }, {
350
+ token: 'paren.lparen',
351
+ regex: "{",
352
+ push: "fqstringParRules"
353
+ }],
354
+ "constants": [{
355
+ token: "constant.numeric", // imaginary
356
+ regex: "(?:" + floatNumber + "|\\d+)[jJ]\\b"
357
+ }, {
358
+ token: "constant.numeric", // float
359
+ regex: floatNumber
360
+ }, {
361
+ token: "constant.numeric", // long integer
362
+ regex: integer + "[lL]\\b"
363
+ }, {
364
+ token: "constant.numeric", // integer
365
+ regex: integer + "\\b"
366
+ }, {
367
+ token: ["punctuation", "function.support"], // method
368
+ regex: "(\\.)([a-zA-Z_]+)\\b"
369
+ }, {
370
+ token: keywordMapper,
371
+ regex: "[a-zA-Z_$][a-zA-Z0-9_$]*\\b"
372
+ }]
373
+ };
374
+ this.normalizeRules();
375
+ };
376
+ oop.inherits(PythonHighlightRules, TextHighlightRules);
377
+ exports.PythonHighlightRules = PythonHighlightRules;
378
+
379
+ });
380
+
381
+ ace.define("ace/mode/folding/pythonic",["require","exports","module","ace/lib/oop","ace/mode/folding/fold_mode"], function(require, exports, module){"use strict";
382
+ var oop = require("../../lib/oop");
383
+ var BaseFoldMode = require("./fold_mode").FoldMode;
384
+ var FoldMode = exports.FoldMode = function (markers) {
385
+ this.foldingStartMarker = new RegExp("([\\[{])(?:\\s*)$|(" + markers + ")(?:\\s*)(?:#.*)?$");
386
+ };
387
+ oop.inherits(FoldMode, BaseFoldMode);
388
+ (function () {
389
+ this.getFoldWidgetRange = function (session, foldStyle, row) {
390
+ var line = session.getLine(row);
391
+ var match = line.match(this.foldingStartMarker);
392
+ if (match) {
393
+ if (match[1])
394
+ return this.openingBracketBlock(session, match[1], row, match.index);
395
+ if (match[2])
396
+ return this.indentationBlock(session, row, match.index + match[2].length);
397
+ return this.indentationBlock(session, row);
398
+ }
399
+ };
400
+ }).call(FoldMode.prototype);
401
+
402
+ });
403
+
404
+ ace.define("ace/mode/python",["require","exports","module","ace/lib/oop","ace/mode/text","ace/mode/python_highlight_rules","ace/mode/folding/pythonic","ace/range"], function(require, exports, module){"use strict";
405
+ var oop = require("../lib/oop");
406
+ var TextMode = require("./text").Mode;
407
+ var PythonHighlightRules = require("./python_highlight_rules").PythonHighlightRules;
408
+ var PythonFoldMode = require("./folding/pythonic").FoldMode;
409
+ var Range = require("../range").Range;
410
+ var Mode = function () {
411
+ this.HighlightRules = PythonHighlightRules;
412
+ this.foldingRules = new PythonFoldMode("\\:");
413
+ this.$behaviour = this.$defaultBehaviour;
414
+ };
415
+ oop.inherits(Mode, TextMode);
416
+ (function () {
417
+ this.lineCommentStart = "#";
418
+ this.$pairQuotesAfter = {
419
+ "'": /[ruf]/i,
420
+ '"': /[ruf]/i
421
+ };
422
+ this.getNextLineIndent = function (state, line, tab) {
423
+ var indent = this.$getIndent(line);
424
+ var tokenizedLine = this.getTokenizer().getLineTokens(line, state);
425
+ var tokens = tokenizedLine.tokens;
426
+ if (tokens.length && tokens[tokens.length - 1].type == "comment") {
427
+ return indent;
428
+ }
429
+ if (state == "start") {
430
+ var match = line.match(/^.*[\{\(\[:]\s*$/);
431
+ if (match) {
432
+ indent += tab;
433
+ }
434
+ }
435
+ return indent;
436
+ };
437
+ var outdents = {
438
+ "pass": 1,
439
+ "return": 1,
440
+ "raise": 1,
441
+ "break": 1,
442
+ "continue": 1
443
+ };
444
+ this.checkOutdent = function (state, line, input) {
445
+ if (input !== "\r\n" && input !== "\r" && input !== "\n")
446
+ return false;
447
+ var tokens = this.getTokenizer().getLineTokens(line.trim(), state).tokens;
448
+ if (!tokens)
449
+ return false;
450
+ do {
451
+ var last = tokens.pop();
452
+ } while (last && (last.type == "comment" || (last.type == "text" && last.value.match(/^\s+$/))));
453
+ if (!last)
454
+ return false;
455
+ return (last.type == "keyword" && outdents[last.value]);
456
+ };
457
+ this.autoOutdent = function (state, doc, row) {
458
+ row += 1;
459
+ var indent = this.$getIndent(doc.getLine(row));
460
+ var tab = doc.getTabString();
461
+ if (indent.slice(-tab.length) == tab)
462
+ doc.remove(new Range(row, indent.length - tab.length, row, indent.length));
463
+ };
464
+ this.$id = "ace/mode/python";
465
+ this.snippetFileId = "ace/snippets/python";
466
+ }).call(Mode.prototype);
467
+ exports.Mode = Mode;
468
+
469
+ }); (function() {
470
+ ace.require(["ace/mode/python"], function(m) {
471
+ if (typeof module == "object" && typeof exports == "object" && module) {
472
+ module.exports = m;
473
+ }
474
+ });
475
+ })();
476
+
@@ -0,0 +1,3 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M11.3403 9.70998H12.0503L14.7202 7.04005V6.32997L13.3803 5.00001H12.6803L10.8603 6.81007H5.86024V5.56007L7.72023 3.70997V3L5.72022 1H5.00025L1.00024 5.00001V5.70997L3.00025 7.70998H3.71027L4.85023 6.56007V12.35L5.35023 12.85H10.0003V13.37L11.3303 14.71H12.0402L14.7103 12.0401V11.33L13.3703 10H12.6703L10.8103 11.85H5.81025V7.84999H10.0003V8.32997L11.3403 9.70998ZM13.0303 6.06007L13.6602 6.68995L11.6602 8.68996L11.0303 8.06007L13.0303 6.06007ZM13.0303 11.0601L13.6602 11.69L11.6602 13.69L11.0303 13.0601L13.0303 11.0601ZM3.35022 6.65004L2.06024 5.34998L5.35023 2.06006L6.65028 3.34998L3.35022 6.65004Z" fill="#D67E00"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M13.8502 4.44L10.5702 1.14L10.2202 1H2.50024L2.00024 1.5V14.5L2.50024 15H13.5002L14.0002 14.5V4.8L13.8502 4.44ZM13.0002 5H10.0002V2L13.0002 5ZM3.00024 14V2H9.00024V5.5L9.50024 6H13.0002V14H3.00024Z" fill="#424242"/>
3
+ </svg>
@@ -0,0 +1,3 @@
1
+ <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
2
+ <path d="M13.5103 4L8.51025 1H7.51025L2.51025 4L2.02026 4.85999V10.86L2.51025 11.71L7.51025 14.71H8.51025L13.5103 11.71L14.0002 10.86V4.85999L13.5103 4ZM7.51025 13.5601L3.01025 10.86V5.69995L7.51025 8.15002V13.5601ZM3.27026 4.69995L8.01025 1.85999L12.7502 4.69995L8.01025 7.29004L3.27026 4.69995ZM13.0103 10.86L8.51025 13.5601V8.15002L13.0103 5.69995V10.86Z" fill="#652D90"/>
3
+ </svg>
@@ -0,0 +1,25 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8" />
6
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
7
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
8
+ <title>Vite + React + TS</title>
9
+ <script>
10
+ function loadComponent(componentCode) {
11
+ const html = componentCode;
12
+ const div = document.createElement('div');
13
+ const frag = document.createRange().createContextualFragment(html);
14
+ document.body.appendChild(frag);
15
+ }
16
+ </script>
17
+ <script type="module" crossorigin src="/assets/index-B_m5f2LF.js"></script>
18
+ <link rel="stylesheet" crossorigin href="/assets/index-BlEDyGGa.css">
19
+ </head>
20
+
21
+ <body>
22
+ <div id="root"></div>
23
+ </body>
24
+
25
+ </html>
File without changes