From 2fc487819d7c075bdd3d3e57a8819395a7be8710 Mon Sep 17 00:00:00 2001 From: Agent-Neon-42 Date: Fri, 31 Jul 2026 20:22:06 +0300 Subject: [PATCH 1/2] Support Chinese colon in choose branches --- .../parser/src/scriptParser/contentParser.ts | 5 +++-- .../src/scriptParser/subSceneScanner.ts | 2 +- packages/parser/test/parser.test.ts | 20 +++++++++++++++++++ 3 files changed, 24 insertions(+), 3 deletions(-) diff --git a/packages/parser/src/scriptParser/contentParser.ts b/packages/parser/src/scriptParser/contentParser.ts index cbb6fd161..3eb8bb2a7 100644 --- a/packages/parser/src/scriptParser/contentParser.ts +++ b/packages/parser/src/scriptParser/contentParser.ts @@ -49,8 +49,9 @@ function getChooseContent(contentRaw: string, assetSetter: any): string { const chooseKeyList: Array = []; const chooseValueList: Array = []; for (const e of chooseList) { - chooseKeyList.push(e.split(/(? { if (e.match(/\./)) { diff --git a/packages/parser/src/scriptParser/subSceneScanner.ts b/packages/parser/src/scriptParser/subSceneScanner.ts index 96e964c38..c508361d3 100644 --- a/packages/parser/src/scriptParser/subSceneScanner.ts +++ b/packages/parser/src/scriptParser/subSceneScanner.ts @@ -18,7 +18,7 @@ export const subSceneScanner = ( } if (command === commandType.choose) { const chooseList = content.split('|'); - const chooseValue = chooseList.map((e) => e.split(':')[1] ?? ''); + const chooseValue = chooseList.map((e) => e.split(/(? { if (e.match(/\./)) { subSceneList.push(e); diff --git a/packages/parser/test/parser.test.ts b/packages/parser/test/parser.test.ts index d32c8222b..6c76e8e86 100644 --- a/packages/parser/test/parser.test.ts +++ b/packages/parser/test/parser.test.ts @@ -79,6 +79,26 @@ test("choose", async () => { expect(result.sentenceList).toContainEqual(expectSentenceItem); }); +test("choose supports chinese colon separator", async () => { + const parser = new SceneParser((assetList) => { + }, (fileName, assetType) => { + return fileName; + }, ADD_NEXT_ARG_LIST, SCRIPT_CONFIG); + + const result = parser.parse(`choose:继续冒险:sceneA.scene|返回城市:sceneB.scene;`, 'test', 'test'); + + const expectSentenceItem: ISentence = { + command: commandType.choose, + commandRaw: "choose", + content: "继续冒险:sceneA.scene|返回城市:sceneB.scene", + args: [], + sentenceAssets: [], + subScene: ["sceneA.scene", "sceneB.scene"], + inlineComment: "" + }; + expect(result.sentenceList).toContainEqual(expectSentenceItem); +}); + test("long-script", async () => { const sceneRaw = await fsp.readFile('test/test-resources/long-script.txt'); From c3d0b52c6937a742ccf78fedfc2516cc6e39980f Mon Sep 17 00:00:00 2001 From: Agent-Neon-42 Date: Fri, 31 Jul 2026 20:31:30 +0300 Subject: [PATCH 2/2] Support chinese colon in script command separator --- .../parser/src/scriptParser/scriptParser.ts | 2 +- packages/parser/test/parser.test.ts | 20 +++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/packages/parser/src/scriptParser/scriptParser.ts b/packages/parser/src/scriptParser/scriptParser.ts index 0fd07d93e..2e78cedd4 100644 --- a/packages/parser/src/scriptParser/scriptParser.ts +++ b/packages/parser/src/scriptParser/scriptParser.ts @@ -54,7 +54,7 @@ export const scriptParser = ( }; } // 截取命令 - const getCommandResult = /:/.exec(newSentenceRaw); + const getCommandResult = /(? { expect(result.sentenceList).toContainEqual(expectSentenceItem); }); +test("statement supports chinese colon separator", async () => { + const parser = new SceneParser((assetList) => { + }, (fileName, assetType) => { + return fileName; + }, ADD_NEXT_ARG_LIST, SCRIPT_CONFIG); + + const result = parser.parse(`say:欢迎回来 -speaker=WebGAL;`, 'test', 'test'); + + const expectSentenceItem: ISentence = { + command: commandType.say, + commandRaw: "say", + content: "欢迎回来", + args: [{ key: 'speaker', value: 'WebGAL' }], + sentenceAssets: [], + subScene: [], + inlineComment: "" + }; + expect(result.sentenceList).toContainEqual(expectSentenceItem); +}); + test("long-script", async () => { const sceneRaw = await fsp.readFile('test/test-resources/long-script.txt');