nadesiko3 3.3.49 → 3.3.50

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 (342) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -143
  3. package/batch/.DS_Store +0 -0
  4. package/batch/browsers.template.md +3 -3
  5. package/batch/build_browsers.nako3 +72 -72
  6. package/batch/build_command.nako3 +44 -44
  7. package/batch/build_nako_version.nako3 +42 -42
  8. package/batch/calc_hash.nako3 +29 -29
  9. package/batch/cmd_txt2json.nako3 +74 -74
  10. package/batch/command.txt +79 -0
  11. package/batch/command_nakopad.txt +69 -0
  12. package/batch/download-extlib.nako3 +43 -43
  13. package/batch/gen_command_nakopad.nako3 +57 -57
  14. package/batch/jsplugin2text.nako3 +285 -285
  15. package/batch/pickup_command.nako3 +110 -110
  16. package/batch/pickup_reserved_words.nako3 +11 -11
  17. package/batch/publish_version.nako3 +46 -46
  18. package/batch/show_agents.js +14 -14
  19. package/batch/turtle2js.nako3 +21 -21
  20. package/bin/cnako3 +10 -10
  21. package/core/LICENSE +21 -21
  22. package/core/README.md +66 -66
  23. package/core/batch/build_nako_version.nako3 +42 -42
  24. package/core/command/snako.mjs +105 -105
  25. package/core/command/snako.mts +116 -116
  26. package/core/index.mjs +21 -21
  27. package/core/package.json +47 -47
  28. package/core/sample/hello.nako3 +7 -7
  29. package/core/sample/hoge.mjs +4 -4
  30. package/core/sample/hoge.mts +6 -6
  31. package/core/src/nako3.mjs +864 -858
  32. package/core/src/nako3.mts +976 -967
  33. package/core/src/nako_colors.mjs +78 -78
  34. package/core/src/nako_colors.mts +86 -86
  35. package/core/src/nako_core_version.mjs +8 -8
  36. package/core/src/nako_core_version.mts +19 -19
  37. package/core/src/nako_csv.mjs +185 -185
  38. package/core/src/nako_csv.mts +188 -188
  39. package/core/src/nako_errors.mjs +173 -173
  40. package/core/src/nako_errors.mts +197 -197
  41. package/core/src/nako_from_dncl.mjs +255 -255
  42. package/core/src/nako_from_dncl.mts +250 -250
  43. package/core/src/nako_gen.mjs +1647 -1648
  44. package/core/src/nako_gen.mts +1718 -1719
  45. package/core/src/nako_gen_async.mjs +1659 -1659
  46. package/core/src/nako_gen_async.mts +1732 -1732
  47. package/core/src/nako_global.mjs +107 -107
  48. package/core/src/nako_global.mts +138 -138
  49. package/core/src/nako_indent.mjs +445 -445
  50. package/core/src/nako_indent.mts +492 -492
  51. package/core/src/nako_josi_list.mjs +38 -38
  52. package/core/src/nako_josi_list.mts +45 -45
  53. package/core/src/nako_lex_rules.mjs +253 -253
  54. package/core/src/nako_lex_rules.mts +260 -260
  55. package/core/src/nako_lexer.mjs +609 -609
  56. package/core/src/nako_lexer.mts +612 -612
  57. package/core/src/nako_logger.mjs +199 -199
  58. package/core/src/nako_logger.mts +232 -232
  59. package/core/src/nako_parser3.mjs +2439 -2439
  60. package/core/src/nako_parser3.mts +2195 -2195
  61. package/core/src/nako_parser_base.mjs +370 -370
  62. package/core/src/nako_parser_base.mts +370 -370
  63. package/core/src/nako_parser_const.mjs +37 -37
  64. package/core/src/nako_parser_const.mts +37 -37
  65. package/core/src/nako_prepare.mjs +304 -304
  66. package/core/src/nako_prepare.mts +315 -315
  67. package/core/src/nako_reserved_words.mjs +38 -38
  68. package/core/src/nako_reserved_words.mts +38 -38
  69. package/core/src/nako_source_mapping.mjs +207 -207
  70. package/core/src/nako_source_mapping.mts +262 -262
  71. package/core/src/nako_test.mjs +37 -37
  72. package/core/src/nako_types.mjs +25 -25
  73. package/core/src/nako_types.mts +151 -151
  74. package/core/src/plugin_csv.mjs +49 -49
  75. package/core/src/plugin_csv.mts +50 -50
  76. package/core/src/plugin_math.mjs +328 -328
  77. package/core/src/plugin_math.mts +326 -326
  78. package/core/src/plugin_promise.mjs +91 -91
  79. package/core/src/plugin_promise.mts +91 -91
  80. package/core/src/plugin_system.mjs +2832 -2832
  81. package/core/src/plugin_system.mts +2690 -2690
  82. package/core/src/plugin_test.mjs +34 -34
  83. package/core/src/plugin_test.mts +34 -34
  84. package/demo/.DS_Store +0 -0
  85. package/demo/ace_editor.html +89 -89
  86. package/demo/ace_editor_tabs.html +161 -161
  87. package/demo/basic.html +71 -71
  88. package/demo/browsers.html +10 -9
  89. package/demo/css/basic.css +3 -3
  90. package/demo/css/common.css +157 -157
  91. package/demo/css/editor.css +8 -8
  92. package/demo/css/flow.css +3 -3
  93. package/demo/css/index.css +3 -3
  94. package/demo/extlib/.DS_Store +0 -0
  95. package/demo/flow.html +98 -98
  96. package/demo/graph.html +53 -53
  97. package/demo/image/nakopad-icon256.png +0 -0
  98. package/demo/index.html +133 -133
  99. package/demo/js/common.js +17 -17
  100. package/demo/js/turtle3d_test.js +44 -44
  101. package/demo/js/turtle_test.js +45 -45
  102. package/demo/nako3/calc.nako3 +4 -4
  103. package/demo/runscript.html +47 -47
  104. package/demo/runscript2.html +33 -33
  105. package/demo/runscript3.html +35 -35
  106. package/demo/runscript4.html +33 -33
  107. package/demo/turtle.html +58 -58
  108. package/demo/turtle2.html +141 -141
  109. package/demo/turtle3.html +279 -279
  110. package/demo/turtle3d.html +58 -58
  111. package/demo/turtle3d2.html +107 -107
  112. package/demo/version.html +24 -24
  113. package/doc/SETUP.md +157 -157
  114. package/doc/about.md +17 -17
  115. package/doc/browsers.md +26 -26
  116. package/doc/docgen.md +21 -21
  117. package/doc/editor.md +44 -44
  118. package/doc/files.md +39 -39
  119. package/doc/plugins.md +234 -234
  120. package/doc/release.md +79 -79
  121. package/doc/textlint.md +43 -43
  122. package/doc/win32.md +57 -57
  123. package/package.json +195 -195
  124. package/release/_hash.txt +28 -28
  125. package/release/_script-tags.txt +14 -14
  126. package/release/command.json +1 -1
  127. package/release/command.json.js +1 -1
  128. package/release/command_cnako3.json +1 -1
  129. package/release/command_list.json +1 -1
  130. package/release/editor.js +1 -1
  131. package/release/nako_gen_async.js +1 -1
  132. package/release/nako_gen_async.js.LICENSE.txt +35 -0
  133. package/release/plugin_caniuse.js.LICENSE.txt +11 -0
  134. package/release/plugin_csv.js +1 -1
  135. package/release/plugin_csv.js.LICENSE.txt +15 -0
  136. package/release/plugin_datetime.js.LICENSE.txt +15 -0
  137. package/release/plugin_kansuji.js.LICENSE.txt +3 -0
  138. package/release/plugin_markup.js.LICENSE.txt +11 -0
  139. package/release/plugin_turtle.js.LICENSE.txt +15 -0
  140. package/release/plugin_webworker.js.LICENSE.txt +3 -0
  141. package/release/plugin_weykturtle3d.js.LICENSE.txt +3 -0
  142. package/release/stats.json +1 -1
  143. package/release/version.js +1 -1
  144. package/release/wnako3.js +1 -1
  145. package/release/wnako3webworker.js +1 -1
  146. package/release/wnako3webworker.js.LICENSE.txt +131 -0
  147. package/src/.DS_Store +0 -0
  148. package/src/browsers.txt +12 -11
  149. package/src/browsers_agents.json +2 -2
  150. package/src/browsers_agents.mjs +1 -1
  151. package/src/cnako3.mjs +17 -17
  152. package/src/cnako3.mts +18 -18
  153. package/src/cnako3mod.mjs +707 -707
  154. package/src/cnako3mod.mts +712 -712
  155. package/src/commander_ja.mjs +164 -164
  156. package/src/commander_ja.mts +161 -161
  157. package/src/enako3.mjs +68 -68
  158. package/src/era.mjs +22 -22
  159. package/src/image_turtle-elephant.mjs +2 -2
  160. package/src/image_turtle-panda.mjs +2 -2
  161. package/src/image_turtle64.mjs +2 -2
  162. package/src/index.mjs +9 -9
  163. package/src/index.mts +10 -10
  164. package/src/nako3editorfix.sfd +106 -106
  165. package/src/nako_version.mjs +8 -8
  166. package/src/nako_version.mts +2 -2
  167. package/src/plugin_browser.mjs +213 -213
  168. package/src/plugin_browser.mts +206 -206
  169. package/src/plugin_browser_ajax.mjs +399 -399
  170. package/src/plugin_browser_audio.mjs +109 -109
  171. package/src/plugin_browser_canvas.mjs +449 -449
  172. package/src/plugin_browser_chart.mjs +294 -294
  173. package/src/plugin_browser_color.mjs +49 -49
  174. package/src/plugin_browser_crypto.mjs +26 -26
  175. package/src/plugin_browser_dialog.mjs +53 -53
  176. package/src/plugin_browser_dom_basic.mjs +336 -336
  177. package/src/plugin_browser_dom_event.mjs +193 -193
  178. package/src/plugin_browser_dom_parts.mjs +396 -396
  179. package/src/plugin_browser_geolocation.mjs +51 -51
  180. package/src/plugin_browser_hotkey.mjs +25 -25
  181. package/src/plugin_browser_html.mjs +59 -59
  182. package/src/plugin_browser_in_worker.mjs +45 -45
  183. package/src/plugin_browser_location.mjs +21 -21
  184. package/src/plugin_browser_speech.mjs +111 -111
  185. package/src/plugin_browser_storage.mjs +121 -121
  186. package/src/plugin_browser_system.mjs +31 -31
  187. package/src/plugin_browser_websocket.mjs +73 -73
  188. package/src/plugin_caniuse.mjs +29 -29
  189. package/src/plugin_datetime.mjs +394 -394
  190. package/src/plugin_httpserver.mjs +277 -277
  191. package/src/plugin_httpserver.mts +286 -286
  192. package/src/plugin_kansuji.mjs +224 -224
  193. package/src/plugin_keigo.mjs +55 -55
  194. package/src/plugin_markup.mjs +32 -32
  195. package/src/plugin_node.mjs +1047 -1047
  196. package/src/plugin_node.mts +980 -980
  197. package/src/plugin_turtle.mjs +647 -647
  198. package/src/plugin_webworker.mjs +334 -334
  199. package/src/plugin_weykturtle3d.mjs +1214 -1214
  200. package/src/plugin_worker.mjs +95 -95
  201. package/src/repl.nako3 +63 -63
  202. package/src/wnako3.mjs +12 -12
  203. package/src/wnako3.mts +11 -11
  204. package/src/wnako3_editor.css +215 -215
  205. package/src/wnako3_editor.mjs +1542 -1542
  206. package/src/wnako3_editor.mts +1658 -1657
  207. package/src/wnako3mod.mjs +213 -213
  208. package/src/wnako3mod.mts +214 -214
  209. package/src/wnako3webworker.mjs +69 -69
  210. package/test/.DS_Store +0 -0
  211. package/test/ace_editor/karma.config.js +94 -94
  212. package/test/ace_editor/test/.babelrc.json +3 -3
  213. package/test/ace_editor/test/ace_editor_test.js +178 -178
  214. package/test/ace_editor/test/html/custom_context.html +139 -139
  215. package/test/async/async_basic_test.mjs +122 -122
  216. package/test/browser/.DS_Store +0 -0
  217. package/test/browser/karma.config.js +221 -221
  218. package/test/browser/test/.babelrc.json +3 -3
  219. package/test/browser/test/compare_util.js +50 -50
  220. package/test/browser/test/html/div_basic.html +2 -2
  221. package/test/browser/test/html/event_dom_form.html +4 -4
  222. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  223. package/test/browser/test/import_plugin_checker.js +24 -24
  224. package/test/browser/test/plugin_browser_test.js +51 -51
  225. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  226. package/test/browser/test/plugin_browser_test_color.js +18 -18
  227. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  228. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  229. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  230. package/test/browser/test/plugin_browser_test_system.js +9 -9
  231. package/test/browser/test/plugin_turtle_test.js +817 -817
  232. package/test/browser/test/plugin_webworker_test.js +86 -86
  233. package/test/browser/test/require_test.js +68 -68
  234. package/test/bundled/.DS_Store +0 -0
  235. package/test/bundled/karma.config.base.js +117 -117
  236. package/test/bundled/karma.config.js +86 -86
  237. package/test/bundled/test/.babelrc.json +3 -3
  238. package/test/bundled/test/bundled_test.js +69 -69
  239. package/test/bundled/test/html/custom_context.html +65 -65
  240. package/test/bundled/test/html/custom_debug.html +66 -66
  241. package/test/bundled/test4b.cmd +52 -52
  242. package/test/bundled/test_base/.DS_Store +0 -0
  243. package/test/bundled/test_base/.babelrc.json +3 -3
  244. package/test/bundled/test_base/_checktool_test.js +25 -25
  245. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  246. package/test/bundled/test_base/basic_async_test.js +18 -18
  247. package/test/bundled/test_base/basic_test.js +153 -153
  248. package/test/bundled/test_base/calc_test.js +132 -132
  249. package/test/bundled/test_base/css/browsers_box.css +114 -114
  250. package/test/bundled/test_base/html/custom_context.html +69 -69
  251. package/test/bundled/test_base/html/custom_debug.html +71 -71
  252. package/test/bundled/test_base/js/browsers_box.js +72 -72
  253. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  254. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  255. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  256. package/test/bundled/test_base/plugin_system_test.js +410 -410
  257. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  258. package/test/bundled/test_base/test_utils.js +191 -191
  259. package/test/common/.DS_Store +0 -0
  260. package/test/common/plugin_browser_test.mjs +22 -22
  261. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  262. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  263. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  264. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  265. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  266. package/test/common/plugin_markup_test.mjs +23 -23
  267. package/test/jsconfig.json +19 -19
  268. package/test/karma.config.js +91 -91
  269. package/test/node/.DS_Store +0 -0
  270. package/test/node/async_test.mjs +96 -96
  271. package/test/node/commander_ja_test.mjs +89 -89
  272. package/test/node/error_message_test.mjs +243 -243
  273. package/test/node/kai_test.nako3 +6 -6
  274. package/test/node/node_test.mjs +60 -60
  275. package/test/node/plugin_broken.js.txt +3 -3
  276. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  277. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  278. package/test/node/plugin_markup_test.mjs +47 -47
  279. package/test/node/plugin_math_test.mjs +45 -45
  280. package/test/node/plugin_node_test.mjs +98 -98
  281. package/test/node/plugin_test.mjs +44 -44
  282. package/test/node/relative_import_test_1.nako3 +1 -1
  283. package/test/node/relative_import_test_2.nako3 +2 -2
  284. package/test/node/require_nako3_test.mjs +67 -67
  285. package/test/node/requiretest.nako3 +4 -4
  286. package/test/node/requiretest_indirect.nako3 +1 -1
  287. package/test/node/requiretest_name.nako3 +5 -5
  288. package/test/node/runtime_error.nako3 +2 -2
  289. package/test/node/scope1.nako3 +10 -10
  290. package/test/node/scope2.nako3 +12 -12
  291. package/test/node/side_effects_test.mjs +39 -39
  292. package/test/node/sjis.txt +5 -5
  293. package/test/node/syntax_error.nako3 +1 -1
  294. package/test/node/wnako3_editor_test.mjs +384 -384
  295. package/tools/.DS_Store +0 -0
  296. package/tools/README.md +12 -12
  297. package/tools/check_new_version.nako3 +25 -25
  298. package/tools/nako3edit/.DS_Store +0 -0
  299. package/tools/nako3edit/a.sqlite3 +0 -0
  300. package/tools/nako3edit/html/.DS_Store +0 -0
  301. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  302. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  303. package/tools/nako3edit/html/edit.html +170 -170
  304. package/tools/nako3edit/html/edit_plugin.js +6 -6
  305. package/tools/nako3edit/html/files.html +125 -125
  306. package/tools/nako3edit/html/nako3edit.css +65 -65
  307. package/tools/nako3edit/index.mjs +248 -248
  308. package/tools/nako3server/index.html +10 -10
  309. package/tools/nako3server/index.mjs +116 -116
  310. package/tools/nako3server/index.nako3 +34 -34
  311. package/core/.editorconfig +0 -6
  312. package/core/.eslintrc.cjs +0 -33
  313. package/core/.github/dependabot.yml +0 -7
  314. package/core/.github/workflows/nodejs.yml +0 -37
  315. package/core/.github/workflows/super-linter.yml +0 -61
  316. package/core/.github/workflows/textlint.yml +0 -199
  317. package/core/index.mts +0 -21
  318. package/core/test/array_test.mjs +0 -34
  319. package/core/test/basic_test.mjs +0 -344
  320. package/core/test/calc_test.mjs +0 -140
  321. package/core/test/core_module_test.mjs +0 -23
  322. package/core/test/debug_test.mjs +0 -16
  323. package/core/test/dncl_test.mjs +0 -94
  324. package/core/test/error_message_test.mjs +0 -210
  325. package/core/test/error_test.mjs +0 -16
  326. package/core/test/flow_test.mjs +0 -373
  327. package/core/test/func_call.mjs +0 -160
  328. package/core/test/func_test.mjs +0 -149
  329. package/core/test/indent_test.mjs +0 -364
  330. package/core/test/lex_test.mjs +0 -168
  331. package/core/test/literal_test.mjs +0 -73
  332. package/core/test/nako_lexer_test.mjs +0 -35
  333. package/core/test/nako_logger_test.mjs +0 -76
  334. package/core/test/nako_logger_test.mts +0 -78
  335. package/core/test/plugin_csv_test.mjs +0 -38
  336. package/core/test/plugin_promise_test.mjs +0 -18
  337. package/core/test/plugin_system_test.mjs +0 -630
  338. package/core/test/prepare_test.mjs +0 -96
  339. package/core/test/re_test.mjs +0 -22
  340. package/core/test/side_effects_test.mjs +0 -92
  341. package/core/test/variable_scope_test.mjs +0 -149
  342. package/core/tsconfig.json +0 -101
