nadesiko3 3.2.27

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +107 -0
  3. package/bin/cnako3 +10 -0
  4. package/bin/cnako3.bat +11 -0
  5. package/bin/nako3server.bat +6 -0
  6. package/demo/ace_editor.html +90 -0
  7. package/demo/ace_editor_tabs.html +162 -0
  8. package/demo/basic.html +71 -0
  9. package/demo/browsers.html +128 -0
  10. package/demo/css/basic.css +3 -0
  11. package/demo/css/common.css +157 -0
  12. package/demo/css/editor.css +8 -0
  13. package/demo/css/flow.css +3 -0
  14. package/demo/css/index.css +3 -0
  15. package/demo/extlib/ace@1.4.12/ace.js +17 -0
  16. package/demo/extlib/ace@1.4.12/ext-code_lens.min.js +1 -0
  17. package/demo/extlib/ace@1.4.12/ext-language_tools.min.js +1 -0
  18. package/demo/extlib/ace@1.4.12/ext-options.min.js +1 -0
  19. package/demo/extlib/ace@1.4.12/ext-settings_menu.js +8 -0
  20. package/demo/extlib/ace@1.4.12/keybinding-vscode.js +8 -0
  21. package/demo/extlib/ace@1.4.12/theme-monokai.js +8 -0
  22. package/demo/extlib/ace@1.4.12/theme-xcode.js +8 -0
  23. package/demo/extlib/chart.js@3.2.1/chart.min.js +13 -0
  24. package/demo/extlib/pure-min.css +11 -0
  25. package/demo/flow.html +97 -0
  26. package/demo/graph.html +53 -0
  27. package/demo/image/nako.png +0 -0
  28. package/demo/image/nakopad-icon256.png +0 -0
  29. package/demo/image/turtle.fla +0 -0
  30. package/demo/image/turtle.png +0 -0
  31. package/demo/index.html +134 -0
  32. package/demo/js/common.js +17 -0
  33. package/demo/js/turtle3d_test.js +44 -0
  34. package/demo/js/turtle_test.js +44 -0
  35. package/demo/runscript.html +47 -0
  36. package/demo/runscript2.html +33 -0
  37. package/demo/turtle.html +58 -0
  38. package/demo/turtle2.html +141 -0
  39. package/demo/turtle3.html +278 -0
  40. package/demo/turtle3d.html +58 -0
  41. package/demo/turtle3d2.html +107 -0
  42. package/demo/version.html +24 -0
  43. package/doc/SETUP.md +172 -0
  44. package/doc/about.md +34 -0
  45. package/doc/browsers.md +60 -0
  46. package/doc/docgen.md +21 -0
  47. package/doc/editor.md +44 -0
  48. package/doc/files.md +37 -0
  49. package/doc/plugins.md +195 -0
  50. package/doc/release.md +78 -0
  51. package/doc/win32.md +57 -0
  52. package/package.json +196 -0
  53. package/release/_hash.txt +65 -0
  54. package/release/_script-tags.txt +13 -0
  55. package/release/command.json +1 -0
  56. package/release/command.json.js +1 -0
  57. package/release/command_cnako3.json +1 -0
  58. package/release/command_list.json +1 -0
  59. package/release/editor.js +2 -0
  60. package/release/editor.js.LICENSE.txt +32 -0
  61. package/release/josi.json +48 -0
  62. package/release/nako_gen_async.js +1 -0
  63. package/release/nako_gen_async.js.LICENSE.txt +595 -0
  64. package/release/plugin_caniuse.js +1 -0
  65. package/release/plugin_caniuse.js.LICENSE.txt +411 -0
  66. package/release/plugin_csv.js +1 -0
  67. package/release/plugin_csv.js.LICENSE.txt +367 -0
  68. package/release/plugin_datetime.js +1 -0
  69. package/release/plugin_datetime.js.LICENSE.txt +471 -0
  70. package/release/plugin_kansuji.js +1 -0
  71. package/release/plugin_kansuji.js.LICENSE.txt +491 -0
  72. package/release/plugin_markup.js +1 -0
  73. package/release/plugin_markup.js.LICENSE.txt +363 -0
  74. package/release/plugin_turtle.js +1 -0
  75. package/release/plugin_turtle.js.LICENSE.txt +435 -0
  76. package/release/plugin_webworker.js +1 -0
  77. package/release/plugin_webworker.js.LICENSE.txt +491 -0
  78. package/release/version.js +2 -0
  79. package/release/version.js.LICENSE.txt +32 -0
  80. package/release/wnako3.js +2 -0
  81. package/release/wnako3.js.LICENSE.txt +1 -0
  82. package/release/wnako3webworker.js +1 -0
  83. package/release/wnako3webworker.js.LICENSE.txt +847 -0
  84. package/release/yoyakugo.json +30 -0
  85. package/src/browsers.md +60 -0
  86. package/src/cnako3.js +466 -0
  87. package/src/commander_ja.js +154 -0
  88. package/src/enako3.js +69 -0
  89. package/src/era.json +22 -0
  90. package/src/index.js +5 -0
  91. package/src/nako3.js +836 -0
  92. package/src/nako3_assert.js +37 -0
  93. package/src/nako3editorfix.sfd +106 -0
  94. package/src/nako3editorfix.woff +0 -0
  95. package/src/nako3server.js +51 -0
  96. package/src/nako_colors.js +86 -0
  97. package/src/nako_errors.js +176 -0
  98. package/src/nako_gen.js +1459 -0
  99. package/src/nako_gen_async.js +1622 -0
  100. package/src/nako_global.js +113 -0
  101. package/src/nako_indent.js +480 -0
  102. package/src/nako_josi_list.js +46 -0
  103. package/src/nako_lex_rules.js +259 -0
  104. package/src/nako_lexer.js +576 -0
  105. package/src/nako_logger.js +138 -0
  106. package/src/nako_parser3.js +1768 -0
  107. package/src/nako_parser_base.js +265 -0
  108. package/src/nako_parser_const.js +37 -0
  109. package/src/nako_prepare.js +293 -0
  110. package/src/nako_reserved_words.js +35 -0
  111. package/src/nako_source_mapping.js +251 -0
  112. package/src/nako_test.js +37 -0
  113. package/src/nako_version.js +8 -0
  114. package/src/plugin_browser.js +191 -0
  115. package/src/plugin_browser_ajax.js +352 -0
  116. package/src/plugin_browser_audio.js +109 -0
  117. package/src/plugin_browser_canvas.js +462 -0
  118. package/src/plugin_browser_chart.js +296 -0
  119. package/src/plugin_browser_color.js +49 -0
  120. package/src/plugin_browser_crypto.js +26 -0
  121. package/src/plugin_browser_dialog.js +53 -0
  122. package/src/plugin_browser_dom_basic.js +322 -0
  123. package/src/plugin_browser_dom_event.js +193 -0
  124. package/src/plugin_browser_dom_parts.js +163 -0
  125. package/src/plugin_browser_geolocation.js +51 -0
  126. package/src/plugin_browser_hotkey.js +25 -0
  127. package/src/plugin_browser_html.js +59 -0
  128. package/src/plugin_browser_in_worker.js +44 -0
  129. package/src/plugin_browser_location.js +21 -0
  130. package/src/plugin_browser_speech.js +111 -0
  131. package/src/plugin_browser_storage.js +121 -0
  132. package/src/plugin_browser_system.js +12 -0
  133. package/src/plugin_browser_websocket.js +73 -0
  134. package/src/plugin_caniuse.js +24 -0
  135. package/src/plugin_csv.js +57 -0
  136. package/src/plugin_datetime.js +414 -0
  137. package/src/plugin_express.js +212 -0
  138. package/src/plugin_kansuji.js +224 -0
  139. package/src/plugin_keigo.js +55 -0
  140. package/src/plugin_markup.js +32 -0
  141. package/src/plugin_math.js +319 -0
  142. package/src/plugin_node.js +1018 -0
  143. package/src/plugin_promise.js +94 -0
  144. package/src/plugin_system.js +2109 -0
  145. package/src/plugin_test.js +38 -0
  146. package/src/plugin_turtle.js +646 -0
  147. package/src/plugin_webworker.js +334 -0
  148. package/src/plugin_weykturtle3d.js +1216 -0
  149. package/src/plugin_worker.js +92 -0
  150. package/src/repl.nako3 +63 -0
  151. package/src/turtle-elephant.png +0 -0
  152. package/src/turtle-panda.png +0 -0
  153. package/src/turtle64.png +0 -0
  154. package/src/wnako3.js +162 -0
  155. package/src/wnako3_editor.css +215 -0
  156. package/src/wnako3_editor.js +1645 -0
  157. package/src/wnako3_editor_marker_red.png +0 -0
  158. package/src/wnako3_editor_marker_red.xcf +0 -0
  159. package/src/wnako3_editor_marker_yellow.png +0 -0
  160. package/src/wnako3_editor_marker_yellow.xcf +0 -0
  161. package/src/wnako3webworker.js +70 -0
  162. package/test/ace_editor/karma.config.js +94 -0
  163. package/test/ace_editor/test/.babelrc.json +3 -0
  164. package/test/ace_editor/test/ace_editor_test.js +178 -0
  165. package/test/ace_editor/test/html/custom_context.html +140 -0
  166. package/test/async/async_basic_test.js +124 -0
  167. package/test/browser/karma.config.js +212 -0
  168. package/test/browser/test/.babelrc.json +3 -0
  169. package/test/browser/test/compare_util.js +50 -0
  170. package/test/browser/test/html/canvas_basic.html +1 -0
  171. package/test/browser/test/html/div_basic.html +2 -0
  172. package/test/browser/test/html/event_dom_form.html +4 -0
  173. package/test/browser/test/html/event_dom_scrolldiv.html +5 -0
  174. package/test/browser/test/image/canvas_test1.png +0 -0
  175. package/test/browser/test/image/canvas_test2.png +0 -0
  176. package/test/browser/test/image/canvas_test3.png +0 -0
  177. package/test/browser/test/image/canvas_test4.png +0 -0
  178. package/test/browser/test/image/canvas_test7.png +0 -0
  179. package/test/browser/test/image/canvas_test8.png +0 -0
  180. package/test/browser/test/image/canvas_test_blank.png +0 -0
  181. package/test/browser/test/image/elephant_kana.png +0 -0
  182. package/test/browser/test/image/panda_kana.png +0 -0
  183. package/test/browser/test/image/turtle_kana.png +0 -0
  184. package/test/browser/test/import_plugin_checker.js +24 -0
  185. package/test/browser/test/plugin_browser_test.js +52 -0
  186. package/test/browser/test/plugin_browser_test_ajax.js +123 -0
  187. package/test/browser/test/plugin_browser_test_color.js +18 -0
  188. package/test/browser/test/plugin_browser_test_dialog.js +72 -0
  189. package/test/browser/test/plugin_browser_test_dom_event.js +598 -0
  190. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -0
  191. package/test/browser/test/plugin_browser_test_system.js +9 -0
  192. package/test/browser/test/plugin_turtle_test.js +817 -0
  193. package/test/browser/test/plugin_webworker_test.js +87 -0
  194. package/test/browser/test/require_test.js +71 -0
  195. package/test/bundled/karma.config.base.js +117 -0
  196. package/test/bundled/karma.config.js +86 -0
  197. package/test/bundled/test/.babelrc.json +3 -0
  198. package/test/bundled/test/bundled_test.js +69 -0
  199. package/test/bundled/test/html/custom_context.html +65 -0
  200. package/test/bundled/test/html/custom_debug.html +66 -0
  201. package/test/bundled/test4b.cmd +52 -0
  202. package/test/bundled/test_base/.babelrc.json +3 -0
  203. package/test/bundled/test_base/_checktool_test.js +25 -0
  204. package/test/bundled/test_base/basic_ajax_test.js +56 -0
  205. package/test/bundled/test_base/basic_async_test.js +18 -0
  206. package/test/bundled/test_base/basic_test.js +153 -0
  207. package/test/bundled/test_base/calc_test.js +132 -0
  208. package/test/bundled/test_base/css/browsers_box.css +114 -0
  209. package/test/bundled/test_base/html/custom_context.html +69 -0
  210. package/test/bundled/test_base/html/custom_debug.html +71 -0
  211. package/test/bundled/test_base/js/browsers_box.js +72 -0
  212. package/test/bundled/test_base/plugin_csv_test.js +37 -0
  213. package/test/bundled/test_base/plugin_datetime_test.js +115 -0
  214. package/test/bundled/test_base/plugin_kansuji_test.js +49 -0
  215. package/test/bundled/test_base/plugin_system_test.js +410 -0
  216. package/test/bundled/test_base/plugin_webworker_test.js +53 -0
  217. package/test/bundled/test_base/resources/ok.txt +1 -0
  218. package/test/bundled/test_base/test_utils.js +191 -0
  219. package/test/common/array_test.js +40 -0
  220. package/test/common/basic_test.js +317 -0
  221. package/test/common/calc_test.js +139 -0
  222. package/test/common/debug_test.js +16 -0
  223. package/test/common/error_test.js +16 -0
  224. package/test/common/flow_test.js +360 -0
  225. package/test/common/func_call.js +136 -0
  226. package/test/common/func_test.js +149 -0
  227. package/test/common/indent_test.js +362 -0
  228. package/test/common/lex_test.js +146 -0
  229. package/test/common/literal_test.js +72 -0
  230. package/test/common/nako_logger_test.js +26 -0
  231. package/test/common/plugin_browser_test.js +24 -0
  232. package/test/common/plugin_browser_ut_audio_test.js +88 -0
  233. package/test/common/plugin_browser_ut_color_test.js +21 -0
  234. package/test/common/plugin_browser_ut_dialog_test.js +100 -0
  235. package/test/common/plugin_browser_ut_html_test.js +13 -0
  236. package/test/common/plugin_browser_ut_system_test.js +10 -0
  237. package/test/common/plugin_csv_test.js +39 -0
  238. package/test/common/plugin_datetime_test.js +120 -0
  239. package/test/common/plugin_kansuji_test.js +59 -0
  240. package/test/common/plugin_promise_test.js +18 -0
  241. package/test/common/plugin_system_test.js +451 -0
  242. package/test/common/prepare_test.js +93 -0
  243. package/test/common/re_test.js +20 -0
  244. package/test/common/variable_scope_test.js +105 -0
  245. package/test/jsconfig.json +19 -0
  246. package/test/karma.config.js +91 -0
  247. package/test/node/add_test.nako3 +1 -0
  248. package/test/node/async_test.js +80 -0
  249. package/test/node/commander_ja_test.js +82 -0
  250. package/test/node/error_message_test.js +244 -0
  251. package/test/node/kai_test.nako3 +6 -0
  252. package/test/node/node_test.js +43 -0
  253. package/test/node/plugin_broken.js.txt +3 -0
  254. package/test/node/plugin_browser_ut_ajax_test.js +355 -0
  255. package/test/node/plugin_browser_ut_location_test.js +32 -0
  256. package/test/node/plugin_markup_test.js +44 -0
  257. package/test/node/plugin_math_test.js +42 -0
  258. package/test/node/plugin_node_test.js +93 -0
  259. package/test/node/plugin_test.js +16 -0
  260. package/test/node/relative_import_test_1.nako3 +1 -0
  261. package/test/node/relative_import_test_2.nako3 +2 -0
  262. package/test/node/require_nako3_test.js +59 -0
  263. package/test/node/requiretest.nako3 +4 -0
  264. package/test/node/requiretest_indirect.nako3 +1 -0
  265. package/test/node/requiretest_name.nako3 +5 -0
  266. package/test/node/runtime_error.nako3 +2 -0
  267. package/test/node/side_effects_test.js +106 -0
  268. package/test/node/sjis.txt +5 -0
  269. package/test/node/syntax_error.nako3 +2 -0
  270. package/test/node/wnako3_editor_test.js +360 -0
  271. package/tools/README.md +7 -0
  272. package/tools/nako3edit/html/edit.html +83 -0
  273. package/tools/nako3edit/html/edit_plugin.js +6 -0
  274. package/tools/nako3edit/html/files.html +49 -0
  275. package/tools/nako3edit/html/nako3edit.css +66 -0
  276. package/tools/nako3edit/index.nako3 +145 -0
  277. package/tools/nako3edit/run.js +12 -0
  278. package/tools/nako3server/html/edit.html +104 -0
  279. package/tools/nako3server/html/edit_plugin.js +6 -0
  280. package/tools/nako3server/html/files.html +53 -0
  281. package/tools/nako3server/html/nako3edit.css +66 -0
  282. package/tools/nako3server/index.nako3 +129 -0
  283. package/tools/nako3server/run.js +12 -0
