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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
|
const libgumbo_parser = "libgumbo_parser.a"
template gumboLibPath(): string =
var path = currentSourcePath()
var idx = len(path) - 1
while idx > 0:
if (path[idx] == '/') or (path[idx] == '\\'):
break
dec(idx)
path = path[0..idx] & libgumbo_parser
path
{.passL:gumboLibPath().}
type
GumboSourcePosition* {.bycopy.} = object
line*: cuint
column*: cuint
offset*: cuint
var kGumboEmptySourcePosition* {.importc: "kGumboEmptySourcePosition".}: GumboSourcePosition
type
GumboStringPiece* {.bycopy.} = object
data*: cstring
length*: csize
var kGumboEmptyString* {.importc: "kGumboEmptyString".}: GumboStringPiece
proc gumbo_string_equals*(str1: ptr GumboStringPiece; str2: ptr GumboStringPiece): bool {.
importc: "gumbo_string_equals".}
proc gumbo_string_equals_ignore_case*(str1: ptr GumboStringPiece;
str2: ptr GumboStringPiece): bool {.
importc: "gumbo_string_equals_ignore_case".}
type
GumboVector* {.bycopy.} = object
data*: ptr pointer
length*: cuint
capacity*: cuint
var kGumboEmptyVector* {.importc: "kGumboEmptyVector".}: GumboVector
proc gumbo_vector_index_of*(vector: ptr GumboVector; element: pointer): cint {.
importc: "gumbo_vector_index_of".}
type
GumboTag* {.size: sizeof(cint).} = enum
GUMBO_TAG_HTML, GUMBO_TAG_HEAD, GUMBO_TAG_TITLE, GUMBO_TAG_BASE, GUMBO_TAG_LINK,
GUMBO_TAG_META, GUMBO_TAG_STYLE, GUMBO_TAG_SCRIPT, GUMBO_TAG_NOSCRIPT,
GUMBO_TAG_TEMPLATE, GUMBO_TAG_BODY, GUMBO_TAG_ARTICLE, GUMBO_TAG_SECTION,
GUMBO_TAG_NAV, GUMBO_TAG_ASIDE, GUMBO_TAG_H1, GUMBO_TAG_H2, GUMBO_TAG_H3,
GUMBO_TAG_H4, GUMBO_TAG_H5, GUMBO_TAG_H6, GUMBO_TAG_HGROUP, GUMBO_TAG_HEADER,
GUMBO_TAG_FOOTER, GUMBO_TAG_ADDRESS, GUMBO_TAG_P, GUMBO_TAG_HR, GUMBO_TAG_PRE,
GUMBO_TAG_BLOCKQUOTE, GUMBO_TAG_OL, GUMBO_TAG_UL, GUMBO_TAG_LI, GUMBO_TAG_DL,
GUMBO_TAG_DT, GUMBO_TAG_DD, GUMBO_TAG_FIGURE, GUMBO_TAG_FIGCAPTION,
GUMBO_TAG_MAIN, GUMBO_TAG_DIV, GUMBO_TAG_A, GUMBO_TAG_EM, GUMBO_TAG_STRONG,
GUMBO_TAG_SMALL, GUMBO_TAG_S, GUMBO_TAG_CITE, GUMBO_TAG_Q, GUMBO_TAG_DFN,
GUMBO_TAG_ABBR, GUMBO_TAG_DATA, GUMBO_TAG_TIME, GUMBO_TAG_CODE, GUMBO_TAG_VAR,
GUMBO_TAG_SAMP, GUMBO_TAG_KBD, GUMBO_TAG_SUB, GUMBO_TAG_SUP, GUMBO_TAG_I,
GUMBO_TAG_B, GUMBO_TAG_U, GUMBO_TAG_MARK, GUMBO_TAG_RUBY, GUMBO_TAG_RT,
GUMBO_TAG_RP, GUMBO_TAG_BDI, GUMBO_TAG_BDO, GUMBO_TAG_SPAN, GUMBO_TAG_BR,
GUMBO_TAG_WBR, GUMBO_TAG_INS, GUMBO_TAG_DEL, GUMBO_TAG_IMAGE, GUMBO_TAG_IMG,
GUMBO_TAG_IFRAME, GUMBO_TAG_EMBED, GUMBO_TAG_OBJECT, GUMBO_TAG_PARAM,
GUMBO_TAG_VIDEO, GUMBO_TAG_AUDIO, GUMBO_TAG_SOURCE, GUMBO_TAG_TRACK,
GUMBO_TAG_CANVAS, GUMBO_TAG_MAP, GUMBO_TAG_AREA, GUMBO_TAG_MATH, GUMBO_TAG_MI,
GUMBO_TAG_MO, GUMBO_TAG_MN, GUMBO_TAG_MS, GUMBO_TAG_MTEXT, GUMBO_TAG_MGLYPH,
GUMBO_TAG_MALIGNMARK, GUMBO_TAG_ANNOTATION_XML, GUMBO_TAG_SVG,
GUMBO_TAG_FOREIGNOBJECT, GUMBO_TAG_DESC, GUMBO_TAG_TABLE, GUMBO_TAG_CAPTION,
GUMBO_TAG_COLGROUP, GUMBO_TAG_COL, GUMBO_TAG_TBODY, GUMBO_TAG_THEAD,
GUMBO_TAG_TFOOT, GUMBO_TAG_TR, GUMBO_TAG_TD, GUMBO_TAG_TH, GUMBO_TAG_FORM,
GUMBO_TAG_FIELDSET, GUMBO_TAG_LEGEND, GUMBO_TAG_LABEL, GUMBO_TAG_INPUT,
GUMBO_TAG_BUTTON, GUMBO_TAG_SELECT, GUMBO_TAG_DATALIST, GUMBO_TAG_OPTGROUP,
GUMBO_TAG_OPTION, GUMBO_TAG_TEXTAREA, GUMBO_TAG_KEYGEN, GUMBO_TAG_OUTPUT,
GUMBO_TAG_PROGRESS, GUMBO_TAG_METER, GUMBO_TAG_DETAILS, GUMBO_TAG_SUMMARY,
GUMBO_TAG_MENU, GUMBO_TAG_MENUITEM, GUMBO_TAG_APPLET, GUMBO_TAG_ACRONYM,
GUMBO_TAG_BGSOUND, GUMBO_TAG_DIR, GUMBO_TAG_FRAME, GUMBO_TAG_FRAMESET,
GUMBO_TAG_NOFRAMES, GUMBO_TAG_ISINDEX, GUMBO_TAG_LISTING, GUMBO_TAG_XMP,
GUMBO_TAG_NEXTID, GUMBO_TAG_NOEMBED, GUMBO_TAG_PLAINTEXT, GUMBO_TAG_RB,
GUMBO_TAG_STRIKE, GUMBO_TAG_BASEFONT, GUMBO_TAG_BIG, GUMBO_TAG_BLINK,
GUMBO_TAG_CENTER, GUMBO_TAG_FONT, GUMBO_TAG_MARQUEE, GUMBO_TAG_MULTICOL,
GUMBO_TAG_NOBR, GUMBO_TAG_SPACER, GUMBO_TAG_TT, GUMBO_TAG_RTC,
GUMBO_TAG_UNKNOWN, GUMBO_TAG_LAST
proc gumbo_normalized_tagname*(tag: GumboTag): cstring {.
importc: "gumbo_normalized_tagname".}
proc gumbo_tag_from_original_text*(text: ptr GumboStringPiece) {.
importc: "gumbo_tag_from_original_text".}
proc gumbo_normalize_svg_tagname*(tagname: ptr GumboStringPiece): cstring {.
importc: "gumbo_normalize_svg_tagname".}
proc gumbo_tag_enum*(tagname: cstring): GumboTag {.importc: "gumbo_tag_enum".}
proc gumbo_tagn_enum*(tagname: cstring; length: cuint): GumboTag {.
importc: "gumbo_tagn_enum".}
type
GumboAttributeNamespaceEnum* {.size: sizeof(cint).} = enum
GUMBO_ATTR_NAMESPACE_NONE, GUMBO_ATTR_NAMESPACE_XLINK,
GUMBO_ATTR_NAMESPACE_XML, GUMBO_ATTR_NAMESPACE_XMLNS
type
GumboAttribute* {.bycopy.} = object
attr_namespace*: GumboAttributeNamespaceEnum
name*: cstring
original_name*: GumboStringPiece
value*: cstring
original_value*: GumboStringPiece
name_start*: GumboSourcePosition
name_end*: GumboSourcePosition
value_start*: GumboSourcePosition
value_end*: GumboSourcePosition
proc gumbo_get_attribute*(attrs: ptr GumboVector; name: cstring): ptr GumboAttribute {.
importc: "gumbo_get_attribute".}
type
GumboNodeType* {.size: sizeof(cint).} = enum
GUMBO_NODE_DOCUMENT, GUMBO_NODE_ELEMENT, GUMBO_NODE_TEXT, GUMBO_NODE_CDATA,
GUMBO_NODE_COMMENT, GUMBO_NODE_WHITESPACE, GUMBO_NODE_TEMPLATE
type
GumboQuirksModeEnum* {.size: sizeof(cint).} = enum
GUMBO_DOCTYPE_NO_QUIRKS, GUMBO_DOCTYPE_QUIRKS, GUMBO_DOCTYPE_LIMITED_QUIRKS
type
GumboNamespaceEnum* {.size: sizeof(cint).} = enum
GUMBO_NAMESPACE_HTML, GUMBO_NAMESPACE_SVG, GUMBO_NAMESPACE_MATHML
type
GumboParseFlags* {.size: sizeof(cint).} = enum
GUMBO_INSERTION_NORMAL = 0, GUMBO_INSERTION_BY_PARSER = 1 shl 0,
GUMBO_INSERTION_IMPLICIT_END_TAG = 1 shl 1, GUMBO_INSERTION_IMPLIED = 1 shl 3,
GUMBO_INSERTION_CONVERTED_FROM_END_TAG = 1 shl 4,
GUMBO_INSERTION_FROM_ISINDEX = 1 shl 5, GUMBO_INSERTION_FROM_IMAGE = 1 shl 6,
GUMBO_INSERTION_RECONSTRUCTED_FORMATTING_ELEMENT = 1 shl 7,
GUMBO_INSERTION_ADOPTION_AGENCY_CLONED = 1 shl 8,
GUMBO_INSERTION_ADOPTION_AGENCY_MOVED = 1 shl 9,
GUMBO_INSERTION_FOSTER_PARENTED = 1 shl 10
type
GumboDocument* {.bycopy.} = object
children*: GumboVector
has_doctype*: bool
name*: cstring
public_identifier*: cstring
system_identifier*: cstring
doc_type_quirks_mode*: GumboQuirksModeEnum
type
GumboText* {.bycopy.} = object
text*: cstring
original_text*: GumboStringPiece
start_pos*: GumboSourcePosition
type
GumboElement* {.bycopy.} = object
children*: GumboVector
tag*: GumboTag
tag_namespace*: GumboNamespaceEnum
original_tag*: GumboStringPiece
original_end_tag*: GumboStringPiece
start_pos*: GumboSourcePosition
end_pos*: GumboSourcePosition
attributes*: GumboVector
type
INNER_C_UNION_1056773149* {.bycopy.} = object {.union.}
document*: GumboDocument
element*: GumboElement
text*: GumboText
GumboNode* {.bycopy.} = object
`type`*: GumboNodeType
parent*: ptr GumboNode
index_within_parent*: csize
parse_flags*: GumboParseFlags
v*: INNER_C_UNION_1056773149
type
GumboAllocatorFunction* = proc (userdata: pointer; size: csize): pointer
type
GumboDeallocatorFunction* = proc (userdata: pointer; `ptr`: pointer)
type
GumboOptions* {.bycopy.} = object
allocator*: GumboAllocatorFunction
deallocator*: GumboDeallocatorFunction
userdata*: pointer
tab_stop*: cint
stop_on_first_error*: bool
max_errors*: cint
fragment_context*: GumboTag
fragment_namespace*: GumboNamespaceEnum
var kGumboDefaultOptions* {.importc: "kGumboDefaultOptions".}: GumboOptions
type
GumboOutput* {.bycopy.} = object
document*: ptr GumboNode
root*: ptr GumboNode
errors*: GumboVector
proc gumbo_parse*(buffer: cstring): ptr GumboOutput {.importc: "gumbo_parse".}
proc gumbo_parse_with_options*(options: ptr GumboOptions; buffer: cstring;
buffer_length: csize): ptr GumboOutput {.
importc: "gumbo_parse_with_options".}
proc gumbo_destroy_output*(options: ptr GumboOptions; output: ptr GumboOutput) {.
importc: "gumbo_destroy_output".}
|