package/doc/plugins.md CHANGED
@@ -1,234 +1,234 @@
1
- # プラグインのAPIの仕様
2
-
3
- なでしこ3には、以下の二種類のプラグインがある。
4
-
5
- - (1) なでしこ3自身で開発した[NAKO3プラグイン](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2FNAKO3%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&show)
6
- - (2) JavaScriptで開発した[JSプラグイン](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2FJS%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&show)
7
-
8
- なお、(1)のプラグインはなでしこ自身で関数を定義するだけである。
9
- 以下では、(2)のJavaScriptで開発したプラグインについて解説する。
10
-
11
- ## JSプラグインを利用する手順
12
-
13
- 次の2つの方法で利用ができる。
14
-
15
- - (1)「[取り込む構文](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2F%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8F%96%E8%BE%BC&show)」を使ってプラグインを取り込める。
16
- - (2) HTMLファイル内でなでしこ本体(wnako3.js)よりも後ろで`<script src="(JSプラグイン).js">`と記述して読み込む。
17
-
18
- なお「wnako3.js」を読み込むと、ブラウザの「navigator」オブジェクトにプロパティ「nako3」(navigator.nako3)にコンパイラのインスタンスが作成される。
19
-
20
- ## プラグイン側の実装方法
21
-
22
- プラグインの実体は、Objectである。
23
-
24
- ```js
25
- {
26
- '定数名': { 定義 },
27
- '命令名': { 定義 },
28
- ...
29
- }
30
- ```
31
-
32
- ### 定義:関数
33
-
34
- プラグインの実体は、Object。実際の関数定義は、fnプロパティに行う。実際の関数の引数に加えて、システムを表すsysを用意する。
35
-
36
- ```js
37
- {
38
- '関数名': { // @関数の説明 // @ヨミガナ
39
- type: 'func', // 関数であれば func にする
40
- josi: [['を', 'から'], ['まで']], // 助詞を配列で宣言する (可変長引数として扱いたい助詞は末尾で宣言する)
41
- isVariableJosi: false, // 末尾の助詞を可変長引数として扱う場合 true にする
42
- uses: [], // この関数から別の関数を呼ぶ場合に記述する // (TODO: #282)
43
- asyncFn: false, // async関数定義かPromiseを返す関数を定義する場合 true にする (参照: #1154)
44
- fn: function (aFrom, aTo, sys) { ... }, // 関数の実態
45
- return_none: false // 戻り値を返すかどうか
46
- },
47
- ...
48
- }
49
- ```
50
-
51
- なお、コメントを記述した場合、`npm run build:command`を実行すると自動的にコマンドマニュアルが生成される。
52
-
53
- ### 定義:定数
54
-
55
- typeプロパティに「const」を指定して、valueプロパティに値を指定する。
56
-
57
- ```js
58
- { type: 'const', value: 100 } // @ヨミガナ
59
- ```
60
-
61
- ### 定義:変数
62
-
63
- typeプロパティに「var」を指定して、valueプロパティに値を指定する。
64
-
65
- ```js
66
- { type: 'var', value: 100 } // @ヨミガナ
67
- ```
68
-
69
- ### プラグインの自動登録
70
-
71
- プラグインの末尾に以下のコードを仕込むとscriptタグで読み込んだときシステムに登録できる。
72
-
73
- ```js
74
- if (typeof (navigator) === 'object') {
75
- navigator.nako3.addPluginObject(プラグイン名, オブジェクト)
76
- }
77
- ```
78
-
79
- ## 初期化メソッド
80
-
81
- 以下のようなエントリを用意しておくと、プラグインを取り込み、初回実行するときに初期化メソッドが実行される。
82
- (ただし、プラグイン取り込み時に、 `!{プラグイン名}:初期化` というメソッド名にリネームされる)
83
-
84
- ```js
85
- {
86
- '初期化': {
87
- type: 'func',
88
- josi: [],
89
- fn: function (sys) { ... }
90
- }
91
- ...
92
- }
93
- ```
94
-
95
- ## クリアメソッド
96
-
97
- 以下のようなエントリを用意しておくと、プログラム終了時(あるいはクリア時)にプラグインごとプログラムが実行される。
98
-
99
- ```js
100
- {
101
- '!クリア': {
102
- type: 'func',
103
- josi: [],
104
- fn: function (sys) { ... }
105
- }
106
- ...
107
- }
108
- ```
109
-
110
- ## プラグイン側からシステム変数へのアクセス
111
-
112
- 関数を定義したとき、プラグイン関数側からシステムにアクセスしなければならない場合がある。
113
- 以下は引数のない関数を定義した例だが、必ず必要とされる引数の末尾に実行したシステムのthisを保持するオブジェクトが渡される。
114
- このオブジェクトを参照することで、システム変数にアクセスできる。
115
-
116
- ```js
117
- 'xxx': {
118
- type: 'func',
119
- josi: [],
120
- fn: function (sys) {
121
- console.log(sys)
122
- }
123
- }
124
- ```
125
-
126
- 例えば、なでしこで管理されている変数「A」にアクセスしたいときは、以下のようなコードを記述する。なお、ローカル変数を参照するときpure: trueの関数は正しく動作しない。
127
-
128
- ```js
129
- 'xxx': {
130
- type: 'func',
131
- josi: [],
132
- fn: function (sys) {
133
- const a = sys.__findVar('A')
134
- console.log(a)
135
- }
136
- }
137
- ```
138
-
139
- そのほかに、なでしこ側で定義した関数「HOGE」を実行したいときは、以下のように記述する。
140
-
141
- ```js
142
- 'xxx': {
143
- type: 'func',
144
- josi: [],
145
- fn: function (sys) {
146
- const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
147
- console.log(result)
148
- }
149
- }
150
- ```
151
-
152
- また、関数の引数に与える、sysはなでしこ自身を表す。
153
- もし、代入的関数呼び出し(setter)であれば、sys.isSetterにtrueの値が入る。
154
-
155
- なお、プラグインでは、以下のメソッドが使えるようになる。(すべてsrc/plugin_system.jsで定義されている。システム関数の初期化時に、これらの関数が追加される)
156
-
157
- - sys.__findVar(name)
158
- - sys.__exec(name, params)
159
-
160
- 関数内で、システム・グローバル変数にアクセスするには、``sys.__v0['変数名']``でアクセスできる。
161
-
162
- なお、最後の助詞を可変長引数として扱う場合、システム変数は末尾の引数の末尾の要素として挿入される。
163
-
164
- ```js
165
- 'xxx': {
166
- type: 'func',
167
- josi: [['は'], ['で']],
168
- isVariableJosi: true,
169
- fn: function (a, ...b) {
170
- const sys = b.pop()
171
- const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
172
- console.log(result)
173
- }
174
- }
175
- ```
176
-
177
- ## 非同期処理に対する関数を作る場合
178
-
179
- v3.3で`asyncFn`が導入された(参照: #1154)。このプロパティを`true`に設定した場合、関数は非同期処理で実行される。
180
- つまり、この関数を呼び出す前に、自動的に`await`が指定される。そのため、`asyncFn`を`true`とした場合、Promiseのオブジェクトを返すようにする。
181
-
182
- ```js
183
- 'xxx': {
184
- type: 'func',
185
- josi: [['で']],
186
- asyncFn: true, // 非同期処理であることを明示
187
- fn: function (msec, sys) {
188
- // asyncFnをtrueにしたら、必ずPromiseを返すようにする
189
- return new Promise((resolve, _reject) => {
190
- setTimeout(()=>{
191
- resolve()
192
- }, msec)
193
- })
194
- }
195
- }
196
- ```
197
-
198
- あるいは、以下のように、`async` をつけて関数を定義する。このように書くと、自動的にPromiseオブジェクトを返す。
199
-
200
- ```js
201
- 'xxx': {
202
- type: 'func',
203
- josi: [['で']],
204
- asyncFn: true, // 非同期処理であることを明示
205
- fn: async function (msec, sys) {
206
- // ここで非同期処理
207
- }
208
- }
209
- ```
210
-
211
- この機能の追加により、`「!非同期モード」`や`「逐次実行」`の利用は非推奨となった。
212
-
213
- ## (非推奨) 非同期モードに対応した関数を作る場合
214
-
215
- v3.2.22で導入された非同期モードの利用は非推奨となったが、非同期モードに対応した関数を作るには、以下のように記述する。
216
- なお、今後、非同期関数を利用するには、上記asyncFnを使うこと。
217
-
218
- ```js
219
- fn: function (n, sys) {
220
- if (sys.__genMode == '非同期モード') {
221
- sys.async = true // 非同期モードを使うことを明示
222
- setTimeout(() => {
223
- sys.nextAsync(sys) // ここで非同期処理が完了した時にこの関数を呼ぶ
224
- }, n * 1000)
225
- } else {
226
- // 非同期モードに対応していない時の処理
227
- throw new Error('「!非同期モード」で使ってください')
228
- }
229
- }
230
- ```
231
-
232
- ## マニュアルを自動生成する
233
-
234
- - [doc/docgen.md](docgen.md) にマニュアル自動生成のスクリプトが紹介されている。
1
+ # プラグインのAPIの仕様
2
+
3
+ なでしこ3には、以下の二種類のプラグインがある。
4
+
5
+ - (1) なでしこ3自身で開発した[NAKO3プラグイン](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2FNAKO3%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&show)
6
+ - (2) JavaScriptで開発した[JSプラグイン](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2FJS%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9&show)
7
+
8
+ なお、(1)のプラグインはなでしこ自身で関数を定義するだけである。
9
+ 以下では、(2)のJavaScriptで開発したプラグインについて解説する。
10
+
11
+ ## JSプラグインを利用する手順
12
+
13
+ 次の2つの方法で利用ができる。
14
+
15
+ - (1)「[取り込む構文](https://nadesi.com/v3/doc/index.php?%E6%96%87%E6%B3%95%2F%E3%83%97%E3%83%A9%E3%82%B0%E3%82%A4%E3%83%B3%E5%8F%96%E8%BE%BC&show)」を使ってプラグインを取り込める。
16
+ - (2) HTMLファイル内でなでしこ本体(wnako3.js)よりも後ろで`<script src="(JSプラグイン).js">`と記述して読み込む。
17
+
18
+ なお「wnako3.js」を読み込むと、ブラウザの「navigator」オブジェクトにプロパティ「nako3」(navigator.nako3)にコンパイラのインスタンスが作成される。
19
+
20
+ ## プラグイン側の実装方法
21
+
22
+ プラグインの実体は、Objectである。
23
+
24
+ ```js
25
+ {
26
+ '定数名': { 定義 },
27
+ '命令名': { 定義 },
28
+ ...
29
+ }
30
+ ```
31
+
32
+ ### 定義:関数
33
+
34
+ プラグインの実体は、Object。実際の関数定義は、fnプロパティに行う。実際の関数の引数に加えて、システムを表すsysを用意する。
35
+
36
+ ```js
37
+ {
38
+ '関数名': { // @関数の説明 // @ヨミガナ
39
+ type: 'func', // 関数であれば func にする
40
+ josi: [['を', 'から'], ['まで']], // 助詞を配列で宣言する (可変長引数として扱いたい助詞は末尾で宣言する)
41
+ isVariableJosi: false, // 末尾の助詞を可変長引数として扱う場合 true にする
42
+ uses: [], // この関数から別の関数を呼ぶ場合に記述する // (TODO: #282)
43
+ asyncFn: false, // async関数定義かPromiseを返す関数を定義する場合 true にする (参照: #1154)
44
+ fn: function (aFrom, aTo, sys) { ... }, // 関数の実態
45
+ return_none: false // 戻り値を返すかどうか
46
+ },
47
+ ...
48
+ }
49
+ ```
50
+
51
+ なお、コメントを記述した場合、`npm run build:command`を実行すると自動的にコマンドマニュアルが生成される。
52
+
53
+ ### 定義:定数
54
+
55
+ typeプロパティに「const」を指定して、valueプロパティに値を指定する。
56
+
57
+ ```js
58
+ { type: 'const', value: 100 } // @ヨミガナ
59
+ ```
60
+
61
+ ### 定義:変数
62
+
63
+ typeプロパティに「var」を指定して、valueプロパティに値を指定する。
64
+
65
+ ```js
66
+ { type: 'var', value: 100 } // @ヨミガナ
67
+ ```
68
+
69
+ ### プラグインの自動登録
70
+
71
+ プラグインの末尾に以下のコードを仕込むとscriptタグで読み込んだときシステムに登録できる。
72
+
73
+ ```js
74
+ if (typeof (navigator) === 'object') {
75
+ navigator.nako3.addPluginObject(プラグイン名, オブジェクト)
76
+ }
77
+ ```
78
+
79
+ ## 初期化メソッド
80
+
81
+ 以下のようなエントリを用意しておくと、プラグインを取り込み、初回実行するときに初期化メソッドが実行される。
82
+ (ただし、プラグイン取り込み時に、 `!{プラグイン名}:初期化` というメソッド名にリネームされる)
83
+
84
+ ```js
85
+ {
86
+ '初期化': {
87
+ type: 'func',
88
+ josi: [],
89
+ fn: function (sys) { ... }
90
+ }
91
+ ...
92
+ }
93
+ ```
94
+
95
+ ## クリアメソッド
96
+
97
+ 以下のようなエントリを用意しておくと、プログラム終了時(あるいはクリア時)にプラグインごとプログラムが実行される。
98
+
99
+ ```js
100
+ {
101
+ '!クリア': {
102
+ type: 'func',
103
+ josi: [],
104
+ fn: function (sys) { ... }
105
+ }
106
+ ...
107
+ }
108
+ ```
109
+
110
+ ## プラグイン側からシステム変数へのアクセス
111
+
112
+ 関数を定義したとき、プラグイン関数側からシステムにアクセスしなければならない場合がある。
113
+ 以下は引数のない関数を定義した例だが、必ず必要とされる引数の末尾に実行したシステムのthisを保持するオブジェクトが渡される。
114
+ このオブジェクトを参照することで、システム変数にアクセスできる。
115
+
116
+ ```js
117
+ 'xxx': {
118
+ type: 'func',
119
+ josi: [],
120
+ fn: function (sys) {
121
+ console.log(sys)
122
+ }
123
+ }
124
+ ```
125
+
126
+ 例えば、なでしこで管理されている変数「A」にアクセスしたいときは、以下のようなコードを記述する。なお、ローカル変数を参照するときpure: trueの関数は正しく動作しない。
127
+
128
+ ```js
129
+ 'xxx': {
130
+ type: 'func',
131
+ josi: [],
132
+ fn: function (sys) {
133
+ const a = sys.__findVar('A')
134
+ console.log(a)
135
+ }
136
+ }
137
+ ```
138
+
139
+ そのほかに、なでしこ側で定義した関数「HOGE」を実行したいときは、以下のように記述する。
140
+
141
+ ```js
142
+ 'xxx': {
143
+ type: 'func',
144
+ josi: [],
145
+ fn: function (sys) {
146
+ const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
147
+ console.log(result)
148
+ }
149
+ }
150
+ ```
151
+
152
+ また、関数の引数に与える、sysはなでしこ自身を表す。
153
+ もし、代入的関数呼び出し(setter)であれば、sys.isSetterにtrueの値が入る。
154
+
155
+ なお、プラグインでは、以下のメソッドが使えるようになる。(すべてsrc/plugin_system.jsで定義されている。システム関数の初期化時に、これらの関数が追加される)
156
+
157
+ - sys.__findVar(name)
158
+ - sys.__exec(name, params)
159
+
160
+ 関数内で、システム・グローバル変数にアクセスするには、``sys.__v0['変数名']``でアクセスできる。
161
+
162
+ なお、最後の助詞を可変長引数として扱う場合、システム変数は末尾の引数の末尾の要素として挿入される。
163
+
164
+ ```js
165
+ 'xxx': {
166
+ type: 'func',
167
+ josi: [['は'], ['で']],
168
+ isVariableJosi: true,
169
+ fn: function (a, ...b) {
170
+ const sys = b.pop()
171
+ const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
172
+ console.log(result)
173
+ }
174
+ }
175
+ ```
176
+
177
+ ## 非同期処理に対する関数を作る場合
178
+
179
+ v3.3で`asyncFn`が導入された(参照: #1154)。このプロパティを`true`に設定した場合、関数は非同期処理で実行される。
180
+ つまり、この関数を呼び出す前に、自動的に`await`が指定される。そのため、`asyncFn`を`true`とした場合、Promiseのオブジェクトを返すようにする。
181
+
182
+ ```js
183
+ 'xxx': {
184
+ type: 'func',
185
+ josi: [['で']],
186
+ asyncFn: true, // 非同期処理であることを明示
187
+ fn: function (msec, sys) {
188
+ // asyncFnをtrueにしたら、必ずPromiseを返すようにする
189
+ return new Promise((resolve, _reject) => {
190
+ setTimeout(()=>{
191
+ resolve()
192
+ }, msec)
193
+ })
194
+ }
195
+ }
196
+ ```
197
+
198
+ あるいは、以下のように、`async` をつけて関数を定義する。このように書くと、自動的にPromiseオブジェクトを返す。
199
+
200
+ ```js
201
+ 'xxx': {
202
+ type: 'func',
203
+ josi: [['で']],
204
+ asyncFn: true, // 非同期処理であることを明示
205
+ fn: async function (msec, sys) {
206
+ // ここで非同期処理
207
+ }
208
+ }
209
+ ```
210
+
211
+ この機能の追加により、`「!非同期モード」`や`「逐次実行」`の利用は非推奨となった。
212
+
213
+ ## (非推奨) 非同期モードに対応した関数を作る場合
214
+
215
+ v3.2.22で導入された非同期モードの利用は非推奨となったが、非同期モードに対応した関数を作るには、以下のように記述する。
216
+ なお、今後、非同期関数を利用するには、上記asyncFnを使うこと。
217
+
218
+ ```js
219
+ fn: function (n, sys) {
220
+ if (sys.__genMode == '非同期モード') {
221
+ sys.async = true // 非同期モードを使うことを明示
222
+ setTimeout(() => {
223
+ sys.nextAsync(sys) // ここで非同期処理が完了した時にこの関数を呼ぶ
224
+ }, n * 1000)
225
+ } else {
226
+ // 非同期モードに対応していない時の処理
227
+ throw new Error('「!非同期モード」で使ってください')
228
+ }
229
+ }
230
+ ```
231
+
232
+ ## マニュアルを自動生成する
233
+
234
+ - [doc/docgen.md](docgen.md) にマニュアル自動生成のスクリプトが紹介されている。
package/doc/release.md CHANGED
@@ -1,79 +1,79 @@
1
- # なでしこv3のリリース手順
2
-
3
- なでしこv3の最新版を、Webにアップするまでの備忘録です。いつも、手順飛ばしてしまうので、忘れないようにメモ。特に、npm publishの部分とか。
4
-
5
- ## 1.GitHubのリリース機能を使う
6
-
7
- ただし、リリース前(コミット前)には必ずビルドとテストを実行して、テストが成功するか確認する。
8
-
9
- ```shell
10
- npm run build
11
- npm test
12
- npm run test:all
13
- ```
14
-
15
- ## 2.ファイルのビルドについて
16
-
17
- リリース用にwebpackでパックしたソースを生成する(/releaseに生成物が作られる)。
18
-
19
- ```shell
20
- npm run build
21
- ```
22
-
23
- 必要に応じて対応ブラウザを更新する。(以前は`npm run build`に含めていたが、OSによって異なる値を出力するため、毎回実行する必要はないことから省略された #1211)
24
-
25
- ```shell
26
- npm run build:browsers
27
- ```
28
-
29
- ## 3.npmにpublish
30
-
31
- package.jsonのバージョン番号を更新したことを確認する。npm publishでnpmに公開する。
32
-
33
- ```shell
34
- npm publish
35
- ```
36
-
37
- ## 4.Webにアップロード
38
-
39
- Webの簡易エディタを最新版に更新する。
40
-
41
- - [なでしこ3のサイト](https://nadesi.com/doc3/)
42
- - [マニュアル](https://nadesi.com/doc3/)
43
- - [貯蔵庫](https://n3s.nadesi.com/)
44
-
45
- ## 5.Windowsバイナリ版のアップロード
46
-
47
- Windows用のリポジトリ生成のためにファイルをnadesiko3win32へコピーする。ただし、事前準備として、 `git clone` でnadesiko3win32のリポジトリを取得しておく必要がある。
48
-
49
- ```shell
50
- npm run build:win32
51
- bash ./win32.bash
52
- ```
53
-
54
- nadesiko3win32のフォルダに移動。
55
-
56
- ```shell
57
- cd ../nadesiko3win32
58
- ```
59
-
60
- なお、Windowsで実行してモジュールの最新版を取得。
61
-
62
- ```shell
63
- nodejs\npm install --production
64
- nodejs\npm audit fix
65
- ```
66
-
67
- 次に、7zipでモジュールを固める。
68
-
69
- ```shell
70
- bin\7z -mx=9 a node_modules.7z node_modules
71
- ```
72
-
73
- 最後にGitへアップする。
74
-
75
- ```shell
76
- git commit -a
77
- git push
78
- ```
79
-
1
+ # なでしこv3のリリース手順
2
+
3
+ なでしこv3の最新版を、Webにアップするまでの備忘録です。いつも、手順飛ばしてしまうので、忘れないようにメモ。特に、npm publishの部分とか。
4
+
5
+ ## 1.GitHubのリリース機能を使う
6
+
7
+ ただし、リリース前(コミット前)には必ずビルドとテストを実行して、テストが成功するか確認する。
8
+
9
+ ```shell
10
+ npm run build
11
+ npm test
12
+ npm run test:all
13
+ ```
14
+
15
+ ## 2.ファイルのビルドについて
16
+
17
+ リリース用にwebpackでパックしたソースを生成する(/releaseに生成物が作られる)。
18
+
19
+ ```shell
20
+ npm run build
21
+ ```
22
+
23
+ 必要に応じて対応ブラウザを更新する。(以前は`npm run build`に含めていたが、OSによって異なる値を出力するため、毎回実行する必要はないことから省略された #1211)
24
+
25
+ ```shell
26
+ npm run build:browsers
27
+ ```
28
+
29
+ ## 3.npmにpublish
30
+
31
+ package.jsonのバージョン番号を更新したことを確認する。npm publishでnpmに公開する。
32
+
33
+ ```shell
34
+ npm publish
35
+ ```
36
+
37
+ ## 4.Webにアップロード
38
+
39
+ Webの簡易エディタを最新版に更新する。
40
+
41
+ - [なでしこ3のサイト](https://nadesi.com/doc3/)
42
+ - [マニュアル](https://nadesi.com/doc3/)
43
+ - [貯蔵庫](https://n3s.nadesi.com/)
44
+
45
+ ## 5.Windowsバイナリ版のアップロード
46
+
47
+ Windows用のリポジトリ生成のためにファイルをnadesiko3win32へコピーする。ただし、事前準備として、 `git clone` でnadesiko3win32のリポジトリを取得しておく必要がある。
48
+
49
+ ```shell
50
+ npm run build:win32
51
+ bash ./win32.bash
52
+ ```
53
+
54
+ nadesiko3win32のフォルダに移動。
55
+
56
+ ```shell
57
+ cd ../nadesiko3win32
58
+ ```
59
+
60
+ なお、Windowsで実行してモジュールの最新版を取得。
61
+
62
+ ```shell
63
+ nodejs\npm install --production
64
+ nodejs\npm audit fix
65
+ ```
66
+
67
+ 次に、7zipでモジュールを固める。
68
+
69
+ ```shell
70
+ bin\7z -mx=9 a node_modules.7z node_modules
71
+ ```
72
+
73
+ 最後にGitへアップする。
74
+
75
+ ```shell
76
+ git commit -a
77
+ git push
78
+ ```
79
+