nadesiko3 3.3.49 → 3.3.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (343) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +143 -143
  3. package/batch/.DS_Store +0 -0
  4. package/batch/browsers.template.md +3 -3
  5. package/batch/build_browsers.nako3 +72 -72
  6. package/batch/build_command.nako3 +44 -44
  7. package/batch/build_nako_version.nako3 +42 -42
  8. package/batch/calc_hash.nako3 +29 -29
  9. package/batch/cmd_txt2json.nako3 +74 -74
  10. package/batch/command.txt +162 -83
  11. package/batch/command_nakopad.txt +69 -0
  12. package/batch/download-extlib.nako3 +43 -43
  13. package/batch/gen_command_nakopad.nako3 +57 -57
  14. package/batch/jsplugin2text.nako3 +285 -285
  15. package/batch/pickup_command.nako3 +113 -110
  16. package/batch/pickup_reserved_words.nako3 +11 -11
  17. package/batch/publish_version.nako3 +46 -46
  18. package/batch/show_agents.js +14 -14
  19. package/batch/turtle2js.nako3 +21 -21
  20. package/bin/cnako3 +10 -10
  21. package/core/LICENSE +21 -21
  22. package/core/README.md +66 -66
  23. package/core/batch/build_nako_version.nako3 +42 -42
  24. package/core/command/snako.mjs +105 -105
  25. package/core/command/snako.mts +116 -116
  26. package/core/index.mjs +21 -21
  27. package/core/package.json +47 -47
  28. package/core/sample/hello.nako3 +7 -7
  29. package/core/sample/hoge.mjs +4 -4
  30. package/core/sample/hoge.mts +6 -6
  31. package/core/src/nako3.mjs +870 -858
  32. package/core/src/nako3.mts +983 -967
  33. package/core/src/nako_colors.mjs +78 -78
  34. package/core/src/nako_colors.mts +86 -86
  35. package/core/src/nako_core_version.mjs +8 -8
  36. package/core/src/nako_core_version.mts +19 -19
  37. package/core/src/nako_csv.mjs +185 -185
  38. package/core/src/nako_csv.mts +188 -188
  39. package/core/src/nako_errors.mjs +173 -173
  40. package/core/src/nako_errors.mts +197 -197
  41. package/core/src/nako_from_dncl.mjs +255 -255
  42. package/core/src/nako_from_dncl.mts +250 -250
  43. package/core/src/nako_gen.mjs +1647 -1648
  44. package/core/src/nako_gen.mts +1718 -1719
  45. package/core/src/nako_gen_async.mjs +1659 -1659
  46. package/core/src/nako_gen_async.mts +1732 -1732
  47. package/core/src/nako_global.mjs +109 -107
  48. package/core/src/nako_global.mts +141 -138
  49. package/core/src/nako_indent.mjs +445 -445
  50. package/core/src/nako_indent.mts +492 -492
  51. package/core/src/nako_josi_list.mjs +38 -38
  52. package/core/src/nako_josi_list.mts +45 -45
  53. package/core/src/nako_lex_rules.mjs +253 -253
  54. package/core/src/nako_lex_rules.mts +260 -260
  55. package/core/src/nako_lexer.mjs +609 -609
  56. package/core/src/nako_lexer.mts +612 -612
  57. package/core/src/nako_logger.mjs +199 -199
  58. package/core/src/nako_logger.mts +232 -232
  59. package/core/src/nako_parser3.mjs +2441 -2439
  60. package/core/src/nako_parser3.mts +2197 -2195
  61. package/core/src/nako_parser_base.mjs +371 -370
  62. package/core/src/nako_parser_base.mts +372 -370
  63. package/core/src/nako_parser_const.mjs +37 -37
  64. package/core/src/nako_parser_const.mts +37 -37
  65. package/core/src/nako_prepare.mjs +304 -304
  66. package/core/src/nako_prepare.mts +315 -315
  67. package/core/src/nako_reserved_words.mjs +38 -38
  68. package/core/src/nako_reserved_words.mts +38 -38
  69. package/core/src/nako_source_mapping.mjs +207 -207
  70. package/core/src/nako_source_mapping.mts +262 -262
  71. package/core/src/nako_test.mjs +37 -37
  72. package/core/src/nako_types.mjs +13 -25
  73. package/core/src/nako_types.mts +144 -151
  74. package/core/src/plugin_csv.mjs +49 -49
  75. package/core/src/plugin_csv.mts +50 -50
  76. package/core/src/plugin_math.mjs +328 -328
  77. package/core/src/plugin_math.mts +326 -326
  78. package/core/src/plugin_promise.mjs +91 -91
  79. package/core/src/plugin_promise.mts +91 -91
  80. package/core/src/plugin_system.mjs +2832 -2832
  81. package/core/src/plugin_system.mts +2690 -2690
  82. package/core/src/plugin_test.mjs +34 -34
  83. package/core/src/plugin_test.mts +34 -34
  84. package/demo/.DS_Store +0 -0
  85. package/demo/ace_editor.html +89 -89
  86. package/demo/ace_editor_tabs.html +161 -161
  87. package/demo/basic.html +71 -71
  88. package/demo/browsers.html +10 -9
  89. package/demo/css/basic.css +3 -3
  90. package/demo/css/common.css +157 -157
  91. package/demo/css/editor.css +8 -8
  92. package/demo/css/flow.css +3 -3
  93. package/demo/css/index.css +3 -3
  94. package/demo/extlib/.DS_Store +0 -0
  95. package/demo/flow.html +98 -98
  96. package/demo/graph.html +53 -53
  97. package/demo/image/nakopad-icon256.png +0 -0
  98. package/demo/index.html +133 -133
  99. package/demo/js/common.js +17 -17
  100. package/demo/js/turtle3d_test.js +44 -44
  101. package/demo/js/turtle_test.js +45 -45
  102. package/demo/nako3/calc.nako3 +4 -4
  103. package/demo/runscript.html +47 -47
  104. package/demo/runscript2.html +33 -33
  105. package/demo/runscript3.html +35 -35
  106. package/demo/runscript4.html +33 -33
  107. package/demo/turtle.html +58 -58
  108. package/demo/turtle2.html +141 -141
  109. package/demo/turtle3.html +279 -279
  110. package/demo/turtle3d.html +58 -58
  111. package/demo/turtle3d2.html +107 -107
  112. package/demo/version.html +24 -24
  113. package/doc/SETUP.md +157 -157
  114. package/doc/about.md +17 -17
  115. package/doc/browsers.md +26 -26
  116. package/doc/docgen.md +21 -21
  117. package/doc/editor.md +44 -44
  118. package/doc/files.md +39 -39
  119. package/doc/plugins.md +234 -234
  120. package/doc/release.md +79 -79
  121. package/doc/textlint.md +43 -43
  122. package/doc/win32.md +57 -57
  123. package/package.json +195 -195
  124. package/release/_hash.txt +28 -28
  125. package/release/_script-tags.txt +14 -14
  126. package/release/command.json +1 -1
  127. package/release/command.json.js +1 -1
  128. package/release/command_cnako3.json +1 -1
  129. package/release/command_list.json +1 -1
  130. package/release/editor.js +1 -1
  131. package/release/nako_gen_async.js +2 -1
  132. package/release/nako_gen_async.js.LICENSE.txt +35 -0
  133. package/release/plugin_caniuse.js.LICENSE.txt +11 -0
  134. package/release/plugin_csv.js +1 -1
  135. package/release/plugin_csv.js.LICENSE.txt +15 -0
  136. package/release/plugin_datetime.js.LICENSE.txt +15 -0
  137. package/release/plugin_kansuji.js.LICENSE.txt +3 -0
  138. package/release/plugin_markup.js.LICENSE.txt +11 -0
  139. package/release/plugin_turtle.js.LICENSE.txt +15 -0
  140. package/release/plugin_webworker.js.LICENSE.txt +3 -0
  141. package/release/plugin_weykturtle3d.js.LICENSE.txt +3 -0
  142. package/release/stats.json +1 -1
  143. package/release/version.js +1 -1
  144. package/release/wnako3.js +1 -1
  145. package/release/wnako3.js.LICENSE.txt +203 -1
  146. package/release/wnako3webworker.js +2 -1
  147. package/release/wnako3webworker.js.LICENSE.txt +131 -0
  148. package/src/.DS_Store +0 -0
  149. package/src/browsers.txt +12 -11
  150. package/src/browsers_agents.json +2 -2
  151. package/src/browsers_agents.mjs +1 -1
  152. package/src/cnako3.mjs +17 -17
  153. package/src/cnako3.mts +18 -18
  154. package/src/cnako3mod.mjs +682 -707
  155. package/src/cnako3mod.mts +688 -712
  156. package/src/commander_ja.mjs +164 -164
  157. package/src/commander_ja.mts +161 -161
  158. package/src/enako3.mjs +68 -68
  159. package/src/era.mjs +22 -22
  160. package/src/image_turtle-elephant.mjs +2 -2
  161. package/src/image_turtle-panda.mjs +2 -2
  162. package/src/image_turtle64.mjs +2 -2
  163. package/src/index.mjs +9 -9
  164. package/src/index.mts +10 -10
  165. package/src/nako3editorfix.sfd +106 -106
  166. package/src/nako_version.mjs +8 -8
  167. package/src/nako_version.mts +2 -2
  168. package/src/plugin_browser.mjs +213 -213
  169. package/src/plugin_browser.mts +206 -206
  170. package/src/plugin_browser_ajax.mjs +399 -399
  171. package/src/plugin_browser_audio.mjs +109 -109
  172. package/src/plugin_browser_canvas.mjs +449 -449
  173. package/src/plugin_browser_chart.mjs +294 -294
  174. package/src/plugin_browser_color.mjs +49 -49
  175. package/src/plugin_browser_crypto.mjs +26 -26
  176. package/src/plugin_browser_dialog.mjs +53 -53
  177. package/src/plugin_browser_dom_basic.mjs +336 -336
  178. package/src/plugin_browser_dom_event.mjs +193 -193
  179. package/src/plugin_browser_dom_parts.mjs +396 -396
  180. package/src/plugin_browser_geolocation.mjs +51 -51
  181. package/src/plugin_browser_hotkey.mjs +25 -25
  182. package/src/plugin_browser_html.mjs +59 -59
  183. package/src/plugin_browser_in_worker.mjs +45 -45
  184. package/src/plugin_browser_location.mjs +21 -21
  185. package/src/plugin_browser_speech.mjs +111 -111
  186. package/src/plugin_browser_storage.mjs +121 -121
  187. package/src/plugin_browser_system.mjs +31 -31
  188. package/src/plugin_browser_websocket.mjs +73 -73
  189. package/src/plugin_caniuse.mjs +29 -29
  190. package/src/plugin_datetime.mjs +394 -394
  191. package/src/plugin_httpserver.mjs +277 -277
  192. package/src/plugin_httpserver.mts +286 -286
  193. package/src/plugin_kansuji.mjs +224 -224
  194. package/src/plugin_keigo.mjs +55 -55
  195. package/src/plugin_markup.mjs +32 -32
  196. package/src/plugin_node.mjs +1047 -1047
  197. package/src/plugin_node.mts +980 -980
  198. package/src/plugin_turtle.mjs +647 -647
  199. package/src/plugin_webworker.mjs +334 -334
  200. package/src/plugin_weykturtle3d.mjs +1214 -1214
  201. package/src/plugin_worker.mjs +95 -95
  202. package/src/repl.nako3 +63 -63
  203. package/src/wnako3.mjs +12 -12
  204. package/src/wnako3.mts +11 -11
  205. package/src/wnako3_editor.css +215 -215
  206. package/src/wnako3_editor.mjs +1542 -1542
  207. package/src/wnako3_editor.mts +1658 -1657
  208. package/src/wnako3mod.mjs +213 -213
  209. package/src/wnako3mod.mts +214 -214
  210. package/src/wnako3webworker.mjs +69 -69
  211. package/test/.DS_Store +0 -0
  212. package/test/ace_editor/karma.config.js +94 -94
  213. package/test/ace_editor/test/.babelrc.json +3 -3
  214. package/test/ace_editor/test/ace_editor_test.js +178 -178
  215. package/test/ace_editor/test/html/custom_context.html +139 -139
  216. package/test/async/async_basic_test.mjs +122 -122
  217. package/test/browser/.DS_Store +0 -0
  218. package/test/browser/karma.config.js +221 -221
  219. package/test/browser/test/.babelrc.json +3 -3
  220. package/test/browser/test/compare_util.js +50 -50
  221. package/test/browser/test/html/div_basic.html +2 -2
  222. package/test/browser/test/html/event_dom_form.html +4 -4
  223. package/test/browser/test/html/event_dom_scrolldiv.html +5 -5
  224. package/test/browser/test/import_plugin_checker.js +24 -24
  225. package/test/browser/test/plugin_browser_test.js +51 -51
  226. package/test/browser/test/plugin_browser_test_ajax.js +123 -123
  227. package/test/browser/test/plugin_browser_test_color.js +18 -18
  228. package/test/browser/test/plugin_browser_test_dialog.js +72 -72
  229. package/test/browser/test/plugin_browser_test_dom_event.js +598 -598
  230. package/test/browser/test/plugin_browser_test_dom_parts.js +125 -125
  231. package/test/browser/test/plugin_browser_test_system.js +9 -9
  232. package/test/browser/test/plugin_turtle_test.js +817 -817
  233. package/test/browser/test/plugin_webworker_test.js +86 -86
  234. package/test/browser/test/require_test.js +68 -68
  235. package/test/bundled/.DS_Store +0 -0
  236. package/test/bundled/karma.config.base.js +117 -117
  237. package/test/bundled/karma.config.js +86 -86
  238. package/test/bundled/test/.babelrc.json +3 -3
  239. package/test/bundled/test/bundled_test.js +69 -69
  240. package/test/bundled/test/html/custom_context.html +65 -65
  241. package/test/bundled/test/html/custom_debug.html +66 -66
  242. package/test/bundled/test4b.cmd +52 -52
  243. package/test/bundled/test_base/.DS_Store +0 -0
  244. package/test/bundled/test_base/.babelrc.json +3 -3
  245. package/test/bundled/test_base/_checktool_test.js +25 -25
  246. package/test/bundled/test_base/basic_ajax_test.js +56 -56
  247. package/test/bundled/test_base/basic_async_test.js +18 -18
  248. package/test/bundled/test_base/basic_test.js +153 -153
  249. package/test/bundled/test_base/calc_test.js +132 -132
  250. package/test/bundled/test_base/css/browsers_box.css +114 -114
  251. package/test/bundled/test_base/html/custom_context.html +69 -69
  252. package/test/bundled/test_base/html/custom_debug.html +71 -71
  253. package/test/bundled/test_base/js/browsers_box.js +72 -72
  254. package/test/bundled/test_base/plugin_csv_test.js +37 -37
  255. package/test/bundled/test_base/plugin_datetime_test.js +115 -115
  256. package/test/bundled/test_base/plugin_kansuji_test.js +49 -49
  257. package/test/bundled/test_base/plugin_system_test.js +410 -410
  258. package/test/bundled/test_base/plugin_webworker_test.js +53 -53
  259. package/test/bundled/test_base/test_utils.js +191 -191
  260. package/test/common/.DS_Store +0 -0
  261. package/test/common/plugin_browser_test.mjs +22 -22
  262. package/test/common/plugin_browser_ut_audio_test.mjs +108 -108
  263. package/test/common/plugin_browser_ut_color_test.mjs +21 -21
  264. package/test/common/plugin_browser_ut_dialog_test.mjs +100 -100
  265. package/test/common/plugin_browser_ut_html_test.mjs +13 -13
  266. package/test/common/plugin_browser_ut_system_test.mjs +10 -10
  267. package/test/common/plugin_markup_test.mjs +23 -23
  268. package/test/jsconfig.json +19 -19
  269. package/test/karma.config.js +91 -91
  270. package/test/node/.DS_Store +0 -0
  271. package/test/node/async_test.mjs +96 -96
  272. package/test/node/commander_ja_test.mjs +89 -89
  273. package/test/node/error_message_test.mjs +243 -243
  274. package/test/node/kai_test.nako3 +6 -6
  275. package/test/node/node_test.mjs +60 -60
  276. package/test/node/plugin_broken.js.txt +3 -3
  277. package/test/node/plugin_browser_ut_ajax_test.mjs.todo +357 -357
  278. package/test/node/plugin_browser_ut_location_test.mjs +42 -42
  279. package/test/node/plugin_markup_test.mjs +47 -47
  280. package/test/node/plugin_math_test.mjs +45 -45
  281. package/test/node/plugin_node_test.mjs +98 -98
  282. package/test/node/plugin_test.mjs +44 -44
  283. package/test/node/relative_import_test_1.nako3 +1 -1
  284. package/test/node/relative_import_test_2.nako3 +2 -2
  285. package/test/node/require_nako3_test.mjs +67 -67
  286. package/test/node/requiretest.nako3 +4 -4
  287. package/test/node/requiretest_indirect.nako3 +1 -1
  288. package/test/node/requiretest_name.nako3 +5 -5
  289. package/test/node/runtime_error.nako3 +2 -2
  290. package/test/node/scope1.nako3 +10 -10
  291. package/test/node/scope2.nako3 +12 -12
  292. package/test/node/side_effects_test.mjs +39 -39
  293. package/test/node/sjis.txt +5 -5
  294. package/test/node/syntax_error.nako3 +1 -1
  295. package/test/node/wnako3_editor_test.mjs +384 -384
  296. package/tools/.DS_Store +0 -0
  297. package/tools/README.md +12 -12
  298. package/tools/check_new_version.nako3 +25 -25
  299. package/tools/nako3edit/.DS_Store +0 -0
  300. package/tools/nako3edit/a.sqlite3 +0 -0
  301. package/tools/nako3edit/html/.DS_Store +0 -0
  302. package/tools/nako3edit/html/daisyui/LICENSE +22 -22
  303. package/tools/nako3edit/html/daisyui/version_2.14.1 +1 -1
  304. package/tools/nako3edit/html/edit.html +170 -170
  305. package/tools/nako3edit/html/edit_plugin.js +6 -6
  306. package/tools/nako3edit/html/files.html +125 -125
  307. package/tools/nako3edit/html/nako3edit.css +65 -65
  308. package/tools/nako3edit/index.mjs +248 -248
  309. package/tools/nako3server/index.html +10 -10
  310. package/tools/nako3server/index.mjs +116 -116
  311. package/tools/nako3server/index.nako3 +34 -34
  312. package/core/.editorconfig +0 -6
  313. package/core/.eslintrc.cjs +0 -33
  314. package/core/.github/dependabot.yml +0 -7
  315. package/core/.github/workflows/nodejs.yml +0 -37
  316. package/core/.github/workflows/super-linter.yml +0 -61
  317. package/core/.github/workflows/textlint.yml +0 -199
  318. package/core/index.mts +0 -21
  319. package/core/test/array_test.mjs +0 -34
  320. package/core/test/basic_test.mjs +0 -344
  321. package/core/test/calc_test.mjs +0 -140
  322. package/core/test/core_module_test.mjs +0 -23
  323. package/core/test/debug_test.mjs +0 -16
  324. package/core/test/dncl_test.mjs +0 -94
  325. package/core/test/error_message_test.mjs +0 -210
  326. package/core/test/error_test.mjs +0 -16
  327. package/core/test/flow_test.mjs +0 -373
  328. package/core/test/func_call.mjs +0 -160
  329. package/core/test/func_test.mjs +0 -149
  330. package/core/test/indent_test.mjs +0 -364
  331. package/core/test/lex_test.mjs +0 -168
  332. package/core/test/literal_test.mjs +0 -73
  333. package/core/test/nako_lexer_test.mjs +0 -35
  334. package/core/test/nako_logger_test.mjs +0 -76
  335. package/core/test/nako_logger_test.mts +0 -78
  336. package/core/test/plugin_csv_test.mjs +0 -38
  337. package/core/test/plugin_promise_test.mjs +0 -18
  338. package/core/test/plugin_system_test.mjs +0 -630
  339. package/core/test/prepare_test.mjs +0 -96
  340. package/core/test/re_test.mjs +0 -22
  341. package/core/test/side_effects_test.mjs +0 -92
  342. package/core/test/variable_scope_test.mjs +0 -149
  343. package/core/tsconfig.json +0 -101
