diff options
| author | Oskari Timperi <oskari.timperi@iki.fi> | 2017-12-05 19:27:09 +0200 |
|---|---|---|
| committer | Oskari Timperi <oskari.timperi@iki.fi> | 2017-12-05 19:27:09 +0200 |
| commit | 7ee6dfc00d26bd41b334386115dd2a58cfd80aab (patch) | |
| tree | fb4d6ae992a7b683d6b938ae205104b1279595d4 /gumbo_parser/gumbo.nim | |
| download | nim-gumbo-parser-master.tar.gz nim-gumbo-parser-master.zip | |
Diffstat (limited to 'gumbo_parser/gumbo.nim')
| -rw-r--r-- | gumbo_parser/gumbo.nim | 254 |
1 files changed, 254 insertions, 0 deletions
diff --git a/gumbo_parser/gumbo.nim b/gumbo_parser/gumbo.nim new file mode 100644 index 0000000..0e0ce4e --- /dev/null +++ b/gumbo_parser/gumbo.nim @@ -0,0 +1,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".}
\ No newline at end of file |