package/doc/SETUP.md ADDED
@@ -0,0 +1,172 @@
1
+ # なでしこ3 - 開発環境のセットアップ方法
2
+
3
+ [![js-standard-style](https://cdn.rawgit.com/feross/standard/master/badge.svg)](https://standardjs.com/)
4
+
5
+ なでしこ3自身を開発する手順をまとめたもの。なでしこ3を使うだけならば、以下の手順は不要。
6
+
7
+ [Node.js](https://nodejs.org/ja/)をインストールしておく。
8
+
9
+ コマンドラインから以下を実行して、必要なライブラリをシステムにインストール。
10
+
11
+ このとき、npm installするときに、なでしこのモジュールで、Native Add-onを使うものがあるため、ビルド環境を整える必要がある。
12
+
13
+ ## 【Windows】
14
+
15
+ コンパイル環境が必要になるので、ビルドツールをインストールする。PowerShellから以下のコマンドを実行すると、自動的に必要なツールが入る。(Windowsのユーザー名に日本語が使われているとうまくコンパイルできないという情報もあるので注意)
16
+
17
+ また、Gitなどのツールをインストールするために、Chocolatey( <https://chocolatey.org/> )をインストールしておく。
18
+
19
+ ```bach
20
+ # Chocolatey でGitをインストール
21
+ cinst git
22
+
23
+ # npm のビルドツール (build tools+python2)
24
+ npm install -g node-gyp
25
+ npm install -g windows-build-tools
26
+ ```
27
+
28
+ ## 【macOS】
29
+
30
+ Homebrew( <https://brew.sh/index_ja> ) (そしてXcode)をインストールしておく。
31
+
32
+ ## 【共通】
33
+
34
+ コマンドラインから以下を実行して、nadesiko3のリポジトリをcloneし、必要なライブラリをインストール。ただし、Node.jsのバージョンv10以上が必要。もし、Ubuntuで古いのNode.jsをインストールした場合など、nモジュールを利用して最新安定版のNode.jsを利用してください。
35
+
36
+ ```bash
37
+ git clone https://github.com/kujirahand/nadesiko3
38
+ cd nadesiko3
39
+ npm install --no-optional
40
+ ```
41
+
42
+ コマンドラインから以下のコマンドを実行することで、ソースコードをビルドできる。
43
+ srcディレクトリの中のコードを編集すると、releaseディレクトリに結果が出力される。
44
+
45
+ ```bash
46
+ # Node.js用のソースコードをWeb用のJSに変換
47
+ npm run build
48
+ ```
49
+
50
+ ビルド後に以下のコマンドを実行することで、 バンドルファイル内の各パッケージがどのぐらいの容量を占めているかを可視化できる。
51
+
52
+ ```bash
53
+ # バンドルファイル内の各パッケージがどのぐらいの容量を占めているかを可視化
54
+ $ npm run analyze
55
+ ```
56
+
57
+ 開発時、以下のコマンドを実行すれば、監視ビルドさせることができる。
58
+
59
+ ```bash
60
+ npm run watch
61
+ ```
62
+
63
+ また、コマンドラインから以下のコマンドを実行することで、ソースコードをテストできる。
64
+
65
+ ```bash
66
+ npm run test
67
+ ```
68
+
69
+ ## 開発時の約束
70
+
71
+ ### コーディング規約について
72
+
73
+ コーディング規約は、[JavaScript Standard Style](https://standardjs.com/)に準拠するものとする。
74
+
75
+ ATOMエディタを使っている場合は、以下のプラグインを導入すると非常に便利。
76
+
77
+ ```bash
78
+ apm install linter
79
+ apm install linter-js-standard
80
+ ```
81
+
82
+ また、EditorConfigに対応しています。
83
+ (詳しくは[どんなエディタでもEditorConfigを使ってコードの統一性を高める - Qiita](https://qiita.com/naru0504/items/82f09881abaf3f4dc171)を参照)
84
+ これに対応したエディタを使用することで、開発者側が意識することなくインデントやタブに関する規則に対応することが可能。
85
+
86
+ ## コマンドラインからなでしこを使う方法
87
+
88
+ なでしこ3ではコマンドラインからなでしこを実行できるcnako3(Windowsは、cnako3.bat)というスクリプトを用意。今後、なでしこの各種バッチファイルはなでしこ自身で記述される。
89
+
90
+ ちなみに、`npm install -g nadeisko3` を実行すると、npmコマンドでcnako3コマンドが利用できるようになるが、その場合は安定版のなでしこがインストールされることになる。
91
+
92
+ 環境変数に本ファイルのパスをNAKO_HOMEとして登録し、パスをNAKO_HOME/srcに通す。以下、macOS/Linuxでの `.bashrc` の記述例。(ユーザー名がkujiraの場合)
93
+
94
+ ```bash
95
+ HOME=/Users/kujira
96
+ export NAKO_HOME=$HOME/nadesiko3
97
+ export PATH=$PATH:$NAKO_HOME/src
98
+ ```
99
+
100
+ ### コマンドライン版なでしこの利用方法
101
+
102
+ 例えば、なでしこのコマンド一覧ファイルを生成するバッチを実行する方法。
103
+
104
+ ```bash
105
+ cnako3 $NAKO_HOME/batch/pickup_command.nako
106
+ ```
107
+
108
+ テストを実行する場合には、 `-t` (`--test`) オプションを付けてcnako3を実行します。
109
+
110
+ ### デモプログラムを動かす方法
111
+
112
+ demoディレクトリに、なでしこをブラウザから使うデモがある。
113
+
114
+ 大抵の機能はブラウザにHTMLファイルをドラッグ&ドロップすれば動くが、一部の機能はローカルサーバーを動かさないと利用できない。
115
+
116
+ なでしこでは、簡易サーバーを用意。コマンドラインで以下のように入力すると、[http://localhost:3000/](http://localhost:3000/)でサーバーが起動。
117
+
118
+ ```bash
119
+ npm start
120
+ ```
121
+
122
+ ### 対応機器/ブラウザの生成
123
+
124
+ コマンドラインから以下を実行して、以下のファイルを生成。
125
+
126
+ * [doc/browsers.md](browsers.md): 対応機器/ブラウザ (マークダウン形式)
127
+ * [src/browsers.md](../src/browsers.md): 対応機器/ブラウザ (マークダウン形式, cnako3用)
128
+ * [demo/browsers.html](../demo/browsers.html): 対応機器/ブラウザ (HTML形式, なでしこ3エディタ用)
129
+
130
+ ```bash
131
+ npm run build:browsers
132
+ ```
133
+
134
+ ### Node.jsのパッケージの更新方法
135
+
136
+ コマンドラインから以下を実行して、Node.jsのパッケージを更新。
137
+
138
+ ```bash
139
+ npm-check-updates -u
140
+ npm update --no-optional
141
+ ```
142
+
143
+ ### Electron
144
+
145
+ モジュールをインストールする。
146
+
147
+ ```bash
148
+ npm install electron
149
+ npm install electron-packager
150
+ ```
151
+
152
+ 以下のコマンドを実行することで、Electronによるなでしこが起動。
153
+
154
+ ```bash
155
+ npm run electron
156
+ ```
157
+
158
+ ビルドは以下のコマンドで行う。
159
+
160
+ ```bash
161
+ npm run build:electron
162
+ ```
163
+
164
+ ## Gitからリポジトリを取得して利用する場合
165
+
166
+ 最低限のライブラリで良い場合には、``npm install --production``を実行するだけ。
167
+
168
+ ```bash
169
+ git clone https://github.com/kujirahand/nadesiko3.git
170
+ cd nadesiko3
171
+ npm install --production
172
+ ```
package/doc/about.md ADDED
@@ -0,0 +1,34 @@
1
+ # なでしこ3とは
2
+
3
+ 日本語のプログラミング言語「なでしこ」(第三版)は、現在、鋭意開発中です。 HTML/JavaScriptをベースとしているので、PC/スマホ/タブレットなど、さまざまな環境で動作させることができます。
4
+
5
+ -[URL][なでしこ3/マニュアル](https://nadesi.com/doc3/)
6
+
7
+ ## 開発目標
8
+
9
+ - (日本語の母語話者を対象とした) 母国語に特化したプログラミング言語
10
+ - 教育用途に特化
11
+ - ブラウザで手軽に試せること
12
+
13
+ ## どこまでできているのか
14
+
15
+ - 簡単なWebエディタがあり、最小限の文字入力でプログラミングできる
16
+ - 条件分岐、繰り返しなど、基本的な制御構文が実装されている
17
+
18
+ ## 対応機器/ブラウザ
19
+
20
+ - HTML5対応ブラウザ (Internet Explorer / Safari / Chrome / Firefox等)
21
+ - スマホブラウザ (iOS Safari / Android標準ブラウザ)
22
+ - PC (Windows/macOS/Linux - Node.jsが動く環境)
23
+
24
+ ## 今後の開発物の予定
25
+
26
+ - Web上で本格的なプログラムができるようにする
27
+ - 動物やキャラクターを動かしたり、お絵かきしたりできるようにする
28
+ - ラズパイ上で動かし、電子工作が楽しめるようにする
29
+ - ライブラリやAPIなどモジュールを追加する
30
+ - 教育・プレゼン用途
31
+ - グラフの作成
32
+ - 音を出す
33
+ - PC向けバッチ処理ツールとして
34
+ - なでしこv1で得たノウハウを、macOS/Linuxでも活用できるようにする
@@ -0,0 +1,60 @@
1
+ # 対応機器/ブラウザ
2
+
3
+ * ブラウザ
4
+ * モバイル
5
+ * Chrome for Android
6
+ * 80
7
+ * Firefox for Android
8
+ * 68
9
+ * QQ Browser
10
+ * 1.2
11
+ * UC Browser for Android
12
+ * 12.12
13
+ * Android Browser
14
+ * 80
15
+ * Baidu Browser
16
+ * 7.12
17
+ * iOS Safari
18
+ * 13.3
19
+ * 13.2
20
+ * 13.0-13.1
21
+ * 12.2-12.4
22
+ * 12.0-12.1
23
+ * 11.3-11.4
24
+ * 10.3
25
+ * 9.3
26
+ * KaiOS Browser
27
+ * 2.5
28
+ * Opera Mini
29
+ * all
30
+ * Opera Mobile
31
+ * 46
32
+ * Samsung Internet
33
+ * 11.1
34
+ * 10.1
35
+ * PC
36
+ * Chrome
37
+ * 80
38
+ * 79
39
+ * 49
40
+ * Edge
41
+ * 80
42
+ * 79
43
+ * 18
44
+ * Firefox
45
+ * 74
46
+ * 73
47
+ * 72
48
+ * 68
49
+ * Internet Explorer
50
+ * 11
51
+ * Opera
52
+ * 66
53
+ * 65
54
+ * Safari
55
+ * 13
56
+ * 12.1
57
+ * PC (Windows/macOS/Linux)
58
+ * Node
59
+ * 12.16.0
60
+ * 10.19.0
package/doc/docgen.md ADDED
@@ -0,0 +1,21 @@
1
+ # なでしこ3のマニュアルについて
2
+
3
+ なでしこ3の[マニュアル](https://nadesi.com/v3/doc/)はkonawiki3形式になっており、[こちら](https://github.com/kujirahand/nadesiko3doc)で保守されている。
4
+
5
+ ## 命令一覧ページ
6
+
7
+ なお、[命令一覧ページ](https://nadesi.com/v3/doc/index.php?%E5%91%BD%E4%BB%A4%E4%B8%80%E8%A6%A7%2F%E6%A9%9F%E8%83%BD%E9%A0%86)の目次と概要は、マニュアル生成スクリプトにより生成されている。リポジトリ内のソースコードのマニュアルの自動生成は以下のコマンドで生成できる。
8
+
9
+ ```sh
10
+ npm build:command
11
+ ```
12
+
13
+ ## 独自のプラグインの目次を生成するには
14
+
15
+ 独自のプラグインを作った場合、マニュアル生成機能を利用して、独自のマニュアルを生成できる。
16
+
17
+ ```sh
18
+ cnako3 batch/jsplugin2text.nako3 /plugin/path/nadesiko3-xxx
19
+ ```
20
+
21
+ 生成したテキストは、konawiki3形式となっている。
package/doc/editor.md ADDED
@@ -0,0 +1,44 @@
1
+ # エディタの仕様
2
+
3
+ ## 通常のエディタ
4
+
5
+ HTMLに以下のコードを挿入することでエディタを実装できる。
6
+
7
+ ```html
8
+ ...
9
+ <head>
10
+ <link rel="stylesheet" type="text/css" href="basic.css">
11
+ <link rel="stylesheet" href="../src/wnako3_editor.css">
12
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ace.js"
13
+ integrity="sha512-GZ1RIgZaSc8rnco/8CXfRdCpDxRCphenIiZ2ztLy3XQfCbQUSCuk8IudvNHxkRA3oUg6q0qejgN/qqyG1duv5Q=="
14
+ crossorigin="anonymous"></script>
15
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ext-language_tools.min.js"
16
+ integrity="sha512-8qx1DL/2Wsrrij2TWX5UzvEaYOFVndR7BogdpOyF4ocMfnfkw28qt8ULkXD9Tef0bLvh3TpnSAljDC7uyniEuQ=="
17
+ crossorigin="anonymous"></script>
18
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ext-options.min.js"
19
+ integrity="sha512-oHR+WVzBiVZ6njlMVlDDLUIOLRDfUUfRQ55PfkZvgjwuvGqL4ohCTxaahJIxTmtya4jgyk0zmOxDMuLzbfqQDA=="
20
+ crossorigin="anonymous"></script>
21
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.4.12/ext-code_lens.min.js"
22
+ integrity="sha512-gsDyyKTnOmSWRDzUbpYcPjzVsEyFGSWeWefzVKvbMULPR2ElIlKKsOtU3ycfybN9kncZXKLFSsUiG3cgJUbc/g=="
23
+ crossorigin="anonymous"></script>
24
+ </head>
25
+ <body>
26
+ ...
27
+ <div class="editor-component">
28
+ <script type="application/json">
29
+ {
30
+ "title": "{タイトル (エディタのtitle属性)}",
31
+ "code": "{エディタに入力するコードの初期値}"
32
+ }
33
+ </script>
34
+ </div>
35
+ ...
36
+ <script src="../release/wnako3.js"></script>
37
+ <script src="../release/editor.js"></script>
38
+ ...
39
+ <script src="https://cdnjs.cloudflare.com/ajax/libs/mocha/8.3.0/mocha.min.js"
40
+ integrity="sha512-LA/TpBXau/JNubKzHQhdi5vGkRLyQjs1vpuk2W1nc8WNgf/pCqBplD8MzlzeKJQTZPvkEZi0HqBDfRC2EyLMXw=="
41
+ crossorigin="anonymous"></script>
42
+ </body>
43
+ ...
44
+ ```
package/doc/files.md ADDED
@@ -0,0 +1,37 @@
1
+ # なでしこを構成するファイルたち
2
+
3
+ ## src/nako3.js
4
+
5
+ なでしこコンパイラ本体。なでしこのソースコードをJSに変換する。変換処理は、以下のように行われる。
6
+
7
+ - なでしこソース
8
+ - 構文木(中間表現)
9
+ - JavaScriptソース
10
+
11
+ ## src/nako_prepare.js
12
+
13
+ なでしこのソースコードの前置処理を行うもの。主に全角半角の変換処理を行う。
14
+
15
+ ## src/nako_parser3.js
16
+
17
+ なでしこ構文から構文木を生成するもの。
18
+
19
+ ## src/nako_gen.js
20
+
21
+ 構文木を元に、JavaScriptのコードを生成するもの。
22
+
23
+ ## src/plugin_xxx.js
24
+
25
+ なでしこの命令を定義したプラグイン。
26
+
27
+ ## src/cnako3.js
28
+
29
+ バッチファイル実行用。コマンドラインのインタフェースを実装するモノ。
30
+
31
+ ## src/wnako3.js
32
+
33
+ ブラウザ用。
34
+
35
+ ## src/enako3.js
36
+
37
+ Electronによるアプリ本体。
package/doc/plugins.md ADDED
@@ -0,0 +1,195 @@
1
+ # プラグインのAPIの仕様
2
+
3
+ なでしこ3には、以下の二種類のプラグインがある。
4
+
5
+ - (1) なでしこ3自身で開発したなでしこプラグイン
6
+ - (2) JavaScriptで開発したJSプラグイン
7
+
8
+ なお、(1)のプラグインはなでしこ自身で関数を定義するだけである。
9
+ 以下では、(2)のJavaScriptで開発したプラグインについて解説する。
10
+
11
+ ## Webプラグインを利用する手順
12
+
13
+ HTMLファイル内でなでしこ本体(wnako3.js)よりも後ろで`<script src="(JSプラグイン).js">`と記述して読み込む。
14
+
15
+ なお「wnako3.js」を読み込むと、ブラウザの「navigator」オブジェクトにプロパティ「nako3」(navigator.nako3)にコンパイラのインスタンスが作成される。
16
+
17
+ ## プラグイン側の実装方法
18
+
19
+ プラグインの実体は、Objectである。
20
+
21
+ ```js
22
+ {
23
+ '定数名': { 定義 },
24
+ '命令名': { 定義 },
25
+ ...
26
+ }
27
+ ```
28
+
29
+ ### 定義:関数
30
+
31
+ プラグインの実体は、Object。実際の関数定義は、fnプロパティに行う。実際の関数の引数に加えて、システムを表すsysを用意する。
32
+
33
+ ```js
34
+ {
35
+ '関数名': { // @関数の説明 // @ヨミガナ
36
+ type: 'func', // 関数であれば func にする
37
+ josi: [['を', 'から'], ['まで']], // 助詞を配列で宣言する (可変長引数として扱いたい助詞は末尾で宣言する)
38
+ isVariableJosi: false, // 末尾の助詞を可変長引数として扱う場合 true にする
39
+ uses: [], // この関数から別の関数を呼ぶ場合に記述する // (TODO: #282)
40
+ fn: function (aFrom, aTo, sys) { ... }, // 関数の実態
41
+ return_none: false // 戻り値を返すかどうか
42
+ },
43
+ ...
44
+ }
45
+ ```
46
+
47
+ なお、コメントを記述した場合、`npm run build:command`を実行すると自動的にコマンドマニュアルが生成される。
48
+
49
+ ### 定義:定数
50
+
51
+ typeプロパティに「const」を指定して、valueプロパティに値を指定する。
52
+
53
+ ```js
54
+ { type: 'const', value: 100 } // @ヨミガナ
55
+ ```
56
+
57
+ ### 定義:変数
58
+
59
+ typeプロパティに「var」を指定して、valueプロパティに値を指定する。
60
+
61
+ ```js
62
+ { type: 'var', value: 100 } // @ヨミガナ
63
+ ```
64
+
65
+ ### プラグインの自動登録
66
+
67
+ プラグインの末尾に以下のコードを仕込むとscriptタグで読み込んだときシステムに登録できる。
68
+
69
+ ```js
70
+ if (typeof (navigator) === 'object') {
71
+ navigator.nako3.addPluginObject(プラグイン名, オブジェクト)
72
+ }
73
+ ```
74
+
75
+ ## 初期化メソッド
76
+
77
+ 以下のようなエントリを用意しておくと、プラグインを取り込み、初回実行するときに初期化メソッドが実行される。
78
+ (ただし、プラグイン取り込み時に、 `!{プラグイン名}:初期化` というメソッド名にリネームされる)
79
+
80
+ ```js
81
+ {
82
+ '初期化': {
83
+ type: 'func',
84
+ josi: [],
85
+ fn: function (sys) { ... }
86
+ }
87
+ ...
88
+ }
89
+ ```
90
+
91
+ ## クリアメソッド
92
+
93
+ 以下のようなエントリを用意しておくと、プログラム終了時(あるいはクリア時)にプラグインごとプログラムが実行される。
94
+
95
+ ```js
96
+ {
97
+ '!クリア': {
98
+ type: 'func',
99
+ josi: [],
100
+ fn: function (sys) { ... }
101
+ }
102
+ ...
103
+ }
104
+ ```
105
+
106
+ ## プラグイン側からシステム変数へのアクセス
107
+
108
+ 関数を定義したとき、プラグイン関数側からシステムにアクセスしなければならない場合がある。
109
+ 以下は引数のない関数を定義した例だが、必ず必要とされる引数の末尾に実行したシステムのthisを保持するオブジェクトが渡される。
110
+ このオブジェクトを参照することで、システム変数にアクセスできる。
111
+
112
+ ```js
113
+ {
114
+ type: 'func',
115
+ josi: [],
116
+ fn: function (sys) {
117
+ console.log(sys)
118
+ }
119
+ }
120
+ ```
121
+
122
+ 例えば、なでしこで管理されている変数「A」にアクセスしたいときは、以下のようなコードを記述する。なお、ローカル変数を参照するときpure: trueの関数は正しく動作しない。
123
+
124
+ ```js
125
+ {
126
+ type: 'func',
127
+ josi: [],
128
+ fn: function (sys) {
129
+ const a = sys.__findVar('A')
130
+ console.log(a)
131
+ }
132
+ }
133
+ ```
134
+
135
+ そのほかに、なでしこ側で定義した関数「HOGE」を実行したいときは、以下のように記述する。
136
+
137
+ ```js
138
+ {
139
+ type: 'func',
140
+ josi: [],
141
+ fn: function (sys) {
142
+ const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
143
+ console.log(result)
144
+ }
145
+ }
146
+ ```
147
+
148
+ また、関数の引数に与える、sysはなでしこ自身を表す。
149
+ もし、代入的関数呼び出し(setter)であれば、sys.isSetterにtrueの値が入る。
150
+
151
+ なお、プラグインでは、以下のメソッドが使えるようになる。(すべてsrc/plugin_system.jsで定義されている。システム関数の初期化時に、これらの関数が追加される)
152
+
153
+ - sys.__findVar(name)
154
+ - sys.__exec(name, params)
155
+
156
+ 関数内で、システム・グローバル変数にアクセスするには、``sys.__v0['変数名']``でアクセスできる。
157
+
158
+ なお、最後の助詞を可変長引数として扱う場合、システム変数は末尾の引数の末尾の要素として挿入される。
159
+
160
+ ```js
161
+ {
162
+ type: 'func',
163
+ josi: [['は'], ['で']],
164
+ isVariableJosi: true,
165
+ fn: function (a, ...b) {
166
+ const sys = b.pop()
167
+ const result = sys.__exec('HOGE', [arg1, arg2, arg3, sys])
168
+ console.log(result)
169
+ }
170
+ }
171
+ ```
172
+
173
+ ## 非同期モードに対応した関数を作る場合
174
+
175
+ v3.2.22で導入された非同期モードに対応した関数を作るには、以下のように記述する。
176
+
177
+ ```js
178
+ fn: function (n, sys) {
179
+ if (sys.__genMode == '非同期モード') {
180
+ sys.async = true // 非同期モードを使うことを明示
181
+ setTimeout(() => {
182
+ sys.nextAsync(sys) // ここで非同期処理が完了した時にこの関数を呼ぶ
183
+ }, n * 1000)
184
+ } else {
185
+ // 非同期モードに対応していない時の処理
186
+ throw new Error('「!非同期モード」で使ってください')
187
+ }
188
+ }
189
+ ```
190
+
191
+ - (参考)[秒待機](https://github.com/kujirahand/nadesiko3/blob/f3d51519aff77df04b0d9b1e29ed16914a3f0e74/src/plugin_system.js#L1808)
192
+
193
+ ## マニュアルを自動生成する
194
+
195
+ - [doc/docgen.md](docgen.md) にマニュアル自動生成のスクリプトが紹介されている。
package/doc/release.md ADDED
@@ -0,0 +1,78 @@
1
+ # なでしこv3のリリース手順
2
+
3
+ なでしこv3の最新版を、Webにアップするまでの備忘録です。いつも、手順飛ばしてしまうので、忘れないようにメモ。特に、npm publishの部分とか。
4
+
5
+ ## 1.GitHubのリリース機能を使う
6
+
7
+ ただし、リリース前(コミット前)には必ずテストを実行して、テストが成功するか確認する。
8
+
9
+ ```shell
10
+ npm test
11
+ ```
12
+
13
+ なお、よくエラーが出る部分で「ナデシコバージョン」で問題があれば、package.jsonのversion値とsrc/plugin_system.jsの変数番号が合っているかを確認する。
14
+
15
+ ## 2.必要なファイルをビルドする
16
+
17
+ まず、リリース用にwebpackでパックしたソースを生成する(/releaseに生成物が作られる)。
18
+
19
+ ```shell
20
+ npm run build
21
+ ```
22
+
23
+ 対応ブラウザを更新する。
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(nadesi.com/doc3)の簡易エディタを最新版に更新する。
40
+
41
+ ## 5.Webサイトで最新版を告知
42
+
43
+ リリース内容を告知する。
44
+
45
+ ## 6.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
+ ```