Skip to content

Commit

Permalink
fix: temporary restore old parser
Browse files Browse the repository at this point in the history
  • Loading branch information
MakinoharaShoko committed Nov 12, 2024
1 parent 9a18aef commit 5cc1c7b
Show file tree
Hide file tree
Showing 3 changed files with 142 additions and 2 deletions.
2 changes: 1 addition & 1 deletion packages/parser/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
"test": "yarn parser && vitest",
"test-trace": "yarn parser --trace && vitest",
"coverage": "vitest run --coverage",
"build": "yarn parser && rimraf -rf ./build && rollup --config",
"build": "rimraf -rf ./build && rollup --config",
"build-ci": "yarn parser && rollup --config",
"debug": "tsx test/debug.ts",
"dev": "tsx src/index.ts",
Expand Down
76 changes: 75 additions & 1 deletion packages/parser/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,15 @@ import { subSceneScanner } from './scriptParser/subSceneScanner';
import { uniqWith } from 'lodash';
import { IWebGALStyleObj, scss2cssinjsParser } from './styleParser';
export { SyntaxError as parserSyntaxError } from './parser';
import {
ADD_NEXT_ARG_LIST,
SCRIPT_CONFIG,
ConfigMap,
ConfigItem,
} from './config/scriptConfig';
import { sceneParser } from './sceneParser';

export default class SceneParser {
export class NewSceneParser {

private readonly assetsPrefetcher;
private readonly assetSetter;
Expand Down Expand Up @@ -87,3 +94,70 @@ export default class SceneParser {
}

}

export default class SceneParser {
private readonly SCRIPT_CONFIG_MAP: ConfigMap;
constructor(
private readonly assetsPrefetcher: (assetList: IAsset[]) => void,
private readonly assetSetter: (
fileName: string,
assetType: fileType,
) => string,
private readonly ADD_NEXT_ARG_LIST: number[],
SCRIPT_CONFIG_INPUT: ConfigItem[] | ConfigMap,
) {
if (Array.isArray(SCRIPT_CONFIG_INPUT)) {
this.SCRIPT_CONFIG_MAP = new Map();
SCRIPT_CONFIG_INPUT.forEach((config) => {
this.SCRIPT_CONFIG_MAP.set(config.scriptString, config);
});
} else {
this.SCRIPT_CONFIG_MAP = SCRIPT_CONFIG_INPUT;
}
}
/**
* 解析场景
* @param rawScene 原始场景
* @param sceneName 场景名称
* @param sceneUrl 场景url
* @return 解析后的场景
*/
parse(rawScene: string, sceneName: string, sceneUrl: string) {
return sceneParser(
rawScene,
sceneName,
sceneUrl,
this.assetsPrefetcher,
this.assetSetter,
this.ADD_NEXT_ARG_LIST,
this.SCRIPT_CONFIG_MAP,
);
}

parseConfig(configText: string) {
return configParser(configText);
}

stringifyConfig(config: WebgalConfig) {
return config.reduce(
(previousValue, curr) =>
previousValue +
`${curr.command}:${curr.args.join('|')}${
curr.options.length <= 0
? ''
: curr.options.reduce(
(p, c) => p + ' -' + c.key + '=' + c.value,
'',
)
};\n`,
'',
);
}

parseScssToWebgalStyleObj(scssString: string): IWebGALStyleObj{
return scss2cssinjsParser(scssString);
}

}

export { ADD_NEXT_ARG_LIST, SCRIPT_CONFIG };
66 changes: 66 additions & 0 deletions packages/parser/src/sceneParser.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
import {
commandType,
IAsset,
IScene,
ISentence,
} from './interface/sceneInterface';
import { scriptParser } from './scriptParser/scriptParser';
import uniqWith from 'lodash/uniqWith';
import { fileType } from './interface/assets';
import { ConfigMap } from './config/scriptConfig';

/**
* 场景解析器
* @param rawScene 原始场景
* @param sceneName 场景名称
* @param sceneUrl 场景url
* @param assetsPrefetcher
* @param assetSetter
* @param ADD_NEXT_ARG_LIST
* @param SCRIPT_CONFIG_MAP
* @return {IScene} 解析后的场景
*/
export const sceneParser = (
rawScene: string,
sceneName: string,
sceneUrl: string,
assetsPrefetcher: (assetList: Array<IAsset>) => void,
assetSetter: (fileName: string, assetType: fileType) => string,
ADD_NEXT_ARG_LIST: commandType[],
SCRIPT_CONFIG_MAP: ConfigMap,
): IScene => {
const rawSentenceList = rawScene.split('\n'); // 原始句子列表

// 去分号留到后面去做了,现在注释要单独处理
const rawSentenceListWithoutEmpty = rawSentenceList;
// .map((sentence) => sentence.split(";")[0])
// .filter((sentence) => sentence.trim() !== "");
let assetsList: Array<IAsset> = []; // 场景资源列表
let subSceneList: Array<string> = []; // 子场景列表
const sentenceList: Array<ISentence> = rawSentenceListWithoutEmpty.map(
(sentence) => {
const returnSentence: ISentence = scriptParser(
sentence,
assetSetter,
ADD_NEXT_ARG_LIST,
SCRIPT_CONFIG_MAP,
);
// 在这里解析出语句可能携带的资源和场景,合并到 assetsList 和 subSceneList
assetsList = [...assetsList, ...returnSentence.sentenceAssets];
subSceneList = [...subSceneList, ...returnSentence.subScene];
return returnSentence;
},
);

// 开始资源的预加载
assetsList = uniqWith(assetsList); // 去重
assetsPrefetcher(assetsList);

return {
sceneName: sceneName, // 场景名称
sceneUrl: sceneUrl,
sentenceList: sentenceList, // 语句列表
assetsList: assetsList, // 资源列表
subSceneList: subSceneList, // 子场景列表
};
};

0 comments on commit 5cc1c7b

Please sign in to comment.