-
Notifications
You must be signed in to change notification settings - Fork 0
/
parser_infomodel.go
64 lines (54 loc) · 1.35 KB
/
parser_infomodel.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package govorto
import (
"strings"
)
func ParseInfoModel(lines []string, m *VortoModel) {
begin := lines[0]
begin = strings.TrimSuffix(begin, "{")
name := strings.TrimSpace(begin)[10:]
im := &InformationModel{
Name: name,
}
blockBuf := []string{}
parseBlock := false
doParse := false
for _, line := range lines[1 : len(lines)-1] {
if parseBlock {
blockBuf = append(blockBuf, line)
if strings.TrimSpace(line) == "}" {
parseBlock = false
doParse = true
}
} else {
if strings.HasPrefix(line, "functionblocks") {
blockBuf = []string{line}
parseBlock = true
}
}
if doParse {
ParseInformationModelBlockBuf(blockBuf, im)
doParse = false
blockBuf = []string{}
}
}
m.InfoModel = im
}
func ParseInformationModelBlockBuf(lines []string, m *InformationModel) {
line := lines[0]
switch {
case strings.HasPrefix(line, "functionblocks"):
ParseInformationModelFunctionBlocks(lines, m)
break
}
}
func ParseInformationModelFunctionBlocks(lines []string, m *InformationModel) {
lines = lines[1:len(lines)-1]
for _, line := range lines {
s := &FunctionBlock{}
s.Description = line[strings.Index(line, "\"")+1: strings.LastIndex(line, "\"")]
frag := strings.Split(strings.TrimSpace(line[:strings.Index(line, "\"")]), " ")
s.Name = frag[0]
s.DataType = frag[2]
m.FunctionBlocks = append(m.FunctionBlocks, s)
}
}