From 2fc487819d7c075bdd3d3e57a8819395a7be8710 Mon Sep 17 00:00:00 2001 From: Agent-Neon-42 Date: Fri, 31 Jul 2026 20:22:06 +0300 Subject: [PATCH] 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');