1
1
2
2
def writeInline (writer , json_val ):
3
- if isinstance (json_val , dict ):
3
+ if json_val is None :
4
+ writer ("null" )
5
+ elif isinstance (json_val , dict ):
4
6
writer ("{" )
5
7
writeInlineFields (writer , json_val .keys (), "" , "" , json_val )
6
8
writer ("}" )
@@ -12,6 +14,8 @@ def writeInline(writer, json_val):
12
14
writeInline (writer , val )
13
15
prefix = ","
14
16
writer ("]" )
17
+ elif isinstance (json_val , bool ):
18
+ writer ("true" if json_val else "false" )
15
19
elif isinstance (json_val , str ):
16
20
writer ("\" {}\" " .format (json_val ))
17
21
elif isinstance (json_val , int ):
@@ -21,21 +25,90 @@ def writeInline(writer, json_val):
21
25
else :
22
26
import sys
23
27
sys .exit ("{}" .format (type (json_val ).__name__ ))
24
-
25
28
26
- def writeInlineFields (writer , fields , field_prefix , field_suffix , obj ):
27
- separator = ""
29
+
30
+ def writeFieldName (writer , field_prefix , opt_comma , name ):
31
+ writer ("{}{}\" {}\" :" .format (field_prefix , opt_comma , name ))
32
+
33
+ def writeInlineFields (writer , fields , field_prefix , field_suffix , obj , separator = "" ):
28
34
for field in fields :
29
- writer ( "{}{} \" {} \" :" . format ( field_prefix , separator , field , field_suffix ) )
35
+ writeFieldName ( writer , field_prefix , separator , field )
30
36
writeInline (writer , obj [field ])
31
37
writer (field_suffix )
32
38
separator = ","
33
39
40
+ def writeInlineElements (writer , line_prefix , arr , separator = "" ):
41
+ for element in arr :
42
+ writer ("\r \n {}{}" .format (line_prefix , separator ))
43
+ writeInline (writer , element )
44
+ separator = ","
45
+
34
46
def writeConstant (writer , prefix , constant ):
35
47
writer ("\t {}{{\r \n " .format (prefix ))
36
48
writeInlineFields (writer , ["Name" ,"Type" ,"ValueType" ,"Value" ,"Attrs" ], "\t \t " , "\r \n " , constant )
37
49
writer ("\t }\r \n " )
38
50
51
+ def writeComMethod (writer , method_separator , method ):
52
+ line_prefix = "\t \t \t "
53
+
54
+ writer ("{}{}{{\r \n " .format (line_prefix , method_separator ))
55
+ child_prefix = line_prefix + "\t "
56
+ writeInlineFields (writer , ["Name" , "SetLastError" , "ReturnType" , "Architectures" , "Platform" , "Attrs" ], child_prefix , "\r \n " , method )
57
+
58
+ writeFieldName (writer , child_prefix , "," , "Params" )
59
+ writer ("[" )
60
+ writeInlineElements (writer , "\t \t \t \t \t " , method ["Params" ])
61
+ writer ("\r \n {}]\r \n " .format (child_prefix ))
62
+
63
+ writer ("{}}}\r \n " .format (line_prefix ))
64
+
65
+ def writeType (writer , line_prefix , type_separator , type_obj ):
66
+ writer ("{}{}{{\r \n " .format (line_prefix , type_separator ))
67
+ writeInlineFields (writer , ["Name" , "Architectures" , "Platform" , "Kind" ], line_prefix + "\t " , "\r \n " , type_obj )
68
+ kind = type_obj ["Kind" ]
69
+ child_prefix = line_prefix + "\t "
70
+ if kind == "Enum" :
71
+ writeInlineFields (writer , ["Flags" , "Scoped" ], child_prefix , "\r \n " , type_obj , separator = "," )
72
+
73
+ writeFieldName (writer , child_prefix , "," , "Values" )
74
+ writer ("[" )
75
+ writeInlineElements (writer , child_prefix + "\t " , type_obj ["Values" ])
76
+ writer ("\r \n {}]\r \n " .format (child_prefix ))
77
+
78
+ writeInlineFields (writer , ["IntegerBase" ], child_prefix , "\r \n " , type_obj , separator = "," )
79
+ elif kind == "Struct" or kind == "Union" :
80
+ writeInlineFields (writer , ["Size" , "PackingSize" ], child_prefix , "\r \n " , type_obj , separator = "," )
81
+
82
+ writeFieldName (writer , child_prefix , "," , "Fields" )
83
+ writer ("[" )
84
+ writeInlineElements (writer , child_prefix + "\t " , type_obj ["Fields" ])
85
+ writer ("\r \n {}]\r \n " .format (child_prefix ))
86
+
87
+ writeFieldName (writer , child_prefix , "," , "NestedTypes" )
88
+ writer ("[\r \n " )
89
+ nested_separator = ""
90
+ for nested_type in type_obj ["NestedTypes" ]:
91
+ writeType (writer , child_prefix , nested_separator , nested_type )
92
+ nested_separator = ","
93
+ writer ("{}]\r \n " .format (child_prefix ))
94
+
95
+ elif kind == "Com" :
96
+ writeInlineFields (writer , ["Guid" , "Interface" ], child_prefix , "\r \n " , type_obj , separator = "," )
97
+
98
+ writeFieldName (writer , child_prefix , "," , "Methods" )
99
+ writer ("[\r \n " )
100
+ method_separator = ""
101
+ for method in type_obj ["Methods" ]:
102
+ writeComMethod (writer , method_separator , method )
103
+ method_separator = ","
104
+ writer ("{}]\r \n " .format (child_prefix ))
105
+
106
+ else :
107
+ import sys
108
+ sys .exit ("Unhandled Kind '{}'" .format (kind ))
109
+ #writeInlineFields(writer, ["Name","Architectures", "Type","ValueType","Value","Attrs"], "\t\t", "\r\n", constant)
110
+ writer ("{}}}\r \n " .format (line_prefix ))
111
+
39
112
def write (writer , api ):
40
113
writer ("{\r \n " )
41
114
writer ("\r \n " )
@@ -47,7 +120,10 @@ def write(writer, api):
47
120
writer ("]\r \n " )
48
121
writer ("\r \n " )
49
122
writer (",\" Types\" :[\r \n " )
50
- ##
123
+ prefix = ""
124
+ for t in api ["Types" ]:
125
+ writeType (writer , "\t " , prefix , t )
126
+ prefix = ","
51
127
writer ("]\r \n " )
52
128
writer ("\r \n " )
53
129
writer (",\" Functions\" :[\r \n " )
0 commit comments