nokolexbor 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/ext/nokolexbor/config.h +186 -0
- data/ext/nokolexbor/extconf.rb +131 -0
- data/ext/nokolexbor/libxml/HTMLparser.h +320 -0
- data/ext/nokolexbor/libxml/SAX2.h +173 -0
- data/ext/nokolexbor/libxml/chvalid.h +230 -0
- data/ext/nokolexbor/libxml/debugXML.h +217 -0
- data/ext/nokolexbor/libxml/dict.h +81 -0
- data/ext/nokolexbor/libxml/encoding.h +232 -0
- data/ext/nokolexbor/libxml/entities.h +153 -0
- data/ext/nokolexbor/libxml/globals.h +529 -0
- data/ext/nokolexbor/libxml/hash.h +236 -0
- data/ext/nokolexbor/libxml/list.h +137 -0
- data/ext/nokolexbor/libxml/parser.h +1264 -0
- data/ext/nokolexbor/libxml/parserInternals.h +641 -0
- data/ext/nokolexbor/libxml/pattern.h +100 -0
- data/ext/nokolexbor/libxml/threads.h +94 -0
- data/ext/nokolexbor/libxml/tree.h +1315 -0
- data/ext/nokolexbor/libxml/uri.h +94 -0
- data/ext/nokolexbor/libxml/valid.h +448 -0
- data/ext/nokolexbor/libxml/xmlIO.h +369 -0
- data/ext/nokolexbor/libxml/xmlautomata.h +146 -0
- data/ext/nokolexbor/libxml/xmlerror.h +919 -0
- data/ext/nokolexbor/libxml/xmlexports.h +79 -0
- data/ext/nokolexbor/libxml/xmlmemory.h +226 -0
- data/ext/nokolexbor/libxml/xmlregexp.h +222 -0
- data/ext/nokolexbor/libxml/xmlstring.h +140 -0
- data/ext/nokolexbor/libxml/xmlversion.h +526 -0
- data/ext/nokolexbor/libxml/xpath.h +575 -0
- data/ext/nokolexbor/libxml/xpathInternals.h +632 -0
- data/ext/nokolexbor/libxml/xpointer.h +137 -0
- data/ext/nokolexbor/libxml.h +76 -0
- data/ext/nokolexbor/memory.c +39 -0
- data/ext/nokolexbor/nl_document.c +51 -0
- data/ext/nokolexbor/nl_node.c +790 -0
- data/ext/nokolexbor/nl_node_set.c +368 -0
- data/ext/nokolexbor/nl_xpath_context.c +200 -0
- data/ext/nokolexbor/nokolexbor.c +63 -0
- data/ext/nokolexbor/nokolexbor.h +37 -0
- data/ext/nokolexbor/private/buf.h +70 -0
- data/ext/nokolexbor/private/dict.h +11 -0
- data/ext/nokolexbor/private/enc.h +17 -0
- data/ext/nokolexbor/private/error.h +21 -0
- data/ext/nokolexbor/private/globals.h +9 -0
- data/ext/nokolexbor/private/memory.h +9 -0
- data/ext/nokolexbor/private/parser.h +27 -0
- data/ext/nokolexbor/private/string.h +9 -0
- data/ext/nokolexbor/private/threads.h +50 -0
- data/ext/nokolexbor/private/tree.h +18 -0
- data/ext/nokolexbor/private/xpath.h +7 -0
- data/ext/nokolexbor/timsort.h +601 -0
- data/ext/nokolexbor/xml_SAX2.c +80 -0
- data/ext/nokolexbor/xml_buf.c +363 -0
- data/ext/nokolexbor/xml_chvalid.c +334 -0
- data/ext/nokolexbor/xml_dict.c +1264 -0
- data/ext/nokolexbor/xml_encoding.c +124 -0
- data/ext/nokolexbor/xml_error.c +134 -0
- data/ext/nokolexbor/xml_globals.c +1085 -0
- data/ext/nokolexbor/xml_hash.c +1141 -0
- data/ext/nokolexbor/xml_memory.c +203 -0
- data/ext/nokolexbor/xml_parser.c +127 -0
- data/ext/nokolexbor/xml_parserInternals.c +338 -0
- data/ext/nokolexbor/xml_pattern.c +2375 -0
- data/ext/nokolexbor/xml_string.c +1051 -0
- data/ext/nokolexbor/xml_threads.c +881 -0
- data/ext/nokolexbor/xml_tree.c +148 -0
- data/ext/nokolexbor/xml_xpath.c +14743 -0
- data/lib/nokolexbor/attribute.rb +18 -0
- data/lib/nokolexbor/document.rb +6 -0
- data/lib/nokolexbor/node.rb +264 -0
- data/lib/nokolexbor/node_set.rb +124 -0
- data/lib/nokolexbor/version.rb +5 -0
- data/lib/nokolexbor/xpath_context.rb +14 -0
- data/lib/nokolexbor.rb +17 -0
- data/patches/0001-lexbor-support-text-pseudo-element.patch +137 -0
- data/patches/0002-lexbor-match-id-class-case-sensitive.patch +22 -0
- data/patches/0003-lexbor-attach-template-content-to-self.patch +13 -0
- data/vendor/lexbor/CMakeLists.txt +331 -0
- data/vendor/lexbor/config.cmake +890 -0
- data/vendor/lexbor/feature.cmake +134 -0
- data/vendor/lexbor/source/lexbor/core/array.c +208 -0
- data/vendor/lexbor/source/lexbor/core/array.h +100 -0
- data/vendor/lexbor/source/lexbor/core/array_obj.c +216 -0
- data/vendor/lexbor/source/lexbor/core/array_obj.h +134 -0
- data/vendor/lexbor/source/lexbor/core/avl.c +442 -0
- data/vendor/lexbor/source/lexbor/core/avl.h +82 -0
- data/vendor/lexbor/source/lexbor/core/base.h +86 -0
- data/vendor/lexbor/source/lexbor/core/bst.c +468 -0
- data/vendor/lexbor/source/lexbor/core/bst.h +108 -0
- data/vendor/lexbor/source/lexbor/core/bst_map.c +238 -0
- data/vendor/lexbor/source/lexbor/core/bst_map.h +87 -0
- data/vendor/lexbor/source/lexbor/core/config.cmake +12 -0
- data/vendor/lexbor/source/lexbor/core/conv.c +203 -0
- data/vendor/lexbor/source/lexbor/core/conv.h +53 -0
- data/vendor/lexbor/source/lexbor/core/core.h +35 -0
- data/vendor/lexbor/source/lexbor/core/def.h +57 -0
- data/vendor/lexbor/source/lexbor/core/diyfp.c +153 -0
- data/vendor/lexbor/source/lexbor/core/diyfp.h +258 -0
- data/vendor/lexbor/source/lexbor/core/dobject.c +187 -0
- data/vendor/lexbor/source/lexbor/core/dobject.h +92 -0
- data/vendor/lexbor/source/lexbor/core/dtoa.c +404 -0
- data/vendor/lexbor/source/lexbor/core/dtoa.h +28 -0
- data/vendor/lexbor/source/lexbor/core/fs.h +60 -0
- data/vendor/lexbor/source/lexbor/core/hash.c +476 -0
- data/vendor/lexbor/source/lexbor/core/hash.h +218 -0
- data/vendor/lexbor/source/lexbor/core/in.c +267 -0
- data/vendor/lexbor/source/lexbor/core/in.h +172 -0
- data/vendor/lexbor/source/lexbor/core/lexbor.h +35 -0
- data/vendor/lexbor/source/lexbor/core/mem.c +228 -0
- data/vendor/lexbor/source/lexbor/core/mem.h +141 -0
- data/vendor/lexbor/source/lexbor/core/mraw.c +428 -0
- data/vendor/lexbor/source/lexbor/core/mraw.h +114 -0
- data/vendor/lexbor/source/lexbor/core/perf.h +45 -0
- data/vendor/lexbor/source/lexbor/core/plog.c +73 -0
- data/vendor/lexbor/source/lexbor/core/plog.h +102 -0
- data/vendor/lexbor/source/lexbor/core/print.c +168 -0
- data/vendor/lexbor/source/lexbor/core/print.h +39 -0
- data/vendor/lexbor/source/lexbor/core/sbst.h +59 -0
- data/vendor/lexbor/source/lexbor/core/serialize.c +27 -0
- data/vendor/lexbor/source/lexbor/core/serialize.h +32 -0
- data/vendor/lexbor/source/lexbor/core/shs.c +118 -0
- data/vendor/lexbor/source/lexbor/core/shs.h +82 -0
- data/vendor/lexbor/source/lexbor/core/str.c +617 -0
- data/vendor/lexbor/source/lexbor/core/str.h +247 -0
- data/vendor/lexbor/source/lexbor/core/str_res.h +369 -0
- data/vendor/lexbor/source/lexbor/core/strtod.c +326 -0
- data/vendor/lexbor/source/lexbor/core/strtod.h +28 -0
- data/vendor/lexbor/source/lexbor/core/types.h +39 -0
- data/vendor/lexbor/source/lexbor/core/utils.c +43 -0
- data/vendor/lexbor/source/lexbor/core/utils.h +36 -0
- data/vendor/lexbor/source/lexbor/css/base.h +44 -0
- data/vendor/lexbor/source/lexbor/css/config.cmake +2 -0
- data/vendor/lexbor/source/lexbor/css/css.h +25 -0
- data/vendor/lexbor/source/lexbor/css/log.c +336 -0
- data/vendor/lexbor/source/lexbor/css/log.h +103 -0
- data/vendor/lexbor/source/lexbor/css/node.h +29 -0
- data/vendor/lexbor/source/lexbor/css/parser.c +473 -0
- data/vendor/lexbor/source/lexbor/css/parser.h +368 -0
- data/vendor/lexbor/source/lexbor/css/selectors/base.h +48 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo.c +91 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo.h +66 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo_const.h +109 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo_res.h +302 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo_state.c +279 -0
- data/vendor/lexbor/source/lexbor/css/selectors/pseudo_state.h +85 -0
- data/vendor/lexbor/source/lexbor/css/selectors/selector.c +927 -0
- data/vendor/lexbor/source/lexbor/css/selectors/selector.h +200 -0
- data/vendor/lexbor/source/lexbor/css/selectors/selectors.c +340 -0
- data/vendor/lexbor/source/lexbor/css/selectors/selectors.h +137 -0
- data/vendor/lexbor/source/lexbor/css/selectors/state.c +1718 -0
- data/vendor/lexbor/source/lexbor/css/selectors/state.h +79 -0
- data/vendor/lexbor/source/lexbor/css/stylesheet.h +37 -0
- data/vendor/lexbor/source/lexbor/css/syntax/anb.c +443 -0
- data/vendor/lexbor/source/lexbor/css/syntax/anb.h +45 -0
- data/vendor/lexbor/source/lexbor/css/syntax/base.h +33 -0
- data/vendor/lexbor/source/lexbor/css/syntax/parser.c +9 -0
- data/vendor/lexbor/source/lexbor/css/syntax/parser.h +25 -0
- data/vendor/lexbor/source/lexbor/css/syntax/res.h +48 -0
- data/vendor/lexbor/source/lexbor/css/syntax/state.c +2603 -0
- data/vendor/lexbor/source/lexbor/css/syntax/state.h +140 -0
- data/vendor/lexbor/source/lexbor/css/syntax/state_res.h +273 -0
- data/vendor/lexbor/source/lexbor/css/syntax/syntax.c +67 -0
- data/vendor/lexbor/source/lexbor/css/syntax/token.c +618 -0
- data/vendor/lexbor/source/lexbor/css/syntax/token.h +298 -0
- data/vendor/lexbor/source/lexbor/css/syntax/token_res.h +68 -0
- data/vendor/lexbor/source/lexbor/css/syntax/tokenizer/error.c +30 -0
- data/vendor/lexbor/source/lexbor/css/syntax/tokenizer/error.h +58 -0
- data/vendor/lexbor/source/lexbor/css/syntax/tokenizer.c +278 -0
- data/vendor/lexbor/source/lexbor/css/syntax/tokenizer.h +121 -0
- data/vendor/lexbor/source/lexbor/dom/base.h +32 -0
- data/vendor/lexbor/source/lexbor/dom/collection.c +97 -0
- data/vendor/lexbor/source/lexbor/dom/collection.h +112 -0
- data/vendor/lexbor/source/lexbor/dom/config.cmake +3 -0
- data/vendor/lexbor/source/lexbor/dom/dom.h +29 -0
- data/vendor/lexbor/source/lexbor/dom/exception.c +18 -0
- data/vendor/lexbor/source/lexbor/dom/exception.h +73 -0
- data/vendor/lexbor/source/lexbor/dom/interface.c +110 -0
- data/vendor/lexbor/source/lexbor/dom/interface.h +88 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/attr.c +445 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/attr.h +152 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/attr_const.h +62 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/attr_res.h +143 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/cdata_section.c +55 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/cdata_section.h +38 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/character_data.c +110 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/character_data.h +51 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/comment.c +64 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/comment.h +42 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document.c +536 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document.h +243 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document_fragment.c +36 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document_fragment.h +36 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document_type.c +125 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/document_type.h +108 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/element.c +1411 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/element.h +319 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/event_target.c +32 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/event_target.h +34 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/node.c +661 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/node.h +192 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/processing_instruction.c +87 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/processing_instruction.h +66 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/shadow_root.c +36 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/shadow_root.h +44 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/text.c +63 -0
- data/vendor/lexbor/source/lexbor/dom/interfaces/text.h +42 -0
- data/vendor/lexbor/source/lexbor/encoding/base.h +218 -0
- data/vendor/lexbor/source/lexbor/encoding/big5.c +42839 -0
- data/vendor/lexbor/source/lexbor/encoding/config.cmake +12 -0
- data/vendor/lexbor/source/lexbor/encoding/const.h +65 -0
- data/vendor/lexbor/source/lexbor/encoding/decode.c +3193 -0
- data/vendor/lexbor/source/lexbor/encoding/decode.h +370 -0
- data/vendor/lexbor/source/lexbor/encoding/encode.c +1931 -0
- data/vendor/lexbor/source/lexbor/encoding/encode.h +377 -0
- data/vendor/lexbor/source/lexbor/encoding/encoding.c +252 -0
- data/vendor/lexbor/source/lexbor/encoding/encoding.h +475 -0
- data/vendor/lexbor/source/lexbor/encoding/euc_kr.c +53883 -0
- data/vendor/lexbor/source/lexbor/encoding/gb18030.c +47905 -0
- data/vendor/lexbor/source/lexbor/encoding/iso_2022_jp_katakana.c +159 -0
- data/vendor/lexbor/source/lexbor/encoding/jis0208.c +22477 -0
- data/vendor/lexbor/source/lexbor/encoding/jis0212.c +15787 -0
- data/vendor/lexbor/source/lexbor/encoding/multi.h +53 -0
- data/vendor/lexbor/source/lexbor/encoding/range.c +71 -0
- data/vendor/lexbor/source/lexbor/encoding/range.h +34 -0
- data/vendor/lexbor/source/lexbor/encoding/res.c +222 -0
- data/vendor/lexbor/source/lexbor/encoding/res.h +34 -0
- data/vendor/lexbor/source/lexbor/encoding/single.c +13748 -0
- data/vendor/lexbor/source/lexbor/encoding/single.h +116 -0
- data/vendor/lexbor/source/lexbor/html/base.h +44 -0
- data/vendor/lexbor/source/lexbor/html/config.cmake +3 -0
- data/vendor/lexbor/source/lexbor/html/encoding.c +574 -0
- data/vendor/lexbor/source/lexbor/html/encoding.h +106 -0
- data/vendor/lexbor/source/lexbor/html/html.h +107 -0
- data/vendor/lexbor/source/lexbor/html/interface.c +165 -0
- data/vendor/lexbor/source/lexbor/html/interface.h +186 -0
- data/vendor/lexbor/source/lexbor/html/interface_res.h +4449 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/anchor_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/anchor_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/area_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/area_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/audio_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/audio_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/base_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/base_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/body_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/body_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/br_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/br_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/button_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/button_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/canvas_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/canvas_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/d_list_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/d_list_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/data_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/data_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/data_list_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/data_list_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/details_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/details_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/dialog_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/dialog_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/directory_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/directory_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/div_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/div_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/document.c +444 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/document.h +256 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/element.c +64 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/element.h +54 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/embed_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/embed_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/field_set_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/field_set_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/font_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/font_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/form_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/form_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/frame_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/frame_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/frame_set_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/frame_set_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/head_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/head_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/heading_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/heading_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/hr_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/hr_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/html_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/html_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/iframe_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/iframe_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/image_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/image_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/input_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/input_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/label_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/label_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/legend_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/legend_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/li_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/li_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/link_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/link_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/map_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/map_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/marquee_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/marquee_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/media_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/media_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/menu_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/menu_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/meta_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/meta_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/meter_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/meter_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/mod_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/mod_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/o_list_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/o_list_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/object_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/object_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/opt_group_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/opt_group_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/option_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/option_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/output_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/output_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/paragraph_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/paragraph_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/param_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/param_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/picture_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/picture_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/pre_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/pre_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/progress_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/progress_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/quote_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/quote_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/script_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/script_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/select_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/select_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/slot_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/slot_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/source_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/source_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/span_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/span_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/style_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/style_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_caption_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_caption_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_cell_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_cell_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_col_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_col_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_row_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_row_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_section_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/table_section_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/template_element.c +46 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/template_element.h +38 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/text_area_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/text_area_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/time_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/time_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/title_element.c +133 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/title_element.h +42 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/track_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/track_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/u_list_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/u_list_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/unknown_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/unknown_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/video_element.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/video_element.h +34 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/window.c +36 -0
- data/vendor/lexbor/source/lexbor/html/interfaces/window.h +34 -0
- data/vendor/lexbor/source/lexbor/html/node.c +14 -0
- data/vendor/lexbor/source/lexbor/html/node.h +67 -0
- data/vendor/lexbor/source/lexbor/html/parser.c +469 -0
- data/vendor/lexbor/source/lexbor/html/parser.h +170 -0
- data/vendor/lexbor/source/lexbor/html/serialize.c +1510 -0
- data/vendor/lexbor/source/lexbor/html/serialize.h +93 -0
- data/vendor/lexbor/source/lexbor/html/tag.h +103 -0
- data/vendor/lexbor/source/lexbor/html/tag_res.h +2262 -0
- data/vendor/lexbor/source/lexbor/html/token.c +386 -0
- data/vendor/lexbor/source/lexbor/html/token.h +130 -0
- data/vendor/lexbor/source/lexbor/html/token_attr.c +44 -0
- data/vendor/lexbor/source/lexbor/html/token_attr.h +67 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/error.c +28 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/error.h +141 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/res.h +4956 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state.c +2171 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state.h +225 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_comment.c +489 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_comment.h +27 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_doctype.c +1654 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_doctype.h +27 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_rawtext.c +303 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_rawtext.h +32 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_rcdata.c +311 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_rcdata.h +32 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_script.c +1209 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer/state_script.h +32 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer.c +499 -0
- data/vendor/lexbor/source/lexbor/html/tokenizer.h +343 -0
- data/vendor/lexbor/source/lexbor/html/tree/active_formatting.c +241 -0
- data/vendor/lexbor/source/lexbor/html/tree/active_formatting.h +117 -0
- data/vendor/lexbor/source/lexbor/html/tree/error.c +26 -0
- data/vendor/lexbor/source/lexbor/html/tree/error.h +114 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_after_body.c +62 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_after_frameset.c +63 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_body.c +82 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_frameset.c +88 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_head.c +222 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/before_head.c +144 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/before_html.c +166 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/foreign_content.c +358 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_body.c +1974 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_caption.c +158 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_cell.c +187 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_column_group.c +194 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_frameset.c +149 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_head.c +374 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_head_noscript.c +121 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_row.c +211 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_select.c +341 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_select_in_table.c +115 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table.c +451 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table_body.c +208 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table_text.c +127 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_template.c +189 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/initial.c +411 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/text.c +61 -0
- data/vendor/lexbor/source/lexbor/html/tree/insertion_mode.h +135 -0
- data/vendor/lexbor/source/lexbor/html/tree/open_elements.c +251 -0
- data/vendor/lexbor/source/lexbor/html/tree/open_elements.h +105 -0
- data/vendor/lexbor/source/lexbor/html/tree/template_insertion.c +10 -0
- data/vendor/lexbor/source/lexbor/html/tree/template_insertion.h +100 -0
- data/vendor/lexbor/source/lexbor/html/tree.c +1726 -0
- data/vendor/lexbor/source/lexbor/html/tree.h +431 -0
- data/vendor/lexbor/source/lexbor/html/tree_res.h +111 -0
- data/vendor/lexbor/source/lexbor/ns/base.h +32 -0
- data/vendor/lexbor/source/lexbor/ns/config.cmake +2 -0
- data/vendor/lexbor/source/lexbor/ns/const.h +37 -0
- data/vendor/lexbor/source/lexbor/ns/ns.c +154 -0
- data/vendor/lexbor/source/lexbor/ns/ns.h +66 -0
- data/vendor/lexbor/source/lexbor/ns/res.h +97 -0
- data/vendor/lexbor/source/lexbor/ports/posix/config.cmake +11 -0
- data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/fs.c +236 -0
- data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/memory.c +33 -0
- data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/perf.c +158 -0
- data/vendor/lexbor/source/lexbor/ports/windows_nt/config.cmake +18 -0
- data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/fs.c +239 -0
- data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/memory.c +33 -0
- data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/perf.c +81 -0
- data/vendor/lexbor/source/lexbor/selectors/base.h +30 -0
- data/vendor/lexbor/source/lexbor/selectors/config.cmake +2 -0
- data/vendor/lexbor/source/lexbor/selectors/selectors.c +1591 -0
- data/vendor/lexbor/source/lexbor/selectors/selectors.h +71 -0
- data/vendor/lexbor/source/lexbor/tag/base.h +32 -0
- data/vendor/lexbor/source/lexbor/tag/config.cmake +2 -0
- data/vendor/lexbor/source/lexbor/tag/const.h +225 -0
- data/vendor/lexbor/source/lexbor/tag/res.h +562 -0
- data/vendor/lexbor/source/lexbor/tag/tag.c +144 -0
- data/vendor/lexbor/source/lexbor/tag/tag.h +123 -0
- data/vendor/lexbor/source/lexbor/utils/base.h +32 -0
- data/vendor/lexbor/source/lexbor/utils/config.cmake +2 -0
- data/vendor/lexbor/source/lexbor/utils/http.c +534 -0
- data/vendor/lexbor/source/lexbor/utils/http.h +90 -0
- data/vendor/lexbor/source/lexbor/utils/utils.h +15 -0
- data/vendor/lexbor/source/lexbor/utils/warc.c +817 -0
- data/vendor/lexbor/source/lexbor/utils/warc.h +126 -0
- data/vendor/lexbor/utils/lexbor/css/selectors/pseudo.py +231 -0
- data/vendor/lexbor/utils/lexbor/css/selectors/tmp/const.h +21 -0
- data/vendor/lexbor/utils/lexbor/css/selectors/tmp/res.h +26 -0
- data/vendor/lexbor/utils/lexbor/css/syntax/definitions.py +49 -0
- data/vendor/lexbor/utils/lexbor/css/syntax/token_res.py +54 -0
- data/vendor/lexbor/utils/lexbor/css/syntax/tokenizer_code_map.py +36 -0
- data/vendor/lexbor/version +1 -0
- metadata +542 -0
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Based on nxt_strtod.c from NGINX NJS project
|
|
5
|
+
*
|
|
6
|
+
* An internal strtod() implementation based upon V8 src/strtod.cc
|
|
7
|
+
* without bignum support.
|
|
8
|
+
*
|
|
9
|
+
* Copyright 2012 the V8 project authors. All rights reserved.
|
|
10
|
+
* Use of this source code is governed by a BSD-style license
|
|
11
|
+
* that can be found in the LICENSE file.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
#include <stdint.h>
|
|
15
|
+
#include <math.h>
|
|
16
|
+
|
|
17
|
+
#include "lexbor/core/diyfp.h"
|
|
18
|
+
#include "lexbor/core/strtod.h"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
/*
|
|
22
|
+
* Max double: 1.7976931348623157 x 10^308
|
|
23
|
+
* Min non-zero double: 4.9406564584124654 x 10^-324
|
|
24
|
+
* Any x >= 10^309 is interpreted as +infinity.
|
|
25
|
+
* Any x <= 10^-324 is interpreted as 0.
|
|
26
|
+
* Note that 2.5e-324 (despite being smaller than the min double)
|
|
27
|
+
* will be read as non-zero (equal to the min non-zero double).
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
#define LEXBOR_DECIMAL_POWER_MAX 309
|
|
31
|
+
#define LEXBOR_DECIMAL_POWER_MIN (-324)
|
|
32
|
+
|
|
33
|
+
#define LEXBOR_UINT64_MAX lexbor_uint64_hl(0xFFFFFFFF, 0xFFFFFFFF)
|
|
34
|
+
#define LEXBOR_UINT64_DECIMAL_DIGITS_MAX 19
|
|
35
|
+
|
|
36
|
+
#define LEXBOR_DENOM_LOG 3
|
|
37
|
+
#define LEXBOR_DENOM (1 << LEXBOR_DENOM_LOG)
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
static lexbor_diyfp_t
|
|
41
|
+
lexbor_strtod_diyfp_read(const lxb_char_t *start, size_t length,
|
|
42
|
+
int *remaining);
|
|
43
|
+
|
|
44
|
+
static double
|
|
45
|
+
lexbor_strtod_diyfp_strtod(const lxb_char_t *start, size_t length, int exp);
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
/*
|
|
49
|
+
* Reads digits from the buffer and converts them to a uint64.
|
|
50
|
+
* Reads in as many digits as fit into a uint64.
|
|
51
|
+
* When the string starts with "1844674407370955161" no further digit is read.
|
|
52
|
+
* Since 2^64 = 18446744073709551616 it would still be possible read another
|
|
53
|
+
* digit if it was less or equal than 6, but this would complicate the code.
|
|
54
|
+
*/
|
|
55
|
+
lxb_inline uint64_t
|
|
56
|
+
lexbor_strtod_read_uint64(const lxb_char_t *start, size_t length,
|
|
57
|
+
size_t *ndigits)
|
|
58
|
+
{
|
|
59
|
+
lxb_char_t d;
|
|
60
|
+
uint64_t value;
|
|
61
|
+
const lxb_char_t *p, *e;
|
|
62
|
+
|
|
63
|
+
value = 0;
|
|
64
|
+
|
|
65
|
+
p = start;
|
|
66
|
+
e = p + length;
|
|
67
|
+
|
|
68
|
+
while (p < e && value <= (UINT64_MAX / 10 - 1)) {
|
|
69
|
+
d = *p++ - '0';
|
|
70
|
+
value = 10 * value + d;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
*ndigits = p - start;
|
|
74
|
+
|
|
75
|
+
return value;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/*
|
|
79
|
+
* Reads a nxt_diyfp_t from the buffer.
|
|
80
|
+
* The returned nxt_diyfp_t is not necessarily normalized.
|
|
81
|
+
* If remaining is zero then the returned nxt_diyfp_t is accurate.
|
|
82
|
+
* Otherwise it has been rounded and has error of at most 1/2 ulp.
|
|
83
|
+
*/
|
|
84
|
+
static lexbor_diyfp_t
|
|
85
|
+
lexbor_strtod_diyfp_read(const lxb_char_t *start, size_t length, int *remaining)
|
|
86
|
+
{
|
|
87
|
+
size_t read;
|
|
88
|
+
uint64_t significand;
|
|
89
|
+
|
|
90
|
+
significand = lexbor_strtod_read_uint64(start, length, &read);
|
|
91
|
+
|
|
92
|
+
/* Round the significand. */
|
|
93
|
+
|
|
94
|
+
if (length != read) {
|
|
95
|
+
if (start[read] >= '5') {
|
|
96
|
+
significand++;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
*remaining = (int) (length - read);
|
|
101
|
+
|
|
102
|
+
return lexbor_diyfp(significand, 0);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/*
|
|
106
|
+
* Returns 10^exp as an exact nxt_diyfp_t.
|
|
107
|
+
* The given exp must be in the range [1; NXT_DECIMAL_EXPONENT_DIST[.
|
|
108
|
+
*/
|
|
109
|
+
lxb_inline lexbor_diyfp_t
|
|
110
|
+
lexbor_strtod_adjust_pow10(int exp)
|
|
111
|
+
{
|
|
112
|
+
switch (exp) {
|
|
113
|
+
case 1:
|
|
114
|
+
return lexbor_diyfp(lexbor_uint64_hl(0xa0000000, 00000000), -60);
|
|
115
|
+
case 2:
|
|
116
|
+
return lexbor_diyfp(lexbor_uint64_hl(0xc8000000, 00000000), -57);
|
|
117
|
+
case 3:
|
|
118
|
+
return lexbor_diyfp(lexbor_uint64_hl(0xfa000000, 00000000), -54);
|
|
119
|
+
case 4:
|
|
120
|
+
return lexbor_diyfp(lexbor_uint64_hl(0x9c400000, 00000000), -50);
|
|
121
|
+
case 5:
|
|
122
|
+
return lexbor_diyfp(lexbor_uint64_hl(0xc3500000, 00000000), -47);
|
|
123
|
+
case 6:
|
|
124
|
+
return lexbor_diyfp(lexbor_uint64_hl(0xf4240000, 00000000), -44);
|
|
125
|
+
case 7:
|
|
126
|
+
return lexbor_diyfp(lexbor_uint64_hl(0x98968000, 00000000), -40);
|
|
127
|
+
default:
|
|
128
|
+
return lexbor_diyfp(0, 0);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
/*
|
|
133
|
+
* Returns the significand size for a given order of magnitude.
|
|
134
|
+
* If v = f*2^e with 2^p-1 <= f <= 2^p then p+e is v's order of magnitude.
|
|
135
|
+
* This function returns the number of significant binary digits v will have
|
|
136
|
+
* once its encoded into a double. In almost all cases this is equal to
|
|
137
|
+
* NXT_SIGNIFICAND_SIZE. The only exception are denormals. They start with
|
|
138
|
+
* leading zeroes and their effective significand-size is hence smaller.
|
|
139
|
+
*/
|
|
140
|
+
lxb_inline int
|
|
141
|
+
lexbor_strtod_diyfp_sgnd_size(int order)
|
|
142
|
+
{
|
|
143
|
+
if (order >= (LEXBOR_DBL_EXPONENT_DENORMAL + LEXBOR_SIGNIFICAND_SIZE)) {
|
|
144
|
+
return LEXBOR_SIGNIFICAND_SIZE;
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
if (order <= LEXBOR_DBL_EXPONENT_DENORMAL) {
|
|
148
|
+
return 0;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
return order - LEXBOR_DBL_EXPONENT_DENORMAL;
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/*
|
|
155
|
+
* Returns either the correct double or the double that is just below
|
|
156
|
+
* the correct double.
|
|
157
|
+
*/
|
|
158
|
+
static double
|
|
159
|
+
lexbor_strtod_diyfp_strtod(const lxb_char_t *start, size_t length, int exp)
|
|
160
|
+
{
|
|
161
|
+
int magnitude, prec_digits;
|
|
162
|
+
int remaining, dec_exp, adj_exp, orig_e, shift;
|
|
163
|
+
int64_t error;
|
|
164
|
+
uint64_t prec_bits, half_way;
|
|
165
|
+
lexbor_diyfp_t value, pow, adj_pow, rounded;
|
|
166
|
+
|
|
167
|
+
value = lexbor_strtod_diyfp_read(start, length, &remaining);
|
|
168
|
+
|
|
169
|
+
exp += remaining;
|
|
170
|
+
|
|
171
|
+
/*
|
|
172
|
+
* Since some digits may have been dropped the value is not accurate.
|
|
173
|
+
* If remaining is different than 0 than the error is at most .5 ulp
|
|
174
|
+
* (unit in the last place).
|
|
175
|
+
* Using a common denominator to avoid dealing with fractions.
|
|
176
|
+
*/
|
|
177
|
+
|
|
178
|
+
error = (remaining == 0 ? 0 : LEXBOR_DENOM / 2);
|
|
179
|
+
|
|
180
|
+
orig_e = value.exp;
|
|
181
|
+
value = lexbor_diyfp_normalize(value);
|
|
182
|
+
error <<= orig_e - value.exp;
|
|
183
|
+
|
|
184
|
+
if (exp < LEXBOR_DECIMAL_EXPONENT_MIN) {
|
|
185
|
+
return 0.0;
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
pow = lexbor_cached_power_dec(exp, &dec_exp);
|
|
189
|
+
|
|
190
|
+
if (dec_exp != exp) {
|
|
191
|
+
adj_exp = exp - dec_exp;
|
|
192
|
+
adj_pow = lexbor_strtod_adjust_pow10(exp - dec_exp);
|
|
193
|
+
value = lexbor_diyfp_mul(value, adj_pow);
|
|
194
|
+
|
|
195
|
+
if (LEXBOR_UINT64_DECIMAL_DIGITS_MAX - (int) length < adj_exp) {
|
|
196
|
+
/*
|
|
197
|
+
* The adjustment power is exact. There is hence only
|
|
198
|
+
* an error of 0.5.
|
|
199
|
+
*/
|
|
200
|
+
error += LEXBOR_DENOM / 2;
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
value = lexbor_diyfp_mul(value, pow);
|
|
205
|
+
|
|
206
|
+
/*
|
|
207
|
+
* The error introduced by a multiplication of a * b equals
|
|
208
|
+
* error_a + error_b + error_a * error_b / 2^64 + 0.5
|
|
209
|
+
* Substituting a with 'value' and b with 'pow':
|
|
210
|
+
* error_b = 0.5 (all cached powers have an error of less than 0.5 ulp),
|
|
211
|
+
* error_ab = 0 or 1 / NXT_DENOM > error_a * error_b / 2^64.
|
|
212
|
+
*/
|
|
213
|
+
|
|
214
|
+
error += LEXBOR_DENOM + (error != 0 ? 1 : 0);
|
|
215
|
+
|
|
216
|
+
orig_e = value.exp;
|
|
217
|
+
value = lexbor_diyfp_normalize(value);
|
|
218
|
+
error <<= orig_e - value.exp;
|
|
219
|
+
|
|
220
|
+
/*
|
|
221
|
+
* Check whether the double's significand changes when the error is added
|
|
222
|
+
* or subtracted.
|
|
223
|
+
*/
|
|
224
|
+
|
|
225
|
+
magnitude = LEXBOR_DIYFP_SIGNIFICAND_SIZE + value.exp;
|
|
226
|
+
prec_digits = LEXBOR_DIYFP_SIGNIFICAND_SIZE
|
|
227
|
+
- lexbor_strtod_diyfp_sgnd_size(magnitude);
|
|
228
|
+
|
|
229
|
+
if (prec_digits + LEXBOR_DENOM_LOG >= LEXBOR_DIYFP_SIGNIFICAND_SIZE) {
|
|
230
|
+
/*
|
|
231
|
+
* This can only happen for very small denormals. In this case the
|
|
232
|
+
* half-way multiplied by the denominator exceeds the range of uint64.
|
|
233
|
+
* Simply shift everything to the right.
|
|
234
|
+
*/
|
|
235
|
+
shift = prec_digits + LEXBOR_DENOM_LOG
|
|
236
|
+
- LEXBOR_DIYFP_SIGNIFICAND_SIZE + 1;
|
|
237
|
+
|
|
238
|
+
value = lexbor_diyfp_shift_right(value, shift);
|
|
239
|
+
|
|
240
|
+
/*
|
|
241
|
+
* Add 1 for the lost precision of error, and NXT_DENOM
|
|
242
|
+
* for the lost precision of value.significand.
|
|
243
|
+
*/
|
|
244
|
+
error = (error >> shift) + 1 + LEXBOR_DENOM;
|
|
245
|
+
prec_digits -= shift;
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
prec_bits = value.significand & (((uint64_t) 1 << prec_digits) - 1);
|
|
249
|
+
prec_bits *= LEXBOR_DENOM;
|
|
250
|
+
|
|
251
|
+
half_way = (uint64_t) 1 << (prec_digits - 1);
|
|
252
|
+
half_way *= LEXBOR_DENOM;
|
|
253
|
+
|
|
254
|
+
rounded = lexbor_diyfp_shift_right(value, prec_digits);
|
|
255
|
+
|
|
256
|
+
if (prec_bits >= half_way + error) {
|
|
257
|
+
rounded.significand++;
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
return lexbor_diyfp_2d(rounded);
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
double
|
|
264
|
+
lexbor_strtod_internal(const lxb_char_t *start, size_t length, int exp)
|
|
265
|
+
{
|
|
266
|
+
size_t left, right;
|
|
267
|
+
const lxb_char_t *p, *e, *b;
|
|
268
|
+
|
|
269
|
+
/* Trim leading zeroes. */
|
|
270
|
+
|
|
271
|
+
p = start;
|
|
272
|
+
e = p + length;
|
|
273
|
+
|
|
274
|
+
while (p < e) {
|
|
275
|
+
if (*p != '0') {
|
|
276
|
+
start = p;
|
|
277
|
+
break;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
p++;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
left = e - p;
|
|
284
|
+
|
|
285
|
+
/* Trim trailing zeroes. */
|
|
286
|
+
|
|
287
|
+
b = start;
|
|
288
|
+
p = b + left - 1;
|
|
289
|
+
|
|
290
|
+
while (p > b) {
|
|
291
|
+
if (*p != '0') {
|
|
292
|
+
break;
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
p--;
|
|
296
|
+
}
|
|
297
|
+
|
|
298
|
+
right = p - b + 1;
|
|
299
|
+
|
|
300
|
+
length = right;
|
|
301
|
+
|
|
302
|
+
if (length == 0) {
|
|
303
|
+
return 0.0;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
exp += (int) (left - right);
|
|
307
|
+
|
|
308
|
+
if (exp + (int) length - 1 >= LEXBOR_DECIMAL_POWER_MAX) {
|
|
309
|
+
return INFINITY;
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
if (exp + (int) length <= LEXBOR_DECIMAL_POWER_MIN) {
|
|
313
|
+
return 0.0;
|
|
314
|
+
}
|
|
315
|
+
|
|
316
|
+
return lexbor_strtod_diyfp_strtod(start, length, exp);
|
|
317
|
+
}
|
|
318
|
+
|
|
319
|
+
#undef LEXBOR_DECIMAL_POWER_MAX
|
|
320
|
+
#undef LEXBOR_DECIMAL_POWER_MIN
|
|
321
|
+
|
|
322
|
+
#undef LEXBOR_UINT64_MAX
|
|
323
|
+
#undef LEXBOR_UINT64_DECIMAL_DIGITS_MAX
|
|
324
|
+
|
|
325
|
+
#undef LEXBOR_DENOM_LOG
|
|
326
|
+
#undef LEXBOR_DENOM
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Based on nxt_strtod.h from NGINX NJS project
|
|
5
|
+
*
|
|
6
|
+
* Copyright (C) Dmitry Volyntsev
|
|
7
|
+
* Copyright (C) Nginx, Inc.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#ifndef LEXBOR_STRTOD_H
|
|
11
|
+
#define LEXBOR_STRTOD_H
|
|
12
|
+
|
|
13
|
+
#ifdef __cplusplus
|
|
14
|
+
extern "C" {
|
|
15
|
+
#endif
|
|
16
|
+
|
|
17
|
+
#include "lexbor/core/base.h"
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
LXB_API double
|
|
21
|
+
lexbor_strtod_internal(const lxb_char_t *start, size_t length, int exp);
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
#ifdef __cplusplus
|
|
25
|
+
} /* extern "C" */
|
|
26
|
+
#endif
|
|
27
|
+
|
|
28
|
+
#endif /* LEXBOR_STRTOD_H */
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2018 Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Author: Alexander Borisov <borisov@lexbor.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef LEXBOR_TYPES_H
|
|
8
|
+
#define LEXBOR_TYPES_H
|
|
9
|
+
|
|
10
|
+
#ifdef __cplusplus
|
|
11
|
+
extern "C" {
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
#include <stdint.h>
|
|
15
|
+
#include <stdbool.h>
|
|
16
|
+
|
|
17
|
+
/* Inline */
|
|
18
|
+
#ifdef _MSC_VER
|
|
19
|
+
#define lxb_inline static __forceinline
|
|
20
|
+
#else
|
|
21
|
+
#define lxb_inline static inline
|
|
22
|
+
#endif
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
/* Simple types */
|
|
26
|
+
typedef uint32_t lxb_codepoint_t;
|
|
27
|
+
typedef unsigned char lxb_char_t;
|
|
28
|
+
typedef unsigned int lxb_status_t;
|
|
29
|
+
|
|
30
|
+
/* Callbacks */
|
|
31
|
+
typedef lxb_status_t (*lexbor_callback_f)(const lxb_char_t *buffer,
|
|
32
|
+
size_t size, void *ctx);
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
#ifdef __cplusplus
|
|
36
|
+
} /* extern "C" */
|
|
37
|
+
#endif
|
|
38
|
+
|
|
39
|
+
#endif /* LEXBOR_TYPES_H */
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2018 Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Author: Alexander Borisov <borisov@lexbor.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#include "lexbor/core/utils.h"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
size_t
|
|
11
|
+
lexbor_utils_power(size_t t, size_t k)
|
|
12
|
+
{
|
|
13
|
+
size_t res = 1;
|
|
14
|
+
|
|
15
|
+
while (k) {
|
|
16
|
+
if (k & 1) {
|
|
17
|
+
res *= t;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
t *= t;
|
|
21
|
+
k >>= 1;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return res;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
size_t
|
|
28
|
+
lexbor_utils_hash_hash(const lxb_char_t *key, size_t key_size)
|
|
29
|
+
{
|
|
30
|
+
size_t hash, i;
|
|
31
|
+
|
|
32
|
+
for (hash = i = 0; i < key_size; i++) {
|
|
33
|
+
hash += key[i];
|
|
34
|
+
hash += (hash << 10);
|
|
35
|
+
hash ^= (hash >> 6);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
hash += (hash << 3);
|
|
39
|
+
hash ^= (hash >> 11);
|
|
40
|
+
hash += (hash << 15);
|
|
41
|
+
|
|
42
|
+
return hash;
|
|
43
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2018 Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Author: Alexander Borisov <borisov@lexbor.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef LEXBOR_UTILS_H
|
|
8
|
+
#define LEXBOR_UTILS_H
|
|
9
|
+
|
|
10
|
+
#ifdef __cplusplus
|
|
11
|
+
extern "C" {
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
#include "lexbor/core/base.h"
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
#define lexbor_utils_whitespace(onechar, action, logic) \
|
|
18
|
+
(onechar action ' ' logic \
|
|
19
|
+
onechar action '\t' logic \
|
|
20
|
+
onechar action '\n' logic \
|
|
21
|
+
onechar action '\f' logic \
|
|
22
|
+
onechar action '\r')
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
LXB_API size_t
|
|
26
|
+
lexbor_utils_power(size_t t, size_t k);
|
|
27
|
+
|
|
28
|
+
LXB_API size_t
|
|
29
|
+
lexbor_utils_hash_hash(const lxb_char_t *key, size_t key_size);
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
#ifdef __cplusplus
|
|
33
|
+
} /* extern "C" */
|
|
34
|
+
#endif
|
|
35
|
+
|
|
36
|
+
#endif /* LEXBOR_UTILS_H */
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2019-2021 Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Author: Alexander Borisov <borisov@lexbor.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef LEXBOR_CSS_BASE_H
|
|
8
|
+
#define LEXBOR_CSS_BASE_H
|
|
9
|
+
|
|
10
|
+
#ifdef __cplusplus
|
|
11
|
+
extern "C" {
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
#include "lexbor/core/base.h"
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
#define LXB_CSS_VERSION_MAJOR 0
|
|
19
|
+
#define LXB_CSS_VERSION_MINOR 3
|
|
20
|
+
#define LXB_CSS_VERSION_PATCH 0
|
|
21
|
+
|
|
22
|
+
#define LXB_CSS_VERSION_STRING \
|
|
23
|
+
LEXBOR_STRINGIZE(LXB_CSS_VERSION_MAJOR) "." \
|
|
24
|
+
LEXBOR_STRINGIZE(LXB_CSS_VERSION_MINOR) "." \
|
|
25
|
+
LEXBOR_STRINGIZE(LXB_CSS_VERSION_PATCH)
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
typedef struct lxb_css_parser lxb_css_parser_t;
|
|
29
|
+
typedef struct lxb_css_parser_stack lxb_css_parser_stack_t;
|
|
30
|
+
typedef struct lxb_css_parser_error lxb_css_parser_error_t;
|
|
31
|
+
|
|
32
|
+
typedef struct lxb_css_syntax_tokenizer lxb_css_syntax_tokenizer_t;
|
|
33
|
+
typedef struct lxb_css_syntax_token lxb_css_syntax_token_t;
|
|
34
|
+
|
|
35
|
+
typedef bool
|
|
36
|
+
(*lxb_css_parser_state_f)(lxb_css_parser_t *parser,
|
|
37
|
+
lxb_css_syntax_token_t *token, void *ctx);
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
#ifdef __cplusplus
|
|
41
|
+
} /* extern "C" */
|
|
42
|
+
#endif
|
|
43
|
+
|
|
44
|
+
#endif /* LEXBOR_CSS_BASE_H */
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (C) 2020 Alexander Borisov
|
|
3
|
+
*
|
|
4
|
+
* Author: Alexander Borisov <borisov@lexbor.com>
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
#ifndef LXB_CSS_H
|
|
8
|
+
#define LXB_CSS_H
|
|
9
|
+
|
|
10
|
+
#include "lexbor/css/base.h"
|
|
11
|
+
#include "lexbor/css/log.h"
|
|
12
|
+
#include "lexbor/css/node.h"
|
|
13
|
+
#include "lexbor/css/parser.h"
|
|
14
|
+
#include "lexbor/css/stylesheet.h"
|
|
15
|
+
#include "lexbor/css/syntax/tokenizer/error.h"
|
|
16
|
+
#include "lexbor/css/syntax/tokenizer.h"
|
|
17
|
+
#include "lexbor/css/syntax/token.h"
|
|
18
|
+
#include "lexbor/css/syntax/parser.h"
|
|
19
|
+
#include "lexbor/css/syntax/anb.h"
|
|
20
|
+
#include "lexbor/css/selectors/selectors.h"
|
|
21
|
+
#include "lexbor/css/selectors/selector.h"
|
|
22
|
+
#include "lexbor/css/selectors/state.h"
|
|
23
|
+
#include "lexbor/css/selectors/pseudo.h"
|
|
24
|
+
|
|
25
|
+
#endif /* LXB_CSS_H */
|