nadesiko3 3.3.45 → 3.3.49

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 (329) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -132
  3. package/batch/browsers.template.md +3 -3
  4. package/batch/build_browsers.nako3 +72 -72
  5. package/batch/build_command.nako3 +44 -44
  6. package/batch/build_nako_version.nako3 +42 -42
  7. package/batch/calc_hash.nako3 +29 -29
  8. package/batch/cmd_txt2json.nako3 +74 -74
  9. package/batch/command.txt +270 -338
  10. package/batch/command_nakopad.txt +9 -69
  11. package/batch/download-extlib.nako3 +43 -43
  12. package/batch/gen_command_nakopad.nako3 +57 -57
  13. package/batch/jsplugin2text.nako3 +285 -285
  14. package/batch/pickup_command.nako3 +110 -110
  15. package/batch/pickup_reserved_words.nako3 +11 -11
  16. package/batch/publish_version.nako3 +46 -46
  17. package/batch/show_agents.js +14 -14
  18. package/batch/turtle2js.nako3 +21 -21
  19. package/bin/cnako3 +10 -10
  20. package/core/.editorconfig +6 -0
  21. package/core/.eslintrc.cjs +33 -0
  22. package/core/.github/dependabot.yml +7 -0
  23. package/core/.github/workflows/nodejs.yml +37 -0
  24. package/core/.github/workflows/super-linter.yml +61 -0
  25. package/core/.github/workflows/textlint.yml +199 -0
  26. package/core/LICENSE +21 -0
  27. package/core/README.md +66 -0
  28. package/core/batch/build_nako_version.nako3 +42 -0
  29. package/core/command/snako.mjs +105 -0
  30. package/core/command/snako.mts +116 -0
  31. package/core/index.mjs +21 -0
  32. package/core/index.mts +21 -0
  33. package/core/package.json +47 -0
  34. package/core/sample/hello.nako3 +7 -0
  35. package/core/sample/hoge.mjs +4 -0
  36. package/core/sample/hoge.mts +6 -0
  37. package/core/src/nako3.mjs +858 -0
  38. package/core/src/nako3.mts +967 -0
  39. package/core/src/nako_colors.mjs +78 -0
  40. package/core/src/nako_colors.mts +86 -0
  41. package/core/src/nako_core_version.mjs +8 -0
  42. package/core/src/nako_core_version.mts +19 -0
  43. package/core/src/nako_csv.mjs +185 -0
  44. package/core/src/nako_csv.mts +188 -0
  45. package/core/src/nako_errors.mjs +173 -0
  46. package/core/src/nako_errors.mts +197 -0
  47. package/core/src/nako_from_dncl.mjs +255 -0
  48. package/core/src/nako_from_dncl.mts +250 -0
  49. package/core/src/nako_gen.mjs +1648 -0
  50. package/core/src/nako_gen.mts +1719 -0
  51. package/core/src/nako_gen_async.mjs +1659 -0
  52. package/core/src/nako_gen_async.mts +1732 -0
  53. package/core/src/nako_global.mjs +107 -0
  54. package/core/src/nako_global.mts +138 -0
  55. package/core/src/nako_indent.mjs +445 -0
  56. package/core/src/nako_indent.mts +492 -0
  57. package/core/src/nako_josi_list.mjs +38 -0
  58. package/core/src/nako_josi_list.mts +45 -0
  59. package/core/src/nako_lex_rules.mjs +253 -0
  60. package/core/src/nako_lex_rules.mts +260 -0
  61. package/core/src/nako_lexer.mjs +609 -0
  62. package/core/src/nako_lexer.mts +612 -0
  63. package/core/src/nako_logger.mjs +199 -0
  64. package/core/src/nako_logger.mts +232 -0
  65. package/core/src/nako_parser3.mjs +2439 -0
  66. package/core/src/nako_parser3.mts +2195 -0
  67. package/core/src/nako_parser_base.mjs +370 -0
  68. package/core/src/nako_parser_base.mts +370 -0
  69. package/core/src/nako_parser_const.mjs +37 -0
  70. package/core/src/nako_parser_const.mts +37 -0
  71. package/core/src/nako_prepare.mjs +304 -0
  72. package/core/src/nako_prepare.mts +315 -0
  73. package/core/src/nako_reserved_words.mjs +38 -0
  74. package/core/src/nako_reserved_words.mts +38 -0
  75. package/core/src/nako_source_mapping.mjs +207 -0
  76. package/core/src/nako_source_mapping.mts +262 -0
  77. package/core/src/nako_test.mjs +37 -0
  78. package/core/src/nako_types.mjs +25 -0
  79. package/core/src/nako_types.mts +151 -0
  80. package/core/src/plugin_csv.mjs +49 -0
  81. package/core/src/plugin_csv.mts +50 -0
  82. package/core/src/plugin_math.mjs +328 -0
  83. package/core/src/plugin_math.mts +326 -0
  84. package/core/src/plugin_promise.mjs +91 -0
  85. package/core/src/plugin_promise.mts +91 -0
  86. package/core/src/plugin_system.mjs +2832 -0
  87. package/core/src/plugin_system.mts +2690 -0
  88. package/core/src/plugin_test.mjs +34 -0
  89. package/core/src/plugin_test.mts +34 -0
  90. package/core/test/array_test.mjs +34 -0
  91. package/core/test/basic_test.mjs +344 -0
  92. package/core/test/calc_test.mjs +140 -0
  93. package/core/test/core_module_test.mjs +23 -0
  94. package/core/test/debug_test.mjs +16 -0
  95. package/core/test/dncl_test.mjs +94 -0
  96. package/core/test/error_message_test.mjs +210 -0
  97. package/core/test/error_test.mjs +16 -0
  98. package/core/test/flow_test.mjs +373 -0
  99. package/core/test/func_call.mjs +160 -0
  100. package/core/test/func_test.mjs +149 -0
  101. package/core/test/indent_test.mjs +364 -0
  102. package/core/test/lex_test.mjs +168 -0
  103. package/core/test/literal_test.mjs +73 -0
  104. package/core/test/nako_lexer_test.mjs +35 -0
  105. package/core/test/nako_logger_test.mjs +76 -0
  106. package/core/test/nako_logger_test.mts +78 -0
  107. package/core/test/plugin_csv_test.mjs +38 -0
  108. package/core/test/plugin_promise_test.mjs +18 -0
  109. package/core/test/plugin_system_test.mjs +630 -0
  110. package/core/test/prepare_test.mjs +96 -0
  111. package/core/test/re_test.mjs +22 -0
  112. package/core/test/side_effects_test.mjs +92 -0
  113. package/core/test/variable_scope_test.mjs +149 -0
  114. package/core/tsconfig.json +101 -0
  115. package/demo/ace_editor.html +89 -89
  116. package/demo/ace_editor_tabs.html +161 -161
  117. package/demo/basic.html +71 -71
  118. package/demo/browsers.html +9 -10
  119. package/demo/css/basic.css +3 -3
  120. package/demo/css/common.css +157 -157
  121. package/demo/css/editor.css +8 -8
  122. package/demo/css/flow.css +3 -3
  123. package/demo/css/index.css +3 -3
  124. package/demo/flow.html +98 -98
  125. package/demo/graph.html +53 -53
  126. package/demo/image/nakopad-icon256.png +0 -0
  127. package/demo/index.html +133 -133
  128. package/demo/js/common.js +17 -17
  129. package/demo/js/turtle3d_test.js +44 -44
  130. package/demo/js/turtle_test.js +45 -45
  131. package/demo/nako3/calc.nako3 +4 -4
  132. package/demo/runscript.html +47 -47
  133. package/demo/runscript2.html +33 -33
  134. package/demo/runscript3.html +35 -35
  135. package/demo/runscript4.html +33 -33
  136. package/demo/turtle.html +58 -58
  137. package/demo/turtle2.html +141 -141
  138. package/demo/turtle3.html +279 -279
  139. package/demo/turtle3d.html +58 -58
  140. package/demo/turtle3d2.html +107 -107
  141. package/demo/version.html +24 -24
  142. package/doc/SETUP.md +157 -157
  143. package/doc/about.md +17 -17
  144. package/doc/browsers.md +26 -26
  145. package/doc/docgen.md +21 -21
  146. package/doc/editor.md +44 -44
  147. package/doc/files.md +39 -39
  148. package/doc/plugins.md +234 -234
  149. package/doc/release.md +79 -79
  150. package/doc/textlint.md +43 -43
  151. package/doc/win32.md +57 -57
  152. package/package.json +195 -192
  153. package/release/_hash.txt +28 -28
  154. package/release/_script-tags.txt +14 -14
  155. package/release/command.json +1 -1
  156. package/release/command.json.js +1 -1
  157. package/release/command_cnako3.json +1 -1
  158. package/release/command_list.json +1 -1
  159. package/release/editor.js +1 -1
  160. package/release/nako_gen_async.js +1 -1
  161. package/release/plugin_csv.js +1 -1
  162. package/release/stats.json +1 -1
  163. package/release/version.js +1 -1
  164. package/release/wnako3.js +1 -1
  165. package/release/wnako3webworker.js +1 -1
  166. package/src/browsers.txt +11 -12
  167. package/src/browsers_agents.json +2 -2
  168. package/src/browsers_agents.mjs +1 -1
  169. package/src/cnako3.mjs +17 -10
  170. package/src/cnako3.mts +18 -12
  171. package/src/cnako3mod.mjs +707 -687
  172. package/src/cnako3mod.mts +712 -696
  173. package/src/commander_ja.mjs +164 -164
  174. package/src/commander_ja.mts +161 -161
  175. package/src/enako3.mjs +68 -69
  176. package/src/era.mjs +22 -22
  177. package/src/image_turtle-elephant.mjs +2 -5
  178. package/src/image_turtle-panda.mjs +2 -5
  179. package/src/image_turtle64.mjs +2 -5
  180. package/src/index.mjs +9 -9
  181. package/src/index.mts +10 -11
  182. package/src/nako3editorfix.sfd +106 -106
  183. package/src/nako_version.mjs +8 -8
  184. package/src/nako_version.mts +2 -2
  185. package/src/plugin_browser.mjs +213 -212
  186. package/src/plugin_browser.mts +206 -205
  187. package/src/plugin_browser_ajax.mjs +399 -399
  188. package/src/plugin_browser_audio.mjs +109 -109
  189. package/src/plugin_browser_canvas.mjs +449 -449
  190. package/src/plugin_browser_chart.mjs +294 -294
  191. package/src/plugin_browser_color.mjs +49 -49
  192. package/src/plugin_browser_crypto.mjs +26 -26
  193. package/src/plugin_browser_dialog.mjs +53 -53
  194. package/src/plugin_browser_dom_basic.mjs +336 -336
  195. package/src/plugin_browser_dom_event.mjs +193 -193
  196. package/src/plugin_browser_dom_parts.mjs +396 -396
  197. package/src/plugin_browser_geolocation.mjs +51 -51
  198. package/src/plugin_browser_hotkey.mjs +25 -25
  199. package/src/plugin_browser_html.mjs +59 -59
  200. package/src/plugin_browser_in_worker.mjs +45 -45
  201. package/src/plugin_browser_location.mjs +21 -21
  202. package/src/plugin_browser_speech.mjs +111 -111
  203. package/src/plugin_browser_storage.mjs +121 -121
  204. package/src/plugin_browser_system.mjs +31 -31
  205. package/src/plugin_browser_websocket.mjs +73 -73
  206. package/src/plugin_caniuse.mjs +29 -29
  207. package/src/plugin_datetime.mjs +394 -394
  208. package/src/plugin_httpserver.mjs +277 -0
  209. package/src/plugin_httpserver.mts +286 -0
  210. package/src/plugin_kansuji.mjs +224 -224
  211. package/src/plugin_keigo.mjs +55 -55
  212. package/src/plugin_markup.mjs +32 -32
  213. package/src/plugin_node.mjs +1047 -1047
  214. package/src/plugin_node.mts +980 -980
  215. package/src/plugin_turtle.mjs +647 -647
  216. package/src/plugin_webworker.mjs +334 -334
  217. package/src/plugin_weykturtle3d.mjs +1214 -1214
  218. package/src/plugin_worker.mjs +95 -95
  219. package/src/repl.nako3 +63 -63
  220. package/src/wnako3.mjs +12 -12
  221. package/src/wnako3.mts +11 -11
  222. package/src/wnako3_editor.css +215 -215
  223. package/src/wnako3_editor.mjs +1542 -1542
  224. package/src/wnako3_editor.mts +1657 -1656
  225. package/src/wnako3mod.mjs +213 -213
  226. package/src/wnako3mod.mts +214 -214
  227. package/src/wnako3webworker.mjs +69 -68
  228. package/test/ace_editor/karma.config.js +94 -94
  229. package/test/ace_editor/test/.babelrc.json +3 -3
  230. package/test/ace_editor/test/ace_editor_test.js +178 -178
  231. package/test/ace_editor/test/html/custom_context.html +139 -139
  232. package/test/async/async_basic_test.mjs +122 -122
  233. package/test/browser/karma.config.js +221 -221
  234. package/test/browser/test/.babelrc.json +3 -3
  235. package/test/browser/test/compare_util.js +50 -50
  236. package/test/browser/test/html/div_basic.html +2 -2
  237. package/test/browser/test/html/event_dom_form.html +4 -4
  238. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  239. package/test/browser/test/import_plugin_checker.js +24 -24
  240. package/test/browser/test/plugin_browser_test.js +51 -51
  241. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  242. package/test/browser/test/plugin_browser_test_color.js +18 -18
  243. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  244. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  245. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  246. package/test/browser/test/plugin_browser_test_system.js +9 -9
  247. package/test/browser/test/plugin_turtle_test.js +817 -817
  248. package/test/browser/test/plugin_webworker_test.js +86 -86
  249. package/test/browser/test/require_test.js +68 -68
  250. package/test/bundled/karma.config.base.js +117 -117
  251. package/test/bundled/karma.config.js +86 -86
  252. package/test/bundled/test/.babelrc.json +3 -3
  253. package/test/bundled/test/bundled_test.js +69 -69
  254. package/test/bundled/test/html/custom_context.html +65 -65
  255. package/test/bundled/test/html/custom_debug.html +66 -66
  256. package/test/bundled/test4b.cmd +52 -52
  257. package/test/bundled/test_base/.babelrc.json +3 -3
  258. package/test/bundled/test_base/_checktool_test.js +25 -25
  259. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  260. package/test/bundled/test_base/basic_async_test.js +18 -18
  261. package/test/bundled/test_base/basic_test.js +153 -153
  262. package/test/bundled/test_base/calc_test.js +132 -132
  263. package/test/bundled/test_base/css/browsers_box.css +114 -114
  264. package/test/bundled/test_base/html/custom_context.html +69 -69
  265. package/test/bundled/test_base/html/custom_debug.html +71 -71
  266. package/test/bundled/test_base/js/browsers_box.js +72 -72
  267. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  268. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  269. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  270. package/test/bundled/test_base/plugin_system_test.js +410 -410
  271. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  272. package/test/bundled/test_base/test_utils.js +191 -191
  273. package/test/common/plugin_browser_test.mjs +22 -24
  274. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  275. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  276. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  277. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  278. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  279. package/test/common/plugin_markup_test.mjs +23 -23
  280. package/test/jsconfig.json +19 -19
  281. package/test/karma.config.js +91 -91
  282. package/test/node/async_test.mjs +96 -82
  283. package/test/node/commander_ja_test.mjs +89 -89
  284. package/test/node/error_message_test.mjs +243 -253
  285. package/test/node/kai_test.nako3 +6 -6
  286. package/test/node/node_test.mjs +60 -60
  287. package/test/node/plugin_broken.js.txt +3 -3
  288. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  289. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  290. package/test/node/plugin_markup_test.mjs +47 -46
  291. package/test/node/plugin_math_test.mjs +45 -44
  292. package/test/node/plugin_node_test.mjs +98 -97
  293. package/test/node/plugin_test.mjs +44 -43
  294. package/test/node/relative_import_test_1.nako3 +1 -1
  295. package/test/node/relative_import_test_2.nako3 +2 -2
  296. package/test/node/require_nako3_test.mjs +67 -66
  297. package/test/node/requiretest.nako3 +4 -4
  298. package/test/node/requiretest_indirect.nako3 +1 -1
  299. package/test/node/requiretest_name.nako3 +5 -5
  300. package/test/node/runtime_error.nako3 +2 -2
  301. package/test/node/scope1.nako3 +10 -10
  302. package/test/node/scope2.nako3 +12 -12
  303. package/test/node/side_effects_test.mjs +39 -119
  304. package/test/node/sjis.txt +5 -5
  305. package/test/node/syntax_error.nako3 +1 -1
  306. package/test/node/wnako3_editor_test.mjs +384 -384
  307. package/tools/README.md +12 -7
  308. package/tools/check_new_version.nako3 +25 -25
  309. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  310. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  311. package/tools/nako3edit/html/edit.html +170 -170
  312. package/tools/nako3edit/html/edit_plugin.js +6 -6
  313. package/tools/nako3edit/html/files.html +125 -125
  314. package/tools/nako3edit/html/nako3edit.css +65 -65
  315. package/tools/nako3edit/index.mjs +248 -244
  316. package/tools/nako3server/index.html +10 -0
  317. package/tools/nako3server/index.mjs +116 -116
  318. package/tools/nako3server/index.nako3 +34 -0
  319. package/release/nako_gen_async.js.LICENSE.txt +0 -35
  320. package/release/plugin_caniuse.js.LICENSE.txt +0 -11
  321. package/release/plugin_csv.js.LICENSE.txt +0 -15
  322. package/release/plugin_datetime.js.LICENSE.txt +0 -15
  323. package/release/plugin_kansuji.js.LICENSE.txt +0 -3
  324. package/release/plugin_markup.js.LICENSE.txt +0 -11
  325. package/release/plugin_turtle.js.LICENSE.txt +0 -15
  326. package/release/plugin_webworker.js.LICENSE.txt +0 -3
  327. package/release/plugin_weykturtle3d.js.LICENSE.txt +0 -3
  328. package/release/wnako3webworker.js.LICENSE.txt +0 -131
  329. package/tools/nako3edit/a.sqlite3 +0 -0
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
+