nadesiko3 3.3.49 → 3.3.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -143
  3. package/batch/.DS_Store +0 -0
  4. package/batch/browsers.template.md +3 -3
  5. package/batch/build_browsers.nako3 +72 -72
  6. package/batch/build_command.nako3 +44 -44
  7. package/batch/build_nako_version.nako3 +42 -42
  8. package/batch/calc_hash.nako3 +29 -29
  9. package/batch/cmd_txt2json.nako3 +74 -74
  10. package/batch/command.txt +79 -0
  11. package/batch/command_nakopad.txt +69 -0
  12. package/batch/download-extlib.nako3 +43 -43
  13. package/batch/gen_command_nakopad.nako3 +57 -57
  14. package/batch/jsplugin2text.nako3 +285 -285
  15. package/batch/pickup_command.nako3 +110 -110
  16. package/batch/pickup_reserved_words.nako3 +11 -11
  17. package/batch/publish_version.nako3 +46 -46
  18. package/batch/show_agents.js +14 -14
  19. package/batch/turtle2js.nako3 +21 -21
  20. package/bin/cnako3 +10 -10
  21. package/core/LICENSE +21 -21
  22. package/core/README.md +66 -66
  23. package/core/batch/build_nako_version.nako3 +42 -42
  24. package/core/command/snako.mjs +105 -105
  25. package/core/command/snako.mts +116 -116
  26. package/core/index.mjs +21 -21
  27. package/core/package.json +47 -47
  28. package/core/sample/hello.nako3 +7 -7
  29. package/core/sample/hoge.mjs +4 -4
  30. package/core/sample/hoge.mts +6 -6
  31. package/core/src/nako3.mjs +864 -858
  32. package/core/src/nako3.mts +976 -967
  33. package/core/src/nako_colors.mjs +78 -78
  34. package/core/src/nako_colors.mts +86 -86
  35. package/core/src/nako_core_version.mjs +8 -8
  36. package/core/src/nako_core_version.mts +19 -19
  37. package/core/src/nako_csv.mjs +185 -185
  38. package/core/src/nako_csv.mts +188 -188
  39. package/core/src/nako_errors.mjs +173 -173
  40. package/core/src/nako_errors.mts +197 -197
  41. package/core/src/nako_from_dncl.mjs +255 -255
  42. package/core/src/nako_from_dncl.mts +250 -250
  43. package/core/src/nako_gen.mjs +1647 -1648
  44. package/core/src/nako_gen.mts +1718 -1719
  45. package/core/src/nako_gen_async.mjs +1659 -1659
  46. package/core/src/nako_gen_async.mts +1732 -1732
  47. package/core/src/nako_global.mjs +107 -107
  48. package/core/src/nako_global.mts +138 -138
  49. package/core/src/nako_indent.mjs +445 -445
  50. package/core/src/nako_indent.mts +492 -492
  51. package/core/src/nako_josi_list.mjs +38 -38
  52. package/core/src/nako_josi_list.mts +45 -45
  53. package/core/src/nako_lex_rules.mjs +253 -253
  54. package/core/src/nako_lex_rules.mts +260 -260
  55. package/core/src/nako_lexer.mjs +609 -609
  56. package/core/src/nako_lexer.mts +612 -612
  57. package/core/src/nako_logger.mjs +199 -199
  58. package/core/src/nako_logger.mts +232 -232
  59. package/core/src/nako_parser3.mjs +2439 -2439
  60. package/core/src/nako_parser3.mts +2195 -2195
  61. package/core/src/nako_parser_base.mjs +370 -370
  62. package/core/src/nako_parser_base.mts +370 -370
  63. package/core/src/nako_parser_const.mjs +37 -37
  64. package/core/src/nako_parser_const.mts +37 -37
  65. package/core/src/nako_prepare.mjs +304 -304
  66. package/core/src/nako_prepare.mts +315 -315
  67. package/core/src/nako_reserved_words.mjs +38 -38
  68. package/core/src/nako_reserved_words.mts +38 -38
  69. package/core/src/nako_source_mapping.mjs +207 -207
  70. package/core/src/nako_source_mapping.mts +262 -262
  71. package/core/src/nako_test.mjs +37 -37
  72. package/core/src/nako_types.mjs +25 -25
  73. package/core/src/nako_types.mts +151 -151
  74. package/core/src/plugin_csv.mjs +49 -49
  75. package/core/src/plugin_csv.mts +50 -50
  76. package/core/src/plugin_math.mjs +328 -328
  77. package/core/src/plugin_math.mts +326 -326
  78. package/core/src/plugin_promise.mjs +91 -91
  79. package/core/src/plugin_promise.mts +91 -91
  80. package/core/src/plugin_system.mjs +2832 -2832
  81. package/core/src/plugin_system.mts +2690 -2690
  82. package/core/src/plugin_test.mjs +34 -34
  83. package/core/src/plugin_test.mts +34 -34
  84. package/demo/.DS_Store +0 -0
  85. package/demo/ace_editor.html +89 -89
  86. package/demo/ace_editor_tabs.html +161 -161
  87. package/demo/basic.html +71 -71
  88. package/demo/browsers.html +10 -9
  89. package/demo/css/basic.css +3 -3
  90. package/demo/css/common.css +157 -157
  91. package/demo/css/editor.css +8 -8
  92. package/demo/css/flow.css +3 -3
  93. package/demo/css/index.css +3 -3
  94. package/demo/extlib/.DS_Store +0 -0
  95. package/demo/flow.html +98 -98
  96. package/demo/graph.html +53 -53
  97. package/demo/image/nakopad-icon256.png +0 -0
  98. package/demo/index.html +133 -133
  99. package/demo/js/common.js +17 -17
  100. package/demo/js/turtle3d_test.js +44 -44
  101. package/demo/js/turtle_test.js +45 -45
  102. package/demo/nako3/calc.nako3 +4 -4
  103. package/demo/runscript.html +47 -47
  104. package/demo/runscript2.html +33 -33
  105. package/demo/runscript3.html +35 -35
  106. package/demo/runscript4.html +33 -33
  107. package/demo/turtle.html +58 -58
  108. package/demo/turtle2.html +141 -141
  109. package/demo/turtle3.html +279 -279
  110. package/demo/turtle3d.html +58 -58
  111. package/demo/turtle3d2.html +107 -107
  112. package/demo/version.html +24 -24
  113. package/doc/SETUP.md +157 -157
  114. package/doc/about.md +17 -17
  115. package/doc/browsers.md +26 -26
  116. package/doc/docgen.md +21 -21
  117. package/doc/editor.md +44 -44
  118. package/doc/files.md +39 -39
  119. package/doc/plugins.md +234 -234
  120. package/doc/release.md +79 -79
  121. package/doc/textlint.md +43 -43
  122. package/doc/win32.md +57 -57
  123. package/package.json +195 -195
  124. package/release/_hash.txt +28 -28
  125. package/release/_script-tags.txt +14 -14
  126. package/release/command.json +1 -1
  127. package/release/command.json.js +1 -1
  128. package/release/command_cnako3.json +1 -1
  129. package/release/command_list.json +1 -1
  130. package/release/editor.js +1 -1
  131. package/release/nako_gen_async.js +1 -1
  132. package/release/nako_gen_async.js.LICENSE.txt +35 -0
  133. package/release/plugin_caniuse.js.LICENSE.txt +11 -0
  134. package/release/plugin_csv.js +1 -1
  135. package/release/plugin_csv.js.LICENSE.txt +15 -0
  136. package/release/plugin_datetime.js.LICENSE.txt +15 -0
  137. package/release/plugin_kansuji.js.LICENSE.txt +3 -0
  138. package/release/plugin_markup.js.LICENSE.txt +11 -0
  139. package/release/plugin_turtle.js.LICENSE.txt +15 -0
  140. package/release/plugin_webworker.js.LICENSE.txt +3 -0
  141. package/release/plugin_weykturtle3d.js.LICENSE.txt +3 -0
  142. package/release/stats.json +1 -1
  143. package/release/version.js +1 -1
  144. package/release/wnako3.js +1 -1
  145. package/release/wnako3webworker.js +1 -1
  146. package/release/wnako3webworker.js.LICENSE.txt +131 -0
  147. package/src/.DS_Store +0 -0
  148. package/src/browsers.txt +12 -11
  149. package/src/browsers_agents.json +2 -2
  150. package/src/browsers_agents.mjs +1 -1
  151. package/src/cnako3.mjs +17 -17
  152. package/src/cnako3.mts +18 -18
  153. package/src/cnako3mod.mjs +707 -707
  154. package/src/cnako3mod.mts +712 -712
  155. package/src/commander_ja.mjs +164 -164
  156. package/src/commander_ja.mts +161 -161
  157. package/src/enako3.mjs +68 -68
  158. package/src/era.mjs +22 -22
  159. package/src/image_turtle-elephant.mjs +2 -2
  160. package/src/image_turtle-panda.mjs +2 -2
  161. package/src/image_turtle64.mjs +2 -2
  162. package/src/index.mjs +9 -9
  163. package/src/index.mts +10 -10
  164. package/src/nako3editorfix.sfd +106 -106
  165. package/src/nako_version.mjs +8 -8
  166. package/src/nako_version.mts +2 -2
  167. package/src/plugin_browser.mjs +213 -213
  168. package/src/plugin_browser.mts +206 -206
  169. package/src/plugin_browser_ajax.mjs +399 -399
  170. package/src/plugin_browser_audio.mjs +109 -109
  171. package/src/plugin_browser_canvas.mjs +449 -449
  172. package/src/plugin_browser_chart.mjs +294 -294
  173. package/src/plugin_browser_color.mjs +49 -49
  174. package/src/plugin_browser_crypto.mjs +26 -26
  175. package/src/plugin_browser_dialog.mjs +53 -53
  176. package/src/plugin_browser_dom_basic.mjs +336 -336
  177. package/src/plugin_browser_dom_event.mjs +193 -193
  178. package/src/plugin_browser_dom_parts.mjs +396 -396
  179. package/src/plugin_browser_geolocation.mjs +51 -51
  180. package/src/plugin_browser_hotkey.mjs +25 -25
  181. package/src/plugin_browser_html.mjs +59 -59
  182. package/src/plugin_browser_in_worker.mjs +45 -45
  183. package/src/plugin_browser_location.mjs +21 -21
  184. package/src/plugin_browser_speech.mjs +111 -111
  185. package/src/plugin_browser_storage.mjs +121 -121
  186. package/src/plugin_browser_system.mjs +31 -31
  187. package/src/plugin_browser_websocket.mjs +73 -73
  188. package/src/plugin_caniuse.mjs +29 -29
  189. package/src/plugin_datetime.mjs +394 -394
  190. package/src/plugin_httpserver.mjs +277 -277
  191. package/src/plugin_httpserver.mts +286 -286
  192. package/src/plugin_kansuji.mjs +224 -224
  193. package/src/plugin_keigo.mjs +55 -55
  194. package/src/plugin_markup.mjs +32 -32
  195. package/src/plugin_node.mjs +1047 -1047
  196. package/src/plugin_node.mts +980 -980
  197. package/src/plugin_turtle.mjs +647 -647
  198. package/src/plugin_webworker.mjs +334 -334
  199. package/src/plugin_weykturtle3d.mjs +1214 -1214
  200. package/src/plugin_worker.mjs +95 -95
  201. package/src/repl.nako3 +63 -63
  202. package/src/wnako3.mjs +12 -12
  203. package/src/wnako3.mts +11 -11
  204. package/src/wnako3_editor.css +215 -215
  205. package/src/wnako3_editor.mjs +1542 -1542
  206. package/src/wnako3_editor.mts +1658 -1657
  207. package/src/wnako3mod.mjs +213 -213
  208. package/src/wnako3mod.mts +214 -214
  209. package/src/wnako3webworker.mjs +69 -69
  210. package/test/.DS_Store +0 -0
  211. package/test/ace_editor/karma.config.js +94 -94
  212. package/test/ace_editor/test/.babelrc.json +3 -3
  213. package/test/ace_editor/test/ace_editor_test.js +178 -178
  214. package/test/ace_editor/test/html/custom_context.html +139 -139
  215. package/test/async/async_basic_test.mjs +122 -122
  216. package/test/browser/.DS_Store +0 -0
  217. package/test/browser/karma.config.js +221 -221
  218. package/test/browser/test/.babelrc.json +3 -3
  219. package/test/browser/test/compare_util.js +50 -50
  220. package/test/browser/test/html/div_basic.html +2 -2
  221. package/test/browser/test/html/event_dom_form.html +4 -4
  222. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  223. package/test/browser/test/import_plugin_checker.js +24 -24
  224. package/test/browser/test/plugin_browser_test.js +51 -51
  225. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  226. package/test/browser/test/plugin_browser_test_color.js +18 -18
  227. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  228. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  229. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  230. package/test/browser/test/plugin_browser_test_system.js +9 -9
  231. package/test/browser/test/plugin_turtle_test.js +817 -817
  232. package/test/browser/test/plugin_webworker_test.js +86 -86
  233. package/test/browser/test/require_test.js +68 -68
  234. package/test/bundled/.DS_Store +0 -0
  235. package/test/bundled/karma.config.base.js +117 -117
  236. package/test/bundled/karma.config.js +86 -86
  237. package/test/bundled/test/.babelrc.json +3 -3
  238. package/test/bundled/test/bundled_test.js +69 -69
  239. package/test/bundled/test/html/custom_context.html +65 -65
  240. package/test/bundled/test/html/custom_debug.html +66 -66
  241. package/test/bundled/test4b.cmd +52 -52
  242. package/test/bundled/test_base/.DS_Store +0 -0
  243. package/test/bundled/test_base/.babelrc.json +3 -3
  244. package/test/bundled/test_base/_checktool_test.js +25 -25
  245. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  246. package/test/bundled/test_base/basic_async_test.js +18 -18
  247. package/test/bundled/test_base/basic_test.js +153 -153
  248. package/test/bundled/test_base/calc_test.js +132 -132
  249. package/test/bundled/test_base/css/browsers_box.css +114 -114
  250. package/test/bundled/test_base/html/custom_context.html +69 -69
  251. package/test/bundled/test_base/html/custom_debug.html +71 -71
  252. package/test/bundled/test_base/js/browsers_box.js +72 -72
  253. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  254. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  255. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  256. package/test/bundled/test_base/plugin_system_test.js +410 -410
  257. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  258. package/test/bundled/test_base/test_utils.js +191 -191
  259. package/test/common/.DS_Store +0 -0
  260. package/test/common/plugin_browser_test.mjs +22 -22
  261. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  262. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  263. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  264. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  265. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  266. package/test/common/plugin_markup_test.mjs +23 -23
  267. package/test/jsconfig.json +19 -19
  268. package/test/karma.config.js +91 -91
  269. package/test/node/.DS_Store +0 -0
  270. package/test/node/async_test.mjs +96 -96
  271. package/test/node/commander_ja_test.mjs +89 -89
  272. package/test/node/error_message_test.mjs +243 -243
  273. package/test/node/kai_test.nako3 +6 -6
  274. package/test/node/node_test.mjs +60 -60
  275. package/test/node/plugin_broken.js.txt +3 -3
  276. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  277. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  278. package/test/node/plugin_markup_test.mjs +47 -47
  279. package/test/node/plugin_math_test.mjs +45 -45
  280. package/test/node/plugin_node_test.mjs +98 -98
  281. package/test/node/plugin_test.mjs +44 -44
  282. package/test/node/relative_import_test_1.nako3 +1 -1
  283. package/test/node/relative_import_test_2.nako3 +2 -2
  284. package/test/node/require_nako3_test.mjs +67 -67
  285. package/test/node/requiretest.nako3 +4 -4
  286. package/test/node/requiretest_indirect.nako3 +1 -1
  287. package/test/node/requiretest_name.nako3 +5 -5
  288. package/test/node/runtime_error.nako3 +2 -2
  289. package/test/node/scope1.nako3 +10 -10
  290. package/test/node/scope2.nako3 +12 -12
  291. package/test/node/side_effects_test.mjs +39 -39
  292. package/test/node/sjis.txt +5 -5
  293. package/test/node/syntax_error.nako3 +1 -1
  294. package/test/node/wnako3_editor_test.mjs +384 -384
  295. package/tools/.DS_Store +0 -0
  296. package/tools/README.md +12 -12
  297. package/tools/check_new_version.nako3 +25 -25
  298. package/tools/nako3edit/.DS_Store +0 -0
  299. package/tools/nako3edit/a.sqlite3 +0 -0
  300. package/tools/nako3edit/html/.DS_Store +0 -0
  301. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  302. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  303. package/tools/nako3edit/html/edit.html +170 -170
  304. package/tools/nako3edit/html/edit_plugin.js +6 -6
  305. package/tools/nako3edit/html/files.html +125 -125
  306. package/tools/nako3edit/html/nako3edit.css +65 -65
  307. package/tools/nako3edit/index.mjs +248 -248
  308. package/tools/nako3server/index.html +10 -10
  309. package/tools/nako3server/index.mjs +116 -116
  310. package/tools/nako3server/index.nako3 +34 -34
  311. package/core/.editorconfig +0 -6
  312. package/core/.eslintrc.cjs +0 -33
  313. package/core/.github/dependabot.yml +0 -7
  314. package/core/.github/workflows/nodejs.yml +0 -37
  315. package/core/.github/workflows/super-linter.yml +0 -61
  316. package/core/.github/workflows/textlint.yml +0 -199
  317. package/core/index.mts +0 -21
  318. package/core/test/array_test.mjs +0 -34
  319. package/core/test/basic_test.mjs +0 -344
  320. package/core/test/calc_test.mjs +0 -140
  321. package/core/test/core_module_test.mjs +0 -23
  322. package/core/test/debug_test.mjs +0 -16
  323. package/core/test/dncl_test.mjs +0 -94
  324. package/core/test/error_message_test.mjs +0 -210
  325. package/core/test/error_test.mjs +0 -16
  326. package/core/test/flow_test.mjs +0 -373
  327. package/core/test/func_call.mjs +0 -160
  328. package/core/test/func_test.mjs +0 -149
  329. package/core/test/indent_test.mjs +0 -364
  330. package/core/test/lex_test.mjs +0 -168
  331. package/core/test/literal_test.mjs +0 -73
  332. package/core/test/nako_lexer_test.mjs +0 -35
  333. package/core/test/nako_logger_test.mjs +0 -76
  334. package/core/test/nako_logger_test.mts +0 -78
  335. package/core/test/plugin_csv_test.mjs +0 -38
  336. package/core/test/plugin_promise_test.mjs +0 -18
  337. package/core/test/plugin_system_test.mjs +0 -630
  338. package/core/test/prepare_test.mjs +0 -96
  339. package/core/test/re_test.mjs +0 -22
  340. package/core/test/side_effects_test.mjs +0 -92
  341. package/core/test/variable_scope_test.mjs +0 -149
  342. package/core/tsconfig.json +0 -101
