nadesiko3 3.2.27

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 (283) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/bin/cnako3 +10 -0
  4. package/bin/cnako3.bat +11 -0
  5. package/bin/nako3server.bat +6 -0
  6. package/demo/ace_editor.html +90 -0
  7. package/demo/ace_editor_tabs.html +162 -0
  8. package/demo/basic.html +71 -0
  9. package/demo/browsers.html +128 -0
  10. package/demo/css/basic.css +3 -0
  11. package/demo/css/common.css +157 -0
  12. package/demo/css/editor.css +8 -0
  13. package/demo/css/flow.css +3 -0
  14. package/demo/css/index.css +3 -0
  15. package/demo/extlib/ace@1.4.12/ace.js +17 -0
  16. package/demo/extlib/ace@1.4.12/ext-code_lens.min.js +1 -0
  17. package/demo/extlib/ace@1.4.12/ext-language_tools.min.js +1 -0
  18. package/demo/extlib/ace@1.4.12/ext-options.min.js +1 -0
  19. package/demo/extlib/ace@1.4.12/ext-settings_menu.js +8 -0
  20. package/demo/extlib/ace@1.4.12/keybinding-vscode.js +8 -0
  21. package/demo/extlib/ace@1.4.12/theme-monokai.js +8 -0
  22. package/demo/extlib/ace@1.4.12/theme-xcode.js +8 -0
  23. package/demo/extlib/chart.js@3.2.1/chart.min.js +13 -0
  24. package/demo/extlib/pure-min.css +11 -0
  25. package/demo/flow.html +97 -0
  26. package/demo/graph.html +53 -0
  27. package/demo/image/nako.png +0 -0
  28. package/demo/image/nakopad-icon256.png +0 -0
  29. package/demo/image/turtle.fla +0 -0
  30. package/demo/image/turtle.png +0 -0
  31. package/demo/index.html +134 -0
  32. package/demo/js/common.js +17 -0
  33. package/demo/js/turtle3d_test.js +44 -0
  34. package/demo/js/turtle_test.js +44 -0
  35. package/demo/runscript.html +47 -0
  36. package/demo/runscript2.html +33 -0
  37. package/demo/turtle.html +58 -0
  38. package/demo/turtle2.html +141 -0
  39. package/demo/turtle3.html +278 -0
  40. package/demo/turtle3d.html +58 -0
  41. package/demo/turtle3d2.html +107 -0
  42. package/demo/version.html +24 -0
  43. package/doc/SETUP.md +172 -0
  44. package/doc/about.md +34 -0
  45. package/doc/browsers.md +60 -0
  46. package/doc/docgen.md +21 -0
  47. package/doc/editor.md +44 -0
  48. package/doc/files.md +37 -0
  49. package/doc/plugins.md +195 -0
  50. package/doc/release.md +78 -0
  51. package/doc/win32.md +57 -0
  52. package/package.json +196 -0
  53. package/release/_hash.txt +65 -0
  54. package/release/_script-tags.txt +13 -0
  55. package/release/command.json +1 -0
  56. package/release/command.json.js +1 -0
  57. package/release/command_cnako3.json +1 -0
  58. package/release/command_list.json +1 -0
  59. package/release/editor.js +2 -0
  60. package/release/editor.js.LICENSE.txt +32 -0
  61. package/release/josi.json +48 -0
  62. package/release/nako_gen_async.js +1 -0
  63. package/release/nako_gen_async.js.LICENSE.txt +595 -0
  64. package/release/plugin_caniuse.js +1 -0
  65. package/release/plugin_caniuse.js.LICENSE.txt +411 -0
  66. package/release/plugin_csv.js +1 -0
  67. package/release/plugin_csv.js.LICENSE.txt +367 -0
  68. package/release/plugin_datetime.js +1 -0
  69. package/release/plugin_datetime.js.LICENSE.txt +471 -0
  70. package/release/plugin_kansuji.js +1 -0
  71. package/release/plugin_kansuji.js.LICENSE.txt +491 -0
  72. package/release/plugin_markup.js +1 -0
  73. package/release/plugin_markup.js.LICENSE.txt +363 -0
  74. package/release/plugin_turtle.js +1 -0
  75. package/release/plugin_turtle.js.LICENSE.txt +435 -0
  76. package/release/plugin_webworker.js +1 -0
  77. package/release/plugin_webworker.js.LICENSE.txt +491 -0
  78. package/release/version.js +2 -0
  79. package/release/version.js.LICENSE.txt +32 -0
  80. package/release/wnako3.js +2 -0
  81. package/release/wnako3.js.LICENSE.txt +1 -0
  82. package/release/wnako3webworker.js +1 -0
  83. package/release/wnako3webworker.js.LICENSE.txt +847 -0
  84. package/release/yoyakugo.json +30 -0
  85. package/src/browsers.md +60 -0
  86. package/src/cnako3.js +466 -0
  87. package/src/commander_ja.js +154 -0
  88. package/src/enako3.js +69 -0
  89. package/src/era.json +22 -0
  90. package/src/index.js +5 -0
  91. package/src/nako3.js +836 -0
  92. package/src/nako3_assert.js +37 -0
  93. package/src/nako3editorfix.sfd +106 -0
  94. package/src/nako3editorfix.woff +0 -0
  95. package/src/nako3server.js +51 -0
  96. package/src/nako_colors.js +86 -0
  97. package/src/nako_errors.js +176 -0
  98. package/src/nako_gen.js +1459 -0
  99. package/src/nako_gen_async.js +1622 -0
  100. package/src/nako_global.js +113 -0
  101. package/src/nako_indent.js +480 -0
  102. package/src/nako_josi_list.js +46 -0
  103. package/src/nako_lex_rules.js +259 -0
  104. package/src/nako_lexer.js +576 -0
  105. package/src/nako_logger.js +138 -0
  106. package/src/nako_parser3.js +1768 -0
  107. package/src/nako_parser_base.js +265 -0
  108. package/src/nako_parser_const.js +37 -0
  109. package/src/nako_prepare.js +293 -0
  110. package/src/nako_reserved_words.js +35 -0
  111. package/src/nako_source_mapping.js +251 -0
  112. package/src/nako_test.js +37 -0
  113. package/src/nako_version.js +8 -0
  114. package/src/plugin_browser.js +191 -0
  115. package/src/plugin_browser_ajax.js +352 -0
  116. package/src/plugin_browser_audio.js +109 -0
  117. package/src/plugin_browser_canvas.js +462 -0
  118. package/src/plugin_browser_chart.js +296 -0
  119. package/src/plugin_browser_color.js +49 -0
  120. package/src/plugin_browser_crypto.js +26 -0
  121. package/src/plugin_browser_dialog.js +53 -0
  122. package/src/plugin_browser_dom_basic.js +322 -0
  123. package/src/plugin_browser_dom_event.js +193 -0
  124. package/src/plugin_browser_dom_parts.js +163 -0
  125. package/src/plugin_browser_geolocation.js +51 -0
  126. package/src/plugin_browser_hotkey.js +25 -0
  127. package/src/plugin_browser_html.js +59 -0
  128. package/src/plugin_browser_in_worker.js +44 -0
  129. package/src/plugin_browser_location.js +21 -0
  130. package/src/plugin_browser_speech.js +111 -0
  131. package/src/plugin_browser_storage.js +121 -0
  132. package/src/plugin_browser_system.js +12 -0
  133. package/src/plugin_browser_websocket.js +73 -0
  134. package/src/plugin_caniuse.js +24 -0
  135. package/src/plugin_csv.js +57 -0
  136. package/src/plugin_datetime.js +414 -0
  137. package/src/plugin_express.js +212 -0
  138. package/src/plugin_kansuji.js +224 -0
  139. package/src/plugin_keigo.js +55 -0
  140. package/src/plugin_markup.js +32 -0
  141. package/src/plugin_math.js +319 -0
  142. package/src/plugin_node.js +1018 -0
  143. package/src/plugin_promise.js +94 -0
  144. package/src/plugin_system.js +2109 -0
  145. package/src/plugin_test.js +38 -0
  146. package/src/plugin_turtle.js +646 -0
  147. package/src/plugin_webworker.js +334 -0
  148. package/src/plugin_weykturtle3d.js +1216 -0
  149. package/src/plugin_worker.js +92 -0
  150. package/src/repl.nako3 +63 -0
  151. package/src/turtle-elephant.png +0 -0
  152. package/src/turtle-panda.png +0 -0
  153. package/src/turtle64.png +0 -0
  154. package/src/wnako3.js +162 -0
  155. package/src/wnako3_editor.css +215 -0
  156. package/src/wnako3_editor.js +1645 -0
  157. package/src/wnako3_editor_marker_red.png +0 -0
  158. package/src/wnako3_editor_marker_red.xcf +0 -0
  159. package/src/wnako3_editor_marker_yellow.png +0 -0
  160. package/src/wnako3_editor_marker_yellow.xcf +0 -0
  161. package/src/wnako3webworker.js +70 -0
  162. package/test/ace_editor/karma.config.js +94 -0
  163. package/test/ace_editor/test/.babelrc.json +3 -0
  164. package/test/ace_editor/test/ace_editor_test.js +178 -0
  165. package/test/ace_editor/test/html/custom_context.html +140 -0
  166. package/test/async/async_basic_test.js +124 -0
  167. package/test/browser/karma.config.js +212 -0
  168. package/test/browser/test/.babelrc.json +3 -0
  169. package/test/browser/test/compare_util.js +50 -0
  170. package/test/browser/test/html/canvas_basic.html +1 -0
  171. package/test/browser/test/html/div_basic.html +2 -0
  172. package/test/browser/test/html/event_dom_form.html +4 -0
  173. package/test/browser/test/html/event_dom_scrolldiv.html +5 -0
  174. package/test/browser/test/image/canvas_test1.png +0 -0
  175. package/test/browser/test/image/canvas_test2.png +0 -0
  176. package/test/browser/test/image/canvas_test3.png +0 -0
  177. package/test/browser/test/image/canvas_test4.png +0 -0
  178. package/test/browser/test/image/canvas_test7.png +0 -0
  179. package/test/browser/test/image/canvas_test8.png +0 -0
  180. package/test/browser/test/image/canvas_test_blank.png +0 -0
  181. package/test/browser/test/image/elephant_kana.png +0 -0
  182. package/test/browser/test/image/panda_kana.png +0 -0
  183. package/test/browser/test/image/turtle_kana.png +0 -0
  184. package/test/browser/test/import_plugin_checker.js +24 -0
  185. package/test/browser/test/plugin_browser_test.js +52 -0
  186. package/test/browser/test/plugin_browser_test_ajax.js +123 -0
  187. package/test/browser/test/plugin_browser_test_color.js +18 -0
  188. package/test/browser/test/plugin_browser_test_dialog.js +72 -0
  189. package/test/browser/test/plugin_browser_test_dom_event.js +598 -0
  190. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -0
  191. package/test/browser/test/plugin_browser_test_system.js +9 -0
  192. package/test/browser/test/plugin_turtle_test.js +817 -0
  193. package/test/browser/test/plugin_webworker_test.js +87 -0
  194. package/test/browser/test/require_test.js +71 -0
  195. package/test/bundled/karma.config.base.js +117 -0
  196. package/test/bundled/karma.config.js +86 -0
  197. package/test/bundled/test/.babelrc.json +3 -0
  198. package/test/bundled/test/bundled_test.js +69 -0
  199. package/test/bundled/test/html/custom_context.html +65 -0
  200. package/test/bundled/test/html/custom_debug.html +66 -0
  201. package/test/bundled/test4b.cmd +52 -0
  202. package/test/bundled/test_base/.babelrc.json +3 -0
  203. package/test/bundled/test_base/_checktool_test.js +25 -0
  204. package/test/bundled/test_base/basic_ajax_test.js +56 -0
  205. package/test/bundled/test_base/basic_async_test.js +18 -0
  206. package/test/bundled/test_base/basic_test.js +153 -0
  207. package/test/bundled/test_base/calc_test.js +132 -0
  208. package/test/bundled/test_base/css/browsers_box.css +114 -0
  209. package/test/bundled/test_base/html/custom_context.html +69 -0
  210. package/test/bundled/test_base/html/custom_debug.html +71 -0
  211. package/test/bundled/test_base/js/browsers_box.js +72 -0
  212. package/test/bundled/test_base/plugin_csv_test.js +37 -0
  213. package/test/bundled/test_base/plugin_datetime_test.js +115 -0
  214. package/test/bundled/test_base/plugin_kansuji_test.js +49 -0
  215. package/test/bundled/test_base/plugin_system_test.js +410 -0
  216. package/test/bundled/test_base/plugin_webworker_test.js +53 -0
  217. package/test/bundled/test_base/resources/ok.txt +1 -0
  218. package/test/bundled/test_base/test_utils.js +191 -0
  219. package/test/common/array_test.js +40 -0
  220. package/test/common/basic_test.js +317 -0
  221. package/test/common/calc_test.js +139 -0
  222. package/test/common/debug_test.js +16 -0
  223. package/test/common/error_test.js +16 -0
  224. package/test/common/flow_test.js +360 -0
  225. package/test/common/func_call.js +136 -0
  226. package/test/common/func_test.js +149 -0
  227. package/test/common/indent_test.js +362 -0
  228. package/test/common/lex_test.js +146 -0
  229. package/test/common/literal_test.js +72 -0
  230. package/test/common/nako_logger_test.js +26 -0
  231. package/test/common/plugin_browser_test.js +24 -0
  232. package/test/common/plugin_browser_ut_audio_test.js +88 -0
  233. package/test/common/plugin_browser_ut_color_test.js +21 -0
  234. package/test/common/plugin_browser_ut_dialog_test.js +100 -0
  235. package/test/common/plugin_browser_ut_html_test.js +13 -0
  236. package/test/common/plugin_browser_ut_system_test.js +10 -0
  237. package/test/common/plugin_csv_test.js +39 -0
  238. package/test/common/plugin_datetime_test.js +120 -0
  239. package/test/common/plugin_kansuji_test.js +59 -0
  240. package/test/common/plugin_promise_test.js +18 -0
  241. package/test/common/plugin_system_test.js +451 -0
  242. package/test/common/prepare_test.js +93 -0
  243. package/test/common/re_test.js +20 -0
  244. package/test/common/variable_scope_test.js +105 -0
  245. package/test/jsconfig.json +19 -0
  246. package/test/karma.config.js +91 -0
  247. package/test/node/add_test.nako3 +1 -0
  248. package/test/node/async_test.js +80 -0
  249. package/test/node/commander_ja_test.js +82 -0
  250. package/test/node/error_message_test.js +244 -0
  251. package/test/node/kai_test.nako3 +6 -0
  252. package/test/node/node_test.js +43 -0
  253. package/test/node/plugin_broken.js.txt +3 -0
  254. package/test/node/plugin_browser_ut_ajax_test.js +355 -0
  255. package/test/node/plugin_browser_ut_location_test.js +32 -0
  256. package/test/node/plugin_markup_test.js +44 -0
  257. package/test/node/plugin_math_test.js +42 -0
  258. package/test/node/plugin_node_test.js +93 -0
  259. package/test/node/plugin_test.js +16 -0
  260. package/test/node/relative_import_test_1.nako3 +1 -0
  261. package/test/node/relative_import_test_2.nako3 +2 -0
  262. package/test/node/require_nako3_test.js +59 -0
  263. package/test/node/requiretest.nako3 +4 -0
  264. package/test/node/requiretest_indirect.nako3 +1 -0
  265. package/test/node/requiretest_name.nako3 +5 -0
  266. package/test/node/runtime_error.nako3 +2 -0
  267. package/test/node/side_effects_test.js +106 -0
  268. package/test/node/sjis.txt +5 -0
  269. package/test/node/syntax_error.nako3 +2 -0
  270. package/test/node/wnako3_editor_test.js +360 -0
  271. package/tools/README.md +7 -0
  272. package/tools/nako3edit/html/edit.html +83 -0
  273. package/tools/nako3edit/html/edit_plugin.js +6 -0
  274. package/tools/nako3edit/html/files.html +49 -0
  275. package/tools/nako3edit/html/nako3edit.css +66 -0
  276. package/tools/nako3edit/index.nako3 +145 -0
  277. package/tools/nako3edit/run.js +12 -0
  278. package/tools/nako3server/html/edit.html +104 -0
  279. package/tools/nako3server/html/edit_plugin.js +6 -0
  280. package/tools/nako3server/html/files.html +53 -0
  281. package/tools/nako3server/html/nako3edit.css +66 -0
  282. package/tools/nako3server/index.nako3 +129 -0
  283. package/tools/nako3server/run.js +12 -0
