diff --git a/src/gen/analyze/class.js b/src/gen/analyze/class.js index 303b6167903fa0817f06de3be2b7c2efdfeab722..62521d033f7a4bd6965cb43110bbb7096445b73c 100644 --- a/src/gen/analyze/class.js +++ b/src/gen/analyze/class.js @@ -18,24 +18,29 @@ const { NumberIncrease } = require("../tools/common"); const { analyzeFunction } = require("./function"); /**interface解析 */ -function analyzeClass(data) {//same as class - let body = re.replaceAll(data, "\n", "").split(";")// # replace(" ", ""). +function analyzeClass(data) { + // # replace(" ", ""). + let body = re.replaceAll(data, "\n", "").split(";") let result = { value: [], function: [] } for (let i in body) { - let t = body[i] - while (t.length > 0 && t[0] == ' ')//去除前面的空格 - t = t.substring(1, t.length) - while (t.length > 0 && t[-1] == ' ')//去除后面的空格 - t = t.substring(0, t.length - 1) - if (t == "") break//如果t为空直接返回 - let tt = re.match(" *([a-zA-Z0-9_]+) *: *([a-zA-Z_0-9<>]+)", t) - if (tt) {//变量 - - let valueName = re.getReg(t, tt.regs[1]) - let valueType = re.getReg(t, tt.regs[2]) + let classBody = body[i] + // 去除前面的空格 + while (classBody.length > 0 && classBody[0] == ' ') { + classBody = classBody.substring(1, classBody.length) + } + // 去除后面的空格 + while (classBody.length > 0 && classBody[-1] == ' ') { + classBody = classBody.substring(0, classBody.length - 1) + } + // 如果t为空直接返回 + if (classBody == "") break + let matchNameAndType = re.match(" *([a-zA-Z0-9_]+) *: *([a-zA-Z_0-9<>]+)", classBody) + if (matchNameAndType) { + let valueName = re.getReg(classBody, matchNameAndType.regs[1]) + let valueType = re.getReg(classBody, matchNameAndType.regs[2]) if (valueType.indexOf("number") >= 0) { valueType = valueType.replace("number", "NUMBER_TYPE_" + NumberIncrease.getAndIncrease()) } @@ -44,10 +49,11 @@ function analyzeClass(data) {//same as class type: valueType }) } - tt = re.match("(static)? *([A-Za-z0-9_]+)\\(([\n a-zA-Z:;=,_0-9?<>{}|]*)\\) *: *([A-Za-z0-9_<>{}:, .]+)", t) - if (tt) {//函数 - let funcDetail = analyzeFunction(re.getReg(t, tt.regs[2]), - re.getReg(t, tt.regs[3]), re.getReg(t, tt.regs[4])) + let rules = "(static)? *([A-Za-z0-9_]+)\\(([\n a-zA-Z:;=,_0-9?<>{}|]*)\\) *: *([A-Za-z0-9_<>{}:, .]+)"; + matchNameAndType = re.match(rules, classBody) + if (matchNameAndType) { + let funcDetail = analyzeFunction(re.getReg(classBody, matchNameAndType.regs[2]), + re.getReg(classBody, matchNameAndType.regs[3]), re.getReg(classBody, matchNameAndType.regs[4])) if (funcDetail != null) result.function.push(funcDetail) }