UNPKG

skynovel

Version:
1,296 lines (1,132 loc) 38.9 kB
/* ***** BEGIN LICENSE BLOCK ***** Copyright (c) 2019-2020 Famibee (famibee.blog38.fc2.com) This software is released under the MIT License. http://opensource.org/licenses/mit-license.php ** ***** END LICENSE BLOCK ***** */ import assert = require('power-assert'); import {Grammar} from '../core/src/sn/Grammar'; context('class Grammar & ScriptIterator', ()=>{ let vctToken : string[] = null; let vctTokenLen = 0; let grm; beforeEach(()=> { grm = new Grammar; }); /* after(()=> { jsdomify.destroy(); }); */ describe('Tst', ()=> { it('testAnalyzeScript0', ()=> { const sScr = ""; vctToken = sScr.match(grm.REG_TOKEN); // compile err = Vector.<String>(sScr.toLocaleString().match(REG_TOKEN)); if (vctToken == null) return; vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 0); }); it('testAnalyzeScript_str1', ()=> { const sScr = "うひょー"; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; /* trace("len:"+ vctTokenLen); for (let i=0; i<vctTokenLen; ++i) trace(i +"@"+ vctToken[i]); */ assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "うひょー"); }); it('testAnalyzeScript_n1', ()=> { const sScr = "\n"; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "\n"); }); it('testAnalyzeScript_n8', ()=> { const sScr = "\n\n\n\n\n\n\n\n"; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "\n\n\n\n\n\n\n\n"); }); it('testAnalyzeScript_n3t2n5', ()=> { const sScr = "\n\n\n\t\t\n\n\n\n\n"; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], "\n\n\n"); assert.equal(vctToken[1], "\t\t"); assert.equal(vctToken[2], "\n\n\n\n\n"); }); it('testAnalyzeScript_ans', ()=> { const sScr = '\t[add_lay layer=mes class=txt]\n\t[add_lay layer=upd class=grp]\n\t[lay layer="mes" visible=true b_alpha=0 r_size=12 r_align="121" layout=\'blockProgression="rl" lineHeight="36" paddingTop="15" paddingRight="15" fontSize="24" color="0xffffff"\']\n\n\t[title text="&tmp:const.flash.desktop.NativeApplication.nativeApplication.applicationDescriptor.filename +\' ver \'+ tmp:const.flash.desktop.NativeApplication.nativeApplication.applicationDescriptor.version"]\n\n\t空気《え あ》小説《のべる》[r]\n\tばい ふぁみべぇ[r]\n[r]\n\tクリックで更新確認[r]\n\tするよー[p][er]\n\n\t[lay layer=upd fn="update" visible=true left=86 top=86]\n[update_check url="http://ugainovel.ddo.jp/ans/ver.xml" config_fn="update.xml"]\n\t何かあれば[r]\n\t通知します。[r]\n[r][r][r][r]\n\t数秒経っても無反応なら更新はありません。\n*loop\n[l]\n[jump label=*loop]\n'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 58); assert.equal(vctToken[0], "\t"); assert.equal(vctToken[1], "[add_lay layer=mes class=txt]"); assert.equal(vctToken[2], "\n"); assert.equal(vctToken[3], "\t"); assert.equal(vctToken[4], "[add_lay layer=upd class=grp]"); assert.equal(vctToken[5], "\n"); assert.equal(vctToken[6], "\t"); assert.equal(vctToken[7], '[lay layer="mes" visible=true b_alpha=0 r_size=12 r_align="121" layout=\'blockProgression="rl" lineHeight="36" paddingTop="15" paddingRight="15" fontSize="24" color="0xffffff"\']'); assert.equal(vctToken[8], "\n\n"); assert.equal(vctToken[9], "\t"); assert.equal(vctToken[10], '[title text="&tmp:const.flash.desktop.NativeApplication.nativeApplication.applicationDescriptor.filename +\' ver \'+ tmp:const.flash.desktop.NativeApplication.nativeApplication.applicationDescriptor.version"]'); assert.equal(vctToken[11], "\n\n"); assert.equal(vctToken[12], "\t"); assert.equal(vctToken[13], "空気《え あ》小説《のべる》"); assert.equal(vctToken[14], "[r]"); assert.equal(vctToken[15], "\n"); assert.equal(vctToken[16], "\t"); assert.equal(vctToken[17], "ばい ふぁみべぇ"); assert.equal(vctToken[18], "[r]"); assert.equal(vctToken[19], "\n"); assert.equal(vctToken[20], "[r]"); assert.equal(vctToken[21], "\n"); assert.equal(vctToken[22], "\t"); assert.equal(vctToken[23], "クリックで更新確認"); assert.equal(vctToken[24], "[r]"); assert.equal(vctToken[25], "\n"); assert.equal(vctToken[26], "\t"); assert.equal(vctToken[27], "するよー"); assert.equal(vctToken[28], "[p]"); assert.equal(vctToken[29], "[er]"); assert.equal(vctToken[30], "\n\n"); assert.equal(vctToken[31], "\t"); assert.equal(vctToken[32], '[lay layer=upd fn="update" visible=true left=86 top=86]'); assert.equal(vctToken[33], "\n"); assert.equal(vctToken[34], '[update_check url="http://ugainovel.ddo.jp/ans/ver.xml" config_fn="update.xml"]'); assert.equal(vctToken[35], "\n"); assert.equal(vctToken[36], "\t"); assert.equal(vctToken[37], "何かあれば"); assert.equal(vctToken[38], "[r]"); assert.equal(vctToken[39], "\n"); assert.equal(vctToken[40], "\t"); assert.equal(vctToken[41], "通知します。"); assert.equal(vctToken[42], "[r]"); assert.equal(vctToken[43], "\n"); assert.equal(vctToken[44], "[r]"); assert.equal(vctToken[45], "[r]"); assert.equal(vctToken[46], "[r]"); assert.equal(vctToken[47], "[r]"); assert.equal(vctToken[48], "\n"); assert.equal(vctToken[49], "\t"); assert.equal(vctToken[50], "数秒経っても無反応なら更新はありません。"); assert.equal(vctToken[51], "\n"); assert.equal(vctToken[52], "*loop"); assert.equal(vctToken[53], "\n"); assert.equal(vctToken[54], "[l]"); assert.equal(vctToken[55], "\n"); assert.equal(vctToken[56], "[jump label=*loop]"); assert.equal(vctToken[57], "\n"); }); it('testAnalyzeScript_tag_in_string', ()=> { const sScr = '[lay layer="mes" chk_overrow=false over_ins_tag="[plc]"]\n'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], '[lay layer="mes" chk_overrow=false over_ins_tag="[plc]"]'); assert.equal(vctToken[1], "\n"); }); it('testAnalyzeScript_bug120904', ()=> { const sScr = '; [hoge\n[s]\n[trace text="error"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 5); assert.equal(vctToken[0], "; [hoge"); assert.equal(vctToken[1], "\n"); assert.equal(vctToken[2], "[s]"); assert.equal(vctToken[3], "\n"); assert.equal(vctToken[4], '[trace text="error"]'); }); it('testAnalyzeScript_bug120904_2', ()=> { const sScr = '; [hoge\n[s]\n[trace text="["]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 5); assert.equal(vctToken[0], "; [hoge"); assert.equal(vctToken[1], "\n"); assert.equal(vctToken[2], "[s]"); assert.equal(vctToken[3], "\n"); assert.equal(vctToken[4], '[trace text="["]'); }); it('testAnalyzeScript_bug120904_3', ()=> { const sScr = '; [hoge\n[s]\n[trace text="]"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 5); assert.equal(vctToken[0], "; [hoge"); assert.equal(vctToken[1], "\n"); assert.equal(vctToken[2], "[s]"); assert.equal(vctToken[3], "\n"); assert.equal(vctToken[4], '[trace text="]"]'); }); it('testAnalyzeScript_bug140108', ()=> { const sScr = '[let name="sysse_ok1" text="BurstB_11"]\n\n\n; 立ち絵配置位置定数\n; [lay pos=&pos.l 等として使用。\n; 組み込みで「c」という指定が出来る。例:pos=c、pos="c"\n[let name="pos.l" text="140"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 9); assert.equal(vctToken[0], '[let name="sysse_ok1" text="BurstB_11"]'); assert.equal(vctToken[1], '\n\n\n'); assert.equal(vctToken[2], '; 立ち絵配置位置定数'); assert.equal(vctToken[3], '\n'); assert.equal(vctToken[4], '; [lay pos=&pos.l 等として使用。'); assert.equal(vctToken[5], '\n'); assert.equal(vctToken[6], '; 組み込みで「c」という指定が出来る。例:pos=c、pos="c"'); assert.equal(vctToken[7], '\n'); assert.equal(vctToken[8], '[let name="pos.l" text="140"]'); }); it('testAnalyzeScript_bug150603_0', ()=> { const sScr = '[a][ab][あ][あい]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 4); assert.equal(vctToken[0], "[a]"); assert.equal(vctToken[1], "[ab]"); assert.equal(vctToken[2], "[あ]"); assert.equal(vctToken[3], "[あい]"); const a_tag = Grammar.REG_TAG.exec(sScr); if (a_tag == null) assert.fail("Error:bug150603_0"); }); it('testAnalyzeScript_bug150603_1', ()=> { const sScr = '[あ]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "[あ]"); const a_tag = Grammar.REG_TAG.exec(sScr); if (a_tag == null) assert.fail("Error:bug150603_1"); }); it('testAnalyzeScript_bug150603_2', ()=> { const sScr = '[あい]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "[あい]"); const a_tag = Grammar.REG_TAG.exec(sScr); if (a_tag == null) assert.fail("Error:bug150603_2"); }); it('testAnalyzeScript_bug150603_3', ()=> { const sScr = '[あ a=0]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "[あ a=0]"); const a_tag = Grammar.REG_TAG.exec(sScr); if (a_tag == null) assert.fail("Error:bug150603_3"); }); it('testAnalyzeScript_bug150603_4', ()=> { const sScr = '[あい a=0]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], "[あい a=0]"); const a_tag = Grammar.REG_TAG.exec(sScr); if (a_tag == null) assert.fail("Error:bug150603_4"); }); it('test_let_expansion_0_cr', ()=> { const sScr = '&text=1+2=int\n[tcy t="!!"] あ。/\nあ。/'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 6); assert.equal(vctToken[0], '&text=1+2=int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[3], " あ。/"); ch = vctToken[3].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[4], "\n"); ch = vctToken[4].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[5], "あ。/"); ch = vctToken[5].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); }); it('test_let_expansion_0_cr_spc', ()=> { const sScr = '&text = 1 + 2 = int\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text = 1 + 2 = int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_0_cr_spc_var', ()=> { const sScr = '&text = hA[#ar$BB#]\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text = hA[#ar$BB#]'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_1_tab', ()=> { const sScr = '&text=1+2=int\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text=1+2=int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_1_tab_spc', ()=> { const sScr = '&text = 1 + 2 = int\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text = 1 + 2 = int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_1_tab_spc_var', ()=> { const sScr = '&text = hA[#ar$BB#]\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text = hA[#ar$BB#]'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_2_spc', ()=> { const sScr = '&text=1+2=int [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], '&text=1+2=int [tcy t="!!"]'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_2_spc2', ()=> { const sScr = '&text=1+2=int [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], '&text=1+2=int [tcy t="!!"]'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_3_comment', ()=> { const sScr = '&text=1+2=int\t; [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text=1+2=int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '; [tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_3_comment2', ()=> { const sScr = '&text=1+2=int\t\t; [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text=1+2=int'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '; [tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_4_OperatorEq', ()=> { const sScr = '&text=1+2 == null\t\t; [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text=1+2 == null'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '; [tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_expansion_4_OperatorNotEq', ()=> { const sScr = '&text=1+2 != null\t\t; [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&text=1+2 != null'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '; [tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_bug_20120321s_aira', ()=> { const sScr = "&&'tex'+0 = 1+2\t[tcy t='!!']"; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], "&&'tex'+0 = 1+2"); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], "[tcy t='!!']"); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_0_cr', ()=> { const sScr = '&test&\n[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_0_cr_spc', ()=> { const sScr = '&test cr spc&\n[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test cr spc&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_0_cr_spc_var', ()=> { const sScr = '&test hA[#ar$BB#]&\n[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test hA[#ar$BB#]&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_1_tab', ()=> { const sScr = '&test&\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_1_tab_spc', ()=> { const sScr = '&test tab spc&\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test tab spc&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_1_tab_spc_var', ()=> { const sScr = '&test hA[#ar$BB#]&\t[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test hA[#ar$BB#]&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_2_spc', ()=> { const sScr = '&test& [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], " "); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_2_spc2', ()=> { const sScr = '&test& [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], " "); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[2], '[tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_2_comment', ()=> { const sScr = '&test&\t; [tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 3); assert.equal(vctToken[0], '&test&'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\t"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '; [tcy t="!!"]'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_miss_0', ()=> { const sScr = '&te\nst&\n[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 5); assert.equal(vctToken[0], '&te'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], "st&"); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[3], "\n"); ch = vctToken[3].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[4], '[tcy t="!!"]'); ch = vctToken[4].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_ch_expansion_miss_1', ()=> { const sScr = '&te\n\tst&\n[tcy t="!!"]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 6); assert.equal(vctToken[0], '&te'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], "\n"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[2], '\t'); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[3], 'st&'); ch = vctToken[3].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[4], "\n"); ch = vctToken[4].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[5], '[tcy t="!!"]'); ch = vctToken[5].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_char2macro_0', ()=> { const sScr = '[tcy t="!!"] あ。/\nあ。/'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 4); assert.equal(vctToken[0], '[tcy t="!!"]'); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], " あ。/"); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); assert.equal(vctToken[2], "\n"); ch = vctToken[2].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[3], "あ。/"); ch = vctToken[3].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), false); }); it('test_multiline_tag_nochg0', ()=> { const sScr = '[r]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag_nochg1', ()=> { const sScr = '[ch]'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag0', ()=> { const sScr = `[r ]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag1', ()=> { const sScr = `[ch ]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag10', ()=> { const sScr = `[r a= 0]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag11', ()=> { const sScr = `[ch ;=== text=""]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag12', ()=> { const sScr = `[ch ]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('test_multiline_tag20', ()=> { const sScr = `[r ]あ[r a= 0]ん[r]こ[ch ;=== text=""]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 7); assert.equal(vctToken[0], `[r ]`); assert.equal(vctToken[1], 'あ'); assert.equal(vctToken[2], `[r a= 0]`); assert.equal(vctToken[3], `ん`); assert.equal(vctToken[4], `[r]`); assert.equal(vctToken[5], `こ`); assert.equal(vctToken[6], `[ch ;=== text=""]`); }); it('test_multiline_tag21', ()=> { const sScr = `こ[ch page=fore\t;=== text=""]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `こ`); assert.equal(vctToken[1], `[ch page=fore\t;=== text=""]`); }); it('test_multiline_tag_bug120904', ()=> { const sScr = `; [hoge [s] [trace text="error"]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 5); assert.equal(vctToken[0], `; [hoge`); assert.equal(vctToken[1], '\n'); assert.equal(vctToken[2], `[s]`); assert.equal(vctToken[3], '\n'); assert.equal(vctToken[4], `[trace text="error"]`); }); it('test_multiline_tag_bug120904_2', ()=> { const sScr = `め[ch page=fore\t;=== text="["]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `め`); assert.equal(vctToken[1], `[ch page=fore\t;=== text="["]`); }); it('test_multiline_tag_bug120904_3', ()=> { const sScr = `め[ch page=fore\t;=== text="]"]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `め`); assert.equal(vctToken[1], `[ch page=fore\t;=== text="]"]`); }); it('test_multiline_tag_bug140108', ()=> { const sScr = `[let name="sysse_ok1" text="BurstB_11"] ; 立ち絵配置位置定数 ; [lay pos=&pos.l 等として使用。 ; 組み込みで「c」という指定が出来る。例:pos=c、pos="c" [let name="pos.l" text="140"]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 9); assert.equal(vctToken[0], `[let name="sysse_ok1" text="BurstB_11"]`); assert.equal(vctToken[1], '\n\n\n'); assert.equal(vctToken[2], '; 立ち絵配置位置定数'); assert.equal(vctToken[3], '\n'); assert.equal(vctToken[4], '; [lay pos=&pos.l 等として使用。'); assert.equal(vctToken[5], '\n'); assert.equal(vctToken[6], '; 組み込みで「c」という指定が出来る。例:pos=c、pos="c"'); assert.equal(vctToken[7], '\n'); assert.equal(vctToken[8], '[let name="pos.l" text="140"]'); }); it('20200415upd_test_multiline_tag_180623gallery0', ()=> { const sScr = `[add_lay layer=mes class=txt ] multi line tag[r] [span layout = 'color="0xaaaaaa"' ] タグやマクロは複数行に改行して書ける[r] [span] [s]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 20); assert.equal(vctToken[0], `[add_lay layer=mes class=txt ]`); assert.equal(vctToken[1], '\n\n'); assert.equal(vctToken[2], '\t\t'); assert.equal(vctToken[3], 'multi'); assert.equal(vctToken[4], '\n'); assert.equal(vctToken[5], '\t'); assert.equal(vctToken[6], 'line tag'); assert.equal(vctToken[7], '[r]'); assert.equal(vctToken[8], '\n'); assert.equal(vctToken[9], '\t'); assert.equal(vctToken[10], `[span layout = 'color="0xaaaaaa"' ]`); assert.equal(vctToken[11], '\n'); assert.equal(vctToken[12], '\t'); assert.equal(vctToken[13], 'タグやマクロは複数行に改行して書ける'); assert.equal(vctToken[14], '[r]'); assert.equal(vctToken[15], '\n'); assert.equal(vctToken[16], '\t'); assert.equal(vctToken[17], '[span]'); assert.equal(vctToken[18], '\n'); assert.equal(vctToken[19], '[s]'); }); it('20200415upd_test_multiline_tag_180731', ()=> { // 文字列リテラル内の「;」が効く不具合 const sScr = `[lay style="&'color: '+ fcol +'; writing-mode: vertical-rl;'"]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 1); assert.equal(vctToken[0], sScr); }); it('20200416_test_multiline_tag_0', ()=> { // regex101.comで発見 const sScr = `[ch page=fore ;=== text="]"] [add_lay layer=mes class=txt ] [span layout def ;===== ghi;===== = 'color="0xaaaaaa"' ] タグやマクロは複数行に改行して書ける[r] [add_lay ;===== layer=mes ;===== class=txt ;====== ;===== ] [span ;===== layout;===== = ;""""" 'color="0xaaaaaa"' ;===== text=%fcol|&0x000000;===== text=%fcol|'&0x000000';===== a='2009';===== a='#{fcol}'|true;===== ]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 15); assert.equal(vctToken[0], `[ch page=fore ;=== text="]"]`); assert.equal(vctToken[1], '\n\n'); assert.equal(vctToken[2], `[add_lay layer=mes class=txt ]`); assert.equal(vctToken[3], '\n'); assert.equal(vctToken[4], '\t'); assert.equal(vctToken[5], `[span layout def ;===== ghi;===== = 'color="0xaaaaaa"' ]`); assert.equal(vctToken[6], '\n'); assert.equal(vctToken[7], '\t'); assert.equal(vctToken[8], 'タグやマクロは複数行に改行して書ける'); assert.equal(vctToken[9], '[r]'); assert.equal(vctToken[10], '\n\n'); assert.equal(vctToken[11], `[add_lay ;===== layer=mes ;===== class=txt ;====== ;===== ]`); assert.equal(vctToken[12], '\n'); assert.equal(vctToken[13], '\t'); assert.equal(vctToken[14], `[span ;===== layout;===== = ;""""" 'color="0xaaaaaa"' ;===== text=%fcol|&0x000000;===== text=%fcol|'&0x000000';===== a='2009';===== a='#{fcol}'|true;===== ]`); }); it('test_let_ml_0', ()=> { const sScr = `[let_ml name=ml] precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float tick; void main(void) { vec2 pos = vTextureCoord; pos.x = pos.x + tick; gl_FragColor = texture2D(uSampler, pos); } [endlet_ml]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `[let_ml name=ml] precision mediump float; varying vec2 vTextureCoord; uniform sampler2D uSampler; uniform float tick; void main(void) { vec2 pos = vTextureCoord; pos.x = pos.x + tick; gl_FragColor = texture2D(uSampler, pos); } `); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], '[endlet_ml]'); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_ml_1', ()=> { const sScr = `[let_ml name=ml] [ {"fn": "../bgimage/yun_1317.jpg", "dt": "2018/12/18 11:44", "txt": " ああ、桜の樹の下には屍体が埋まつてゐる!"}, ] [endlet_ml]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `[let_ml name=ml] [ {"fn": "../bgimage/yun_1317.jpg", "dt": "2018/12/18 11:44", "txt": " ああ、桜の樹の下には屍体が埋まつてゐる!"}, ] `); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], '[endlet_ml]'); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); it('test_let_ml_2', ()=> { const sScr = `[let_ml name=const.db] { "紀子": { "fn" : "nori", "col" : "lightskyblue" }, "晶": { "fn" : "akir", "col" : "gold" } } [endlet_ml]`; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; let ch = ""; assert.equal(vctTokenLen, 2); assert.equal(vctToken[0], `[let_ml name=const.db] { "紀子": { "fn" : "nori", "col" : "lightskyblue" }, "晶": { "fn" : "akir", "col" : "gold" } } `); ch = vctToken[0].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); assert.equal(vctToken[1], '[endlet_ml]'); ch = vctToken[1].charAt(0); assert.equal(grm.REG_TOKEN_NOTXT.test(ch), true); }); // Main.splitAmpersand it('test_mth_splitAmpersand0', ()=> { const o = Grammar.splitAmpersand("pl = 70"); assert.equal(o['name'], "pl "); assert.equal(o['text'], " 70"); assert.equal(o['cast'], null); }); it('test_mth_splitAmpersand1', ()=> { const o = Grammar.splitAmpersand("text=1+2=int"); assert.equal(o['name'], "text"); assert.equal(o['text'], "1+2"); assert.equal(o['cast'], "int"); }); it('test_mth_splitAmpersand2', ()=> { const o = Grammar.splitAmpersand( "buf_page.0 = -999"); assert.equal(o['name'], "buf_page.0 "); assert.equal(o['text'], " -999"); assert.equal(o['cast'], null); }); it('test_mth_splitAmpersand3', ()=> { const o = Grammar.splitAmpersand( "b = (1 == 0) = uint"); assert.equal(o['name'], "b "); assert.equal(o['text'], " (1 == 0) "); assert.equal(o['cast'], "uint"); }); it('test_mth_splitAmpersand4', ()=> { const o = Grammar.splitAmpersand( "b = (1 != 0) = int"); assert.equal(o['name'], "b "); assert.equal(o['text'], " (1 != 0) "); assert.equal(o['cast'], "int"); }); it('test_mth_splitAmpersand_err0', ()=> { try { const o = Grammar.splitAmpersand("b=1=0=uint"); assert.fail("Error:ccc"); } catch (s) { assert.equal(s, "「&計算」書式では「=」指定が一つか二つ必要です"); } }); it('test_mth_splitAmpersand_err1', ()=> { try { const o = Grammar.splitAmpersand("text=&1+2=int"); assert.fail("Error:ccc"); } catch (s) { assert.equal(s, "「&計算」書式では「&」指定が不要です"); } }); it('testAnalyzeScript_escetc', ()=> { grm.setEscape('\\'); const sScr = '\\&\\[\\;\\*\\|\\《\\\\'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 7); assert.equal(vctToken[0], '\\&'); assert.equal(vctToken[1], '\\['); assert.equal(vctToken[2], '\\;'); assert.equal(vctToken[3], '\\*'); assert.equal(vctToken[4], '\\|'); assert.equal(vctToken[5], '\\《'); assert.equal(vctToken[6], '\\\\'); }); it('testAnalyzeScript_esc¥etc', ()=> { grm.setEscape('¥'); const sScr = '¥&¥[¥;¥*¥|¥《¥¥'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 7); assert.equal(vctToken[0], '¥&'); assert.equal(vctToken[1], '¥['); assert.equal(vctToken[2], '¥;'); assert.equal(vctToken[3], '¥*'); assert.equal(vctToken[4], '¥|'); assert.equal(vctToken[5], '¥《'); assert.equal(vctToken[6], '¥¥'); }); it('testAnalyzeScript_esc¥etc', ()=> { grm.setEscape('\\'); const sScr = '\\|| 論語《ろんごに》\\| 曰《いはく》'; vctToken = sScr.match(grm.REG_TOKEN); vctTokenLen = vctToken.length; assert.equal(vctTokenLen, 4); assert.equal(vctToken[0], '\\|'); assert.equal(vctToken[1], '| 論語《ろんごに》'); assert.equal(vctToken[2], '\\|'); assert.equal(vctToken[3], ' 曰《いはく》'); }); }); });