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/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 = /(? 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..c41fc91b8 100644 --- a/packages/parser/test/parser.test.ts +++ b/packages/parser/test/parser.test.ts @@ -79,6 +79,46 @@ 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("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');