-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathbsparser.nim
executable file
·61 lines (53 loc) · 1.54 KB
/
bsparser.nim
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
import xmlparser, xmltree, tables, parseutils, strutils, strtabs
type
BSParser* = object
proc parseNode(self: var BSParser, node: XmlNode)
#proc parseAttr(self: var BSParser, attrs: XmlAttributes) =
# for key, val in pairs(attrs):
# if key == "style":
# self.parseStyle(val)
# else:
# discard self.parseAttr(key, val)
proc parseStruct(self: var BSParser, node: XmlNode) =
for key, val in pairs(node.attrs):
echo key, " ", val
proc parseChildren(self: var BSParser, node: XmlNode) =
if node.len > 0:
for n in node:
self.parseNode(n)
proc startElement(self: var BSParser, node: XmlNode) =
case node.tag
of "struct":
self.parseStruct(node)
of "method": discard
of "informal_protocol": discard
of "class": discard
of "enum": discard
of "depends_on": discard
of "cftype": discard
of "opaque": discard
of "constant": discard
of "string_constant": discard
of "enum": discard
of "function": discard
of "function_alias": discard
of "class": discard
else:
#echo node.tag
self.parseChildren(node)
proc parseNode(self: var BSParser, node: XmlNode) =
case node.kind
of xnElement:
self.startElement(node)
of xnText:
echo "xnText"
else:
echo "KIND: ", node.kind
proc parse*(self: var BSParser, fileName: string) =
try:
var root = loadXml(fileName)
self.parseNode(root)
except:
echo getCurrentExceptionMsg()
var p: BSParser
p.parse("master\\bridgesupport\\Foundation.bridgesupport")