@@ -0,0 +1,92 @@
1
+ // @ts-nocheck
2
+ const PluginWorker = {
3
+ '初期化': {
4
+ type: 'func',
5
+ josi: [],
6
+ pure: true,
7
+ fn: function (sys) {
8
+ sys.__v0.SELF = self || {}
9
+ sys.__v0['依頼主'] = self || {}
10
+ }
11
+ },
12
+
13
+ '対象イベント': { type: 'const', value: '' }, // @たいしょういべんと
14
+ '受信データ': { type: 'const', value: '' }, // @たいしょういべんと
15
+ 'SELF': { type: 'const', value: '' }, // @SELF
16
+ '依頼主': { type: 'const', value: '' }, // @SELF
17
+
18
+ 'NAKOワーカーデータ受信時': { // @無名関数Fでなでしこv3エンジンに対してワーカーメッセージによりデータを受信した時に実行するイベントを設定。『受信データ』に受信したデータM。『対象イベント』にイベント引数。 // @NAKOわーかーでーたじゅしんしたとき
19
+ type: 'func',
20
+ josi: [['で']],
21
+ pure: false,
22
+ fn: function (func, sys) {
23
+ func = sys.__findVar(func, null) // 文字列指定なら関数に変換
24
+ sys.__varslist[0]['PluginWorker:ondata'] = (data, e) => {
25
+ sys.__v0['受信データ'] = data
26
+ sys.__v0['対象イベント'] = e
27
+ return func(e, sys)
28
+ }
29
+ },
30
+ return_none: true
31
+ },
32
+ 'ワーカーメッセージ受信時': { // @無名関数Fでselfに対してメッセージを受信した時に実行するイベントを設定。『受信データ』に受信したデータ。『対象イベント』にイベント引数。 // @わーかーめっせーじじゅしんしたとき
33
+ type: 'func',
34
+ josi: [['で']],
35
+ pure: false,
36
+ fn: function (func, sys) {
37
+ func = sys.__findVar(func, null) // 文字列指定なら関数に変換
38
+ self.onmessage = (e) => {
39
+ sys.__v0['受信データ'] = e.data
40
+ sys.__v0['対象イベント'] = e
41
+ return func(e, sys)
42
+ }
43
+ },
44
+ return_none: true
45
+ },
46
+ 'NAKOワーカーデータ送信': { // @起動もとに固有の形式でデータを送信する。 // @NAKOわーかーでーたへんしん
47
+ type: 'func',
48
+ josi: [['を']],
49
+ pure: true,
50
+ fn: function (data, sys) {
51
+ const msg = {
52
+ type: 'data',
53
+ data: data
54
+ }
55
+ postMessage(msg)
56
+ },
57
+ return_none: true
58
+ },
59
+ 'ワーカーメッセージ送信': { // @起動もとにメッセージを送信する。 // @わーかーめっせーじへんしん
60
+ type: 'func',
61
+ josi: [['を']],
62
+ pure: true,
63
+ fn: function (msg, sys) {
64
+ postMessage(msg)
65
+ },
66
+ return_none: true
67
+ },
68
+ '表示': { // @メインスレッドに固有の形式で表示データを送信する。 // @ひょうじ
69
+ type: 'func',
70
+ josi: [['を']],
71
+ pure: true,
72
+ fn: function (data, sys) {
73
+ const msg = {
74
+ type: 'output',
75
+ data: data
76
+ }
77
+ postMessage(msg)
78
+ },
79
+ return_none: true
80
+ },
81
+ '終了': { // @ワーカーを終了する。 // @しゅうりょう
82
+ type: 'func',
83
+ josi: [],
84
+ pure: true,
85
+ fn: function (sys) {
86
+ close()
87
+ },
88
+ return_none: true
89
+ }
90
+ }
91
+
92
+ module.exports = PluginWorker
package/src/repl.nako3 ADDED
@@ -0,0 +1,63 @@
1
+ # ------------------------------------
2
+ # ■ REPL - なでしこ対話実行環境
3
+ # ------------------------------------
4
+ # OSごとのメッセージを決める
5
+ FOS=OS取得
6
+ もし、FOSが『win32』ならば
7
+   林=「■」
8
+   Fエラー=「{林} × エラーが起きました。」
9
+   F区切り線=「----------------------------------」
10
+   FOK=「○ 実行しました」
11
+ 違えば
12
+   林=「🍉」
13
+   Fエラー=「❎ エラーが起きました。」
14
+   F区切り線=「🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴🌴」
15
+   FOK=「✅ 実行しました」
16
+ ここまで。
17
+ F区切り線を表示。
18
+ 「{林} なでしこ {ナデシコバージョン} - 対話実行環境」と表示。
19
+ 「{林} OS: {FOS}」と表示。
20
+ F区切り線を表示。
21
+
22
+ MSG=「{林} 以下にプログラムを入力{改行}」
23
+ HELP=林&『使い方
24
+ プログラムを入力して[RETURN]キー2回押すとプログラムが実行されます。
25
+ 行頭に「>」と書くと、計算結果を画面に出力します。
26
+ 「終わる」と書くと、対話実行環境を終了します。
27
+
28
+ HELPを表示。
29
+ MSGを表示。
30
+
31
+ 空行回数=0
32
+ キャッシュ=「」
33
+ ●REPL実行(S)
34
+   S=トリム(S)
35
+   もしSが空ならば
36
+     空行回数=空行回数+1
37
+   ここまで。
38
+   Sが「/^[>>]/」に正規表現マッチ
39
+   もし、そうならば
40
+     Sの「/^[>>](.+)$/」を「表示($1)」に正規表現置換してSに代入。
41
+     空行回数=2
42
+   ここまで。
43
+   キャッシュ=キャッシュ&S&改行。
44
+   もし、空行回数が1以上ならば
45
+     「{改行}{FOK}{改行}」を表示。
46
+     キャッシュをナデシコ続ける
47
+     改行&F区切り線を表示。
48
+     キャッシュ=「」
49
+     空行回数=0
50
+     MSGを表示
51
+   ここまで
52
+ ここまで
53
+
54
+ (関数(S)
55
+   エラー監視
56
+     REPL実行(S)
57
+   エラーならば
58
+     Fエラーを表示。
59
+     F区切り線を表示。
60
+ MSGを表示。
61
+     キャッシュ=「」
62
+   ここまで
63
+ ここまで)を標準入力取得した時
Binary file
Binary file
Binary file
package/src/wnako3.js ADDED
@@ -0,0 +1,162 @@
1
+ // @ts-nocheck
2
+ // nadesiko for web browser
3
+ // wnako3.js
4
+ require('whatwg-fetch') // IE11サポートが不要になったら外す
5
+
6
+ const NakoCompiler = require('./nako3')
7
+ const { NakoImportError } = require('./nako_errors')
8
+ const NAKO_SCRIPT_RE = /^(なでしこ|nako|nadesiko)3?$/
9
+ const { setupEditor } = require('./wnako3_editor')
10
+ const PluginBrowser = require('./plugin_browser')
11
+
12
+ class WebNakoCompiler extends NakoCompiler {
13
+ constructor () {
14
+ super({ useBasicPlugin: true })
15
+ this.__varslist[0]['ナデシコ種類'] = 'wnako3'
16
+ }
17
+
18
+ /**
19
+ * ブラウザでtype="なでしこ"というスクリプトを得て実行する
20
+ */
21
+ runNakoScript () {
22
+ // スクリプトタグの中身を得る
23
+ let nakoScriptCount = 0
24
+ const scripts = document.querySelectorAll('script')
25
+ for (let i = 0; i < scripts.length; i++) {
26
+ const script = scripts[i]
27
+ if (script.type.match(NAKO_SCRIPT_RE)) {
28
+ nakoScriptCount++
29
+ this.run(script.text, `script${i}.nako3`)
30
+ }
31
+ }
32
+ console.log('実行したなでしこの個数=', nakoScriptCount)
33
+ }
34
+
35
+ /**
36
+ * @this {WebNakoCompiler}
37
+ * @param {string} code
38
+ * @param {string} filename
39
+ * @param {string} [preCode]
40
+ * @param {Record<string, string>} [localFiles]
41
+ * @returns {Promise<unknown>}
42
+ */
43
+ async loadDependencies (code, filename, preCode = '', localFiles = {}) {
44
+ return this._loadDependencies(code, filename, preCode, {
45
+ readJs: (filePath, token) => {
46
+ // eslint-disable-next-line no-prototype-builtins
47
+ if (localFiles.hasOwnProperty(filePath)) {
48
+ return {
49
+ sync: true,
50
+ value: () => {
51
+ // eslint-disable-next-line no-new-func
52
+ Function(localFiles[filePath])()
53
+ return {}
54
+ }
55
+ }
56
+ }
57
+ return {
58
+ sync: false,
59
+ value: (async () => {
60
+ if (!filePath.startsWith('http://') && !filePath.startsWith('https://')) {
61
+ throw new NakoImportError('ブラウザ版のなでしこの取り込み文の引数には https:// か http:// で始まるアドレスを指定してください。', token.line, token.file)
62
+ }
63
+ const res = await fetch(filePath)
64
+ if (!res.ok) {
65
+ throw new NakoImportError(`ファイル ${filePath} のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.line, token.file)
66
+ }
67
+ const text = await res.text()
68
+ if (!text.includes('navigator.nako3.addPluginObject')) {
69
+ throw new NakoImportError(`ファイル ${filePath} の中に文字列 "navigator.nako3.addPluginObject" が存在しません。現在、ブラウザ版のなでしこ言語v3は自動登録するプラグインのみをサポートしています。`, token.line, token.file)
70
+ }
71
+ // textの例: `navigator.nako3.addPluginObject('PluginRequireTest', { requiretest: { type: 'var', value: 100 } })`
72
+ return () => {
73
+ // プラグインの自動登録は navigator.nako3 を参照するため、 navigator.nako3 を一時的に現在のインスタンスにする。
74
+ const globalNako3 = navigator.nako3
75
+ navigator.nako3 = this
76
+ try {
77
+ // eslint-disable-next-line no-new-func
78
+ Function(text)()
79
+ } catch (err) {
80
+ throw new NakoImportError(`プラグイン ${filePath} の取り込みに失敗: ${err instanceof Error ? err.message : err + ''}`, token.line, token.file)
81
+ } finally {
82
+ navigator.nako3 = globalNako3
83
+ }
84
+ return {}
85
+ }
86
+ })()
87
+ }
88
+ },
89
+ readNako3: (filePath, token) => {
90
+ // eslint-disable-next-line no-prototype-builtins
91
+ if (localFiles.hasOwnProperty(filePath)) {
92
+ return { sync: true, value: localFiles[filePath] }
93
+ }
94
+ return {
95
+ sync: false,
96
+ value: (async () => {
97
+ const res = await fetch(filePath)
98
+ if (!res.ok) {
99
+ throw new NakoImportError(`ファイル ${filePath} のダウンロードに失敗しました: ${res.status} ${res.statusText}`, token.line, token.file)
100
+ }
101
+ return await res.text()
102
+ })()
103
+ }
104
+ },
105
+ resolvePath: (name, token) => {
106
+ // ローカルにファイルが存在するならそれを使う。そうでなければURLとして解釈する。
107
+ let pathname = name
108
+ // eslint-disable-next-line no-prototype-builtins
109
+ if (!localFiles.hasOwnProperty(name)) {
110
+ try {
111
+ pathname = new URL(name).pathname
112
+ } catch (e) {
113
+ throw new NakoImportError(`ブラウザ版のなでしこの取り込み文の引数には、ローカルに存在するファイルか https:// か http:// で始まるアドレスを指定してください。\n${e}`, token.line, token.file)
114
+ }
115
+ }
116
+ if (pathname.endsWith('.js') || pathname.endsWith('.js.txt')) {
117
+ return { filePath: name, type: 'js' }
118
+ }
119
+ if (pathname.endsWith('.nako3') || pathname.endsWith('.nako3.txt')) {
120
+ return { filePath: name, type: 'nako3' }
121
+ }
122
+ return { filePath: name, type: 'invalid' }
123
+ }
124
+ })
125
+ }
126
+
127
+ /**
128
+ * type=なでしこ のスクリプトを自動実行するべきかどうかを返す
129
+ * @returns {boolean} type=なでしこ のスクリプトを自動実行するべきかどうか
130
+ */
131
+ checkScriptTagParam () {
132
+ const scripts = document.querySelectorAll('script')
133
+ for (let i = 0; i < scripts.length; i++) {
134
+ const script = scripts[i]
135
+ const src = script.src || ''
136
+ if (src.indexOf('wnako3.js?run') >= 0 ||
137
+ src.indexOf('wnako3.js&run') >= 0) {
138
+ return true
139
+ }
140
+ }
141
+ return false
142
+ }
143
+
144
+ /**
145
+ * 指定したidのHTML要素をなでしこ言語のエディタにする。
146
+ * @param {string | Element} idOrElement HTML要素
147
+ * @see {setupEditor}
148
+ */
149
+ setupEditor (idOrElement) {
150
+ return setupEditor(idOrElement, this, /** @type {any} */(window).ace)
151
+ }
152
+ }
153
+
154
+ // ブラウザなら navigator.nako3 になでしこを登録
155
+ if (typeof (navigator) === 'object' && !navigator.exportWNako3) {
156
+ const nako3 = navigator.nako3 = new WebNakoCompiler()
157
+ nako3.addPluginObject('PluginBrowser', PluginBrowser)
158
+ window.addEventListener('DOMContentLoaded', (e) => {
159
+ const isAutoRun = nako3.checkScriptTagParam()
160
+ if (isAutoRun) { nako3.runNakoScript() }
161
+ }, false)
162
+ } else { module.exports = WebNakoCompiler }
@@ -0,0 +1,215 @@
1
+ .nako3_editor {
2
+ height: 300px;
3
+ }
4
+ .nako3_editor.resizable {
5
+ resize: vertical;
6
+ overflow: auto;
7
+ min-height: 42px;
8
+ max-height: 1080px;
9
+ }
10
+
11
+ /* シンタックスハイライトの色の調整 */
12
+ .nako3_editor.ace-xcode .ace_name.ace_function {
13
+ color: #996506;
14
+ }
15
+ .nako3_editor.ace-xcode .ace_string.ace_other {
16
+ color: #C00;
17
+ }
18
+ .nako3_editor.ace-xcode .ace_keyword.ace_operator {
19
+ color: black;
20
+ }
21
+ .nako3_editor.ace-xcode .ace_constant.ace_numeric {
22
+ color: rgb(27, 143, 23);
23
+ }
24
+ .nako3_editor.ace-xcode .ace_support.ace_constant {
25
+ color: #037d99;
26
+ }
27
+ .nako3_editor.ace-xcode .ace_variable.ace_language {
28
+ color: #2910D7;
29
+ }
30
+
31
+ .nako3_editor.ace-monokai .ace_entity.ace_function {
32
+ /* 変数と関数の色が同じで見分けが付かないため、関数を太字で表示 */
33
+ font-weight: bold;
34
+ }
35
+
36
+ .nako3_editor .ace_markup.ace_underline .ace_cjk {
37
+ /* cjk文字に下線が引かれない問題の修正 */
38
+ text-decoration: underline;
39
+ }
40
+
41
+ /* エラー位置に付ける赤線 */
42
+ .nako3_editor .marker-red,
43
+ .nako3_editor .marker-yellow {
44
+ position: absolute;
45
+ }
46
+ .nako3_editor .marker-red:after,
47
+ .nako3_editor .marker-yellow:after {
48
+ content: "";
49
+ display: block;
50
+ height: 100%;
51
+ background-size: 6px;
52
+ background-repeat: repeat-x;
53
+ background-position: left bottom;
54
+ }
55
+ .nako3_editor .marker-red:after {
56
+ /* wnako3_editor_marker_red.xcfをpngで出力してからblobに変換したもの。exifなどの出力を無効化しないとサイズが数倍大きくなってしまう。 */
57
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAUCAYAAADRA14pAAAB4ElEQVRYw9XYPWzNURjH8c8VJNdLOhBDw9BYSqSDxOYtFokIgyAGsZHGaGJhYJEYWIWIMBAGL0lN2EgQIY2FpE2aDiSNeFfFz9D/QNNK///2tvee5MlZzjnP8z3nPC/n1MxgC4uwBl3oQB19eIKnNX5o9RbawuFwP4yETCBfQ084ENpaEXRZOBc+/wdyIvkeboaNrQA6JxwJnyqAjiePw+ZmhV1RXN00QG5n1O+bBnZ3GGoQ7N9+fiLMn03QrnCvwaBj5VnonGnQleFS+FXS2PfhVjgZjhebVcXfv4RDMwk6UtLAh2FnmDvOmvWwK9wIwyXXvRIWNgJ0aThbwaDBsL2EnvZwuvDXyeronbYrHhaEY+FDhWt3PSyZQsS/VkLXx7BnKqD10B0GKoAOhX3TtOHbQl8J3VfD8jIKVoVT4V0F0J/hQmif7ho8XCxhx3C4HLaOTWG1sBqbjPZbir5Ku4ujNXobGDD34jwWl5j2DS/wGi8VJ1I1H/4Od8K6GUyHnUWQqmLvG+FBxcmPwoZZKnbqFQ+qX+gvOelV2NEk5Wx3yfQ1qAg0kxk8EA6OVzjMMnRHUblNhuGtSQx6HvaHeU3+LF1fvKH/d4BDEwH3hTNhbQt+PLQXPyw9RTHyT3HyBwLEm4Srm0QtAAAAAElFTkSuQmCC");
58
+ }
59
+ .nako3_editor .marker-yellow:after {
60
+ /* wnako3_editor_marker_yellow.xcf */
61
+ background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAAUCAYAAADRA14pAAACOklEQVRYw9XXSchOURwG8N/7keIYSliITBtT387CQWKjRJIpoRChlGFjiJKFhQxRQqIszJIMa8PiRiRjlMRC345Il0yxOYsv+Xjv7X1fr2dzN/c55/90/uf5P6eigcgz3TEarRiCrniJO7gboi/1rqHSAJG9sBCzMAGdO/j1E27gNC6G6P1/JTjP9MMWLEUoSP+Mq9gXoptNLTjPtGAdtqF7DZa8jY0hut50gvPMQBzHpDo0zWWsCdHLphCcZ+bgEHrX0RI+YSd2lDW4Sg2EtqYipjTQ8O9hQYieNUxwnhmGrViElgLUd7iJR/iKsRhX4r5/xPoQHa6r4HZCF/xhxPwON7AXV0P07Zc1u2Iq5mM6uhRY9wRWhCivqeA80ycJXVmwoLZU0JUq9+mPtVidgkk1eILZ1bR4pYoCuqUCNqBnwYY4h1UhelPS8XdhbpWUD1gWorOlBKc2W4zNGFCw3rdYHaJTNTDFqTiAwVVSTmJDiF5XJTjPjEhRcDn6Fqzve5rDW0PUVuMMvh9LqqR8wZl0v6+1H2GVPDMSEzESk9O3DK5gU4ge1zGuzsMR9Cg4ux/gOR5W8szRlHfL4EfKvNtDdKdBL67hOI9RJegvWjC05N63MDFE0xslFpITj8GxEvTOlTzzCoMKkJ6mMH/JP0aeWYXdBcZXW0sBB36NFWhtBrHptA+m1r5U5IR//OWn+9iD0yH6qkmRZ8anZ+kMdOpoXHYk+BUu4ESI7vmPkJLaTExLGb29o3/4CTXDoNqc3UeFAAAAAElFTkSuQmCC");
62
+ }
63
+
64
+ /* readonlyなときのスタイル */
65
+ .nako3_editor.readonly .ace_active-line {
66
+ background: transparent;
67
+ }
68
+ .nako3_editor.readonly .ace_gutter-active-line {
69
+ background: transparent;
70
+ }
71
+ .nako3_editor.readonly .ace_cursor {
72
+ opacity: 0;
73
+ }
74
+
75
+ /* tooltipのスタイルの調整 */
76
+ .nako3_editor .tooltip-plugin-name {
77
+ margin-left: 10px;
78
+ color: gray;
79
+ }
80
+ .ace_tooltip {
81
+ font-size: 13px;
82
+ padding-bottom: 6px;
83
+ padding-right: 10px;
84
+ opacity: 0.8;
85
+
86
+ /* メッセージが長いとき文字が画面外に出て読めない問題の修正 */
87
+ max-width: 80%;
88
+ overflow-wrap: anywhere;
89
+ white-space: pre-wrap;
90
+ }
91
+
92
+ /* スニペットのプレースホルダのスタイル */
93
+ .nako3_editor .ace_snippet-marker {
94
+ border-radius: 0;
95
+ background: rgba(0, 75, 255, 0.12);
96
+ border: none;
97
+ }
98
+
99
+ /* 右下のボタン全体を囲むdiv */
100
+ .button-container {
101
+ position: absolute;
102
+ bottom: 11px; /* あまり低すぎるとスクロールバーで隠れてしまう。 */
103
+ right: 20px;
104
+ text-align: right;
105
+ font-size: 13px;
106
+ cursor: pointer;
107
+ }
108
+
109
+ /* 処理時間が長いときのメッセージ */
110
+ .slow-speed-message {
111
+ color: rgb(85, 82, 255);
112
+ max-width: 75vw;
113
+ display: none;
114
+ font-weight: bold;
115
+ }
116
+ .nako3_editor.ace-monokai .slow-speed-message {
117
+ color: rgb(255, 255, 255);
118
+ }
119
+ .slow-speed-message.visible {
120
+ display: inline-block;
121
+ }
122
+ .slow-speed-message > span {
123
+ display: inline-block;
124
+ }
125
+
126
+ /* 「設定を開く」ボタンのスタイル */
127
+ .editor-button {
128
+ color: gray;
129
+ display: inline-block;
130
+ user-select: none;
131
+ white-space: nowrap;
132
+ margin-left: 10px;
133
+ }
134
+ .nako3_editor.ace-monokai .settings-button {
135
+ color: rgb(218, 218, 218);
136
+ }
137
+
138
+ #ace_settingsmenu {
139
+ max-width: 60%;
140
+ }
141
+
142
+ .editor-button:hover {
143
+ color: rgb(90, 90, 255);
144
+ }
145
+ .editor-button:active {
146
+ color: rgb(24, 24, 192);
147
+ }
148
+ .nako3_editor.ace-monokai .settings-button:hover {
149
+ color: rgb(215, 215, 255);
150
+ }
151
+ .nako3_editor.ace-monokai .settings-button:active {
152
+ color: rgb(182, 182, 255);
153
+ }
154
+ .nako3_editor.readonly .editor-button {
155
+ display: none; /* readonlyのときは表示しない。 */
156
+ }
157
+ .nako3_editor.fullscreen {
158
+ position: fixed;
159
+ resize: none; /* .resizable で指定する resize: vertical を無効化 */
160
+ left: 0;
161
+ top: 0;
162
+ width: 100%;
163
+ height: 100% !important; /* !important が無いと、resize: vertical によるリサイズで上書きされてしまう。 */
164
+ z-index: 1000; /* ace editor のポップアップのz-indexは200000 */
165
+ }
166
+
167
+ /* 設定メニュー */
168
+ #ace_settingsmenu > table {
169
+ border-spacing: 0 8px;
170
+ font-size: 13px;
171
+ }
172
+ #ace_settingsmenu > table td {
173
+ height: 30px;
174
+ }
175
+ #ace_settingsmenu > table td > div {
176
+ height: 100%;
177
+ }
178
+ #ace_settingsmenu button,
179
+ ##ace_settingsmenu input {
180
+ height: 100%;
181
+ font-size: 13px;
182
+ }
183
+ #ace_settingsmenu > table tr:last-child {
184
+ display: none; /* なでしこのバージョンと紛らわしいため、aceのバージョン表示を消す */
185
+ }
186
+
187
+ /* 出力の表示で、スペースの連続を残す。 */
188
+ .nako3-output-container {
189
+ white-space: pre-wrap;
190
+ overflow-wrap: anywhere;
191
+ }
192
+
193
+
194
+ /*
195
+ * ※があるとカーソルがずれる問題の修正
196
+ *
197
+ * フォントの作成方法:
198
+ * 1. Font Forge を開いて "New" で新しいフォントを作成
199
+ * 2. Encoding > Reencode > Custom
200
+ * 3. 左上のマスを右クリックして Glyph Info を Glyph Name: referencemark、Unicode Value: U+203B に変更
201
+ * 4. 同じマスをダブルクリックして、グリフを作る。https://fontforge.org/docs/tutorial/editexample.html を参照。フォント幅は半角なら500付近にする。
202
+ * 5. Element > Font Info でフォント名を設定する
203
+ * 6. woffでエクスポートする
204
+ */
205
+ @font-face {
206
+ font-family: 'nako3editorfix';
207
+ font-style: normal;
208
+ font-weight: 400;
209
+ /* nako3editorfix.woff */
210
+ src: url("data:application/x-font-woff;charset=utf-8;base64,d09GRk9UVE8AAAWQAAsAAAAACLAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAADSAAAAgsAAAMRSKN2MkZGVE0AAAVsAAAAHAAAAByTUkwtR0RFRgAABVQAAAAYAAAAHAAVABRPUy8yAAABZAAAAEgAAABgdbX/sWNtYXAAAAL8AAAANAAAAUIADSLhaGVhZAAAAQgAAAAzAAAANhntIDBoaGVhAAABPAAAAB4AAAAkBOcB+WhtdHgAAAWIAAAACAAAAAgD7AAmbWF4cAAAAVwAAAAGAAAABgACUABuYW1lAAABrAAAAVAAAAJ2WG3UM3Bvc3QAAAMwAAAAFgAAACD/uAAzeJxjYGRgYADi/Y9OPI/nt/nKwM38AijCcCc1LQlCl1kzqAGV3GNaB+RyMDCBRAFvfguiAHicY2BkYGBax8DAEMX4DUgyMN5jYGRABUwAR9gC5QAAAABQAAACAAB4nGNgYfzGOIGBlYGBqYtpDwMDQw+EZnzAYMjIBBRlYOVkAIMGBlQQkOaawnBAwVrBmlnhvwVDFNM6sDAjXIECEDICAJBVC9J4nJWQP2vCQBjGn/NfqYO0u8NtVdBwSSbtKAQELaWI0FH0jIeSyBnBfIV+gC6du3br0KHfrU/idehSMOHN/d43z3vPeweghQ8InJ87PDoWrL86ruAKn46r6IpbxzW0xLPjOm7Ei+MG619Uito1s4eyq2CBNk6OK9z/3XEVT/h2XENb3DuuQ4qN4wbrb5hijBkkJjBYQiPBgd8mRkixRw7LeowNMmo6VHS5BlAMHz1yzldhgJB5E5iOZ3Jiljo56OYo3efWxJtMdpZdGajA78k8V4PQpzDBAlt6hHRb0SMjW6xJJ/5cbNNQr0yW2rVh/kRRjCN2bLJMdXzcLQgRmxK2RmVzTFUxnMeBJIaM/0zOihD9Mn6PhChNsii1sZaBp+RQ/h2FhbAf9ouzXHiEOUWWd2vKkSXtFO28ci3GxVzbg0kTqZTvKaXkZfv/ANnJaX94nGNgYGBmgGAZBkYGELAB8hjBfBYGBSDNAoRAvoL1//8Q8v4xqEoGRjYGGHPEAgCZ2gcNeJxjYGYAg/9bGYyAFCMDGgAALNMB6wAAeJyFkE9oE0EYxb/ZbNMS142pplZdNXhIW7GYtHjwIAyEKKKCBQ9ePLTpJsaQxG5KNZ72ZmkqgiCVgidPxR4UUURYWHoSPPQgihJUsLbVg3/IpRNI/PymkNLYQC+P92bf/uYxDFQVGGP+3HAmP2iOpsfzVjJ9E5gCDPqFH4TBxEFFHPKIbnVaY0+nRKEaazNgzm8A7DJgPmBAp6FgJ6jyFx1OQAyGLDNpWmYuYWaHrcyFs5dC59MJM1cwfbH89aKVTl0dD/Um+kIDkYHosVCxGDk5GPU1L/hvDwC7DYq84YhyruSIuMMcZ23B8ThdIizmamGvU7sRFPG1hVq8XUfEFxwhdYvktd5wT2Zh3TGE8DfKF1coX5kH6WSH2+tnHoT6D7KpiB1EXE7YiJU+jrh6lGTJS/HzEtUDHYD4e8xF2JuhuG+aOPoqSddukgMPSIwqlX8Jct3vXMTv9+Ew4lDWRXZ8chPbbrDbQbJhg21LNjSzuWRzyYYtbJZ8SbZ+ym3B3rSbN3ZfcyWbzvQVd9vdZz7ayPa/b/kmbvPuVm/CN9h8K7v+BfDv16TcbWWp+SdAF3x4SLL4nGB3n1FTv0NxdIYuUJfp754R4ry5R+XZy1SpvqKzmR766j1NrrdA0j9JcWSCXP0T9R79JFd5S6jyIsXoY96mi6k9pWBJ81V8FU0r7yhrO/8BJdh1iQB4nGNgZIAAHgYRBhYgzQTEjBAMAALLACoAAAABAAAAANqHb48AAAAA3GVmYgAAAADcZXY7AfYAAAH2ACY=");
211
+ unicode-range: U+203B; /* 「※」のフォントだけを自作フォントで置換 */
212
+ }
213
+ .ace_editor.nako3_editor {
214
+ font-family: 'nako3editorfix', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', monospace;
215
+ }