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.
Files changed (44) hide show
  1. package/batch/command.txt +15 -15
  2. package/core/package.json +4 -1
  3. package/core/src/nako3.mjs +5 -2
  4. package/core/src/nako3.mts +5 -4
  5. package/core/src/nako_core_version.mjs +2 -2
  6. package/core/src/nako_core_version.mts +2 -2
  7. package/core/src/nako_from_dncl.mjs +0 -254
  8. package/core/src/nako_from_dncl.mts +0 -247
  9. package/core/src/nako_from_dncl2.mjs +313 -0
  10. package/core/src/nako_from_dncl2.mts +299 -0
  11. package/core/src/nako_gen.mjs +1 -1
  12. package/core/src/nako_gen.mts +1 -1
  13. package/core/src/nako_indent_inline.mjs +152 -34
  14. package/core/src/nako_indent_inline.mts +132 -34
  15. package/core/src/nako_lex_rules.mjs +3 -2
  16. package/core/src/nako_lex_rules.mts +3 -2
  17. package/core/src/nako_lexer.mjs +27 -3
  18. package/core/src/nako_lexer.mts +27 -3
  19. package/core/src/nako_parser3.mjs +45 -14
  20. package/core/src/nako_parser3.mts +40 -18
  21. package/core/src/nako_prepare.mjs +13 -0
  22. package/core/src/nako_prepare.mts +11 -0
  23. package/core/src/nako_tools.mjs +53 -0
  24. package/core/src/nako_tools.mts +46 -0
  25. package/core/test/basic_test.mjs +16 -8
  26. package/core/test/dncl2_test.mjs +207 -0
  27. package/core/test/flow_test.mjs +42 -0
  28. package/core/test/indent_test.mjs +74 -50
  29. package/core/test/inline_indent_test.mjs +47 -0
  30. package/core/test/lex_test.mjs +1 -0
  31. package/demo/js/a.js +30 -0
  32. package/package.json +1 -1
  33. package/release/_hash.txt +16 -16
  34. package/release/_script-tags.txt +14 -14
  35. package/release/nako_gen_async.js +1 -1
  36. package/release/stats.json +1 -1
  37. package/release/version.js +1 -1
  38. package/release/wnako3.js +1 -1
  39. package/release/wnako3webworker.js +1 -1
  40. package/src/cnako3mod.mjs +43 -33
  41. package/src/cnako3mod.mts +45 -35
  42. package/src/nako_version.mjs +2 -2
  43. package/src/nako_version.mts +2 -2
  44. 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#L206
536
- | 関数 | 画像読時 | FでURLの/URLを | 画像のURLを読み込んでコールバック関数Fを読み込み、変数『対象』にImageオブジェクトを代入する | がぞうよんだとき | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L226
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#L247
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#L278
539
- | 関数 | 描画フォント設定 | Nを/Nの/Nで/Nに | 描画フォントを指定する(CSSのフォント設定と同じ 例「36px Aria」)。フォントサイズのみの指定も可。 | びょうがふぉんとせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L329
540
- | 関数 | 文字描画 | XYへSの/XYにSを | [x, y]へテキストSを描画する(描画フォント設定でサイズなど指定) | もじびょうが | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L344
541
- | 関数 | 文字描画幅取得 | Sの | テキストSを指定して文字の描画幅を取得する | もじびょうがはばしゅとく | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L354
542
- | 関数 | 描画起点設定 | XYへ/XYに | 描画位置の起点を[x,y]へ設定する(translate) | びょうがきてんせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L364
543
- | 関数 | 描画回転 | Aだけ/Aに/Aへ | 描画内容をA度だけ回転する(rotate) | びょうがかいてん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L374
544
- | 関数 | 描画拡大 | XYだけ/XYに/XYへ | 描画内容を[x方向,y方向]だけ拡大する(scale) | びょうがかくだい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L384
545
- | 関数 | 描画変換マトリクス設定 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]の変換マトリクスに設定。既存内容を破棄して設定(setTransform) | びょうがへんかんまとりくすせってい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L394
546
- | 関数 | 描画変換マトリクス追加 | Aだけ/Aに/Aへ | 描画内容を[a,b,c,d,e,f]のマトリクスで変換。既存のマトリクスに掛け合わせる(transform) | びょうがへんかんまとりくすついか | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L404
547
- | 関数 | 描画データURL変換 | | 描画内容をPNG形式のデータURLに変換して得る。 | びょうがでーたURLへんかん | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L414
548
- | 関数 | 描画ダウンロードリンク作成 | DOMへ/DOMに | 描画内容をPNG形式のデータURLに変換してDOMに設定する。 | びょうがだうんろーどりんくさくせい | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L424
549
- | 関数 | 描画ダウンロード | | 描画内容をPNG形式のデータURLに変換してダウンロードする。(「クリックした時」などと組み合わせて使う) | びょうがだうんろーど | https://github.com/kujirahand/nadesiko3/blob/master/src/plugin_browser_canvas.mjs#L438
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.61",
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",
@@ -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)));
@@ -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(
@@ -1,8 +1,8 @@
1
1
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
2
2
  const coreVersion = {
3
- version: '3.3.61',
3
+ version: '3.3.64',
4
4
  major: 3,
5
5
  minor: 3,
6
- patch: 61
6
+ patch: 64
7
7
  };
8
8
  export default coreVersion;
@@ -11,9 +11,9 @@ export interface NakoCoreVersion {
11
11
  }
12
12
  // 実際のバージョン定義 (自動生成されるので以下を編集しない)
13
13
  const coreVersion: NakoCoreVersion = {
14
- version: '3.3.61',
14
+ version: '3.3.64',
15
15
  major: 3,
16
16
  minor: 3,
17
- patch: 61
17
+ patch: 64
18
18
  }
19
19
  export default coreVersion
@@ -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
  };