nadesiko3 3.3.63 → 3.3.64
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.
- package/batch/command.txt +15 -15
- package/core/package.json +4 -1
- package/core/src/nako3.mjs +5 -2
- package/core/src/nako3.mts +5 -4
- package/core/src/nako_core_version.mjs +2 -2
- package/core/src/nako_core_version.mts +2 -2
- package/core/src/nako_from_dncl.mjs +0 -254
- package/core/src/nako_from_dncl.mts +0 -247
- package/core/src/nako_from_dncl2.mjs +313 -0
- package/core/src/nako_from_dncl2.mts +299 -0
- package/core/src/nako_gen.mjs +1 -1
- package/core/src/nako_gen.mts +1 -1
- package/core/src/nako_indent_inline.mjs +152 -34
- package/core/src/nako_indent_inline.mts +132 -34
- package/core/src/nako_lex_rules.mjs +3 -2
- package/core/src/nako_lex_rules.mts +3 -2
- package/core/src/nako_lexer.mjs +27 -3
- package/core/src/nako_lexer.mts +27 -3
- package/core/src/nako_parser3.mjs +45 -14
- package/core/src/nako_parser3.mts +40 -18
- package/core/src/nako_prepare.mjs +13 -0
- package/core/src/nako_prepare.mts +11 -0
- package/core/src/nako_tools.mjs +53 -0
- package/core/src/nako_tools.mts +46 -0
- package/core/test/basic_test.mjs +16 -8
- package/core/test/dncl2_test.mjs +207 -0
- package/core/test/flow_test.mjs +42 -0
- package/core/test/indent_test.mjs +74 -50
- package/core/test/inline_indent_test.mjs +47 -0
- package/core/test/lex_test.mjs +1 -0
- package/demo/js/a.js +30 -0
- package/package.json +1 -1
- package/release/_hash.txt +16 -16
- package/release/_script-tags.txt +14 -14
- package/release/nako_gen_async.js +1 -1
- package/release/stats.json +1 -1
- package/release/version.js +1 -1
- package/release/wnako3.js +1 -1
- package/release/wnako3webworker.js +1 -1
- package/src/cnako3mod.mjs +43 -33
- package/src/cnako3mod.mts +45 -35
- package/src/nako_version.mjs +2 -2
- package/src/nako_version.mts +2 -2
- package/src/plugin_browser_canvas.mjs +5 -0
package/batch/command.txt
CHANGED
|
@@ -532,21 +532,21 @@
|
|
|
532
532
|
| 関数 | 楕円描画 | ARGSへ/ARGSに/ARGSの | [x, y, x幅, y幅, 回転, 開始角, 終了角, 左回転か]に楕円を描画する | だえんびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L154
|
|
533
533
|
| 関数 | 多角形描画 | Aで/Aの/Aを | 座標配列vを指定して多角形を描画する | たかっけいびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L176
|
|
534
534
|
| 関数 | 画像読 | URLの/URLを | 画像のURLを読み込んでImageオブジェクトを返す。(URLにdataスキームも指定可能) | がぞうよむ | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L196
|
|
535
|
-
| 関数 | 画像逐次読 | URLの/URLを | 画像のURLを読み込んでImageオブジェクトを返す。また完了時『対象』にも代入する。『逐次実行』構文で使う。 | がぞうちくじよむ | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
536
|
-
| 関数 | 画像読時 | FでURLの/URLを | 画像のURLを読み込んでコールバック関数Fを読み込み、変数『対象』にImageオブジェクトを代入する | がぞうよんだとき | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
537
|
-
| 関数 | 画像描画 | IMGのXYへ/IMGをXYに | 画像IMG(またはURL)を描画先座標[x,y]へ描画し、Imageオブジェクトを返す。座標には2,4,8個の引数を指定可能。 | がぞうびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
538
|
-
| 関数 | 画像部分描画 | IMGのSXYをDXYへ/SXYからDXYに | 画像IMG(またはURL)の座標[sx, sy, sw, sh]を描画先座標[dx, dy, dw, dh]へ描画し、Imageオブジェクトを返す | がぞうぶぶんびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
539
|
-
| 関数 | 描画フォント設定 | Nを/Nの/Nで/Nに | 描画フォントを指定する(CSSのフォント設定と同じ 例「36px Aria」)。フォントサイズのみの指定も可。 | びょうがふぉんとせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
540
|
-
| 関数 | 文字描画 | XYへSの/XYにSを | [x, y]へテキストSを描画する(描画フォント設定でサイズなど指定) | もじびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
541
|
-
| 関数 | 文字描画幅取得 | Sの | テキストSを指定して文字の描画幅を取得する | もじびょうがはばしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
542
|
-
| 関数 | 描画起点設定 | XYへ/XYに | 描画位置の起点を[x,y]へ設定する(translate) | びょうがきてんせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
543
|
-
| 関数 | 描画回転 | Aだけ/Aに/Aへ | 描画内容をA度だけ回転する(rotate) | びょうがかいてん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
544
|
-
| 関数 | 描画拡大 | XYだけ/XYに/XYへ | 描画内容を[x方向,y方向]だけ拡大する(scale) | びょうがかくだい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
545
|
-
| 関数 | 描画変換マトリクス設定 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]の変換マトリクスに設定。既存内容を破棄して設定(setTransform) | びょうがへんかんまとりくすせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
546
|
-
| 関数 | 描画変換マトリクス追加 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]のマトリクスで変換。既存のマトリクスに掛け合わせる(transform) | びょうがへんかんまとりくすついか | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
547
|
-
| 関数 | 描画データURL変換 | | 描画内容をPNG形式のデータURLに変換して得る。 | びょうがでーたURLへんかん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
548
|
-
| 関数 | 描画ダウンロードリンク作成 | DOMへ/DOMに | 描画内容をPNG形式のデータURLに変換してDOMに設定する。 | びょうがだうんろーどりんくさくせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
549
|
-
| 関数 | 描画ダウンロード | | 描画内容をPNG形式のデータURLに変換してダウンロードする。(「クリックした時」などと組み合わせて使う) | びょうがだうんろーど | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#
|
|
535
|
+
| 関数 | 画像逐次読 | URLの/URLを | 画像のURLを読み込んでImageオブジェクトを返す。また完了時『対象』にも代入する。『逐次実行』構文で使う。 | がぞうちくじよむ | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L207
|
|
536
|
+
| 関数 | 画像読時 | FでURLの/URLを | 画像のURLを読み込んでコールバック関数Fを読み込み、変数『対象』にImageオブジェクトを代入する | がぞうよんだとき | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L228
|
|
537
|
+
| 関数 | 画像描画 | IMGのXYへ/IMGをXYに | 画像IMG(またはURL)を描画先座標[x,y]へ描画し、Imageオブジェクトを返す。座標には2,4,8個の引数を指定可能。 | がぞうびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L250
|
|
538
|
+
| 関数 | 画像部分描画 | IMGのSXYをDXYへ/SXYからDXYに | 画像IMG(またはURL)の座標[sx, sy, sw, sh]を描画先座標[dx, dy, dw, dh]へ描画し、Imageオブジェクトを返す | がぞうぶぶんびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L282
|
|
539
|
+
| 関数 | 描画フォント設定 | Nを/Nの/Nで/Nに | 描画フォントを指定する(CSSのフォント設定と同じ 例「36px Aria」)。フォントサイズのみの指定も可。 | びょうがふぉんとせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L334
|
|
540
|
+
| 関数 | 文字描画 | XYへSの/XYにSを | [x, y]へテキストSを描画する(描画フォント設定でサイズなど指定) | もじびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L349
|
|
541
|
+
| 関数 | 文字描画幅取得 | Sの | テキストSを指定して文字の描画幅を取得する | もじびょうがはばしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L359
|
|
542
|
+
| 関数 | 描画起点設定 | XYへ/XYに | 描画位置の起点を[x,y]へ設定する(translate) | びょうがきてんせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L369
|
|
543
|
+
| 関数 | 描画回転 | Aだけ/Aに/Aへ | 描画内容をA度だけ回転する(rotate) | びょうがかいてん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L379
|
|
544
|
+
| 関数 | 描画拡大 | XYだけ/XYに/XYへ | 描画内容を[x方向,y方向]だけ拡大する(scale) | びょうがかくだい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L389
|
|
545
|
+
| 関数 | 描画変換マトリクス設定 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]の変換マトリクスに設定。既存内容を破棄して設定(setTransform) | びょうがへんかんまとりくすせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L399
|
|
546
|
+
| 関数 | 描画変換マトリクス追加 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]のマトリクスで変換。既存のマトリクスに掛け合わせる(transform) | びょうがへんかんまとりくすついか | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L409
|
|
547
|
+
| 関数 | 描画データURL変換 | | 描画内容をPNG形式のデータURLに変換して得る。 | びょうがでーたURLへんかん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L419
|
|
548
|
+
| 関数 | 描画ダウンロードリンク作成 | DOMへ/DOMに | 描画内容をPNG形式のデータURLに変換してDOMに設定する。 | びょうがだうんろーどりんくさくせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L429
|
|
549
|
+
| 関数 | 描画ダウンロード | | 描画内容をPNG形式のデータURLに変換してダウンロードする。(「クリックした時」などと組み合わせて使う) | びょうがだうんろーど | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L443
|
|
550
550
|
●位置情報
|
|
551
551
|
| 関数 | 位置情報取得時 | FUNCの/FUNCに/FUNCへ | 位置情報を取得してコールバック関数内で変数「対象」に配列で[緯度,経度]を返す | いちじょうほうしゅとくしたとき | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_geolocation.mjs#L8
|
|
552
552
|
| 関数 | 位置情報監視時 | FUNCの/FUNCに/FUNCへ | 位置情報を監視してIDを返す。引数に指定したコールバック関数内で変数「対象」に配列で[緯度,経度]を返す | いちじょうほうかんししたとき | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_geolocation.mjs#L27
|
package/core/package.json
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "nadesiko3core",
|
|
3
|
-
"version": "3.3.
|
|
3
|
+
"version": "3.3.64",
|
|
4
4
|
"description": "Japanese Programming Language Nadesiko v3 core",
|
|
5
5
|
"main": "index.mjs",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"test": "mocha ./test",
|
|
9
|
+
"test:dncl2": "mocha ./test/dncl2_test.mjs",
|
|
10
|
+
"test:indent": "mocha ./test/indent_test.mjs",
|
|
11
|
+
"test:indent_inline": "mocha ./test/inline_indent_test.mjs",
|
|
9
12
|
"tsc": "tsc --watch",
|
|
10
13
|
"build": "cnako3 batch/build_nako_version.nako3 && tsc",
|
|
11
14
|
"eslint": "eslint ./src/*.mts",
|
package/core/src/nako3.mjs
CHANGED
|
@@ -6,6 +6,7 @@ import { generateJS, NakoGenOptions } from './nako_gen.mjs';
|
|
|
6
6
|
import { NakoGenASync } from './nako_gen_async.mjs';
|
|
7
7
|
import { convertInlineIndent, convertIndentSyntax } from './nako_indent_inline.mjs';
|
|
8
8
|
import { convertDNCL } from './nako_from_dncl.mjs';
|
|
9
|
+
import { convertDNCL2 } from './nako_from_dncl2.mjs';
|
|
9
10
|
import { SourceMappingOfTokenization, SourceMappingOfIndentSyntax, OffsetToLineColumn, subtractSourceMapByPreCodeLength } from './nako_source_mapping.mjs';
|
|
10
11
|
import { NakoLexerError, NakoImportError, NakoSyntaxError, InternalLexerError } from './nako_errors.mjs';
|
|
11
12
|
import { NakoLogger } from './nako_logger.mjs';
|
|
@@ -275,12 +276,14 @@ export class NakoCompiler {
|
|
|
275
276
|
const map = subtractSourceMapByPreCodeLength({ ...dest, line }, preCode);
|
|
276
277
|
throw new NakoLexerError(err.msg, map.startOffset, map.endOffset, map.line, filename);
|
|
277
278
|
}
|
|
279
|
+
// DNCL ver2 (core #41)
|
|
280
|
+
tokens = convertDNCL2(tokens);
|
|
281
|
+
// DNCL ver1 (#1140)
|
|
282
|
+
tokens = convertDNCL(tokens);
|
|
278
283
|
// インデント構文を変換 #596
|
|
279
284
|
tokens = convertIndentSyntax(tokens);
|
|
280
285
|
// インラインインデントを変換 #1215
|
|
281
286
|
tokens = convertInlineIndent(tokens);
|
|
282
|
-
// DNCL構文 (#1140)
|
|
283
|
-
tokens = convertDNCL(tokens);
|
|
284
287
|
// ソースコード上の位置に変換
|
|
285
288
|
tokens = tokens.map((token) => {
|
|
286
289
|
const dest = indentationSyntaxSourceMapping.map(tokenizationSourceMapping.map(token.preprocessedCodeOffset || 0), tokenizationSourceMapping.map((token.preprocessedCodeOffset || 0) + (token.preprocessedCodeLength || 0)));
|
package/core/src/nako3.mts
CHANGED
|
@@ -11,6 +11,7 @@ import { NakoGen, generateJS, NakoGenOptions, NakoGenResult } from './nako_gen.m
|
|
|
11
11
|
import { NakoGenASync } from './nako_gen_async.mjs'
|
|
12
12
|
import { convertInlineIndent, convertIndentSyntax } from './nako_indent_inline.mjs'
|
|
13
13
|
import { convertDNCL } from './nako_from_dncl.mjs'
|
|
14
|
+
import { convertDNCL2 } from './nako_from_dncl2.mjs'
|
|
14
15
|
import { SourceMappingOfTokenization, SourceMappingOfIndentSyntax, OffsetToLineColumn, subtractSourceMapByPreCodeLength } from './nako_source_mapping.mjs'
|
|
15
16
|
import { NakoLexerError, NakoImportError, NakoSyntaxError, InternalLexerError } from './nako_errors.mjs'
|
|
16
17
|
import { NakoLogger } from './nako_logger.mjs'
|
|
@@ -355,15 +356,15 @@ export class NakoCompiler {
|
|
|
355
356
|
const map = subtractSourceMapByPreCodeLength({ ...dest, line }, preCode)
|
|
356
357
|
throw new NakoLexerError(err.msg, map.startOffset, map.endOffset, map.line, filename)
|
|
357
358
|
}
|
|
359
|
+
// DNCL ver2 (core #41)
|
|
360
|
+
tokens = convertDNCL2(tokens)
|
|
361
|
+
// DNCL ver1 (#1140)
|
|
362
|
+
tokens = convertDNCL(tokens)
|
|
358
363
|
// インデント構文を変換 #596
|
|
359
364
|
tokens = convertIndentSyntax(tokens)
|
|
360
|
-
|
|
361
365
|
// インラインインデントを変換 #1215
|
|
362
366
|
tokens = convertInlineIndent(tokens)
|
|
363
367
|
|
|
364
|
-
// DNCL構文 (#1140)
|
|
365
|
-
tokens = convertDNCL(tokens)
|
|
366
|
-
|
|
367
368
|
// ソースコード上の位置に変換
|
|
368
369
|
tokens = tokens.map((token) => {
|
|
369
370
|
const dest = indentationSyntaxSourceMapping.map(
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* DNCLに対応する構文
|
|
3
3
|
*/
|
|
4
4
|
// import { NakoIndentError } from './nako_errors.mjs'
|
|
5
|
-
import { NakoPrepare, checkNakoMode } from './nako_prepare.mjs';
|
|
6
5
|
import { NewEmptyToken } from './nako_types.mjs';
|
|
7
6
|
import { joinTokenLines, splitTokens } from './nako_indent_inline.mjs';
|
|
8
7
|
// DNCLモードのキーワード
|
|
@@ -198,7 +197,6 @@ export function convertDNCL(tokens) {
|
|
|
198
197
|
}
|
|
199
198
|
j++;
|
|
200
199
|
}
|
|
201
|
-
//console.log('@@@', line)
|
|
202
200
|
}
|
|
203
201
|
// 最後に単純な置換を行う
|
|
204
202
|
for (let i = 0; i < tokens.length; i++) {
|
|
@@ -208,15 +206,7 @@ export function convertDNCL(tokens) {
|
|
|
208
206
|
t.type = a[0];
|
|
209
207
|
t.value = a[1];
|
|
210
208
|
}
|
|
211
|
-
// console.log(t)
|
|
212
209
|
}
|
|
213
|
-
/*
|
|
214
|
-
// 表示
|
|
215
|
-
lines.map(line => {
|
|
216
|
-
console.log(line.map(t => t.type + '_' + ('' + t.value).replace('\n', '') + t.josi).join(' | '))
|
|
217
|
-
})
|
|
218
|
-
console.log('===')
|
|
219
|
-
*/
|
|
220
210
|
tokens = joinTokenLines(lines);
|
|
221
211
|
return tokens;
|
|
222
212
|
}
|
|
@@ -290,250 +280,6 @@ function useDNCLmode(tokens) {
|
|
|
290
280
|
}
|
|
291
281
|
return false;
|
|
292
282
|
}
|
|
293
|
-
/**
|
|
294
|
-
* DNCLのソースコードをなでしこに変換する
|
|
295
|
-
* @param src
|
|
296
|
-
* @param filename
|
|
297
|
-
* @returns converted soruce
|
|
298
|
-
*/
|
|
299
|
-
export function convertDNCLfromCode(src, filename) {
|
|
300
|
-
// 改行を合わせる
|
|
301
|
-
src = src.replace(/(\r\n|\r)/g, '\n');
|
|
302
|
-
// 「!DNCLモード」を使うかチェック
|
|
303
|
-
if (!checkNakoMode(src, DNCL_KEYWORDS)) {
|
|
304
|
-
return src;
|
|
305
|
-
}
|
|
306
|
-
const result = dncl2nako(src, filename);
|
|
307
|
-
// console.log("=====\n" + result)
|
|
308
|
-
// process.exit()
|
|
309
|
-
return result;
|
|
310
|
-
}
|
|
311
|
-
/**
|
|
312
|
-
* make space string
|
|
313
|
-
* @param {number} n
|
|
314
|
-
*/
|
|
315
|
-
function makeSpaces(n) {
|
|
316
|
-
let s = '';
|
|
317
|
-
for (let i = 0; i < n; i++) {
|
|
318
|
-
s += ' ';
|
|
319
|
-
}
|
|
320
|
-
return s;
|
|
321
|
-
}
|
|
322
|
-
/**
|
|
323
|
-
* DNCLからなでしこに変換する(判定なし)
|
|
324
|
-
* @param {string} src
|
|
325
|
-
* @param {string} filename
|
|
326
|
-
* @returns {string} converted source
|
|
327
|
-
*/
|
|
328
|
-
function dncl2nako(src, filename) {
|
|
329
|
-
// 全角半角を統一
|
|
330
|
-
src = conv2half(src);
|
|
331
|
-
// 行頭の「|」はインデントを表す記号なので無視する
|
|
332
|
-
// 後判定の「繰り返し,」を「後判定で繰り返す」に置換する
|
|
333
|
-
const a = src.split('\n');
|
|
334
|
-
for (let i = 0; i < a.length; i++) {
|
|
335
|
-
// インデントを消す
|
|
336
|
-
let line = a[i];
|
|
337
|
-
a[i] = line.replace(/^(\s*[|\s]+)(.*$)/, (m0, m1, m2) => {
|
|
338
|
-
return makeSpaces(m1.length) + m2;
|
|
339
|
-
});
|
|
340
|
-
line = a[i];
|
|
341
|
-
// 後判定の繰り返しの実装のため
|
|
342
|
-
const line2 = line.replace(/^\s+/, '').replace(/\s+$/, '');
|
|
343
|
-
if (line2 === '繰り返し,' || line2 === '繰り返し') {
|
|
344
|
-
a[i] = '後判定で繰り返し';
|
|
345
|
-
}
|
|
346
|
-
const r = line.match(/^\s*を,?(.+)になるまで(繰り返す|実行する)/);
|
|
347
|
-
if (r) {
|
|
348
|
-
a[i] = `ここまで、(${r[1]})になるまでの間`;
|
|
349
|
-
continue;
|
|
350
|
-
}
|
|
351
|
-
// 『もしj>hakosuならばhakosu←jを実行する』のような単文のもし文
|
|
352
|
-
const rif = line.match(/^もし(.+)を実行する(。|.)*/);
|
|
353
|
-
if (rif) {
|
|
354
|
-
const sent = dncl2nako(rif[1], filename);
|
|
355
|
-
a[i] = `もし、${sent};`;
|
|
356
|
-
continue;
|
|
357
|
-
}
|
|
358
|
-
// 'のすべての値を0にする'
|
|
359
|
-
// 'のすべての要素を0にする'
|
|
360
|
-
// 'のすべての要素に0を代入する'
|
|
361
|
-
const rall = line.match(/^(.+?)のすべての(要素|値)(を|に)(.+?)(にする|を代入)/);
|
|
362
|
-
if (rall) {
|
|
363
|
-
const varname = rall[1];
|
|
364
|
-
const v = rall[4];
|
|
365
|
-
a[i] = `${varname} = [${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v},${v}]`;
|
|
366
|
-
continue;
|
|
367
|
-
}
|
|
368
|
-
}
|
|
369
|
-
src = a.join('\n');
|
|
370
|
-
// ---------------------------------
|
|
371
|
-
// 置換開始
|
|
372
|
-
// ---------------------------------
|
|
373
|
-
// 単純置換リスト
|
|
374
|
-
const simpleConvList = {
|
|
375
|
-
'を実行する': 'ここまで',
|
|
376
|
-
'を実行し,そうでなくもし': '違えば、もし',
|
|
377
|
-
'を実行し,そうでなくもし': '違えば、もし',
|
|
378
|
-
'を実行し、そうでなくもし': '違えば、もし',
|
|
379
|
-
'を実行し,そうでなければ': '違えば',
|
|
380
|
-
'を実行し,そうでなければ': '違えば',
|
|
381
|
-
'を実行し、そうでなければ': '違えば',
|
|
382
|
-
'を繰り返す': 'ここまで',
|
|
383
|
-
'改行なしで表示': '連続無改行表示',
|
|
384
|
-
'ずつ増やしながら': 'ずつ増やし繰り返す',
|
|
385
|
-
'ずつ減らしながら': 'ずつ減らし繰り返す',
|
|
386
|
-
'二進で表示': '二進表示',
|
|
387
|
-
'でないならば': 'でなければ'
|
|
388
|
-
};
|
|
389
|
-
const nextChar = () => {
|
|
390
|
-
const ch = src.charAt(0);
|
|
391
|
-
src = src.substring(1);
|
|
392
|
-
return ch;
|
|
393
|
-
};
|
|
394
|
-
// 文字列を判定するフラグ
|
|
395
|
-
let flagStr = false;
|
|
396
|
-
let poolStr = '';
|
|
397
|
-
let endStr = '';
|
|
398
|
-
// 結果
|
|
399
|
-
let result = '';
|
|
400
|
-
while (src !== '') {
|
|
401
|
-
// 代入記号を変更
|
|
402
|
-
const ch = src.charAt(0);
|
|
403
|
-
if (flagStr) {
|
|
404
|
-
if (ch === endStr) {
|
|
405
|
-
result += poolStr + endStr;
|
|
406
|
-
poolStr = '';
|
|
407
|
-
flagStr = false;
|
|
408
|
-
nextChar();
|
|
409
|
-
continue;
|
|
410
|
-
}
|
|
411
|
-
poolStr += nextChar();
|
|
412
|
-
continue;
|
|
413
|
-
}
|
|
414
|
-
// 文字列?
|
|
415
|
-
if (ch === '"') {
|
|
416
|
-
flagStr = true;
|
|
417
|
-
endStr = '"';
|
|
418
|
-
poolStr = nextChar();
|
|
419
|
-
continue;
|
|
420
|
-
}
|
|
421
|
-
if (ch === '「') {
|
|
422
|
-
flagStr = true;
|
|
423
|
-
endStr = '」';
|
|
424
|
-
poolStr = nextChar();
|
|
425
|
-
continue;
|
|
426
|
-
}
|
|
427
|
-
if (ch === '『') {
|
|
428
|
-
flagStr = true;
|
|
429
|
-
endStr = '』';
|
|
430
|
-
poolStr = nextChar();
|
|
431
|
-
continue;
|
|
432
|
-
}
|
|
433
|
-
// 空白を飛ばす
|
|
434
|
-
if (ch === ' ' || ch === ' ' || ch === '\t') {
|
|
435
|
-
result += nextChar();
|
|
436
|
-
continue;
|
|
437
|
-
}
|
|
438
|
-
// 表示を連続表示に置き換える
|
|
439
|
-
const ch3 = src.substring(0, 3);
|
|
440
|
-
if (ch3 === 'を表示') {
|
|
441
|
-
result += 'を連続表示';
|
|
442
|
-
src = src.substring(3);
|
|
443
|
-
continue;
|
|
444
|
-
}
|
|
445
|
-
if (src.substring(0, 4) === 'を 表示') {
|
|
446
|
-
result += 'を連続表示';
|
|
447
|
-
src = src.substring(4);
|
|
448
|
-
continue;
|
|
449
|
-
}
|
|
450
|
-
// 乱数を乱数範囲に置き換える
|
|
451
|
-
if (src.substring(0, 2) === '乱数' && src.substring(0, 4) !== '乱数範囲') {
|
|
452
|
-
result += '乱数範囲';
|
|
453
|
-
src = src.substring(2);
|
|
454
|
-
continue;
|
|
455
|
-
}
|
|
456
|
-
// 増やす・減らすの前に「だけ」を追加する #1149
|
|
457
|
-
if (ch3 === '増やす' || ch3 === '減らす') {
|
|
458
|
-
if (result.substring(result.length - 2) !== 'だけ') {
|
|
459
|
-
result += 'だけ';
|
|
460
|
-
}
|
|
461
|
-
result += ch3;
|
|
462
|
-
src = src.substring(3);
|
|
463
|
-
}
|
|
464
|
-
// 一覧から単純な変換
|
|
465
|
-
let flag = false;
|
|
466
|
-
for (const key in simpleConvList) {
|
|
467
|
-
const srcKey = src.substring(0, key.length);
|
|
468
|
-
if (srcKey === key) {
|
|
469
|
-
result += simpleConvList[key];
|
|
470
|
-
src = src.substring(key.length);
|
|
471
|
-
flag = true;
|
|
472
|
-
break;
|
|
473
|
-
}
|
|
474
|
-
}
|
|
475
|
-
if (flag) {
|
|
476
|
-
continue;
|
|
477
|
-
}
|
|
478
|
-
// 1文字削る
|
|
479
|
-
result += nextChar();
|
|
480
|
-
}
|
|
481
|
-
return result;
|
|
482
|
-
}
|
|
483
|
-
/**
|
|
484
|
-
* 半角に変換
|
|
485
|
-
* @param {String} src
|
|
486
|
-
* @returns {string} converted source
|
|
487
|
-
*/
|
|
488
|
-
function conv2half(src) {
|
|
489
|
-
const prepare = NakoPrepare.getInstance(); // `※`, `//`, `/*` といったパターン全てに対応するために必要
|
|
490
|
-
// 全角半角の統一
|
|
491
|
-
let result = '';
|
|
492
|
-
let flagStr = false;
|
|
493
|
-
let flagStrClose = '';
|
|
494
|
-
for (let i = 0; i < src.length; i++) {
|
|
495
|
-
const c = src.charAt(i);
|
|
496
|
-
let cHalf = prepare.convert1ch(c);
|
|
497
|
-
if (flagStr) {
|
|
498
|
-
if (cHalf === flagStrClose) {
|
|
499
|
-
flagStr = false;
|
|
500
|
-
flagStrClose = '';
|
|
501
|
-
result += cHalf;
|
|
502
|
-
continue;
|
|
503
|
-
}
|
|
504
|
-
result += c;
|
|
505
|
-
continue;
|
|
506
|
-
}
|
|
507
|
-
if (cHalf === '「') {
|
|
508
|
-
flagStr = true;
|
|
509
|
-
flagStrClose = '」';
|
|
510
|
-
result += cHalf;
|
|
511
|
-
continue;
|
|
512
|
-
}
|
|
513
|
-
if (cHalf === '"') {
|
|
514
|
-
flagStr = true;
|
|
515
|
-
flagStrClose = '"';
|
|
516
|
-
result += cHalf;
|
|
517
|
-
continue;
|
|
518
|
-
}
|
|
519
|
-
// 単純な置き換えはここでやってしまう
|
|
520
|
-
// 配列記号の { ... } を [ ... ] に置換
|
|
521
|
-
if (cHalf === '{') {
|
|
522
|
-
cHalf = '[';
|
|
523
|
-
}
|
|
524
|
-
if (cHalf === '}') {
|
|
525
|
-
cHalf = ']';
|
|
526
|
-
}
|
|
527
|
-
if (cHalf === '←') {
|
|
528
|
-
cHalf = '=';
|
|
529
|
-
}
|
|
530
|
-
if (cHalf === '÷') {
|
|
531
|
-
cHalf = '÷÷';
|
|
532
|
-
} // #1152
|
|
533
|
-
result += cHalf;
|
|
534
|
-
}
|
|
535
|
-
return result;
|
|
536
|
-
}
|
|
537
283
|
export const NakoDncl = {
|
|
538
284
|
convert: convertDNCL
|
|
539
285
|
};
|