• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2* Copyright (c) 2022 Shenzhen Kaihong Digital Industry Development Co., Ltd.
3* Licensed under the Apache License, Version 2.0 (the "License");
4* you may not use this file except in compliance with the License.
5* You may obtain a copy of the License at
6*
7* http://www.apache.org/licenses/LICENSE-2.0
8*
9* Unless required by applicable law or agreed to in writing, software
10* distributed under the License is distributed on an "AS IS" BASIS,
11* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12* See the License for the specific language governing permissions and
13* limitations under the License.
14*/
15const { NumberIncrease } = require("../tools/common");
16const re = require("../tools/re");
17
18/** Enum解析 */
19function analyzeEnum(data) {
20    let body = re.replaceAll(data, "\n", "").split(",")
21    let result = {
22        element: [],
23        function: [],
24        enumValueType: 0 // 0代表数字,1代表字符串
25    }
26    for (let i in body) {
27        let bodyContent = body[i]
28        while (bodyContent.length > 0 && bodyContent[0] == ' ') {
29            bodyContent = bodyContent.substring(1, bodyContent.length)
30        }
31        while (bodyContent.length > 0 && bodyContent[-1] == ' ') {
32            bodyContent = bodyContent.substring(0, bodyContent.length - 1)
33        }
34        if (bodyContent == "") {
35            break
36        }
37        analyzeEnumResult(result, bodyContent, i)
38    }
39    return result
40}
41
42function analyzeEnumResult(result, bodyContent, index) {
43    let regString       = re.match(" *([a-zA-Z0-9_]+) * = *\"([\x21-\x7e]+)*\"", bodyContent)
44    let regSingleQuotes = re.match(" *([a-zA-Z0-9_]+) * = *'([\x21-\x7e]+)*'", bodyContent)
45    let regNumber = re.match(" *([a-zA-Z0-9_]+) * = *([a-zA-Z_0-9<>-]+)", bodyContent)
46    let reg = re.match(" *([a-zA-Z0-9_]+) *", bodyContent)
47    if (regString) {
48        let elementName = re.getReg(bodyContent, regString.regs[1])
49        let elementValue = re.getReg(bodyContent, regString.regs[2])
50        result.element.push({
51            name: elementName,
52            value: elementValue,
53            type: 'string'
54        })
55        result.enumValueType = 1
56    } else if (regSingleQuotes) {
57        let elementName = re.getReg(bodyContent, regSingleQuotes.regs[1])
58        let elementValue = re.getReg(bodyContent, regSingleQuotes.regs[2])
59        result.element.push({
60            name: elementName,
61            value: elementValue,
62            type: 'string'
63        })
64        result.enumValueType = 1
65    } else if (regNumber) {
66        let elementName = re.getReg(bodyContent, regNumber.regs[1])
67        let elementValue = re.getReg(bodyContent, regNumber.regs[2])
68        typeof (elementValue)
69        result.element.push({
70            name: elementName,
71            value: elementValue,
72            type: "NUMBER_TYPE_" + NumberIncrease.getAndIncrease()
73        })
74        result.enumValueType = 0
75    } else if (reg) {
76        let elementName = re.getReg(bodyContent, reg.regs[1])
77        let elementValue = index
78        result.element.push({
79            name: elementName,
80            value: elementValue,
81            type: "NUMBER_TYPE_" + NumberIncrease.getAndIncrease()
82        })
83        result.enumValueType = 0
84    }
85    return result
86}
87
88module.exports = {
89    analyzeEnum,
90    analyzeEnumResult
91}