nadesiko3 3.3.49 → 3.3.52

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 (343) 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 +162 -83
  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 +113 -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 +870 -858
  32. package/core/src/nako3.mts +983 -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 +109 -107
  48. package/core/src/nako_global.mts +141 -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 +2441 -2439
  60. package/core/src/nako_parser3.mts +2197 -2195
  61. package/core/src/nako_parser_base.mjs +371 -370
  62. package/core/src/nako_parser_base.mts +372 -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 +13 -25
  73. package/core/src/nako_types.mts +144 -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 +2 -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/wnako3.js.LICENSE.txt +203 -1
  146. package/release/wnako3webworker.js +2 -1
  147. package/release/wnako3webworker.js.LICENSE.txt +131 -0
  148. package/src/.DS_Store +0 -0
  149. package/src/browsers.txt +12 -11
  150. package/src/browsers_agents.json +2 -2
  151. package/src/browsers_agents.mjs +1 -1
  152. package/src/cnako3.mjs +17 -17
  153. package/src/cnako3.mts +18 -18
  154. package/src/cnako3mod.mjs +682 -707
  155. package/src/cnako3mod.mts +688 -712
  156. package/src/commander_ja.mjs +164 -164
  157. package/src/commander_ja.mts +161 -161
  158. package/src/enako3.mjs +68 -68
  159. package/src/era.mjs +22 -22
  160. package/src/image_turtle-elephant.mjs +2 -2
  161. package/src/image_turtle-panda.mjs +2 -2
  162. package/src/image_turtle64.mjs +2 -2
  163. package/src/index.mjs +9 -9
  164. package/src/index.mts +10 -10
  165. package/src/nako3editorfix.sfd +106 -106
  166. package/src/nako_version.mjs +8 -8
  167. package/src/nako_version.mts +2 -2
  168. package/src/plugin_browser.mjs +213 -213
  169. package/src/plugin_browser.mts +206 -206
  170. package/src/plugin_browser_ajax.mjs +399 -399
  171. package/src/plugin_browser_audio.mjs +109 -109
  172. package/src/plugin_browser_canvas.mjs +449 -449
  173. package/src/plugin_browser_chart.mjs +294 -294
  174. package/src/plugin_browser_color.mjs +49 -49
  175. package/src/plugin_browser_crypto.mjs +26 -26
  176. package/src/plugin_browser_dialog.mjs +53 -53
  177. package/src/plugin_browser_dom_basic.mjs +336 -336
  178. package/src/plugin_browser_dom_event.mjs +193 -193
  179. package/src/plugin_browser_dom_parts.mjs +396 -396
  180. package/src/plugin_browser_geolocation.mjs +51 -51
  181. package/src/plugin_browser_hotkey.mjs +25 -25
  182. package/src/plugin_browser_html.mjs +59 -59
  183. package/src/plugin_browser_in_worker.mjs +45 -45
  184. package/src/plugin_browser_location.mjs +21 -21
  185. package/src/plugin_browser_speech.mjs +111 -111
  186. package/src/plugin_browser_storage.mjs +121 -121
  187. package/src/plugin_browser_system.mjs +31 -31
  188. package/src/plugin_browser_websocket.mjs +73 -73
  189. package/src/plugin_caniuse.mjs +29 -29
  190. package/src/plugin_datetime.mjs +394 -394
  191. package/src/plugin_httpserver.mjs +277 -277
  192. package/src/plugin_httpserver.mts +286 -286
  193. package/src/plugin_kansuji.mjs +224 -224
  194. package/src/plugin_keigo.mjs +55 -55
  195. package/src/plugin_markup.mjs +32 -32
  196. package/src/plugin_node.mjs +1047 -1047
  197. package/src/plugin_node.mts +980 -980
  198. package/src/plugin_turtle.mjs +647 -647
  199. package/src/plugin_webworker.mjs +334 -334
  200. package/src/plugin_weykturtle3d.mjs +1214 -1214
  201. package/src/plugin_worker.mjs +95 -95
  202. package/src/repl.nako3 +63 -63
  203. package/src/wnako3.mjs +12 -12
  204. package/src/wnako3.mts +11 -11
  205. package/src/wnako3_editor.css +215 -215
  206. package/src/wnako3_editor.mjs +1542 -1542
  207. package/src/wnako3_editor.mts +1658 -1657
  208. package/src/wnako3mod.mjs +213 -213
  209. package/src/wnako3mod.mts +214 -214
  210. package/src/wnako3webworker.mjs +69 -69
  211. package/test/.DS_Store +0 -0
  212. package/test/ace_editor/karma.config.js +94 -94
  213. package/test/ace_editor/test/.babelrc.json +3 -3
  214. package/test/ace_editor/test/ace_editor_test.js +178 -178
  215. package/test/ace_editor/test/html/custom_context.html +139 -139
  216. package/test/async/async_basic_test.mjs +122 -122
  217. package/test/browser/.DS_Store +0 -0
  218. package/test/browser/karma.config.js +221 -221
  219. package/test/browser/test/.babelrc.json +3 -3
  220. package/test/browser/test/compare_util.js +50 -50
  221. package/test/browser/test/html/div_basic.html +2 -2
  222. package/test/browser/test/html/event_dom_form.html +4 -4
  223. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  224. package/test/browser/test/import_plugin_checker.js +24 -24
  225. package/test/browser/test/plugin_browser_test.js +51 -51
  226. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  227. package/test/browser/test/plugin_browser_test_color.js +18 -18
  228. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  229. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  230. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  231. package/test/browser/test/plugin_browser_test_system.js +9 -9
  232. package/test/browser/test/plugin_turtle_test.js +817 -817
  233. package/test/browser/test/plugin_webworker_test.js +86 -86
  234. package/test/browser/test/require_test.js +68 -68
  235. package/test/bundled/.DS_Store +0 -0
  236. package/test/bundled/karma.config.base.js +117 -117
  237. package/test/bundled/karma.config.js +86 -86
  238. package/test/bundled/test/.babelrc.json +3 -3
  239. package/test/bundled/test/bundled_test.js +69 -69
  240. package/test/bundled/test/html/custom_context.html +65 -65
  241. package/test/bundled/test/html/custom_debug.html +66 -66
  242. package/test/bundled/test4b.cmd +52 -52
  243. package/test/bundled/test_base/.DS_Store +0 -0
  244. package/test/bundled/test_base/.babelrc.json +3 -3
  245. package/test/bundled/test_base/_checktool_test.js +25 -25
  246. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  247. package/test/bundled/test_base/basic_async_test.js +18 -18
  248. package/test/bundled/test_base/basic_test.js +153 -153
  249. package/test/bundled/test_base/calc_test.js +132 -132
  250. package/test/bundled/test_base/css/browsers_box.css +114 -114
  251. package/test/bundled/test_base/html/custom_context.html +69 -69
  252. package/test/bundled/test_base/html/custom_debug.html +71 -71
  253. package/test/bundled/test_base/js/browsers_box.js +72 -72
  254. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  255. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  256. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  257. package/test/bundled/test_base/plugin_system_test.js +410 -410
  258. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  259. package/test/bundled/test_base/test_utils.js +191 -191
  260. package/test/common/.DS_Store +0 -0
  261. package/test/common/plugin_browser_test.mjs +22 -22
  262. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  263. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  264. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  265. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  266. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  267. package/test/common/plugin_markup_test.mjs +23 -23
  268. package/test/jsconfig.json +19 -19
  269. package/test/karma.config.js +91 -91
  270. package/test/node/.DS_Store +0 -0
  271. package/test/node/async_test.mjs +96 -96
  272. package/test/node/commander_ja_test.mjs +89 -89
  273. package/test/node/error_message_test.mjs +243 -243
  274. package/test/node/kai_test.nako3 +6 -6
  275. package/test/node/node_test.mjs +60 -60
  276. package/test/node/plugin_broken.js.txt +3 -3
  277. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  278. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  279. package/test/node/plugin_markup_test.mjs +47 -47
  280. package/test/node/plugin_math_test.mjs +45 -45
  281. package/test/node/plugin_node_test.mjs +98 -98
  282. package/test/node/plugin_test.mjs +44 -44
  283. package/test/node/relative_import_test_1.nako3 +1 -1
  284. package/test/node/relative_import_test_2.nako3 +2 -2
  285. package/test/node/require_nako3_test.mjs +67 -67
  286. package/test/node/requiretest.nako3 +4 -4
  287. package/test/node/requiretest_indirect.nako3 +1 -1
  288. package/test/node/requiretest_name.nako3 +5 -5
  289. package/test/node/runtime_error.nako3 +2 -2
  290. package/test/node/scope1.nako3 +10 -10
  291. package/test/node/scope2.nako3 +12 -12
  292. package/test/node/side_effects_test.mjs +39 -39
  293. package/test/node/sjis.txt +5 -5
  294. package/test/node/syntax_error.nako3 +1 -1
  295. package/test/node/wnako3_editor_test.mjs +384 -384
  296. package/tools/.DS_Store +0 -0
  297. package/tools/README.md +12 -12
  298. package/tools/check_new_version.nako3 +25 -25
  299. package/tools/nako3edit/.DS_Store +0 -0
  300. package/tools/nako3edit/a.sqlite3 +0 -0
  301. package/tools/nako3edit/html/.DS_Store +0 -0
  302. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  303. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  304. package/tools/nako3edit/html/edit.html +170 -170
  305. package/tools/nako3edit/html/edit_plugin.js +6 -6
  306. package/tools/nako3edit/html/files.html +125 -125
  307. package/tools/nako3edit/html/nako3edit.css +65 -65
  308. package/tools/nako3edit/index.mjs +248 -248
  309. package/tools/nako3server/index.html +10 -10
  310. package/tools/nako3server/index.mjs +116 -116
  311. package/tools/nako3server/index.nako3 +34 -34
  312. package/core/.editorconfig +0 -6
  313. package/core/.eslintrc.cjs +0 -33
  314. package/core/.github/dependabot.yml +0 -7
  315. package/core/.github/workflows/nodejs.yml +0 -37
  316. package/core/.github/workflows/super-linter.yml +0 -61
  317. package/core/.github/workflows/textlint.yml +0 -199
  318. package/core/index.mts +0 -21
  319. package/core/test/array_test.mjs +0 -34
  320. package/core/test/basic_test.mjs +0 -344
  321. package/core/test/calc_test.mjs +0 -140
  322. package/core/test/core_module_test.mjs +0 -23
  323. package/core/test/debug_test.mjs +0 -16
  324. package/core/test/dncl_test.mjs +0 -94
  325. package/core/test/error_message_test.mjs +0 -210
  326. package/core/test/error_test.mjs +0 -16
  327. package/core/test/flow_test.mjs +0 -373
  328. package/core/test/func_call.mjs +0 -160
  329. package/core/test/func_test.mjs +0 -149
  330. package/core/test/indent_test.mjs +0 -364
  331. package/core/test/lex_test.mjs +0 -168
  332. package/core/test/literal_test.mjs +0 -73
  333. package/core/test/nako_lexer_test.mjs +0 -35
  334. package/core/test/nako_logger_test.mjs +0 -76
  335. package/core/test/nako_logger_test.mts +0 -78
  336. package/core/test/plugin_csv_test.mjs +0 -38
  337. package/core/test/plugin_promise_test.mjs +0 -18
  338. package/core/test/plugin_system_test.mjs +0 -630
  339. package/core/test/prepare_test.mjs +0 -96
  340. package/core/test/re_test.mjs +0 -22
  341. package/core/test/side_effects_test.mjs +0 -92
  342. package/core/test/variable_scope_test.mjs +0 -149
  343. 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
+