@@ -1,168 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoCompiler } from '../src/nako3.mjs'
3
-
4
- describe('lex_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
- it('送り仮名の省略テスト', async () => {
13
- await cmp('『abc』の『a』を「*」に置換。表示', '*bc')
14
- await cmp('『abc』の『a』を「*」に置換します。それを表示', '*bc')
15
- await cmp('『abc』の『a』を「*」に置換しろ。表示しろ。', '*bc')
16
- })
17
- it('仮名表記の曖昧', async () => {
18
- await cmp('『abc』の『a』を「*」に置き換え。表示', '*bc')
19
- })
20
- it('範囲コメントの処理', async () => {
21
- await cmp('1を表示\n/*2を表示\n3を表示\n*/\n4を表示\n', '1\n4')
22
- await cmp('1を表示\n/*2を表示\n3を表示\n4を表示\n5を表示\n*/\n6を表示\n', '1\n6')
23
- })
24
- it('文字列の埋め込み', async () => {
25
- await cmp('見出し=30;「--{見出し}--」を表示', '--30--')
26
- })
27
- it('文字列の埋め込み語句のかな省略', async () => {
28
- await cmp('見出し=30;「--{見出}--」を表示', '--30--')
29
- })
30
- it('文字列に式を埋め込む', async () => {
31
- await cmp('「--{3に2を掛ける}--」を表示', '--6--')
32
- })
33
- it('文字列の埋め込み変数名全角英数字', async () => {
34
- await cmp('N1=30;「--{N1}--」を表示', '--30--')
35
- })
36
- it('文字列の埋め込みで対応しない閉じ括弧がある場合', async () => {
37
- await cmp('B=1;E=2;「A{B}C}D{E}F」を表示', 'A1C}D2F')
38
- })
39
- it('文字列の埋め込み配列', async () => {
40
- await cmp('手説明=["グー","チョキ","パー"];「自分は{手説明@1}、相手は{手説明@0}」と表示', '自分はチョキ、相手はグー')
41
- })
42
- it('はい/いいえ', async () => {
43
- await cmp('はいを表示', '1')
44
- await cmp('いいえを表示', '0')
45
- })
46
- it('A = 8の書き方', async () => {
47
- await cmp('A = 8;Aを表示', '8')
48
- })
49
- it('数値表現のテスト', async () => {
50
- await cmp('123e1を表示', '1230')
51
- await cmp('123E-1を表示', '12.3')
52
- await cmp('123e+1を表示', '1230')
53
- await cmp('.123e-1を表示', '0.0123')
54
- await cmp('123.e1を表示', '1230')
55
- })
56
- it('2進数/8進数/16進数のテスト', async () => {
57
- await cmp('0xFFを表示', '255')
58
- await cmp('0XFFを表示', '255')
59
- await cmp('0b11を表示', '3')
60
- await cmp('0B1111を表示', '15')
61
- await cmp('0o10を表示', '8')
62
- await cmp('0O11を表示', '9')
63
- })
64
- it('《特別名トークン》のテスト', async () => {
65
- await cmp('《今日から明日》=30;《今日から明日》を表示', '30')
66
- await cmp('《AからBまで》=30;《AからBまで》を表示', '30')
67
- })
68
- it('以上、以下、超、未満 (#918)', async () => {
69
- await cmp('A=4;もし、Aが2以上ならば\nAを表示;\nここまで。', '4')
70
- await cmp('A=4;もし、30がA以上ならば\nAを表示;\nここまで。', '4')
71
- })
72
- it('ソースマップ - 単純な例', async () => {
73
- const nako = new NakoCompiler()
74
- const tokens = nako.lex('「こんにちは」と表示', 'main.nako3', '').tokens
75
-
76
- // 0-7文字目: 「こんにちは」と
77
- assert.strictEqual(tokens[0].startOffset, 0)
78
- assert.strictEqual(tokens[0].endOffset, 8)
79
-
80
- // 8-9文字目: 表示
81
- assert.strictEqual(tokens[1].startOffset, 8)
82
- assert.strictEqual(tokens[1].endOffset, 10)
83
- })
84
- it('ソースマップ - スペース扱いの文字', async () => {
85
- // '・'はスペース扱いであり、トークン化されない。
86
- const nako = new NakoCompiler()
87
- const tokens = nako.lex('ならば・A', 'main.nako3', '').tokens
88
-
89
- // 0-2文字目: ならば
90
- assert.strictEqual(tokens[0].startOffset, 0)
91
- assert.strictEqual(tokens[0].endOffset, 3)
92
-
93
- // 4文字目: A
94
- assert.strictEqual(tokens[1].startOffset, 4)
95
- assert.strictEqual(tokens[1].endOffset, 5)
96
- })
97
- it('ソースマップ - 複数行の場合', async () => {
98
- const nako = new NakoCompiler()
99
- const tokens = nako.lex('「こんにちは」を表示する。\n「こんにちは」を表示する。', 'main.nako3', '').tokens
100
- assert.strictEqual(tokens[0].startOffset, 0) // 0-7: 「こんにちは」を
101
- assert.strictEqual(tokens[1].startOffset, 8) // 8-11: 表示する
102
- assert.strictEqual(tokens[2].startOffset, 12) // 12: 。
103
- assert.strictEqual(tokens[3].startOffset, 13) // 13: eol
104
- assert.strictEqual(tokens[4].startOffset, 14) // 14-21: 「こんにちは」を
105
- assert.strictEqual(tokens[5].startOffset, 22) // 22-25: 表示する
106
- assert.strictEqual(tokens[6].startOffset, 26) // 26: 。
107
- })
108
- it('ソースマップ - 行コメント', async () => {
109
- const nako = new NakoCompiler()
110
- const tokens = nako.lex('# コメント').commentTokens
111
- assert.strictEqual(tokens[0].startOffset, 0)
112
- assert.strictEqual(tokens[0].endOffset, 6)
113
- })
114
- it('ソースマップ - 範囲コメント', async () => {
115
- const nako = new NakoCompiler()
116
- const tokens = nako.lex('/*\nここは全部コメント\nここは全部コメント\n*/').commentTokens
117
- assert.strictEqual(tokens[0].startOffset, 0)
118
- assert.strictEqual(tokens[0].endOffset, 25)
119
- })
120
- it('ソースマップ - 範囲コメントの直後に文字がある場合', async () => {
121
- const nako = new NakoCompiler()
122
- const result = nako.lex('/*\nここは全部コメント\nここは全部コメント\n*/a')
123
-
124
- // コメント
125
- assert.strictEqual(result.commentTokens[0].startOffset, 0)
126
- assert.strictEqual(result.commentTokens[0].endOffset, 25)
127
-
128
- // a
129
- assert.strictEqual(result.tokens[0].startOffset, 25)
130
- assert.strictEqual(result.tokens[0].endOffset, 26)
131
- })
132
- it('ソースマップ - "_"による改行', async () => {
133
- const nako = new NakoCompiler()
134
- const tokens = nako.lex('[_\n]\nりんごの値段は30').tokens
135
- const nedan = tokens.find((t) => t.value === '値段') || { startOffset: 0, endOffset: 0 }
136
- assert.strictEqual(nedan.startOffset, 9)
137
- assert.strictEqual(nedan.endOffset, 11)
138
- })
139
- it('ソースマップ - インデント構文', async () => {
140
- const nako = new NakoCompiler()
141
- const tokens = nako.lex('!インデント構文\n1回\n 「2」を表示\n\n「3」を表示').tokens
142
- // @ts-ignore
143
- assert.strictEqual(tokens.find((t) => t.value === '2').startOffset, 16) // 「1」を
144
- // @ts-ignore
145
- assert.strictEqual(tokens.find((t) => t.value === '3').startOffset, 24) // 「2」を
146
- })
147
- it('ソースマップ - string_ex', async () => {
148
- const nako = new NakoCompiler()
149
- const tokens = nako.lex('"{あ}"').tokens
150
- // @ts-ignore
151
- assert.strictEqual(tokens.find((t) => t.value === 'あ').startOffset, 2)
152
- // @ts-ignore
153
- assert.strictEqual(tokens.find((t) => t.value === 'あ').endOffset, 3)
154
- })
155
- it('「ならば」+「(全角|半角)空白」直後の改行が消える問題 #1015', async () => {
156
- await cmp('もし、3=3ならば \n『OK』と表示;違えば;「NG」と表示;ここまで。', 'OK')
157
- await cmp('もし、3=3ならば \n『OK』と表示;違えば;「NG」と表示;ここまで。', 'OK')
158
- })
159
- it('助詞の前後に空白があるとエラーになる問題 #1079', async () => {
160
- await cmp('x=1;x と 2 と "3" を連続表示', '123')
161
- })
162
- it('丸付き数字が変数名として使えない #1185', async () => {
163
- await cmp('⓪=0;①=1;㊿=50;❿=10;⓪+①+㊿+❿を表示', '61')
164
- })
165
- it('絵文字の四則演算を認識する #1183', async () => {
166
- await cmp('リンゴ🟰3✖5;ミカン🟰9➗3;リンゴ+ミカンを表示', '18')
167
- })
168
- })
@@ -1,73 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoCompiler } from '../src/nako3.mjs'
3
-
4
- describe('literal_test', async () => {
5
- const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
6
- const nako = new NakoCompiler()
7
- nako.logger.debug('code=' + code)
8
- assert.strictEqual((await nako.runAsync(code)).log, res)
9
- }
10
- const err = async (/** @type {string} */ code) => {
11
- const nako = new NakoCompiler()
12
- nako.logger.debug('code=' + code)
13
- try {
14
- await nako.runAsync(code)
15
- } catch (error) {
16
- assert.ok(error)
17
- return
18
- }
19
- assert.fail()
20
- }
21
- // --- test ---
22
- it('非数', async () => {
23
- await cmp('0/0を表示', 'NaN')
24
- await cmp('非数を表示', 'NaN')
25
- })
26
- it('無限大', async () => {
27
- await cmp('3/無限大を表示', '0')
28
- })
29
- describe('十進法のテスト', async () => {
30
- // 基本的に(整数部)(小数部)(指数部)です
31
- it('0', async () => {
32
- await cmp('0の変数型確認して表示', 'number')
33
- await cmp('013+014を表示', '27') // javascriptとは違い0から始まる7以下の数字だけで構成される数は八進数ではなく十進数として解釈されます
34
- })
35
- it('小数点', async () => {
36
- await cmp('.11の変数型確認して表示', 'number') // 小数点から始まっても数として解釈
37
- await cmp('222.の変数型確認して表示', 'number') // 逆に小数点で終わっても数として解釈
38
- err('123.$の変数型確認して表示') // しかしドットの後に定義されていない文字列をくっつけるとエラー
39
- })
40
- it('指数表記', async () => {
41
- await cmp('7e+8=7e8を表示', 'true') // 指数表記の+は省略可能
42
- await cmp('7.5e8の変数型確認して表示', 'number') // 小数と組み合わせることもできる
43
- await cmp('7.e8の変数型確認して表示', 'number') // もちろん小数部を省略しても数として解釈
44
- })
45
- })
46
- it('十六進法のテスト', async () => {
47
- await cmp('0x1dfの変数型確認して表示', 'number')
48
- })
49
- it('八進法のテスト', async () => {
50
- await cmp('0o157の変数型確認して表示', 'number')
51
- })
52
- it('二進法のテスト', async () => {
53
- await cmp('0b101の変数型確認して表示', 'number')
54
- })
55
- it('数値区切文字', async () => {
56
- await cmp('12345_00=123_4500を表示', 'true') // 区切り文字として「_」が使用できます
57
- await cmp('12345_00=1_23_4500を表示', 'true') // 数字の中でのどこでも使用できます
58
- err('1____23_4500を表示') // 連続して使うことはできません
59
- await cmp('_123を表示', 'undefined') // 区切り文字で始めることはできません(定義されていない変数「_123」の参照)
60
- err('123_を表示') // 区切り文字で終わらせることはできません
61
- await cmp('0xCAFE_F00Dの変数型確認して表示', 'number') // 十六進数でも
62
- await cmp('0o123456_777の変数型確認して表示', 'number') // 八進数でも
63
- await cmp('0b1111_0000の変数型確認して表示', 'number') // 二進数でも
64
- await cmp('101_475_938.322_8の変数型確認して表示', 'number') // 小数でも
65
- err('3_.1415の変数型確認して表示') // 小数点等の標識の前後では区切り文字は使えません
66
- err('3e_1415の変数型確認して表示')
67
- })
68
- it('単位のテスト #994', async () => {
69
- await cmp('30kgを表示', '30')
70
- await cmp('A=100円;Aを表示', '100')
71
- await cmp('B=300㎡;B=B+1㎡;Bを表示', '301')
72
- })
73
- })
@@ -1,35 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoLexer } from '../src/nako_lexer.mjs'
3
- import { NakoLogger } from '../src/nako_logger.mjs'
4
- import { NakoPrepare } from '../src/nako_prepare.mjs'
5
-
6
- describe('nako_lexer_test', () => {
7
- const lex = new NakoLexer(new NakoLogger())
8
- const pre = NakoPrepare.getInstance()
9
- // --- test ---
10
- it('トークンの区切りテスト', () => {
11
- const a = lex.tokenize('Nは30', 0, 'test.nako3')
12
- assert.strictEqual(NakoLexer.tokensToTypeStr(a, '|'), 'word|number')
13
- const b = lex.tokenize('もしN=30ならば', 0, 'test.nako3')
14
- assert.strictEqual(NakoLexer.tokensToTypeStr(b, '|'), 'もし|word|eq|number')
15
- })
16
- it('関数の登録テスト', () => {
17
- const code = '●AAAとは\n「あ」を表示\nここまで。\n'
18
- const code2 = pre.convert(code).map((v) => v.text).join('')
19
- const tok = lex.tokenize(code2, 0, 'test.nako3')
20
- /** @type {any} */
21
- const funclist = {}
22
- // @ts-ignore
23
- NakoLexer.preDefineFunc(tok, lex.logger, funclist)
24
- assert.strictEqual(funclist.test__AAA.type, 'func')
25
- })
26
- it('変数は登録しないというテスト', () => {
27
- const code = 'HOGE=333\n'
28
- const code2 = pre.convert(code).map((v) => v.text).join('')
29
- const tok = lex.tokenize(code2, 0, 'test.nako3')
30
- /** @type {any} */
31
- const funclist = {}
32
- NakoLexer.preDefineFunc(tok, lex.logger, funclist)
33
- assert.strictEqual(funclist.HOGE, undefined)
34
- })
35
- })
@@ -1,76 +0,0 @@
1
- import assert from 'assert';
2
- import { NakoColors } from '../src/nako_colors.mjs';
3
- import { NakoLogger } from '../src/nako_logger.mjs';
4
- describe('nako_logger_test', () => {
5
- it('色付けのテスト', () => {
6
- const out = NakoColors.convertColorTextFormat(`デフォルト${NakoColors.color.bold}太字${NakoColors.color.red}太字赤${NakoColors.color.reset}デフォルト<script>`);
7
- assert.strictEqual(out.noColor, 'デフォルト太字太字赤デフォルト<script>');
8
- assert.strictEqual(out.nodeConsole, 'デフォルト\u001b[1m太字\u001b[31m太字赤\u001b[0mデフォルト<script>\u001b[0m');
9
- assert.strictEqual(out.html, '<span>デフォルト</span><span style="color: inherit; font-weight: bold;">太字</span><span style="color: red; font-weight: bold;">太字赤</span><span style="color: inherit; font-weight: inherit;">デフォルト&lt;script&gt;</span>');
10
- assert.deepStrictEqual(out.browserConsole, [
11
- 'デフォルト%c太字%c太字赤%cデフォルト<script>',
12
- 'color: inherit; font-weight: bold;',
13
- 'color: red; font-weight: bold;',
14
- 'color: inherit; font-weight: inherit;'
15
- ]);
16
- });
17
- it('ログの取得のテスト', (done) => {
18
- const logger = new NakoLogger();
19
- logger.addListener('info', (data) => {
20
- assert.strictEqual(data.noColor, '[情報]main.nako3(2行目): foo');
21
- done();
22
- });
23
- logger.info('foo', {
24
- startOffset: 0,
25
- endOffset: 0,
26
- line: 1,
27
- file: 'main.nako3'
28
- });
29
- });
30
- it('複数のリスナーのテスト1', () => {
31
- const logger = new NakoLogger();
32
- let logStr = '';
33
- logger.addListener('info', (data) => { logStr += 'i'; });
34
- logger.addListener('error', (data) => { logStr += 'e'; });
35
- logger.addListener('stdout', (data) => { logStr += 's'; });
36
- logger.error('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
37
- assert.strictEqual(logStr, 'ie');
38
- });
39
- it('複数リスナーのテスト2', () => {
40
- const logger = new NakoLogger();
41
- let logStr = '';
42
- logger.addListener('info', (data) => { logStr += 'i'; });
43
- logger.addListener('error', (data) => { logStr += 'e'; });
44
- logger.addListener('stdout', (data) => { logStr += 's'; });
45
- logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
46
- assert.strictEqual(logStr, 'i');
47
- });
48
- it('複数リスナーのテスト3', () => {
49
- const logger = new NakoLogger();
50
- let logStr = '';
51
- logger.addListener('info', (data) => { logStr += 'i'; });
52
- logger.addListener('error', (data) => { logStr += 'e'; });
53
- logger.addListener('stdout', (data) => { logStr += 's'; });
54
- logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
55
- assert.strictEqual(logStr, 'ies');
56
- });
57
- it('複数リスナーのテスト4', () => {
58
- const logger = new NakoLogger();
59
- let logStr = '';
60
- logger.addListener('info', (data) => { logStr += 'i'; });
61
- logger.addListener('error', (data) => { logStr += 'e'; });
62
- logger.addListener('stdout', (data) => { logStr += 's'; });
63
- logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
64
- assert.strictEqual(logStr, 'ies');
65
- });
66
- it('複数リスナーのテスト5', () => {
67
- const logger = new NakoLogger();
68
- let logStr = '';
69
- logger.addListener('all', (data) => { logStr += 'a'; });
70
- logger.addListener('info', (data) => { logStr += 'i'; });
71
- logger.addListener('error', (data) => { logStr += 'e'; });
72
- logger.addListener('stdout', (data) => { logStr += 's'; });
73
- logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' });
74
- assert.strictEqual(logStr, 'ai');
75
- });
76
- });
@@ -1,78 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoColors } from '../src/nako_colors.mjs'
3
- import { NakoLogger } from '../src/nako_logger.mjs'
4
-
5
- describe('nako_logger_test', () => {
6
- it('色付けのテスト', () => {
7
- const out = NakoColors.convertColorTextFormat(`デフォルト${NakoColors.color.bold}太字${NakoColors.color.red}太字赤${NakoColors.color.reset}デフォルト<script>`)
8
- assert.strictEqual(out.noColor, 'デフォルト太字太字赤デフォルト<script>')
9
- assert.strictEqual(out.nodeConsole, 'デフォルト\u001b[1m太字\u001b[31m太字赤\u001b[0mデフォルト<script>\u001b[0m')
10
- assert.strictEqual(out.html, '<span>デフォルト</span><span style="color: inherit; font-weight: bold;">太字</span><span style="color: red; font-weight: bold;">太字赤</span><span style="color: inherit; font-weight: inherit;">デフォルト&lt;script&gt;</span>')
11
- assert.deepStrictEqual(out.browserConsole, [
12
- 'デフォルト%c太字%c太字赤%cデフォルト<script>',
13
- 'color: inherit; font-weight: bold;',
14
- 'color: red; font-weight: bold;',
15
- 'color: inherit; font-weight: inherit;'
16
- ])
17
- })
18
- it('ログの取得のテスト', (done) => {
19
- const logger = new NakoLogger()
20
- logger.addListener('info', (data) => {
21
- assert.strictEqual(data.noColor, '[情報]main.nako3(2行目): foo')
22
- done()
23
- })
24
- logger.info('foo', {
25
- startOffset: 0,
26
- endOffset: 0,
27
- line: 1,
28
- file: 'main.nako3'
29
- })
30
- })
31
- it('複数のリスナーのテスト1', () => {
32
- const logger = new NakoLogger()
33
- let logStr = ''
34
- logger.addListener('info', (data) => { logStr += 'i' })
35
- logger.addListener('error', (data) => { logStr += 'e' })
36
- logger.addListener('stdout', (data) => { logStr += 's' })
37
- logger.error('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
38
- assert.strictEqual(logStr, 'ie')
39
- })
40
- it('複数リスナーのテスト2', () => {
41
- const logger = new NakoLogger()
42
- let logStr = ''
43
- logger.addListener('info', (data) => { logStr += 'i' })
44
- logger.addListener('error', (data) => { logStr += 'e' })
45
- logger.addListener('stdout', (data) => { logStr += 's' })
46
- logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
47
- assert.strictEqual(logStr, 'i')
48
- })
49
- it('複数リスナーのテスト3', () => {
50
- const logger = new NakoLogger()
51
- let logStr = ''
52
- logger.addListener('info', (data) => { logStr += 'i' })
53
- logger.addListener('error', (data) => { logStr += 'e' })
54
- logger.addListener('stdout', (data) => { logStr += 's' })
55
- logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
56
- assert.strictEqual(logStr, 'ies')
57
- })
58
- it('複数リスナーのテスト4', () => {
59
- const logger = new NakoLogger()
60
- let logStr = ''
61
- logger.addListener('info', (data) => { logStr += 'i' })
62
- logger.addListener('error', (data) => { logStr += 'e' })
63
- logger.addListener('stdout', (data) => { logStr += 's' })
64
- logger.stdout('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
65
- assert.strictEqual(logStr, 'ies')
66
- })
67
- it('複数リスナーのテスト5', () => {
68
- const logger = new NakoLogger()
69
- let logStr = ''
70
- logger.addListener('all', (data) => { logStr += 'a' })
71
- logger.addListener('info', (data) => { logStr += 'i' })
72
- logger.addListener('error', (data) => { logStr += 'e' })
73
- logger.addListener('stdout', (data) => { logStr += 's' })
74
- logger.info('foo', { startOffset: 0, endOffset: 0, line: 1, file: 'main.nako3' })
75
- assert.strictEqual(logStr, 'ai')
76
- })
77
- })
78
-
@@ -1,38 +0,0 @@
1
- /* eslint-disable no-undef */
2
- import assert from 'assert'
3
- import { NakoCompiler } from '../src/nako3.mjs'
4
-
5
- // eslint-disable-next-line no-undef
6
- describe('plugin_csv_test', () => {
7
- const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
8
- const nako = new NakoCompiler()
9
- nako.logger.debug('code=' + code)
10
- const g = await nako.runAsync(code)
11
- assert.strictEqual(g.log, res)
12
- }
13
-
14
- // --- test ---
15
- it('CSV取得', async () => {
16
- await cmp('a=「1,2,3\n4,5,6」のCSV取得。a[1][2]を表示', '6')
17
- await cmp('a=「"a",b,c\n""a,b,c\na,""b,c\na,b,c""\n"a,\nb",c,d\na,"b,\nc",d\na,b,"c,\nd"」のCSV取得。a[5][1]を表示', 'b,\nc')
18
- await cmp('a=「1,"a""a",2」のCSV取得。a[0][1]を表示', 'a"a')
19
- await cmp('a=「1,"2""2",3\n4,5,6」のCSV取得。a[0][1]を表示', '2"2')
20
- await cmp('a=「1,,3\n4,5,6」のCSV取得。a[0][2]を表示', '3')
21
- await cmp('a=「1,2,3,\n4,5,6」のCSV取得。a[1][0]を表示', '4') // #353
22
- })
23
- it('TSV取得', async () => {
24
- await cmp('a=「1\t2\t3\n4\t5\t6」のTSV取得。a[1][2]を表示', '6')
25
- await cmp('a=「"a"\tb\tc\n""a\tb\tc\na\t""b\tc\na\tb\tc""\n"a\t\nb"\tc\td\na\t"b\t\nc"\td\na\tb\t"c\t\nd"」のTSV取得。a[5][1]を表示', 'b\t\nc')
26
- await cmp('a=「1\t"a""a"\t2」のTSV取得。a[0][1]を表示', 'a"a')
27
- await cmp('a=「1\t"2""2"\t3\n4\t5\t6」のTSV取得。a[0][1]を表示', '2"2')
28
- await cmp('a=「1\t\t3\n4\t5\t6」のTSV取得。a[0][2]を表示', '3')
29
- })
30
- it('表CSV変換', async () => {
31
- await cmp('[[1,2,3],[4,5,6]]を表CSV変換して表示', '1,2,3\r\n4,5,6')
32
- await cmp('[[1,2,"3\r\n,"],[4,5,6]]を表CSV変換して表示', '1,2,"3\r\n,"\r\n4,5,6')
33
- })
34
- it('表TSV変換', async () => {
35
- await cmp('[[1,2,3],[4,5,6]]を表TSV変換して表示', '1\t2\t3\r\n4\t5\t6')
36
- await cmp('[[1,2,"3\r\n\t"],[4,5,6]]を表TSV変換して表示', '1\t2\t"3\r\n\t"\r\n4\t5\t6')
37
- })
38
- })
@@ -1,18 +0,0 @@
1
- import assert from 'assert'
2
- import { NakoCompiler } from '../src/nako3.mjs'
3
-
4
- // eslint-disable-next-line no-undef
5
- describe('plugin_promise_test', () => {
6
- const cmp = async (/** @type {string} */ code, /** @type {string} */ res) => {
7
- const nako = new NakoCompiler()
8
- nako.logger.debug('code=' + code)
9
- const g = nako.runSync(code)
10
- assert.strictEqual(g.log, res)
11
- }
12
- // --- test ---
13
- // eslint-disable-next-line no-undef
14
- it('Promise', async () => {
15
- cmp('Fは動いた時には(成功,失敗)\n成功(9)\nここまで\nFの成功した時には\n対象を表示\nここまで\nその失敗した時には\n"NG"を表示\nここまで', '9')
16
- cmp('Fは動いた時には(成功,失敗)\n失敗(5)\nここまで\nFの成功した時には\n"NG"を表示\nここまで\nその失敗した時には\n対象を表示\nここまで', '5')
17
- })
18
- })