diff --git a/js/plugins/PageSwitch.js b/js/plugins/PageSwitch.js index d352036..22c0554 100644 --- a/js/plugins/PageSwitch.js +++ b/js/plugins/PageSwitch.js @@ -8,8 +8,10 @@ const caseHandlers = {}; // 判断状态 + const checkCase = (caseName, args) => { const checkCase = (caseName, event, args) => { const handler = caseHandlers[caseName]; + return handler(...args); return handler(event, ...args); }; @@ -39,6 +41,93 @@ return true; }; + /* + 2021.1.2 开关关 + 下面的checkCases2方法针对的是写成这样的注释: + + + ( A or B ) and C + A : SelfData name is "HeartCase" + B : SelfData name is "AngelHeartCase" + C : GameVariable 5 > 10086 + + + A、B、C在下面的注释中被称为标记。 + 这段代码尚未测试。 + */ + const checkCases2 = (event, page) => { + // 第一步:读取注释内容到数组 + const list = page.list; + let started = -1; + let arrayExpression = []; + for (let i = 0; i < list.length; i++) { + if (started == -1) { + if(list[i].code == 108 && list[i].parameters[0].search('') != -1) { + started = i; + } + } else { + if(list[i].code == 400 || 108) { + if (list[i].parameters[0].search('') != -1) { + break; + } else { + arrayExpression.push(list[i].parameters[0]); + } + } + } + } + console.log('提取出注释中从中间的内容'); + console.log(arrayExpression); + // 以上是第一步 + // 第二步:计算每一行的结果(每个子条件)并记录 + const flag = {}; // 记录每行标记的名称和对应的结果 + // 翻译每条标记的表达式 + for (let i = 1; i < arrayExpression.length; i++) { + const flagName = arrayExpression[i].split(' : ')[0]; + const comment = arrayExpression[i].split(' : ')[1]; + // 下面这段是从checkCases中复制来的 + for (const key in casePatterns) { + const pattern = casePatterns[key]; + const handler = caseHandlers[key]; + const match = comment.match(pattern); + if (match) { + const [_, ...matches] = match; + const result = handler(event, ...matches); + flag[flagName] = result; + } + } + // 从checkCases中复制来的止于此 + } + console.log('各标记的表达式'); + console.log(flag); + // 以上是第二步 + // 第三步:翻译总表达式(母条件) + let headExpression = arrayExpression[0].split(' '); + let headFormula = ''; + for (let i = 0; i < headExpression.length; i++) { + switch headExpression[i] { + case '(': + headFormula += '( '; + break; + case ')': + headFormula += ') '; + break; + case 'or': + headFormula += '||'; + break; + case 'and': + headFormula += '&&'; + break; + default: + headFormula += '${flag[' + headExpression[i] + ']} '; + } + } + console.log('总表达式'); + console.log(headFormula); + let headResult = new Function('return ' + '`' + headFormula + '`')(); + return headResult; + }; + + // 注册 SwitchCase // 只注册handler: registerCase('方法名', null, handler) const registerCase = (key, pattern, handler) => { @@ -57,4 +146,4 @@ window.PageSwitch = { registerCase, checkCase }; window.$caseHandlers = caseHandlers; -} +} \ No newline at end of file