@@ -1,160 +0,0 @@
1
- /* eslint-disable no-undef */
2
- import assert from 'assert'
3
- import { NakoCompiler } from '../src/nako3.mjs'
4
- import { NakoSyntaxError } from '../src/nako_errors.mjs'
5
-
6
- describe('関数呼び出しテスト', async () => {
7
- const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
8
- const nako = new NakoCompiler()
9
- nako.logger.debug('code=' + code)
10
- assert.strictEqual((await nako.runAsync(code)).log, res)
11
- }
12
- const cmd = (/** @type {string} */ code) => {
13
- const nako = new NakoCompiler()
14
- nako.logger.debug('code=' + code)
15
- nako.run(code)
16
- }
17
- // --- test ---
18
- it('関数式の呼び出し - 足す(2,3)を表示。', async () => {
19
- await cmp('足す(2,3)を表示。', '5')
20
- })
21
- it('四則演算を連文で', async () => {
22
- await cmp('1に2を足して3を掛けて3で割って2を引いて表示', '1')
23
- })
24
- it('「そう」のテスト', async () => {
25
- await cmp('3が1以上。もしそうならば「真」と表示。', '真')
26
- })
27
- it('後方で定義した関数を前方で使う1', async () => {
28
- await cmp('HOGE(3,4)を表示;●(A,B)HOGEとは;それはA+B;ここまで;', '7')
29
- await cmp('「姫」と「殿」が出会って表示;●(AとBが)出会うとは;それはA&B;ここまで;', '姫殿')
30
- })
31
- it('後方で定義した関数を前方で使う2', async () => {
32
- await cmp('Nとは変数=30;HOGE(3,4)を表示;●(A,B)HOGEとは;それはA+B+N;ここまで;', '37')
33
- })
34
- it('代入と表示', async () => {
35
- await cmp('A=今日;もし(今日=A)ならば「1」と表示', '1')
36
- })
37
- it('代入1', async () => {
38
- await cmp('A=今日の曜日番号取得;B=(今日)の曜日番号取得;もしA=Bならば「等しい」を表示。', '等しい')
39
- })
40
- it('代入2', async () => {
41
- await cmp('Aは、今日の曜日番号取得;Bは、(今日)の曜日番号取得;もしA=Bならば「等しい」を表示。', '等しい')
42
- })
43
- it('代入3', async () => {
44
- await cmp('A=(今日の曜日番号取得)+1;B=((今日)の曜日番号取得)+1;もしA=Bならば「等しい」を表示。', '等しい')
45
- })
46
- it('配列への代入', async () => {
47
- await cmp('値段は空配列。値段[0]に3000を代入。値段[0]を表示。', '3000')
48
- })
49
- it('**には**構文 - 基本', async () => {
50
- await cmp('実行には;「あ」と表示;ここまで', 'あ')
51
- })
52
- it('**には**構文 - 配列カスタムソート', async () => {
53
- await cmp('A=[5,1,3];Aを配列カスタムソートするには(a,b);それはb-a;ここまで;Aを「:」で配列結合して表示', '5:3:1')
54
- })
55
- it('階乗計算 - 再帰', async () => {
56
- await cmp('●(VをAのBで)階乗計算とは;' +
57
- 'もし、Bが0以下ならば、Vを戻す。;(V*A)をAの(B-1)で階乗計算して戻す。' +
58
- 'ここまで。;1を2の3で階乗計算して表示。', '8')
59
- })
60
- it('連続文後の代入', async () => {
61
- await cmp('「2017/09/01T00:00:99」の「T」を「 」に置換して「 」まで切り取り、対象日に代入。対象日を表示。', '2017/09/01')
62
- })
63
- it('連続文後の=代入', async () => {
64
- await cmp('対象日=「2017/09/01T00:00:99」の「T」を「 」に置換して「 」まで切り取る。対象日を表示。', '2017/09/01')
65
- })
66
- it('関数の引数に関数呼び出しがある場合', async () => {
67
- await cmp('A=「ab」;「abcd」の1から(Aの文字数)だけ文字削除。それを表示。', 'cd')
68
- })
69
- it('配列カスタムソートの基本的な使い方例', async () => {
70
- await cmp('●MYSORT(a,b)とは\n' +
71
- '(INT(a) - INT(b))で戻る。\n' +
72
- 'ここまで。\n' +
73
- 'ARY=[8,3,4];' +
74
- '「MYSORT」でARYを配列カスタムソートしてJSONエンコードして表示', '[3,4,8]')
75
- })
76
- it('引数の順番を入れ替えて呼び出す(#342)その1', async () => {
77
- await cmp('『abc』の『a』を「*」に置換。表示', '*bc')
78
- await cmp('『a』を「*」に『abc』の置換。表示', '*bc')
79
- await cmp('「*」へ『a』から『abc』の置換。表示', '*bc')
80
- await cmp('「abcdefg」の1から3だけ文字削除して表示。', 'defg')
81
- await cmp('「abcdefg」の1から3を文字削除して表示。', 'defg')
82
- await cmp('1から3を「abcdefg」の文字削除して表示。', 'defg')
83
- await cmp('3を「abcdefg」の1から文字削除して表示。', 'defg')
84
- await cmp('3だけ「abcdefg」の1から文字削除して表示。', 'defg')
85
- })
86
- it('引数の順番を入れ替えて呼び出す(#342)その2', async () => {
87
- await cmp('[8,3,4]の配列カスタムソートには(a,b)\nそれは(a - b)\nここまで。それをJSONエンコードして表示', '[3,4,8]')
88
- await cmp('[8,3,4]を配列カスタムソートには(a,b)\nそれは(a - b)\nここまで。それをJSONエンコードして表示', '[3,4,8]')
89
- await cmp('[8,3,4]の配列カスタムソートには(a,b)\nそれは(INT(a) - INT(b))\nここまで。それをJSONエンコードして表示', '[3,4,8]')
90
- })
91
- it('引数の順番を入れ替えて呼び出す(#342)その3', async () => {
92
- await cmp('ARY=[8,3,4];' +
93
- 'ARYの配列カスタムソートには(a,b)\n' +
94
- 'aと255のXORをAに代入。bと255のXORをBに代入。' +
95
- 'それは(INT(a) - INT(b))\n' +
96
- 'ここまで。\n' +
97
- 'ARYをJSONエンコードして表示', '[3,4,8]')
98
- })
99
- it('可変長引数 #729', async () => { // 経緯 #501 → #729
100
- await cmp('連続加算(1,2,3)を表示。', '6')
101
- await cmp('1と2と3を連続加算して表示。', '6')
102
- await cmp('1に2と3を連続加算して表示。', '6')
103
- })
104
- // ---
105
- it('関数呼び出し演算子に変更(1) #891', async () => {
106
- await cmp('表示←3', '3')
107
- await cmp('表示←3を', '3')
108
- await cmp('表示←INT←3.14', '3')
109
- await cmp('足す←2に3を;それを表示;', '5')
110
- await cmp('割る←10を2で;それを表示;', '5')
111
- await cmp('割る<--2で10を;それを表示', '5')
112
- })
113
- it('関数呼び出し演算子に変更(2) #891', async () => {
114
- await cmp('A=(割る<--10を2で)+2;Aを表示;', '7')
115
- await cmp('(割る←10を2で)を表示;', '5')
116
- await cmp('割る<--2で(割る←100を10で)を;それを表示', '5')
117
- await cmp('(割る←100を10で)を2で割って表示', '5')
118
- })
119
- it('関数呼び出し演算子に変更(ユーザー関数) #891', async () => {
120
- await cmp('●(Aを)AAA;それはA*2;ここまで;AAA←30;それを表示', '60')
121
- await cmp('●(AをBで)AAA;それはA/B;ここまで;AAA←30を3で;それを表示', '10')
122
- })
123
- it('エラー/関数の呼び出し演算子 #891/引数がない関数', async () => {
124
- const funcName = 'AAA'
125
- assert.throws(
126
- () => cmd(`●${funcName};それは5;ここまで;${funcName}←`),
127
- NakoSyntaxError, `引数がない関数『${funcName}』を関数呼び出し演算子で呼び出すことはできません。`
128
- )
129
- })
130
- it('エラー/関数の呼び出し演算子 #891/引数が異なる', async () => {
131
- const funcName = 'テスト'
132
- assert.throws(
133
- () => cmd(`●${funcName}(aとbを);それはa*b;ここまで;${funcName}<--8と`),
134
- NakoSyntaxError, `関数『${funcName}』呼び出しで引数の数(1)が定義(2)と違います。`
135
- )
136
- })
137
- it('ローカル変数が解決できない1 #1210', async () => {
138
- await cmp('S=「あいうえお」;A=「かきくけこ」;AをFテスト;●(Sを)Fテストとは;Sを表示;ここまで', 'かきくけこ')
139
- })
140
- it('ローカル変数が解決できない2 #1210', async () => {
141
- await cmp('S=「あいうえお」;Fテスト;●Fテストとは;Sとは変数=30;Sを表示;ここまで', '30')
142
- await cmp('S=「あいうえお」;Fテスト;Sを表示;●Fテストとは;Sとは変数=30;ここまで', 'あいうえお')
143
- await cmp('A=10;B=20;Aを三倍処理して表示;●(Bを)三倍処理とは;Aとは変数=3;A*Bを戻す;ここまで', '30')
144
- })
145
- it('ローカル変数の配列が解決できない2 #1213', async () => {
146
- await cmp(`
147
- 変数 A=空配列。
148
- B=[10,20,30]
149
- BでAAテスト
150
- ●(Aで)AAテスト
151
- もし(A[0]=10)かつ(A[1]=20)ならば「OK」を表示。
152
- 違えば,「NG」を表示。# (えっ!)
153
- ここまで。
154
- `, 'OK')
155
- })
156
- it('ひらがなだけの関数名がエラーになる #1214', async () => {
157
- await cmp('あ。;●あとは;「A」と表示;ここまで', 'A')
158
- await cmp('おくら。;●おくらとは;「O」と表示;ここまで', 'O')
159
- })
160
- })
@@ -1,149 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoCompiler } from '../src/nako3.mjs'
3
-
4
- describe('func_test', async () => {
5
- // nako.logger.addListener('trace', ({ browserConsole }) => { console.log(...browserConsole) })
6
- const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
7
- const nako = new NakoCompiler()
8
- nako.logger.debug('code=' + code)
9
- assert.strictEqual((await nako.runAsync(code)).log, res)
10
- }
11
- // --- test ---
12
-
13
- it('簡単な関数定義', async () => {
14
- await cmp('●HOGE()\n「あ」と表示\nここまで\nHOGE。', 'あ')
15
- await cmp('関数 HOGE()\n「あ」と表示\nここまで\nHOGE。', 'あ')
16
- })
17
- it('引数付き関数定義', async () => {
18
- await cmp('●(Sの)表示処理とは\nSを表示\nここまで\n「殿」の表示処理。', '殿')
19
- await cmp('●(AとBの)加算処理とは;それはA+B;ここまで;3と8の加算処理して表示', '11')
20
- await cmp('●(AにBをCと)連続加算処理\nそれはA+B+C\nここまで\n100に20を3と連続加算処理して表示。', '123')
21
- })
22
- it('引数付き関数定義(互換性のため)', async () => {
23
- await cmp('●表示処理(Sの)\nSを表示\nここまで\n「殿」の表示処理。', '殿')
24
- await cmp('●加算処理(AとBの);それはA+B;ここまで;3と8の加算処理して表示', '11')
25
- await cmp('●HOGE(Aに)\nAと表示\nここまで\n「姫」にHOGE。', '姫')
26
- })
27
- it('三つの引数', async () => {
28
- await cmp('●踊る(AとBがCを)\n「{A}:{B}:{C}」と表示\nここまで\n「姫」と「殿」が「タンゴ」を踊る。', '姫:殿:タンゴ')
29
- await cmp('●踊る(AとBとCが)\n「{A}:{B}:{C}」と表示\nここまで\n「姫」と「殿」と「息子」が踊る。', '姫:殿:息子')
30
- })
31
- it('戻るのテスト', async () => {
32
- await cmp('●加算(AにBを)\n(A+B)で戻る\nここまで\n2に3を加算して表示。', '5')
33
- })
34
- it('再帰テスト', async () => {
35
- await cmp('●NN(vとlevelで)\n' +
36
- 'もしlevel<=0ならば、vで戻る。\n' +
37
- '(v+1)と(level-1)でNN。\n' +
38
- 'それで戻る。\nここまで\n' +
39
- '0と5でNN。それを表示。', '5')
40
- })
41
- it('ローカル変数1', async () => {
42
- await cmp('N=30\n' +
43
- '●テスト\n' +
44
- ' Nとは変数\n' +
45
- ' N=10\n' +
46
- 'ここまで\n' +
47
- 'テスト。\n' +
48
- 'Nを表示。', '30')
49
- })
50
- it('ローカル変数2', async () => {
51
- await cmp('N=30\n' +
52
- '●テスト\n' +
53
- ' Nとは変数=10\n' +
54
- 'ここまで\n' +
55
- 'テスト。\n' +
56
- 'Nを表示。', '30')
57
- })
58
- it('ローカル変数3', async () => {
59
- await cmp('N=300\n' +
60
- '●テスト(AにBを)\n' +
61
- ' 変数のN=A+B\n' +
62
- 'ここまで\n' +
63
- '1に2をテスト。\n' +
64
- 'Nを表示。', '300')
65
- })
66
- it('ローカル定数1', async () => {
67
- await cmp('定数のN=30\n' +
68
- 'Nを表示。', '30')
69
- })
70
- it('ローカル定数2', async () => {
71
- const expected = '30'
72
- const nako = new NakoCompiler()
73
- for (let i = 0; i < 2; i++) {
74
- const env = await nako.run('定数のN=30\nNを表示。', 'main.nako3')
75
- assert.strictEqual(env.log, expected)
76
- env.reset()
77
- }
78
- })
79
- it('助詞の複数定義', async () => {
80
- await cmp('●加算処理(AにBを|AとBの)\n' +
81
- '(A+B)を戻す。\n' +
82
- 'ここまで\n' +
83
- '10に20を加算処理して表示。\n' +
84
- '20と10の加算処理して表示。\n', '30\n30')
85
- })
86
- it('それを関数の戻り値とする', async () => {
87
- await cmp('●加算処理(AにBを|AとBの)\n' +
88
- 'それは、A+B。\n' +
89
- 'ここまで\n' +
90
- '10に20を加算処理して表示。\n' +
91
- '20と10の加算処理して表示。\n', '30\n30')
92
- })
93
- it('英語言語っぽい関数定義', async () => {
94
- await cmp('●加算処理(A,B)\n' +
95
- 'それは、A+B。\n' +
96
- 'ここまで\n' +
97
- '加算処理(10,20)を表示。\n' +
98
- '加算処理(20,10)を表示。\n', '30\n30')
99
- })
100
- it('関数の参照渡し', async () => {
101
- await cmp('●({関数}fで)演算処理とは\n' +
102
- ' それは、f()\n' +
103
- 'ここまで\n' +
104
- '●二倍処理とは\n' +
105
- ' それは2\n' +
106
- 'ここまで\n' +
107
- '二倍処理で演算処理して表示。', '2')
108
- await cmp('●({関数}fでaを)演算処理とは\n' +
109
- ' それは、f(a)\n' +
110
- 'ここまで\n' +
111
- '●(aを)二倍処理とは\n' +
112
- ' それはa*2\n' +
113
- 'ここまで\n' +
114
- '二倍処理で2を演算処理して表示。', '4')
115
- await cmp('●({関数}fでaとbを)演算処理とは\n' +
116
- ' それは、f(a,b)\n' +
117
- 'ここまで\n' +
118
- '●(aとbを)二倍処理とは\n' +
119
- ' それはa*b*2\n' +
120
- 'ここまで\n' +
121
- '二倍処理で2と3を演算処理して表示。', '12')
122
- })
123
- it('無名関数', async () => {
124
- await cmp('F=関数(a,b)それはa+b;ここまで。\n' +
125
- 'F(3,5)を表示。\n', '8')
126
- await cmp('F=関数(a,b)それは(a+b);ここまで\n' +
127
- 'F(3,5)を表示。\n', '8')
128
- await cmp('(関数(a,b)それは(a+b);ここまで)をFに代入。\n' +
129
- 'F(1,2)を表示。\n', '3')
130
- await cmp('(●(a,b)それは(a+b);ここまで)をFに代入。\n' +
131
- 'F(1,2)を表示。\n', '3')
132
- })
133
- it('暗黙的な無名関数「には」', async () => {
134
- await cmp('●(Fを)処理した時\nF()を表示\nここまで\n' +
135
- '処理した時には\nそれは「OK」\nここまで。', 'OK')
136
- await cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
137
- '2を演算処理には(a)\nそれはa*2\nここまで\n', '4')
138
- })
139
- it('暗黙的な無名関数「は〜」', async () => {
140
- await cmp('●(Fを)処理した時\nF()を表示\nここまで\n' +
141
- '処理した時は〜\nそれは「OK」\nここまで。', 'OK')
142
- await cmp('●(fでaを)演算処理とは\nf(a)を表示\nここまで\n' +
143
- '2を演算処理は~(a)\nそれはa*2\nここまで\n', '4')
144
- })
145
- it('**すること #936', async () => {
146
- await cmp('●(AとBを)加算処理とは\nAとBを足すこと。。。3と5を加算処理して表示。', '8')
147
- await cmp('●(Nを)二乗処理とは;A=0;N回,AにNを足してAに代入すること。それはA。。。5を二乗処理して表示。', '25')
148
- })
149
- })
@@ -1,364 +0,0 @@
1
- import assert from 'assert'
2
- import NakoIndent from '../src/nako_indent.mjs'
3
-
4
- describe('indent', () => {
5
- const cmp = (/** @type {unknown} */ src, /** @type {string} */ expected) => {
6
- // @ts-ignore
7
- src = NakoIndent.convert(src).code
8
- // @ts-ignore
9
- src = src.replace(/\s+$/, '')
10
- expected = expected.replace(/\s+$/, '')
11
- assert.strictEqual(src, expected)
12
- }
13
- it('もし', () => {
14
- cmp('!インデント構文\n' +
15
- 'もしA=1ならば\n' +
16
- '  1を表示\n',
17
- // ---
18
- '!インデント構文\n' +
19
- 'もしA=1ならば\n' +
20
- '  1を表示\n' +
21
- 'ここまで‰\n')
22
- cmp('!インデント構文\n' +
23
- 'もしA=1ならば\n' +
24
- '  「わん」と表示。\n',
25
- // ---
26
- '!インデント構文\n' +
27
- 'もしA=1ならば\n' +
28
- '  「わん」と表示。\n' +
29
- 'ここまで‰\n')
30
- })
31
- it('もし 違えば', () => {
32
- cmp('!インデント構文\n' +
33
- 'もしA=1ならば\n' +
34
- '  1を表示\n' +
35
- '違えば\n' +
36
- '  2を表示\n',
37
- // ---
38
- '!インデント構文\n' +
39
- 'もしA=1ならば\n' +
40
- '  1を表示\n' +
41
- '違えば\n' +
42
- '  2を表示\n' +
43
- 'ここまで‰\n')
44
- })
45
- it('3回と5回', () => {
46
- cmp('!インデント構文\n' +
47
- '5回\n' +
48
- '  3回\n' +
49
- '    1を表示\n',
50
- // ---
51
- '!インデント構文\n' +
52
- '5回\n' +
53
- '  3回\n' +
54
- '    1を表示\n' +
55
- ' ここまで‰\n' +
56
- 'ここまで‰\n')
57
- })
58
- it('もし 違えば 入れ子', () => {
59
- cmp('!インデント構文\n' +
60
- 'もしA=1ならば\n' +
61
- '  もしB=1ならば\n' +
62
- '    1を表示\n' +
63
- '  違えば\n' +
64
- '    2を表示\n' +
65
- '違えば\n' +
66
- '  3を表示\n',
67
- // ---
68
- '!インデント構文\n' +
69
- 'もしA=1ならば\n' +
70
- '  もしB=1ならば\n' +
71
- '    1を表示\n' +
72
- '  違えば\n' +
73
- '    2を表示\n' +
74
- ' ここまで‰\n' +
75
- '違えば\n' +
76
- '  3を表示\n' +
77
- 'ここまで‰\n')
78
- })
79
- it('JSONで改行がある場合(#699)', () => {
80
- cmp('!インデント構文\n' +
81
- 'J={"taro":30,\n' +
82
- ' "jiro":50}\n',
83
- // ---
84
- '!インデント構文\n' +
85
- 'J={"taro":30,\n' +
86
- ' "jiro":50}\n')
87
- cmp('!インデント構文\n' +
88
- 'S=「aaa\n' +
89
- 'bbb」\n' +
90
- 'もしS=30ならば\n' +
91
- '  「あ」と表示\n',
92
- // ---
93
- '!インデント構文\n' +
94
- 'S=「aaa\n' +
95
- 'bbb」\n' +
96
- 'もしS=30ならば\n' +
97
- '  「あ」と表示\n' +
98
- 'ここまで‰\n')
99
- })
100
- it('コメント内に文字列リテラルの開始記号がある場合', () => {
101
- cmp('!インデント構文\n' +
102
- 'もしA=1ならば\n' +
103
- '  1を表示 # 「\n' +
104
- '2を表示\n',
105
- // ---
106
- '!インデント構文\n' +
107
- 'もしA=1ならば\n' +
108
- '  1を表示 # 「\n' +
109
- 'ここまで‰\n' +
110
- '2を表示\n'
111
- )
112
- cmp('!インデント構文\n' +
113
- 'もしA=1ならば\n' +
114
- '  1を表示 // 「\n' +
115
- '2を表示\n',
116
- // ---
117
- '!インデント構文\n' +
118
- 'もしA=1ならば\n' +
119
- '  1を表示 // 「\n' +
120
- 'ここまで‰\n' +
121
- '2を表示\n'
122
- )
123
- })
124
- it('複数行コメント内に文字列リテラルの開始記号がある場合', () => {
125
- cmp('!インデント構文\n' +
126
- 'もしA=1ならば\n' +
127
- '  1を表示 /* 「 */\n' +
128
- '2を表示\n',
129
- // ---
130
- '!インデント構文\n' +
131
- 'もしA=1ならば\n' +
132
- '  1を表示 /* 「 */\n' +
133
- 'ここまで‰\n' +
134
- '2を表示\n'
135
- )
136
- cmp('!インデント構文\n' +
137
- 'もしA=1ならば\n' +
138
- '  1を表示 /* 「 */\n' +
139
- '2を表示\n',
140
- // ---
141
- '!インデント構文\n' +
142
- 'もしA=1ならば\n' +
143
- '  1を表示 /* 「 */\n' +
144
- 'ここまで‰\n' +
145
- '2を表示\n'
146
- )
147
- })
148
- it('改行を含む、絵文字による文字列がある場合', () => {
149
- cmp(
150
- '!インデント構文\n' +
151
- '2回\n' +
152
- ' 🌴1\n' +
153
- '🌴を表示\n' +
154
- '「2」を表示\n',
155
- // ---
156
- '!インデント構文\n' +
157
- '2回\n' +
158
- ' 🌴1\n' +
159
- '🌴を表示\n' +
160
- 'ここまで‰\n' +
161
- '「2」を表示\n'
162
- )
163
- })
164
- it('前後が一致しない括弧がある場合', () => {
165
- cmp(
166
- '!インデント構文\n' +
167
- '2回\n' +
168
- ' A={\n' +
169
- '}を表示\n' +
170
- '1を表示\n',
171
- // ---
172
- '!インデント構文\n' +
173
- '2回\n' +
174
- ' A={\n' +
175
- '}を表示\n' +
176
- 'ここまで‰\n' +
177
- '1を表示\n'
178
- )
179
- })
180
- it('「違えば」に行コメントがある場合', () => {
181
- cmp('!インデント構文\n' +
182
- 'もしA=1ならば\n' +
183
- '  1を表示\n' +
184
- '違えば # コメント\n' +
185
- '  2を表示\n',
186
- // ---
187
- '!インデント構文\n' +
188
- 'もしA=1ならば\n' +
189
- '  1を表示\n' +
190
- '違えば # コメント\n' +
191
- '  2を表示\n' +
192
- 'ここまで‰\n')
193
- })
194
- it('「違えば」に範囲コメントがある場合', () => {
195
- cmp('!インデント構文\n' +
196
- 'もしA=1ならば\n' +
197
- '  1を表示\n' +
198
- '/* foo \n' +
199
- '*/違えば /* bar */\n' +
200
- '  2を表示\n',
201
- // ---
202
- '!インデント構文\n' +
203
- 'もしA=1ならば\n' +
204
- '  1を表示\n' +
205
- '/* foo \n' +
206
- '*/違えば /* bar */\n' +
207
- '  2を表示\n' +
208
- 'ここまで‰\n')
209
- })
210
- it('コメントのみの行がある場合', () => {
211
- cmp('!インデント構文\n' +
212
- 'もしA=1ならば\n' +
213
- '    # コメント\n' +
214
- '  1を表示\n' +
215
- '違えば\n' +
216
- '/* */\n' +
217
- '/* */ \n' +
218
- '  2を表示\n',
219
- // ---
220
- '!インデント構文\n' +
221
- 'もしA=1ならば\n' +
222
- '    # コメント\n' +
223
- '  1を表示\n' +
224
- '違えば\n' +
225
- '/* */\n' +
226
- '/* */ \n' +
227
- '  2を表示\n' +
228
- 'ここまで‰\n')
229
- })
230
- it('"・"がある場合', () => {
231
- cmp('!インデント構文\n' +
232
- '1回\n' +
233
- '・1回\n' +
234
- '・・1を表示\n' +
235
- '・\n' +
236
- '・・2を表示\n',
237
- // ---
238
- '!インデント構文\n' +
239
- '1回\n' +
240
- '・1回\n' +
241
- '・・1を表示\n' +
242
- '・・2を表示\n' +
243
- ' ここまで‰\n' +
244
- 'ここまで‰\n'
245
- )
246
- })
247
- it('「違えばもし」の場合(#940)', () => {
248
- cmp('!インデント構文\n' +
249
- 'もしA=1ならば\n' +
250
- '  1を表示\n' +
251
- '違えば、もしA=2ならば\n' +
252
- '  2を表示\n' +
253
- '違えば\n' +
254
- '  3を表示\n',
255
- // ---
256
- '!インデント構文\n' +
257
- 'もしA=1ならば\n' +
258
- '  1を表示\n' +
259
- '違えば、もしA=2ならば\n' +
260
- '  2を表示\n' +
261
- '違えば\n' +
262
- '  3を表示\n' +
263
- 'ここまで‰\n')
264
- })
265
- it('ソースマップ', () => {
266
- const result = NakoIndent.convert(
267
- '!インデント構文\n' +
268
- '\n' +
269
- '●(nを)階乗とは\n' +
270
- ' もしnが1と等しいならば\n' +
271
- ' それは1\n' +
272
- ' 違えば\n' +
273
- ' それは((n - 1)を階乗) * n\n' +
274
- '\n' +
275
- 'もし1=1なら\n' +
276
- ' 「こんに\n' +
277
- 'ちは」と表示\n' +
278
- '\n' +
279
- '「こんにちは」と表示\n' +
280
- '\n' +
281
- ''
282
- )
283
-
284
- /**
285
- * 出力されるべきコード:
286
- * ```
287
- * 0!インデント構文
288
- * 1 ●(nを)階乗とは
289
- * 2 もしnが1と等しいならば
290
- * 3 それは1
291
- * 4 違えば
292
- * 5 それは((n - 1)を階乗) * n
293
- * 6 ここまで‰
294
- * 7 ここまで‰
295
- * 8 もし1=1なら
296
- * 9 「こんに
297
- * 10 ちは」と表示
298
- * 11 ここまで‰
299
- * 12 「こんにちは」と表示
300
- * ```
301
- */
302
-
303
- // 6, 7, 11 行目に「ここまで‰」が挿入された。
304
- assert.deepStrictEqual(result.insertedLines, [6, 7, 11])
305
-
306
- // 1, 6, 11, 13, 13行目の直前の空白行が消された。
307
- // ※ 正確には、各空白行を消したときに、それまでに出力した行数(「ここまで‰」を含む)が 1, 6, 11, 13, 13 行。
308
- assert.deepStrictEqual(result.deletedLines, [
309
- { lineNumber: 1, len: 0 },
310
- { lineNumber: 6, len: 0 },
311
- { lineNumber: 11, len: 0 },
312
- { lineNumber: 13, len: 0 },
313
- { lineNumber: 13, len: 0 }
314
- ])
315
- })
316
- it('ブロック構造の取得', () => {
317
- assert.deepStrictEqual(
318
- NakoIndent.getBlockStructure(
319
- 'もしはいならば\n' +
320
- ' 「こん\n' +
321
- 'にちは」を表示\n' +
322
- 'ここまで'
323
- ),
324
- {
325
- lines: [0, 4, 4, 0], // 各行の高さは 0, 4, 4, 0
326
- pairs: [[0, 3]], // 0行目と3行目のペアがブロックを構成している。
327
- parents: [null, 0, 0, null],
328
- spaces: ['', ' ', ' ', '']
329
- }
330
- )
331
- })
332
- it('ブロック構造の取得 - 複数行にまたがる構文', () => {
333
- // 複数行にまたがる文の2行目以降のインデントは、先頭行のインデントと等しいものとする。
334
- // コメントのみの行のインデントは、直近の通常の行のインデントと等しいものとする。
335
- assert.deepStrictEqual(
336
- NakoIndent.getBlockStructure(
337
- '!インデント構文\n' +
338
- 'Nを1から3まで繰り返す\n' +
339
- ' 「1行目\n' +
340
- '2行目」を表示\n' +
341
- '/*範囲コメント\n' +
342
- '*/'
343
- ),
344
- {
345
- lines: [0, 0, 4, 4, 4, 4],
346
- pairs: [[1, 6]],
347
- parents: [null, null, 1, 1, 1, 1],
348
- spaces: ['', '', ' ', ' ', '', '']
349
- }
350
- )
351
- })
352
- it('ブロック構造の取得 - 違えば', () => {
353
- assert.deepStrictEqual(
354
- NakoIndent.getBlockStructure(
355
- 'もしはいならば\n' +
356
- ' a\n' +
357
- '違えば\n' +
358
- ' b\n' +
359
- 'ここまで'
360
- ).pairs,
361
- [[0, 2], [2, 4]]
362
- )
363
- })
364
- })