nokolexbor 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (486) hide show
  1. checksums.yaml +7 -0
  2. data/ext/nokolexbor/config.h +186 -0
  3. data/ext/nokolexbor/extconf.rb +131 -0
  4. data/ext/nokolexbor/libxml/HTMLparser.h +320 -0
  5. data/ext/nokolexbor/libxml/SAX2.h +173 -0
  6. data/ext/nokolexbor/libxml/chvalid.h +230 -0
  7. data/ext/nokolexbor/libxml/debugXML.h +217 -0
  8. data/ext/nokolexbor/libxml/dict.h +81 -0
  9. data/ext/nokolexbor/libxml/encoding.h +232 -0
  10. data/ext/nokolexbor/libxml/entities.h +153 -0
  11. data/ext/nokolexbor/libxml/globals.h +529 -0
  12. data/ext/nokolexbor/libxml/hash.h +236 -0
  13. data/ext/nokolexbor/libxml/list.h +137 -0
  14. data/ext/nokolexbor/libxml/parser.h +1264 -0
  15. data/ext/nokolexbor/libxml/parserInternals.h +641 -0
  16. data/ext/nokolexbor/libxml/pattern.h +100 -0
  17. data/ext/nokolexbor/libxml/threads.h +94 -0
  18. data/ext/nokolexbor/libxml/tree.h +1315 -0
  19. data/ext/nokolexbor/libxml/uri.h +94 -0
  20. data/ext/nokolexbor/libxml/valid.h +448 -0
  21. data/ext/nokolexbor/libxml/xmlIO.h +369 -0
  22. data/ext/nokolexbor/libxml/xmlautomata.h +146 -0
  23. data/ext/nokolexbor/libxml/xmlerror.h +919 -0
  24. data/ext/nokolexbor/libxml/xmlexports.h +79 -0
  25. data/ext/nokolexbor/libxml/xmlmemory.h +226 -0
  26. data/ext/nokolexbor/libxml/xmlregexp.h +222 -0
  27. data/ext/nokolexbor/libxml/xmlstring.h +140 -0
  28. data/ext/nokolexbor/libxml/xmlversion.h +526 -0
  29. data/ext/nokolexbor/libxml/xpath.h +575 -0
  30. data/ext/nokolexbor/libxml/xpathInternals.h +632 -0
  31. data/ext/nokolexbor/libxml/xpointer.h +137 -0
  32. data/ext/nokolexbor/libxml.h +76 -0
  33. data/ext/nokolexbor/memory.c +39 -0
  34. data/ext/nokolexbor/nl_document.c +51 -0
  35. data/ext/nokolexbor/nl_node.c +790 -0
  36. data/ext/nokolexbor/nl_node_set.c +368 -0
  37. data/ext/nokolexbor/nl_xpath_context.c +200 -0
  38. data/ext/nokolexbor/nokolexbor.c +63 -0
  39. data/ext/nokolexbor/nokolexbor.h +37 -0
  40. data/ext/nokolexbor/private/buf.h +70 -0
  41. data/ext/nokolexbor/private/dict.h +11 -0
  42. data/ext/nokolexbor/private/enc.h +17 -0
  43. data/ext/nokolexbor/private/error.h +21 -0
  44. data/ext/nokolexbor/private/globals.h +9 -0
  45. data/ext/nokolexbor/private/memory.h +9 -0
  46. data/ext/nokolexbor/private/parser.h +27 -0
  47. data/ext/nokolexbor/private/string.h +9 -0
  48. data/ext/nokolexbor/private/threads.h +50 -0
  49. data/ext/nokolexbor/private/tree.h +18 -0
  50. data/ext/nokolexbor/private/xpath.h +7 -0
  51. data/ext/nokolexbor/timsort.h +601 -0
  52. data/ext/nokolexbor/xml_SAX2.c +80 -0
  53. data/ext/nokolexbor/xml_buf.c +363 -0
  54. data/ext/nokolexbor/xml_chvalid.c +334 -0
  55. data/ext/nokolexbor/xml_dict.c +1264 -0
  56. data/ext/nokolexbor/xml_encoding.c +124 -0
  57. data/ext/nokolexbor/xml_error.c +134 -0
  58. data/ext/nokolexbor/xml_globals.c +1085 -0
  59. data/ext/nokolexbor/xml_hash.c +1141 -0
  60. data/ext/nokolexbor/xml_memory.c +203 -0
  61. data/ext/nokolexbor/xml_parser.c +127 -0
  62. data/ext/nokolexbor/xml_parserInternals.c +338 -0
  63. data/ext/nokolexbor/xml_pattern.c +2375 -0
  64. data/ext/nokolexbor/xml_string.c +1051 -0
  65. data/ext/nokolexbor/xml_threads.c +881 -0
  66. data/ext/nokolexbor/xml_tree.c +148 -0
  67. data/ext/nokolexbor/xml_xpath.c +14743 -0
  68. data/lib/nokolexbor/attribute.rb +18 -0
  69. data/lib/nokolexbor/document.rb +6 -0
  70. data/lib/nokolexbor/node.rb +264 -0
  71. data/lib/nokolexbor/node_set.rb +124 -0
  72. data/lib/nokolexbor/version.rb +5 -0
  73. data/lib/nokolexbor/xpath_context.rb +14 -0
  74. data/lib/nokolexbor.rb +17 -0
  75. data/patches/0001-lexbor-support-text-pseudo-element.patch +137 -0
  76. data/patches/0002-lexbor-match-id-class-case-sensitive.patch +22 -0
  77. data/patches/0003-lexbor-attach-template-content-to-self.patch +13 -0
  78. data/vendor/lexbor/CMakeLists.txt +331 -0
  79. data/vendor/lexbor/config.cmake +890 -0
  80. data/vendor/lexbor/feature.cmake +134 -0
  81. data/vendor/lexbor/source/lexbor/core/array.c +208 -0
  82. data/vendor/lexbor/source/lexbor/core/array.h +100 -0
  83. data/vendor/lexbor/source/lexbor/core/array_obj.c +216 -0
  84. data/vendor/lexbor/source/lexbor/core/array_obj.h +134 -0
  85. data/vendor/lexbor/source/lexbor/core/avl.c +442 -0
  86. data/vendor/lexbor/source/lexbor/core/avl.h +82 -0
  87. data/vendor/lexbor/source/lexbor/core/base.h +86 -0
  88. data/vendor/lexbor/source/lexbor/core/bst.c +468 -0
  89. data/vendor/lexbor/source/lexbor/core/bst.h +108 -0
  90. data/vendor/lexbor/source/lexbor/core/bst_map.c +238 -0
  91. data/vendor/lexbor/source/lexbor/core/bst_map.h +87 -0
  92. data/vendor/lexbor/source/lexbor/core/config.cmake +12 -0
  93. data/vendor/lexbor/source/lexbor/core/conv.c +203 -0
  94. data/vendor/lexbor/source/lexbor/core/conv.h +53 -0
  95. data/vendor/lexbor/source/lexbor/core/core.h +35 -0
  96. data/vendor/lexbor/source/lexbor/core/def.h +57 -0
  97. data/vendor/lexbor/source/lexbor/core/diyfp.c +153 -0
  98. data/vendor/lexbor/source/lexbor/core/diyfp.h +258 -0
  99. data/vendor/lexbor/source/lexbor/core/dobject.c +187 -0
  100. data/vendor/lexbor/source/lexbor/core/dobject.h +92 -0
  101. data/vendor/lexbor/source/lexbor/core/dtoa.c +404 -0
  102. data/vendor/lexbor/source/lexbor/core/dtoa.h +28 -0
  103. data/vendor/lexbor/source/lexbor/core/fs.h +60 -0
  104. data/vendor/lexbor/source/lexbor/core/hash.c +476 -0
  105. data/vendor/lexbor/source/lexbor/core/hash.h +218 -0
  106. data/vendor/lexbor/source/lexbor/core/in.c +267 -0
  107. data/vendor/lexbor/source/lexbor/core/in.h +172 -0
  108. data/vendor/lexbor/source/lexbor/core/lexbor.h +35 -0
  109. data/vendor/lexbor/source/lexbor/core/mem.c +228 -0
  110. data/vendor/lexbor/source/lexbor/core/mem.h +141 -0
  111. data/vendor/lexbor/source/lexbor/core/mraw.c +428 -0
  112. data/vendor/lexbor/source/lexbor/core/mraw.h +114 -0
  113. data/vendor/lexbor/source/lexbor/core/perf.h +45 -0
  114. data/vendor/lexbor/source/lexbor/core/plog.c +73 -0
  115. data/vendor/lexbor/source/lexbor/core/plog.h +102 -0
  116. data/vendor/lexbor/source/lexbor/core/print.c +168 -0
  117. data/vendor/lexbor/source/lexbor/core/print.h +39 -0
  118. data/vendor/lexbor/source/lexbor/core/sbst.h +59 -0
  119. data/vendor/lexbor/source/lexbor/core/serialize.c +27 -0
  120. data/vendor/lexbor/source/lexbor/core/serialize.h +32 -0
  121. data/vendor/lexbor/source/lexbor/core/shs.c +118 -0
  122. data/vendor/lexbor/source/lexbor/core/shs.h +82 -0
  123. data/vendor/lexbor/source/lexbor/core/str.c +617 -0
  124. data/vendor/lexbor/source/lexbor/core/str.h +247 -0
  125. data/vendor/lexbor/source/lexbor/core/str_res.h +369 -0
  126. data/vendor/lexbor/source/lexbor/core/strtod.c +326 -0
  127. data/vendor/lexbor/source/lexbor/core/strtod.h +28 -0
  128. data/vendor/lexbor/source/lexbor/core/types.h +39 -0
  129. data/vendor/lexbor/source/lexbor/core/utils.c +43 -0
  130. data/vendor/lexbor/source/lexbor/core/utils.h +36 -0
  131. data/vendor/lexbor/source/lexbor/css/base.h +44 -0
  132. data/vendor/lexbor/source/lexbor/css/config.cmake +2 -0
  133. data/vendor/lexbor/source/lexbor/css/css.h +25 -0
  134. data/vendor/lexbor/source/lexbor/css/log.c +336 -0
  135. data/vendor/lexbor/source/lexbor/css/log.h +103 -0
  136. data/vendor/lexbor/source/lexbor/css/node.h +29 -0
  137. data/vendor/lexbor/source/lexbor/css/parser.c +473 -0
  138. data/vendor/lexbor/source/lexbor/css/parser.h +368 -0
  139. data/vendor/lexbor/source/lexbor/css/selectors/base.h +48 -0
  140. data/vendor/lexbor/source/lexbor/css/selectors/pseudo.c +91 -0
  141. data/vendor/lexbor/source/lexbor/css/selectors/pseudo.h +66 -0
  142. data/vendor/lexbor/source/lexbor/css/selectors/pseudo_const.h +109 -0
  143. data/vendor/lexbor/source/lexbor/css/selectors/pseudo_res.h +302 -0
  144. data/vendor/lexbor/source/lexbor/css/selectors/pseudo_state.c +279 -0
  145. data/vendor/lexbor/source/lexbor/css/selectors/pseudo_state.h +85 -0
  146. data/vendor/lexbor/source/lexbor/css/selectors/selector.c +927 -0
  147. data/vendor/lexbor/source/lexbor/css/selectors/selector.h +200 -0
  148. data/vendor/lexbor/source/lexbor/css/selectors/selectors.c +340 -0
  149. data/vendor/lexbor/source/lexbor/css/selectors/selectors.h +137 -0
  150. data/vendor/lexbor/source/lexbor/css/selectors/state.c +1718 -0
  151. data/vendor/lexbor/source/lexbor/css/selectors/state.h +79 -0
  152. data/vendor/lexbor/source/lexbor/css/stylesheet.h +37 -0
  153. data/vendor/lexbor/source/lexbor/css/syntax/anb.c +443 -0
  154. data/vendor/lexbor/source/lexbor/css/syntax/anb.h +45 -0
  155. data/vendor/lexbor/source/lexbor/css/syntax/base.h +33 -0
  156. data/vendor/lexbor/source/lexbor/css/syntax/parser.c +9 -0
  157. data/vendor/lexbor/source/lexbor/css/syntax/parser.h +25 -0
  158. data/vendor/lexbor/source/lexbor/css/syntax/res.h +48 -0
  159. data/vendor/lexbor/source/lexbor/css/syntax/state.c +2603 -0
  160. data/vendor/lexbor/source/lexbor/css/syntax/state.h +140 -0
  161. data/vendor/lexbor/source/lexbor/css/syntax/state_res.h +273 -0
  162. data/vendor/lexbor/source/lexbor/css/syntax/syntax.c +67 -0
  163. data/vendor/lexbor/source/lexbor/css/syntax/token.c +618 -0
  164. data/vendor/lexbor/source/lexbor/css/syntax/token.h +298 -0
  165. data/vendor/lexbor/source/lexbor/css/syntax/token_res.h +68 -0
  166. data/vendor/lexbor/source/lexbor/css/syntax/tokenizer/error.c +30 -0
  167. data/vendor/lexbor/source/lexbor/css/syntax/tokenizer/error.h +58 -0
  168. data/vendor/lexbor/source/lexbor/css/syntax/tokenizer.c +278 -0
  169. data/vendor/lexbor/source/lexbor/css/syntax/tokenizer.h +121 -0
  170. data/vendor/lexbor/source/lexbor/dom/base.h +32 -0
  171. data/vendor/lexbor/source/lexbor/dom/collection.c +97 -0
  172. data/vendor/lexbor/source/lexbor/dom/collection.h +112 -0
  173. data/vendor/lexbor/source/lexbor/dom/config.cmake +3 -0
  174. data/vendor/lexbor/source/lexbor/dom/dom.h +29 -0
  175. data/vendor/lexbor/source/lexbor/dom/exception.c +18 -0
  176. data/vendor/lexbor/source/lexbor/dom/exception.h +73 -0
  177. data/vendor/lexbor/source/lexbor/dom/interface.c +110 -0
  178. data/vendor/lexbor/source/lexbor/dom/interface.h +88 -0
  179. data/vendor/lexbor/source/lexbor/dom/interfaces/attr.c +445 -0
  180. data/vendor/lexbor/source/lexbor/dom/interfaces/attr.h +152 -0
  181. data/vendor/lexbor/source/lexbor/dom/interfaces/attr_const.h +62 -0
  182. data/vendor/lexbor/source/lexbor/dom/interfaces/attr_res.h +143 -0
  183. data/vendor/lexbor/source/lexbor/dom/interfaces/cdata_section.c +55 -0
  184. data/vendor/lexbor/source/lexbor/dom/interfaces/cdata_section.h +38 -0
  185. data/vendor/lexbor/source/lexbor/dom/interfaces/character_data.c +110 -0
  186. data/vendor/lexbor/source/lexbor/dom/interfaces/character_data.h +51 -0
  187. data/vendor/lexbor/source/lexbor/dom/interfaces/comment.c +64 -0
  188. data/vendor/lexbor/source/lexbor/dom/interfaces/comment.h +42 -0
  189. data/vendor/lexbor/source/lexbor/dom/interfaces/document.c +536 -0
  190. data/vendor/lexbor/source/lexbor/dom/interfaces/document.h +243 -0
  191. data/vendor/lexbor/source/lexbor/dom/interfaces/document_fragment.c +36 -0
  192. data/vendor/lexbor/source/lexbor/dom/interfaces/document_fragment.h +36 -0
  193. data/vendor/lexbor/source/lexbor/dom/interfaces/document_type.c +125 -0
  194. data/vendor/lexbor/source/lexbor/dom/interfaces/document_type.h +108 -0
  195. data/vendor/lexbor/source/lexbor/dom/interfaces/element.c +1411 -0
  196. data/vendor/lexbor/source/lexbor/dom/interfaces/element.h +319 -0
  197. data/vendor/lexbor/source/lexbor/dom/interfaces/event_target.c +32 -0
  198. data/vendor/lexbor/source/lexbor/dom/interfaces/event_target.h +34 -0
  199. data/vendor/lexbor/source/lexbor/dom/interfaces/node.c +661 -0
  200. data/vendor/lexbor/source/lexbor/dom/interfaces/node.h +192 -0
  201. data/vendor/lexbor/source/lexbor/dom/interfaces/processing_instruction.c +87 -0
  202. data/vendor/lexbor/source/lexbor/dom/interfaces/processing_instruction.h +66 -0
  203. data/vendor/lexbor/source/lexbor/dom/interfaces/shadow_root.c +36 -0
  204. data/vendor/lexbor/source/lexbor/dom/interfaces/shadow_root.h +44 -0
  205. data/vendor/lexbor/source/lexbor/dom/interfaces/text.c +63 -0
  206. data/vendor/lexbor/source/lexbor/dom/interfaces/text.h +42 -0
  207. data/vendor/lexbor/source/lexbor/encoding/base.h +218 -0
  208. data/vendor/lexbor/source/lexbor/encoding/big5.c +42839 -0
  209. data/vendor/lexbor/source/lexbor/encoding/config.cmake +12 -0
  210. data/vendor/lexbor/source/lexbor/encoding/const.h +65 -0
  211. data/vendor/lexbor/source/lexbor/encoding/decode.c +3193 -0
  212. data/vendor/lexbor/source/lexbor/encoding/decode.h +370 -0
  213. data/vendor/lexbor/source/lexbor/encoding/encode.c +1931 -0
  214. data/vendor/lexbor/source/lexbor/encoding/encode.h +377 -0
  215. data/vendor/lexbor/source/lexbor/encoding/encoding.c +252 -0
  216. data/vendor/lexbor/source/lexbor/encoding/encoding.h +475 -0
  217. data/vendor/lexbor/source/lexbor/encoding/euc_kr.c +53883 -0
  218. data/vendor/lexbor/source/lexbor/encoding/gb18030.c +47905 -0
  219. data/vendor/lexbor/source/lexbor/encoding/iso_2022_jp_katakana.c +159 -0
  220. data/vendor/lexbor/source/lexbor/encoding/jis0208.c +22477 -0
  221. data/vendor/lexbor/source/lexbor/encoding/jis0212.c +15787 -0
  222. data/vendor/lexbor/source/lexbor/encoding/multi.h +53 -0
  223. data/vendor/lexbor/source/lexbor/encoding/range.c +71 -0
  224. data/vendor/lexbor/source/lexbor/encoding/range.h +34 -0
  225. data/vendor/lexbor/source/lexbor/encoding/res.c +222 -0
  226. data/vendor/lexbor/source/lexbor/encoding/res.h +34 -0
  227. data/vendor/lexbor/source/lexbor/encoding/single.c +13748 -0
  228. data/vendor/lexbor/source/lexbor/encoding/single.h +116 -0
  229. data/vendor/lexbor/source/lexbor/html/base.h +44 -0
  230. data/vendor/lexbor/source/lexbor/html/config.cmake +3 -0
  231. data/vendor/lexbor/source/lexbor/html/encoding.c +574 -0
  232. data/vendor/lexbor/source/lexbor/html/encoding.h +106 -0
  233. data/vendor/lexbor/source/lexbor/html/html.h +107 -0
  234. data/vendor/lexbor/source/lexbor/html/interface.c +165 -0
  235. data/vendor/lexbor/source/lexbor/html/interface.h +186 -0
  236. data/vendor/lexbor/source/lexbor/html/interface_res.h +4449 -0
  237. data/vendor/lexbor/source/lexbor/html/interfaces/anchor_element.c +36 -0
  238. data/vendor/lexbor/source/lexbor/html/interfaces/anchor_element.h +34 -0
  239. data/vendor/lexbor/source/lexbor/html/interfaces/area_element.c +36 -0
  240. data/vendor/lexbor/source/lexbor/html/interfaces/area_element.h +34 -0
  241. data/vendor/lexbor/source/lexbor/html/interfaces/audio_element.c +36 -0
  242. data/vendor/lexbor/source/lexbor/html/interfaces/audio_element.h +34 -0
  243. data/vendor/lexbor/source/lexbor/html/interfaces/base_element.c +36 -0
  244. data/vendor/lexbor/source/lexbor/html/interfaces/base_element.h +34 -0
  245. data/vendor/lexbor/source/lexbor/html/interfaces/body_element.c +36 -0
  246. data/vendor/lexbor/source/lexbor/html/interfaces/body_element.h +34 -0
  247. data/vendor/lexbor/source/lexbor/html/interfaces/br_element.c +36 -0
  248. data/vendor/lexbor/source/lexbor/html/interfaces/br_element.h +34 -0
  249. data/vendor/lexbor/source/lexbor/html/interfaces/button_element.c +36 -0
  250. data/vendor/lexbor/source/lexbor/html/interfaces/button_element.h +34 -0
  251. data/vendor/lexbor/source/lexbor/html/interfaces/canvas_element.c +36 -0
  252. data/vendor/lexbor/source/lexbor/html/interfaces/canvas_element.h +34 -0
  253. data/vendor/lexbor/source/lexbor/html/interfaces/d_list_element.c +36 -0
  254. data/vendor/lexbor/source/lexbor/html/interfaces/d_list_element.h +34 -0
  255. data/vendor/lexbor/source/lexbor/html/interfaces/data_element.c +36 -0
  256. data/vendor/lexbor/source/lexbor/html/interfaces/data_element.h +34 -0
  257. data/vendor/lexbor/source/lexbor/html/interfaces/data_list_element.c +36 -0
  258. data/vendor/lexbor/source/lexbor/html/interfaces/data_list_element.h +34 -0
  259. data/vendor/lexbor/source/lexbor/html/interfaces/details_element.c +36 -0
  260. data/vendor/lexbor/source/lexbor/html/interfaces/details_element.h +34 -0
  261. data/vendor/lexbor/source/lexbor/html/interfaces/dialog_element.c +36 -0
  262. data/vendor/lexbor/source/lexbor/html/interfaces/dialog_element.h +34 -0
  263. data/vendor/lexbor/source/lexbor/html/interfaces/directory_element.c +36 -0
  264. data/vendor/lexbor/source/lexbor/html/interfaces/directory_element.h +34 -0
  265. data/vendor/lexbor/source/lexbor/html/interfaces/div_element.c +36 -0
  266. data/vendor/lexbor/source/lexbor/html/interfaces/div_element.h +34 -0
  267. data/vendor/lexbor/source/lexbor/html/interfaces/document.c +444 -0
  268. data/vendor/lexbor/source/lexbor/html/interfaces/document.h +256 -0
  269. data/vendor/lexbor/source/lexbor/html/interfaces/element.c +64 -0
  270. data/vendor/lexbor/source/lexbor/html/interfaces/element.h +54 -0
  271. data/vendor/lexbor/source/lexbor/html/interfaces/embed_element.c +36 -0
  272. data/vendor/lexbor/source/lexbor/html/interfaces/embed_element.h +34 -0
  273. data/vendor/lexbor/source/lexbor/html/interfaces/field_set_element.c +36 -0
  274. data/vendor/lexbor/source/lexbor/html/interfaces/field_set_element.h +34 -0
  275. data/vendor/lexbor/source/lexbor/html/interfaces/font_element.c +36 -0
  276. data/vendor/lexbor/source/lexbor/html/interfaces/font_element.h +34 -0
  277. data/vendor/lexbor/source/lexbor/html/interfaces/form_element.c +36 -0
  278. data/vendor/lexbor/source/lexbor/html/interfaces/form_element.h +34 -0
  279. data/vendor/lexbor/source/lexbor/html/interfaces/frame_element.c +36 -0
  280. data/vendor/lexbor/source/lexbor/html/interfaces/frame_element.h +34 -0
  281. data/vendor/lexbor/source/lexbor/html/interfaces/frame_set_element.c +36 -0
  282. data/vendor/lexbor/source/lexbor/html/interfaces/frame_set_element.h +34 -0
  283. data/vendor/lexbor/source/lexbor/html/interfaces/head_element.c +36 -0
  284. data/vendor/lexbor/source/lexbor/html/interfaces/head_element.h +34 -0
  285. data/vendor/lexbor/source/lexbor/html/interfaces/heading_element.c +36 -0
  286. data/vendor/lexbor/source/lexbor/html/interfaces/heading_element.h +34 -0
  287. data/vendor/lexbor/source/lexbor/html/interfaces/hr_element.c +36 -0
  288. data/vendor/lexbor/source/lexbor/html/interfaces/hr_element.h +34 -0
  289. data/vendor/lexbor/source/lexbor/html/interfaces/html_element.c +36 -0
  290. data/vendor/lexbor/source/lexbor/html/interfaces/html_element.h +34 -0
  291. data/vendor/lexbor/source/lexbor/html/interfaces/iframe_element.c +36 -0
  292. data/vendor/lexbor/source/lexbor/html/interfaces/iframe_element.h +34 -0
  293. data/vendor/lexbor/source/lexbor/html/interfaces/image_element.c +36 -0
  294. data/vendor/lexbor/source/lexbor/html/interfaces/image_element.h +34 -0
  295. data/vendor/lexbor/source/lexbor/html/interfaces/input_element.c +36 -0
  296. data/vendor/lexbor/source/lexbor/html/interfaces/input_element.h +34 -0
  297. data/vendor/lexbor/source/lexbor/html/interfaces/label_element.c +36 -0
  298. data/vendor/lexbor/source/lexbor/html/interfaces/label_element.h +34 -0
  299. data/vendor/lexbor/source/lexbor/html/interfaces/legend_element.c +36 -0
  300. data/vendor/lexbor/source/lexbor/html/interfaces/legend_element.h +34 -0
  301. data/vendor/lexbor/source/lexbor/html/interfaces/li_element.c +36 -0
  302. data/vendor/lexbor/source/lexbor/html/interfaces/li_element.h +34 -0
  303. data/vendor/lexbor/source/lexbor/html/interfaces/link_element.c +36 -0
  304. data/vendor/lexbor/source/lexbor/html/interfaces/link_element.h +34 -0
  305. data/vendor/lexbor/source/lexbor/html/interfaces/map_element.c +36 -0
  306. data/vendor/lexbor/source/lexbor/html/interfaces/map_element.h +34 -0
  307. data/vendor/lexbor/source/lexbor/html/interfaces/marquee_element.c +36 -0
  308. data/vendor/lexbor/source/lexbor/html/interfaces/marquee_element.h +34 -0
  309. data/vendor/lexbor/source/lexbor/html/interfaces/media_element.c +36 -0
  310. data/vendor/lexbor/source/lexbor/html/interfaces/media_element.h +34 -0
  311. data/vendor/lexbor/source/lexbor/html/interfaces/menu_element.c +36 -0
  312. data/vendor/lexbor/source/lexbor/html/interfaces/menu_element.h +34 -0
  313. data/vendor/lexbor/source/lexbor/html/interfaces/meta_element.c +36 -0
  314. data/vendor/lexbor/source/lexbor/html/interfaces/meta_element.h +34 -0
  315. data/vendor/lexbor/source/lexbor/html/interfaces/meter_element.c +36 -0
  316. data/vendor/lexbor/source/lexbor/html/interfaces/meter_element.h +34 -0
  317. data/vendor/lexbor/source/lexbor/html/interfaces/mod_element.c +36 -0
  318. data/vendor/lexbor/source/lexbor/html/interfaces/mod_element.h +34 -0
  319. data/vendor/lexbor/source/lexbor/html/interfaces/o_list_element.c +36 -0
  320. data/vendor/lexbor/source/lexbor/html/interfaces/o_list_element.h +34 -0
  321. data/vendor/lexbor/source/lexbor/html/interfaces/object_element.c +36 -0
  322. data/vendor/lexbor/source/lexbor/html/interfaces/object_element.h +34 -0
  323. data/vendor/lexbor/source/lexbor/html/interfaces/opt_group_element.c +36 -0
  324. data/vendor/lexbor/source/lexbor/html/interfaces/opt_group_element.h +34 -0
  325. data/vendor/lexbor/source/lexbor/html/interfaces/option_element.c +36 -0
  326. data/vendor/lexbor/source/lexbor/html/interfaces/option_element.h +34 -0
  327. data/vendor/lexbor/source/lexbor/html/interfaces/output_element.c +36 -0
  328. data/vendor/lexbor/source/lexbor/html/interfaces/output_element.h +34 -0
  329. data/vendor/lexbor/source/lexbor/html/interfaces/paragraph_element.c +36 -0
  330. data/vendor/lexbor/source/lexbor/html/interfaces/paragraph_element.h +34 -0
  331. data/vendor/lexbor/source/lexbor/html/interfaces/param_element.c +36 -0
  332. data/vendor/lexbor/source/lexbor/html/interfaces/param_element.h +34 -0
  333. data/vendor/lexbor/source/lexbor/html/interfaces/picture_element.c +36 -0
  334. data/vendor/lexbor/source/lexbor/html/interfaces/picture_element.h +34 -0
  335. data/vendor/lexbor/source/lexbor/html/interfaces/pre_element.c +36 -0
  336. data/vendor/lexbor/source/lexbor/html/interfaces/pre_element.h +34 -0
  337. data/vendor/lexbor/source/lexbor/html/interfaces/progress_element.c +36 -0
  338. data/vendor/lexbor/source/lexbor/html/interfaces/progress_element.h +34 -0
  339. data/vendor/lexbor/source/lexbor/html/interfaces/quote_element.c +36 -0
  340. data/vendor/lexbor/source/lexbor/html/interfaces/quote_element.h +34 -0
  341. data/vendor/lexbor/source/lexbor/html/interfaces/script_element.c +36 -0
  342. data/vendor/lexbor/source/lexbor/html/interfaces/script_element.h +34 -0
  343. data/vendor/lexbor/source/lexbor/html/interfaces/select_element.c +36 -0
  344. data/vendor/lexbor/source/lexbor/html/interfaces/select_element.h +34 -0
  345. data/vendor/lexbor/source/lexbor/html/interfaces/slot_element.c +36 -0
  346. data/vendor/lexbor/source/lexbor/html/interfaces/slot_element.h +34 -0
  347. data/vendor/lexbor/source/lexbor/html/interfaces/source_element.c +36 -0
  348. data/vendor/lexbor/source/lexbor/html/interfaces/source_element.h +34 -0
  349. data/vendor/lexbor/source/lexbor/html/interfaces/span_element.c +36 -0
  350. data/vendor/lexbor/source/lexbor/html/interfaces/span_element.h +34 -0
  351. data/vendor/lexbor/source/lexbor/html/interfaces/style_element.c +36 -0
  352. data/vendor/lexbor/source/lexbor/html/interfaces/style_element.h +34 -0
  353. data/vendor/lexbor/source/lexbor/html/interfaces/table_caption_element.c +36 -0
  354. data/vendor/lexbor/source/lexbor/html/interfaces/table_caption_element.h +34 -0
  355. data/vendor/lexbor/source/lexbor/html/interfaces/table_cell_element.c +36 -0
  356. data/vendor/lexbor/source/lexbor/html/interfaces/table_cell_element.h +34 -0
  357. data/vendor/lexbor/source/lexbor/html/interfaces/table_col_element.c +36 -0
  358. data/vendor/lexbor/source/lexbor/html/interfaces/table_col_element.h +34 -0
  359. data/vendor/lexbor/source/lexbor/html/interfaces/table_element.c +36 -0
  360. data/vendor/lexbor/source/lexbor/html/interfaces/table_element.h +34 -0
  361. data/vendor/lexbor/source/lexbor/html/interfaces/table_row_element.c +36 -0
  362. data/vendor/lexbor/source/lexbor/html/interfaces/table_row_element.h +34 -0
  363. data/vendor/lexbor/source/lexbor/html/interfaces/table_section_element.c +36 -0
  364. data/vendor/lexbor/source/lexbor/html/interfaces/table_section_element.h +34 -0
  365. data/vendor/lexbor/source/lexbor/html/interfaces/template_element.c +46 -0
  366. data/vendor/lexbor/source/lexbor/html/interfaces/template_element.h +38 -0
  367. data/vendor/lexbor/source/lexbor/html/interfaces/text_area_element.c +36 -0
  368. data/vendor/lexbor/source/lexbor/html/interfaces/text_area_element.h +34 -0
  369. data/vendor/lexbor/source/lexbor/html/interfaces/time_element.c +36 -0
  370. data/vendor/lexbor/source/lexbor/html/interfaces/time_element.h +34 -0
  371. data/vendor/lexbor/source/lexbor/html/interfaces/title_element.c +133 -0
  372. data/vendor/lexbor/source/lexbor/html/interfaces/title_element.h +42 -0
  373. data/vendor/lexbor/source/lexbor/html/interfaces/track_element.c +36 -0
  374. data/vendor/lexbor/source/lexbor/html/interfaces/track_element.h +34 -0
  375. data/vendor/lexbor/source/lexbor/html/interfaces/u_list_element.c +36 -0
  376. data/vendor/lexbor/source/lexbor/html/interfaces/u_list_element.h +34 -0
  377. data/vendor/lexbor/source/lexbor/html/interfaces/unknown_element.c +36 -0
  378. data/vendor/lexbor/source/lexbor/html/interfaces/unknown_element.h +34 -0
  379. data/vendor/lexbor/source/lexbor/html/interfaces/video_element.c +36 -0
  380. data/vendor/lexbor/source/lexbor/html/interfaces/video_element.h +34 -0
  381. data/vendor/lexbor/source/lexbor/html/interfaces/window.c +36 -0
  382. data/vendor/lexbor/source/lexbor/html/interfaces/window.h +34 -0
  383. data/vendor/lexbor/source/lexbor/html/node.c +14 -0
  384. data/vendor/lexbor/source/lexbor/html/node.h +67 -0
  385. data/vendor/lexbor/source/lexbor/html/parser.c +469 -0
  386. data/vendor/lexbor/source/lexbor/html/parser.h +170 -0
  387. data/vendor/lexbor/source/lexbor/html/serialize.c +1510 -0
  388. data/vendor/lexbor/source/lexbor/html/serialize.h +93 -0
  389. data/vendor/lexbor/source/lexbor/html/tag.h +103 -0
  390. data/vendor/lexbor/source/lexbor/html/tag_res.h +2262 -0
  391. data/vendor/lexbor/source/lexbor/html/token.c +386 -0
  392. data/vendor/lexbor/source/lexbor/html/token.h +130 -0
  393. data/vendor/lexbor/source/lexbor/html/token_attr.c +44 -0
  394. data/vendor/lexbor/source/lexbor/html/token_attr.h +67 -0
  395. data/vendor/lexbor/source/lexbor/html/tokenizer/error.c +28 -0
  396. data/vendor/lexbor/source/lexbor/html/tokenizer/error.h +141 -0
  397. data/vendor/lexbor/source/lexbor/html/tokenizer/res.h +4956 -0
  398. data/vendor/lexbor/source/lexbor/html/tokenizer/state.c +2171 -0
  399. data/vendor/lexbor/source/lexbor/html/tokenizer/state.h +225 -0
  400. data/vendor/lexbor/source/lexbor/html/tokenizer/state_comment.c +489 -0
  401. data/vendor/lexbor/source/lexbor/html/tokenizer/state_comment.h +27 -0
  402. data/vendor/lexbor/source/lexbor/html/tokenizer/state_doctype.c +1654 -0
  403. data/vendor/lexbor/source/lexbor/html/tokenizer/state_doctype.h +27 -0
  404. data/vendor/lexbor/source/lexbor/html/tokenizer/state_rawtext.c +303 -0
  405. data/vendor/lexbor/source/lexbor/html/tokenizer/state_rawtext.h +32 -0
  406. data/vendor/lexbor/source/lexbor/html/tokenizer/state_rcdata.c +311 -0
  407. data/vendor/lexbor/source/lexbor/html/tokenizer/state_rcdata.h +32 -0
  408. data/vendor/lexbor/source/lexbor/html/tokenizer/state_script.c +1209 -0
  409. data/vendor/lexbor/source/lexbor/html/tokenizer/state_script.h +32 -0
  410. data/vendor/lexbor/source/lexbor/html/tokenizer.c +499 -0
  411. data/vendor/lexbor/source/lexbor/html/tokenizer.h +343 -0
  412. data/vendor/lexbor/source/lexbor/html/tree/active_formatting.c +241 -0
  413. data/vendor/lexbor/source/lexbor/html/tree/active_formatting.h +117 -0
  414. data/vendor/lexbor/source/lexbor/html/tree/error.c +26 -0
  415. data/vendor/lexbor/source/lexbor/html/tree/error.h +114 -0
  416. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_after_body.c +62 -0
  417. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_after_frameset.c +63 -0
  418. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_body.c +82 -0
  419. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_frameset.c +88 -0
  420. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/after_head.c +222 -0
  421. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/before_head.c +144 -0
  422. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/before_html.c +166 -0
  423. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/foreign_content.c +358 -0
  424. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_body.c +1974 -0
  425. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_caption.c +158 -0
  426. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_cell.c +187 -0
  427. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_column_group.c +194 -0
  428. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_frameset.c +149 -0
  429. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_head.c +374 -0
  430. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_head_noscript.c +121 -0
  431. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_row.c +211 -0
  432. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_select.c +341 -0
  433. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_select_in_table.c +115 -0
  434. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table.c +451 -0
  435. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table_body.c +208 -0
  436. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_table_text.c +127 -0
  437. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/in_template.c +189 -0
  438. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/initial.c +411 -0
  439. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode/text.c +61 -0
  440. data/vendor/lexbor/source/lexbor/html/tree/insertion_mode.h +135 -0
  441. data/vendor/lexbor/source/lexbor/html/tree/open_elements.c +251 -0
  442. data/vendor/lexbor/source/lexbor/html/tree/open_elements.h +105 -0
  443. data/vendor/lexbor/source/lexbor/html/tree/template_insertion.c +10 -0
  444. data/vendor/lexbor/source/lexbor/html/tree/template_insertion.h +100 -0
  445. data/vendor/lexbor/source/lexbor/html/tree.c +1726 -0
  446. data/vendor/lexbor/source/lexbor/html/tree.h +431 -0
  447. data/vendor/lexbor/source/lexbor/html/tree_res.h +111 -0
  448. data/vendor/lexbor/source/lexbor/ns/base.h +32 -0
  449. data/vendor/lexbor/source/lexbor/ns/config.cmake +2 -0
  450. data/vendor/lexbor/source/lexbor/ns/const.h +37 -0
  451. data/vendor/lexbor/source/lexbor/ns/ns.c +154 -0
  452. data/vendor/lexbor/source/lexbor/ns/ns.h +66 -0
  453. data/vendor/lexbor/source/lexbor/ns/res.h +97 -0
  454. data/vendor/lexbor/source/lexbor/ports/posix/config.cmake +11 -0
  455. data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/fs.c +236 -0
  456. data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/memory.c +33 -0
  457. data/vendor/lexbor/source/lexbor/ports/posix/lexbor/core/perf.c +158 -0
  458. data/vendor/lexbor/source/lexbor/ports/windows_nt/config.cmake +18 -0
  459. data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/fs.c +239 -0
  460. data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/memory.c +33 -0
  461. data/vendor/lexbor/source/lexbor/ports/windows_nt/lexbor/core/perf.c +81 -0
  462. data/vendor/lexbor/source/lexbor/selectors/base.h +30 -0
  463. data/vendor/lexbor/source/lexbor/selectors/config.cmake +2 -0
  464. data/vendor/lexbor/source/lexbor/selectors/selectors.c +1591 -0
  465. data/vendor/lexbor/source/lexbor/selectors/selectors.h +71 -0
  466. data/vendor/lexbor/source/lexbor/tag/base.h +32 -0
  467. data/vendor/lexbor/source/lexbor/tag/config.cmake +2 -0
  468. data/vendor/lexbor/source/lexbor/tag/const.h +225 -0
  469. data/vendor/lexbor/source/lexbor/tag/res.h +562 -0
  470. data/vendor/lexbor/source/lexbor/tag/tag.c +144 -0
  471. data/vendor/lexbor/source/lexbor/tag/tag.h +123 -0
  472. data/vendor/lexbor/source/lexbor/utils/base.h +32 -0
  473. data/vendor/lexbor/source/lexbor/utils/config.cmake +2 -0
  474. data/vendor/lexbor/source/lexbor/utils/http.c +534 -0
  475. data/vendor/lexbor/source/lexbor/utils/http.h +90 -0
  476. data/vendor/lexbor/source/lexbor/utils/utils.h +15 -0
  477. data/vendor/lexbor/source/lexbor/utils/warc.c +817 -0
  478. data/vendor/lexbor/source/lexbor/utils/warc.h +126 -0
  479. data/vendor/lexbor/utils/lexbor/css/selectors/pseudo.py +231 -0
  480. data/vendor/lexbor/utils/lexbor/css/selectors/tmp/const.h +21 -0
  481. data/vendor/lexbor/utils/lexbor/css/selectors/tmp/res.h +26 -0
  482. data/vendor/lexbor/utils/lexbor/css/syntax/definitions.py +49 -0
  483. data/vendor/lexbor/utils/lexbor/css/syntax/token_res.py +54 -0
  484. data/vendor/lexbor/utils/lexbor/css/syntax/tokenizer_code_map.py +36 -0
  485. data/vendor/lexbor/version +1 -0
  486. metadata +542 -0
@@ -0,0 +1,1931 @@
1
+ /*
2
+ * Copyright (C) 2019 Alexander Borisov
3
+ *
4
+ * Author: Alexander Borisov <borisov@lexbor.com>
5
+ */
6
+
7
+ #include "lexbor/encoding/encode.h"
8
+ #include "lexbor/encoding/single.h"
9
+ #include "lexbor/encoding/multi.h"
10
+ #include "lexbor/encoding/range.h"
11
+
12
+
13
+ #define LXB_ENCODING_ENCODE_APPEND(ctx, cp) \
14
+ do { \
15
+ if ((ctx)->buffer_used == (ctx)->buffer_length) { \
16
+ return LXB_STATUS_SMALL_BUFFER; \
17
+ } \
18
+ \
19
+ (ctx)->buffer_out[(ctx)->buffer_used++] = (lxb_char_t) cp; \
20
+ } \
21
+ while (0)
22
+
23
+ #define LXB_ENCODING_ENCODE_APPEND_P(ctx, cp) \
24
+ do { \
25
+ if ((ctx)->buffer_used == (ctx)->buffer_length) { \
26
+ *cps = p; \
27
+ return LXB_STATUS_SMALL_BUFFER; \
28
+ } \
29
+ \
30
+ (ctx)->buffer_out[(ctx)->buffer_used++] = (lxb_char_t) cp; \
31
+ } \
32
+ while (0)
33
+
34
+ #define LXB_ENCODING_ENCODE_ERROR(ctx) \
35
+ do { \
36
+ if (ctx->replace_to == NULL) { \
37
+ return LXB_STATUS_ERROR; \
38
+ } \
39
+ \
40
+ if ((ctx->buffer_used + ctx->replace_len) > ctx->buffer_length) { \
41
+ return LXB_STATUS_SMALL_BUFFER; \
42
+ } \
43
+ \
44
+ memcpy(&ctx->buffer_out[ctx->buffer_used], ctx->replace_to, \
45
+ ctx->replace_len); \
46
+ \
47
+ ctx->buffer_used += ctx->replace_len; \
48
+ } \
49
+ while (0)
50
+
51
+ #define LXB_ENCODING_ENCODE_ERROR_P(ctx) \
52
+ do { \
53
+ if (ctx->replace_to == NULL) { \
54
+ *cps = p; \
55
+ return LXB_STATUS_ERROR; \
56
+ } \
57
+ \
58
+ if ((ctx->buffer_used + ctx->replace_len) > ctx->buffer_length) { \
59
+ *cps = p; \
60
+ return LXB_STATUS_SMALL_BUFFER; \
61
+ } \
62
+ \
63
+ memcpy(&ctx->buffer_out[ctx->buffer_used], ctx->replace_to, \
64
+ ctx->replace_len); \
65
+ \
66
+ ctx->buffer_used += ctx->replace_len; \
67
+ } \
68
+ while (0)
69
+
70
+ #define LXB_ENCODING_ENCODE_SINGLE_BYTE(table, table_size) \
71
+ do { \
72
+ lxb_codepoint_t cp; \
73
+ const lxb_codepoint_t *p = *cps; \
74
+ const lexbor_shs_hash_t *hash; \
75
+ \
76
+ for (; p < end; p++) { \
77
+ cp = *p; \
78
+ \
79
+ if (cp < 0x80) { \
80
+ LXB_ENCODING_ENCODE_APPEND_P(ctx, cp); \
81
+ continue; \
82
+ } \
83
+ \
84
+ hash = lexbor_shs_hash_get_static(table, table_size, cp); \
85
+ if (hash == NULL) { \
86
+ LXB_ENCODING_ENCODE_ERROR_P(ctx); \
87
+ continue; \
88
+ } \
89
+ \
90
+ LXB_ENCODING_ENCODE_APPEND_P(ctx, (uintptr_t) hash->value); \
91
+ } \
92
+ \
93
+ return LXB_STATUS_OK; \
94
+ } \
95
+ while (0)
96
+
97
+ #define LXB_ENCODING_ENCODE_BYTE_SINGLE(table, table_size) \
98
+ const lexbor_shs_hash_t *hash; \
99
+ \
100
+ if (cp < 0x80) { \
101
+ *(*data)++ = (lxb_char_t) cp; \
102
+ return 1; \
103
+ } \
104
+ \
105
+ hash = lexbor_shs_hash_get_static(table, table_size, cp); \
106
+ if (hash == NULL) { \
107
+ return LXB_ENCODING_ENCODE_ERROR; \
108
+ } \
109
+ \
110
+ *(*data)++ = (lxb_char_t) (uintptr_t) hash->value; \
111
+ return 1
112
+
113
+
114
+ lxb_status_t
115
+ lxb_encoding_encode_default(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
116
+ const lxb_codepoint_t *end)
117
+ {
118
+ return lxb_encoding_encode_utf_8(ctx, cps, end);
119
+ }
120
+
121
+ lxb_status_t
122
+ lxb_encoding_encode_auto(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
123
+ const lxb_codepoint_t *end)
124
+ {
125
+ *cps = end;
126
+ return LXB_STATUS_ERROR;
127
+ }
128
+
129
+ lxb_status_t
130
+ lxb_encoding_encode_undefined(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
131
+ const lxb_codepoint_t *end)
132
+ {
133
+ *cps = end;
134
+ return LXB_STATUS_ERROR;
135
+ }
136
+
137
+ lxb_status_t
138
+ lxb_encoding_encode_big5(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
139
+ const lxb_codepoint_t *end)
140
+ {
141
+ lxb_codepoint_t cp;
142
+ const lexbor_shs_hash_t *hash;
143
+
144
+ for (; *cps < end; (*cps)++) {
145
+ cp = **cps;
146
+
147
+ if (cp < 0x80) {
148
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
149
+ continue;
150
+ }
151
+
152
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_big5,
153
+ LXB_ENCODING_MULTI_HASH_BIG5_SIZE, cp);
154
+ if (hash == NULL) {
155
+ LXB_ENCODING_ENCODE_ERROR(ctx);
156
+ continue;
157
+ }
158
+
159
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
160
+ return LXB_STATUS_SMALL_BUFFER;
161
+ }
162
+
163
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value) / 157 + 0x81;
164
+
165
+ if ((((uint32_t) (uintptr_t) hash->value) % 157) < 0x3F) {
166
+ ctx->buffer_out[ ctx->buffer_used++ ] = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x40;
167
+ }
168
+ else {
169
+ ctx->buffer_out[ ctx->buffer_used++ ] = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x62;
170
+ }
171
+ }
172
+
173
+ return LXB_STATUS_OK;
174
+ }
175
+
176
+ lxb_status_t
177
+ lxb_encoding_encode_euc_jp(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
178
+ const lxb_codepoint_t *end)
179
+ {
180
+ lxb_codepoint_t cp;
181
+ const lexbor_shs_hash_t *hash;
182
+
183
+ for (; *cps < end; (*cps)++) {
184
+ cp = **cps;
185
+
186
+ if (cp < 0x80) {
187
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
188
+ continue;
189
+ }
190
+
191
+ if (cp == 0x00A5) {
192
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x5C);
193
+ continue;
194
+ }
195
+
196
+ if (cp == 0x203E) {
197
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x7E);
198
+ continue;
199
+ }
200
+
201
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
202
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
203
+ return LXB_STATUS_SMALL_BUFFER;
204
+ }
205
+
206
+ ctx->buffer_out[ ctx->buffer_used++ ] = 0x8E;
207
+ ctx->buffer_out[ ctx->buffer_used++ ] = cp - 0xFF61 + 0xA1;
208
+
209
+ continue;
210
+ }
211
+
212
+ if (cp == 0x2212) {
213
+ cp = 0xFF0D;
214
+ }
215
+
216
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_jis0208,
217
+ LXB_ENCODING_MULTI_HASH_JIS0208_SIZE, cp);
218
+ if (hash == NULL) {
219
+ LXB_ENCODING_ENCODE_ERROR(ctx);
220
+ continue;
221
+ }
222
+
223
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
224
+ return LXB_STATUS_SMALL_BUFFER;
225
+ }
226
+
227
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 94 + 0xA1;
228
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 94 + 0xA1;
229
+ }
230
+
231
+ return LXB_STATUS_OK;
232
+ }
233
+
234
+ lxb_status_t
235
+ lxb_encoding_encode_euc_kr(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
236
+ const lxb_codepoint_t *end)
237
+ {
238
+ lxb_codepoint_t cp;
239
+ const lexbor_shs_hash_t *hash;
240
+
241
+ for (; *cps < end; (*cps)++) {
242
+ cp = **cps;
243
+
244
+ if (cp < 0x80) {
245
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
246
+ continue;
247
+ }
248
+
249
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_euc_kr,
250
+ LXB_ENCODING_MULTI_HASH_EUC_KR_SIZE, cp);
251
+ if (hash == NULL) {
252
+ LXB_ENCODING_ENCODE_ERROR(ctx);
253
+ continue;
254
+ }
255
+
256
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
257
+ return LXB_STATUS_SMALL_BUFFER;
258
+ }
259
+
260
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
261
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 190 + 0x41;
262
+ }
263
+
264
+ return LXB_STATUS_OK;
265
+ }
266
+
267
+ lxb_status_t
268
+ lxb_encoding_encode_gbk(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
269
+ const lxb_codepoint_t *end)
270
+ {
271
+ lxb_codepoint_t cp;
272
+ const lexbor_shs_hash_t *hash;
273
+
274
+ for (; *cps < end; (*cps)++) {
275
+ cp = **cps;
276
+
277
+ if (cp < 0x80) {
278
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
279
+ continue;
280
+ }
281
+
282
+ if (cp == 0xE5E5) {
283
+ LXB_ENCODING_ENCODE_ERROR(ctx);
284
+ continue;
285
+ }
286
+
287
+ if (cp == 0x20AC) {
288
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x80);
289
+ continue;
290
+ }
291
+
292
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_gb18030,
293
+ LXB_ENCODING_MULTI_HASH_GB18030_SIZE, cp);
294
+ if (hash == NULL) {
295
+ LXB_ENCODING_ENCODE_ERROR(ctx);
296
+ continue;
297
+ }
298
+
299
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
300
+ return LXB_STATUS_SMALL_BUFFER;
301
+ }
302
+
303
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (uintptr_t) hash->value / 190 + 0x81;
304
+
305
+ if (((lxb_char_t) (uintptr_t) hash->value % 190) < 0x3F) {
306
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x40;
307
+ }
308
+ else {
309
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x41;
310
+ }
311
+ }
312
+
313
+ return LXB_STATUS_OK;
314
+ }
315
+
316
+ lxb_status_t
317
+ lxb_encoding_encode_ibm866(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
318
+ const lxb_codepoint_t *end)
319
+ {
320
+
321
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_ibm866,
322
+ LXB_ENCODING_SINGLE_HASH_IBM866_SIZE);
323
+ }
324
+
325
+ lxb_status_t
326
+ lxb_encoding_encode_iso_2022_jp(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
327
+ const lxb_codepoint_t *end)
328
+ {
329
+ int8_t size;
330
+ unsigned state;
331
+ lxb_codepoint_t cp;
332
+ const lexbor_shs_hash_t *hash;
333
+
334
+ size = 0;
335
+ state = ctx->state;
336
+
337
+ for (; *cps < end; (*cps)++) {
338
+ cp = **cps;
339
+
340
+ begin:
341
+
342
+ switch (ctx->state) {
343
+ case LXB_ENCODING_ENCODE_2022_JP_ASCII:
344
+ if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
345
+ goto failed;
346
+ }
347
+
348
+ if (cp < 0x80) {
349
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
350
+ continue;
351
+ }
352
+
353
+ if (cp == 0x00A5 || cp == 0x203E) {
354
+ /*
355
+ * Do not switch to the ROMAN stage with prepend code point
356
+ * to stream, add it immediately.
357
+ */
358
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
359
+ goto small_buffer;
360
+ }
361
+
362
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ROMAN;
363
+
364
+ if (cp == 0x00A5) {
365
+ memcpy(&ctx->buffer_out[ctx->buffer_used],
366
+ "\x1B\x28\x4A\x5C", 4);
367
+ ctx->buffer_used += 4;
368
+
369
+ continue;
370
+ }
371
+
372
+ memcpy(&ctx->buffer_out[ctx->buffer_used],
373
+ "\x1B\x28\x4A\x7E", 4);
374
+ ctx->buffer_used += 4;
375
+
376
+ continue;
377
+ }
378
+
379
+ break;
380
+
381
+ case LXB_ENCODING_ENCODE_2022_JP_ROMAN:
382
+ if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
383
+ goto failed;
384
+ }
385
+
386
+ if (cp < 0x80) {
387
+ switch (cp) {
388
+ case 0x005C:
389
+ case 0x007E:
390
+ break;
391
+
392
+ case 0x00A5:
393
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x5C);
394
+ continue;
395
+
396
+ case 0x203E:
397
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x7E);
398
+ continue;
399
+
400
+ default:
401
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
402
+ continue;
403
+ }
404
+
405
+ /*
406
+ * Do not switch to the ANSI stage with prepend code point
407
+ * to stream, add it immediately.
408
+ */
409
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
410
+ goto small_buffer;
411
+ }
412
+
413
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ASCII;
414
+
415
+ memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
416
+ ctx->buffer_used += 3;
417
+
418
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
419
+ continue;
420
+ }
421
+
422
+ break;
423
+
424
+ case LXB_ENCODING_ENCODE_2022_JP_JIS0208:
425
+ if (cp < 0x80) {
426
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
427
+ goto small_buffer;
428
+ }
429
+
430
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ASCII;
431
+
432
+ memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
433
+ ctx->buffer_used += 3;
434
+
435
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
436
+ continue;
437
+ }
438
+
439
+ if (cp == 0x00A5 || cp == 0x203E) {
440
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
441
+ goto small_buffer;
442
+ }
443
+
444
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ROMAN;
445
+
446
+ if (cp == 0x00A5) {
447
+ memcpy(&ctx->buffer_out[ctx->buffer_used],
448
+ "\x1B\x28\x4A\x5C", 4);
449
+ ctx->buffer_used += 4;
450
+
451
+ continue;
452
+ }
453
+
454
+ memcpy(&ctx->buffer_out[ctx->buffer_used],
455
+ "\x1B\x28\x4A\x7E", 4);
456
+ ctx->buffer_used += 4;
457
+
458
+ continue;
459
+ }
460
+
461
+ break;
462
+ }
463
+
464
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
465
+ goto small_buffer;
466
+ }
467
+
468
+ if (cp == 0x2212) {
469
+ cp = 0xFF0D;
470
+ }
471
+
472
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
473
+ cp = lxb_encoding_multi_index_iso_2022_jp_katakana[cp - 0xFF61].codepoint;
474
+ }
475
+
476
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_jis0208,
477
+ LXB_ENCODING_MULTI_HASH_JIS0208_SIZE, cp);
478
+ if (hash == NULL) {
479
+ goto failed;
480
+ }
481
+
482
+ if (ctx->state != LXB_ENCODING_ENCODE_2022_JP_JIS0208) {
483
+ if ((ctx->buffer_used + 3) > ctx->buffer_length) {
484
+ goto small_buffer;
485
+ }
486
+
487
+ memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x24\x42", 3);
488
+ ctx->buffer_used += 3;
489
+
490
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_JIS0208;
491
+ size += 3;
492
+
493
+ goto begin;
494
+ }
495
+
496
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 94 + 0x21;
497
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value % 94 + 0x21;
498
+
499
+ continue;
500
+
501
+ small_buffer:
502
+
503
+ ctx->state = state;
504
+ ctx->buffer_used -= size;
505
+
506
+ return LXB_STATUS_SMALL_BUFFER;
507
+
508
+ failed:
509
+
510
+ ctx->buffer_used -= size;
511
+ LXB_ENCODING_ENCODE_ERROR(ctx);
512
+ }
513
+
514
+ return LXB_STATUS_OK;
515
+ }
516
+
517
+ lxb_status_t
518
+ lxb_encoding_encode_iso_2022_jp_eof(lxb_encoding_encode_t *ctx)
519
+ {
520
+ if (ctx->state != LXB_ENCODING_ENCODE_2022_JP_ASCII) {
521
+ if ((ctx->buffer_used + 3) > ctx->buffer_length) {
522
+ return LXB_STATUS_SMALL_BUFFER;
523
+ }
524
+
525
+ memcpy(&ctx->buffer_out[ctx->buffer_used], "\x1B\x28\x42", 3);
526
+ ctx->buffer_used += 3;
527
+ }
528
+
529
+ return LXB_STATUS_OK;
530
+ }
531
+
532
+ lxb_status_t
533
+ lxb_encoding_encode_iso_8859_10(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
534
+ const lxb_codepoint_t *end)
535
+ {
536
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_10,
537
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_10_SIZE);
538
+ }
539
+
540
+ lxb_status_t
541
+ lxb_encoding_encode_iso_8859_13(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
542
+ const lxb_codepoint_t *end)
543
+ {
544
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_13,
545
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_13_SIZE);
546
+ }
547
+
548
+ lxb_status_t
549
+ lxb_encoding_encode_iso_8859_14(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
550
+ const lxb_codepoint_t *end)
551
+ {
552
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_14,
553
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_14_SIZE);
554
+ }
555
+
556
+ lxb_status_t
557
+ lxb_encoding_encode_iso_8859_15(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
558
+ const lxb_codepoint_t *end)
559
+ {
560
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_15,
561
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_15_SIZE);
562
+ }
563
+
564
+ lxb_status_t
565
+ lxb_encoding_encode_iso_8859_16(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
566
+ const lxb_codepoint_t *end)
567
+ {
568
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_16,
569
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_16_SIZE);
570
+ }
571
+
572
+ lxb_status_t
573
+ lxb_encoding_encode_iso_8859_2(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
574
+ const lxb_codepoint_t *end)
575
+ {
576
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_2,
577
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_2_SIZE);
578
+ }
579
+
580
+ lxb_status_t
581
+ lxb_encoding_encode_iso_8859_3(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
582
+ const lxb_codepoint_t *end)
583
+ {
584
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_3,
585
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_3_SIZE);
586
+ }
587
+
588
+ lxb_status_t
589
+ lxb_encoding_encode_iso_8859_4(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
590
+ const lxb_codepoint_t *end)
591
+ {
592
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_4,
593
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_4_SIZE);
594
+ }
595
+
596
+ lxb_status_t
597
+ lxb_encoding_encode_iso_8859_5(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
598
+ const lxb_codepoint_t *end)
599
+ {
600
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_5,
601
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_5_SIZE);
602
+ }
603
+
604
+ lxb_status_t
605
+ lxb_encoding_encode_iso_8859_6(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
606
+ const lxb_codepoint_t *end)
607
+ {
608
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_6,
609
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_6_SIZE);
610
+ }
611
+
612
+ lxb_status_t
613
+ lxb_encoding_encode_iso_8859_7(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
614
+ const lxb_codepoint_t *end)
615
+ {
616
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_7,
617
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_7_SIZE);
618
+ }
619
+
620
+ lxb_status_t
621
+ lxb_encoding_encode_iso_8859_8(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
622
+ const lxb_codepoint_t *end)
623
+ {
624
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_8,
625
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_8_SIZE);
626
+ }
627
+
628
+ lxb_status_t
629
+ lxb_encoding_encode_iso_8859_8_i(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
630
+ const lxb_codepoint_t *end)
631
+ {
632
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_iso_8859_8,
633
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_8_SIZE);
634
+ }
635
+
636
+ lxb_status_t
637
+ lxb_encoding_encode_koi8_r(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
638
+ const lxb_codepoint_t *end)
639
+ {
640
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_koi8_r,
641
+ LXB_ENCODING_SINGLE_HASH_KOI8_R_SIZE);
642
+ }
643
+
644
+ lxb_status_t
645
+ lxb_encoding_encode_koi8_u(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
646
+ const lxb_codepoint_t *end)
647
+ {
648
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_koi8_u,
649
+ LXB_ENCODING_SINGLE_HASH_KOI8_U_SIZE);
650
+ }
651
+
652
+ lxb_inline const lexbor_shs_hash_t *
653
+ lxb_encoding_encode_shift_jis_index(lxb_codepoint_t cp)
654
+ {
655
+ const lexbor_shs_hash_t *entry;
656
+
657
+ entry = &lxb_encoding_multi_hash_jis0208[ (cp % LXB_ENCODING_MULTI_HASH_JIS0208_SIZE) + 1 ];
658
+
659
+ do {
660
+ if (entry->key == cp) {
661
+ if ((unsigned) ((uint32_t) (uintptr_t) entry->value - 8272) > (8835 - 8272)) {
662
+ return entry;
663
+ }
664
+ }
665
+
666
+ entry = &lxb_encoding_multi_hash_jis0208[entry->next];
667
+ }
668
+ while (entry != lxb_encoding_multi_hash_jis0208);
669
+
670
+ return NULL;
671
+ }
672
+
673
+ lxb_status_t
674
+ lxb_encoding_encode_shift_jis(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
675
+ const lxb_codepoint_t *end)
676
+ {
677
+ uint32_t lead, trail;
678
+ lxb_codepoint_t cp;
679
+ const lexbor_shs_hash_t *hash;
680
+
681
+ for (; *cps < end; (*cps)++) {
682
+ cp = **cps;
683
+
684
+ if (cp <= 0x80) {
685
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
686
+ continue;
687
+ }
688
+
689
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
690
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp - 0xFF61 + 0xA1);
691
+ continue;
692
+ }
693
+
694
+ switch (cp) {
695
+ case 0x00A5:
696
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x5C);
697
+ continue;
698
+
699
+ case 0x203E:
700
+ LXB_ENCODING_ENCODE_APPEND(ctx, 0x7E);
701
+ continue;
702
+
703
+ case 0x2212:
704
+ cp = 0xFF0D;
705
+ break;
706
+ }
707
+
708
+ hash = lxb_encoding_encode_shift_jis_index(cp);
709
+ if (hash == NULL) {
710
+ LXB_ENCODING_ENCODE_ERROR(ctx);
711
+ continue;
712
+ }
713
+
714
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
715
+ return LXB_STATUS_SMALL_BUFFER;
716
+ }
717
+
718
+ lead = (uint32_t) (uintptr_t) hash->value / 188;
719
+ trail = (uint32_t) (uintptr_t) hash->value % 188;
720
+
721
+ ctx->buffer_out[ctx->buffer_used++ ] = lead + ((lead < 0x1F) ? 0x81 : 0xC1);
722
+ ctx->buffer_out[ctx->buffer_used++ ] = trail + ((trail < 0x3F) ? 0x40 : 0x41);
723
+ }
724
+
725
+ return LXB_STATUS_OK;
726
+ }
727
+
728
+ lxb_inline void
729
+ lxb_encoding_encode_utf_16_write(lxb_encoding_encode_t *ctx, bool is_be,
730
+ lxb_codepoint_t cp)
731
+ {
732
+ if (is_be) {
733
+ ctx->buffer_out[ctx->buffer_used++] = cp >> 8;
734
+ ctx->buffer_out[ctx->buffer_used++] = cp & 0x00FF;
735
+
736
+ return;
737
+ }
738
+
739
+ ctx->buffer_out[ctx->buffer_used++] = cp & 0x00FF;
740
+ ctx->buffer_out[ctx->buffer_used++] = cp >> 8;
741
+ }
742
+
743
+ lxb_inline int8_t
744
+ lxb_encoding_encode_utf_16(lxb_encoding_encode_t *ctx, bool is_be,
745
+ const lxb_codepoint_t **cps, const lxb_codepoint_t *end)
746
+ {
747
+ lxb_codepoint_t cp;
748
+
749
+ for (; *cps < end; (*cps)++) {
750
+ cp = **cps;
751
+
752
+ if (cp < 0x10000) {
753
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
754
+ return LXB_STATUS_SMALL_BUFFER;
755
+ }
756
+
757
+ lxb_encoding_encode_utf_16_write(ctx, is_be, cp);
758
+
759
+ continue;
760
+ }
761
+
762
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
763
+ return LXB_STATUS_SMALL_BUFFER;
764
+ }
765
+
766
+ cp -= 0x10000;
767
+
768
+ lxb_encoding_encode_utf_16_write(ctx, is_be, (0xD800 | (cp >> 0x0A)));
769
+ lxb_encoding_encode_utf_16_write(ctx, is_be, (0xDC00 | (cp & 0x03FF)));
770
+ }
771
+
772
+ return LXB_STATUS_OK;
773
+ }
774
+
775
+ lxb_status_t
776
+ lxb_encoding_encode_utf_16be(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
777
+ const lxb_codepoint_t *end)
778
+ {
779
+ return lxb_encoding_encode_utf_16(ctx, true, cps, end);
780
+ }
781
+
782
+ lxb_status_t
783
+ lxb_encoding_encode_utf_16le(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
784
+ const lxb_codepoint_t *end)
785
+ {
786
+ return lxb_encoding_encode_utf_16(ctx, false, cps, end);
787
+ }
788
+
789
+ lxb_status_t
790
+ lxb_encoding_encode_utf_8(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
791
+ const lxb_codepoint_t *end)
792
+ {
793
+ lxb_codepoint_t cp;
794
+ const lxb_codepoint_t *p = *cps;
795
+
796
+ for (; p < end; p++) {
797
+ cp = *p;
798
+
799
+ if (cp < 0x80) {
800
+ if ((ctx->buffer_used + 1) > ctx->buffer_length) {
801
+ *cps = p;
802
+
803
+ return LXB_STATUS_SMALL_BUFFER;
804
+ }
805
+
806
+ /* 0xxxxxxx */
807
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) cp;
808
+ }
809
+ else if (cp < 0x800) {
810
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
811
+ *cps = p;
812
+
813
+ return LXB_STATUS_SMALL_BUFFER;
814
+ }
815
+
816
+ /* 110xxxxx 10xxxxxx */
817
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xC0 | (cp >> 6 ));
818
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | (cp & 0x3F));
819
+ }
820
+ else if (cp < 0x10000) {
821
+ if ((ctx->buffer_used + 3) > ctx->buffer_length) {
822
+ *cps = p;
823
+
824
+ return LXB_STATUS_SMALL_BUFFER;
825
+ }
826
+
827
+ /* 1110xxxx 10xxxxxx 10xxxxxx */
828
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xE0 | ((cp >> 12)));
829
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
830
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ( cp & 0x3F));
831
+ }
832
+ else if (cp < 0x110000) {
833
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
834
+ *cps = p;
835
+
836
+ return LXB_STATUS_SMALL_BUFFER;
837
+ }
838
+
839
+ /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
840
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0xF0 | ( cp >> 18));
841
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 12) & 0x3F));
842
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
843
+ ctx->buffer_out[ ctx->buffer_used++ ] = (lxb_char_t) (0x80 | ( cp & 0x3F));
844
+ }
845
+ else {
846
+ *cps = p;
847
+ LXB_ENCODING_ENCODE_ERROR(ctx);
848
+ }
849
+ }
850
+
851
+ *cps = p;
852
+
853
+ return LXB_STATUS_OK;
854
+ }
855
+
856
+ lxb_inline uint32_t
857
+ lxb_encoding_encode_gb18030_range(lxb_codepoint_t cp)
858
+ {
859
+ size_t mid, left, right;
860
+ const lxb_encoding_range_index_t *range;
861
+
862
+ if (cp == 0xE7C7) {
863
+ return 7457;
864
+ }
865
+
866
+ left = 0;
867
+ right = LXB_ENCODING_RANGE_INDEX_GB18030_SIZE;
868
+ range = lxb_encoding_range_index_gb18030;
869
+
870
+ /* Some compilers say about uninitialized mid */
871
+ mid = 0;
872
+
873
+ while (left < right) {
874
+ mid = left + (right - left) / 2;
875
+
876
+ if (range[mid].codepoint < cp) {
877
+ left = mid + 1;
878
+
879
+ if (left < right && range[left].codepoint > cp) {
880
+ break;
881
+ }
882
+ }
883
+ else if (range[mid].codepoint > cp) {
884
+ right = mid - 1;
885
+
886
+ if (right > 0 && range[right].codepoint <= cp) {
887
+ mid = right;
888
+ break;
889
+ }
890
+ }
891
+ else {
892
+ break;
893
+ }
894
+ }
895
+
896
+ return range[mid].index + cp - range[mid].codepoint;
897
+ }
898
+
899
+ lxb_status_t
900
+ lxb_encoding_encode_gb18030(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
901
+ const lxb_codepoint_t *end)
902
+ {
903
+ uint32_t index;
904
+ lxb_codepoint_t cp;
905
+ const lexbor_shs_hash_t *hash;
906
+
907
+ for (; *cps < end; (*cps)++) {
908
+ cp = **cps;
909
+
910
+ if (cp < 0x80) {
911
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
912
+ continue;
913
+ }
914
+
915
+ if (cp == 0xE5E5) {
916
+ LXB_ENCODING_ENCODE_ERROR(ctx);
917
+ continue;
918
+ }
919
+
920
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_gb18030,
921
+ LXB_ENCODING_MULTI_HASH_GB18030_SIZE, cp);
922
+ if (hash != NULL) {
923
+ if ((ctx->buffer_used + 2) > ctx->buffer_length) {
924
+ return LXB_STATUS_SMALL_BUFFER;
925
+ }
926
+
927
+ ctx->buffer_out[ ctx->buffer_used++ ] = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
928
+
929
+ if (((uint32_t) (uintptr_t) hash->value % 190) < 0x3F) {
930
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value % 190) + 0x40;
931
+ }
932
+ else {
933
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((uint32_t) (uintptr_t) hash->value % 190) + 0x41;
934
+ }
935
+
936
+ continue;
937
+ }
938
+
939
+ if ((ctx->buffer_used + 4) > ctx->buffer_length) {
940
+ return LXB_STATUS_SMALL_BUFFER;
941
+ }
942
+
943
+ index = lxb_encoding_encode_gb18030_range(cp);
944
+
945
+ ctx->buffer_out[ ctx->buffer_used++ ] = (index / (10 * 126 * 10)) + 0x81;
946
+ ctx->buffer_out[ ctx->buffer_used++ ] = ((index % (10 * 126 * 10)) / (10 * 126)) + 0x30;
947
+
948
+ index = (index % (10 * 126 * 10)) % (10 * 126);
949
+
950
+ ctx->buffer_out[ ctx->buffer_used++ ] = (index / 10) + 0x81;
951
+ ctx->buffer_out[ ctx->buffer_used++ ] = (index % 10) + 0x30;
952
+ }
953
+
954
+ return LXB_STATUS_OK;
955
+ }
956
+
957
+ lxb_status_t
958
+ lxb_encoding_encode_macintosh(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
959
+ const lxb_codepoint_t *end)
960
+ {
961
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_macintosh,
962
+ LXB_ENCODING_SINGLE_HASH_MACINTOSH_SIZE);
963
+ }
964
+
965
+ lxb_status_t
966
+ lxb_encoding_encode_replacement(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
967
+ const lxb_codepoint_t *end)
968
+ {
969
+ *cps = end;
970
+ return LXB_STATUS_ERROR;
971
+ }
972
+
973
+ lxb_status_t
974
+ lxb_encoding_encode_windows_1250(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
975
+ const lxb_codepoint_t *end)
976
+ {
977
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1250,
978
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1250_SIZE);
979
+ }
980
+
981
+ lxb_status_t
982
+ lxb_encoding_encode_windows_1251(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
983
+ const lxb_codepoint_t *end)
984
+ {
985
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1251,
986
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1251_SIZE);
987
+ }
988
+
989
+ lxb_status_t
990
+ lxb_encoding_encode_windows_1252(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
991
+ const lxb_codepoint_t *end)
992
+ {
993
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1252,
994
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1252_SIZE);
995
+ }
996
+
997
+ lxb_status_t
998
+ lxb_encoding_encode_windows_1253(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
999
+ const lxb_codepoint_t *end)
1000
+ {
1001
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1253,
1002
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1253_SIZE);
1003
+ }
1004
+
1005
+ lxb_status_t
1006
+ lxb_encoding_encode_windows_1254(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1007
+ const lxb_codepoint_t *end)
1008
+ {
1009
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1254,
1010
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1254_SIZE);
1011
+ }
1012
+
1013
+ lxb_status_t
1014
+ lxb_encoding_encode_windows_1255(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1015
+ const lxb_codepoint_t *end)
1016
+ {
1017
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1255,
1018
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1255_SIZE);
1019
+ }
1020
+
1021
+ lxb_status_t
1022
+ lxb_encoding_encode_windows_1256(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1023
+ const lxb_codepoint_t *end)
1024
+ {
1025
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1256,
1026
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1256_SIZE);
1027
+ }
1028
+
1029
+ lxb_status_t
1030
+ lxb_encoding_encode_windows_1257(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1031
+ const lxb_codepoint_t *end)
1032
+ {
1033
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1257,
1034
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1257_SIZE);
1035
+ }
1036
+
1037
+ lxb_status_t
1038
+ lxb_encoding_encode_windows_1258(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1039
+ const lxb_codepoint_t *end)
1040
+ {
1041
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_1258,
1042
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1258_SIZE);
1043
+ }
1044
+
1045
+ lxb_status_t
1046
+ lxb_encoding_encode_windows_874(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1047
+ const lxb_codepoint_t *end)
1048
+ {
1049
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_windows_874,
1050
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_874_SIZE);
1051
+ }
1052
+
1053
+ lxb_status_t
1054
+ lxb_encoding_encode_x_mac_cyrillic(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1055
+ const lxb_codepoint_t *end)
1056
+ {
1057
+ LXB_ENCODING_ENCODE_SINGLE_BYTE(lxb_encoding_single_hash_x_mac_cyrillic,
1058
+ LXB_ENCODING_SINGLE_HASH_X_MAC_CYRILLIC_SIZE);
1059
+ }
1060
+
1061
+ lxb_status_t
1062
+ lxb_encoding_encode_x_user_defined(lxb_encoding_encode_t *ctx, const lxb_codepoint_t **cps,
1063
+ const lxb_codepoint_t *end)
1064
+ {
1065
+ lxb_codepoint_t cp;
1066
+
1067
+ for (; *cps < end; (*cps)++) {
1068
+ cp = **cps;
1069
+
1070
+ if (cp < 0x80) {
1071
+ LXB_ENCODING_ENCODE_APPEND(ctx, cp);
1072
+ }
1073
+ else if (cp >= 0xF780 && cp <= 0xF7FF) {
1074
+ LXB_ENCODING_ENCODE_APPEND(ctx, (cp - 0xF780 + 0x80));
1075
+ }
1076
+ else {
1077
+ LXB_ENCODING_ENCODE_ERROR(ctx);
1078
+ }
1079
+ }
1080
+
1081
+ return LXB_STATUS_OK;
1082
+ }
1083
+
1084
+ /*
1085
+ * Single
1086
+ */
1087
+ int8_t
1088
+ lxb_encoding_encode_default_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1089
+ const lxb_char_t *end, lxb_codepoint_t cp)
1090
+ {
1091
+ return lxb_encoding_encode_utf_8_single(ctx, data, end, cp);
1092
+ }
1093
+
1094
+ int8_t
1095
+ lxb_encoding_encode_auto_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1096
+ const lxb_char_t *end, lxb_codepoint_t cp)
1097
+ {
1098
+ return LXB_ENCODING_ENCODE_ERROR;
1099
+ }
1100
+
1101
+ int8_t
1102
+ lxb_encoding_encode_undefined_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1103
+ const lxb_char_t *end, lxb_codepoint_t cp)
1104
+ {
1105
+ return LXB_ENCODING_ENCODE_ERROR;
1106
+ }
1107
+
1108
+ int8_t
1109
+ lxb_encoding_encode_big5_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1110
+ const lxb_char_t *end, lxb_codepoint_t cp)
1111
+ {
1112
+ const lexbor_shs_hash_t *hash;
1113
+
1114
+ if (cp < 0x80) {
1115
+ *(*data)++ = (lxb_char_t) cp;
1116
+
1117
+ return 1;
1118
+ }
1119
+
1120
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_big5,
1121
+ LXB_ENCODING_MULTI_HASH_BIG5_SIZE, cp);
1122
+ if (hash == NULL) {
1123
+ return LXB_ENCODING_ENCODE_ERROR;
1124
+ }
1125
+
1126
+ if ((*data + 2) > end) {
1127
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1128
+ }
1129
+
1130
+ *(*data)++ = ((uint32_t) (uintptr_t) hash->value) / 157 + 0x81;
1131
+
1132
+ if ((((uint32_t) (uintptr_t) hash->value) % 157) < 0x3F) {
1133
+ *(*data)++ = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x40;
1134
+ }
1135
+ else {
1136
+ *(*data)++ = (((uint32_t) (uintptr_t) hash->value) % 157) + 0x62;
1137
+ }
1138
+
1139
+ return 2;
1140
+ }
1141
+
1142
+ int8_t
1143
+ lxb_encoding_encode_euc_jp_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1144
+ const lxb_char_t *end, lxb_codepoint_t cp)
1145
+ {
1146
+ const lexbor_shs_hash_t *hash;
1147
+
1148
+ if (cp < 0x80) {
1149
+ *(*data)++ = (lxb_char_t) cp;
1150
+
1151
+ return 1;
1152
+ }
1153
+
1154
+ if (cp == 0x00A5) {
1155
+ *(*data)++ = 0x5C;
1156
+
1157
+ return 1;
1158
+ }
1159
+
1160
+ if (cp == 0x203E) {
1161
+ *(*data)++ = 0x7E;
1162
+
1163
+ return 1;
1164
+ }
1165
+
1166
+ if ((*data + 2) > end) {
1167
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1168
+ }
1169
+
1170
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1171
+ *(*data)++ = 0x8E;
1172
+ *(*data)++ = cp - 0xFF61 + 0xA1;
1173
+
1174
+ return 2;
1175
+ }
1176
+
1177
+ if (cp == 0x2212) {
1178
+ cp = 0xFF0D;
1179
+ }
1180
+
1181
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_jis0208,
1182
+ LXB_ENCODING_MULTI_HASH_JIS0208_SIZE, cp);
1183
+ if (hash == NULL) {
1184
+ return LXB_ENCODING_ENCODE_ERROR;
1185
+ }
1186
+
1187
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value / 94 + 0xA1;
1188
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value % 94 + 0xA1;
1189
+
1190
+ return 2;
1191
+ }
1192
+
1193
+ int8_t
1194
+ lxb_encoding_encode_euc_kr_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1195
+ const lxb_char_t *end, lxb_codepoint_t cp)
1196
+ {
1197
+ const lexbor_shs_hash_t *hash;
1198
+
1199
+ if (cp < 0x80) {
1200
+ *(*data)++ = (lxb_char_t) cp;
1201
+
1202
+ return 1;
1203
+ }
1204
+
1205
+ if ((*data + 2) > end) {
1206
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1207
+ }
1208
+
1209
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_euc_kr,
1210
+ LXB_ENCODING_MULTI_HASH_EUC_KR_SIZE, cp);
1211
+ if (hash == NULL) {
1212
+ return LXB_ENCODING_ENCODE_ERROR;
1213
+ }
1214
+
1215
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
1216
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value % 190 + 0x41;
1217
+
1218
+ return 2;
1219
+ }
1220
+
1221
+ int8_t
1222
+ lxb_encoding_encode_gbk_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1223
+ const lxb_char_t *end, lxb_codepoint_t cp)
1224
+ {
1225
+ const lexbor_shs_hash_t *hash;
1226
+
1227
+ if (cp < 0x80) {
1228
+ *(*data)++ = (lxb_char_t) cp;
1229
+
1230
+ return 1;
1231
+ }
1232
+
1233
+ if (cp == 0xE5E5) {
1234
+ return LXB_ENCODING_ENCODE_ERROR;
1235
+ }
1236
+
1237
+ if (cp == 0x20AC) {
1238
+ *(*data)++ = 0x80;
1239
+
1240
+ return 1;
1241
+ }
1242
+
1243
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_gb18030,
1244
+ LXB_ENCODING_MULTI_HASH_GB18030_SIZE, cp);
1245
+ if (hash != NULL) {
1246
+ if ((*data + 2) > end) {
1247
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1248
+ }
1249
+
1250
+ *(*data)++ = (lxb_char_t) (uintptr_t) hash->value / 190 + 0x81;
1251
+
1252
+ if (((lxb_char_t) (uintptr_t) hash->value % 190) < 0x3F) {
1253
+ *(*data)++ = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x40;
1254
+ }
1255
+ else {
1256
+ *(*data)++ = ((lxb_char_t) (uintptr_t) hash->value % 190) + 0x41;
1257
+ }
1258
+
1259
+ return 2;
1260
+ }
1261
+
1262
+ return LXB_ENCODING_ENCODE_ERROR;
1263
+ }
1264
+
1265
+ int8_t
1266
+ lxb_encoding_encode_ibm866_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1267
+ const lxb_char_t *end, lxb_codepoint_t cp)
1268
+ {
1269
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_ibm866,
1270
+ LXB_ENCODING_SINGLE_HASH_IBM866_SIZE);
1271
+ }
1272
+
1273
+ int8_t
1274
+ lxb_encoding_encode_iso_2022_jp_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1275
+ const lxb_char_t *end, lxb_codepoint_t cp)
1276
+ {
1277
+ int8_t size;
1278
+ unsigned state;
1279
+ const lexbor_shs_hash_t *hash;
1280
+
1281
+ size = 0;
1282
+ state = ctx->state;
1283
+
1284
+ begin:
1285
+
1286
+ switch (ctx->state) {
1287
+ case LXB_ENCODING_ENCODE_2022_JP_ASCII:
1288
+ if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
1289
+ goto failed;
1290
+ }
1291
+
1292
+ if (cp < 0x80) {
1293
+ *(*data)++ = (lxb_char_t) cp;
1294
+
1295
+ return size + 1;
1296
+ }
1297
+
1298
+ if (cp == 0x00A5 || cp == 0x203E) {
1299
+ /*
1300
+ * Do not switch to the ROMAN stage with prepend code point
1301
+ * to stream, add it immediately.
1302
+ */
1303
+ if ((*data + 4) > end) {
1304
+ goto small_buffer;
1305
+ }
1306
+
1307
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ROMAN;
1308
+
1309
+ if (cp == 0x00A5) {
1310
+ memcpy(*data, "\x1B\x28\x4A\x5C", 4);
1311
+ *data = *data + 4;
1312
+
1313
+ return size + 4;
1314
+ }
1315
+
1316
+ memcpy(*data, "\x1B\x28\x4A\x7E", 4);
1317
+ *data = *data + 4;
1318
+
1319
+ return size + 4;
1320
+ }
1321
+
1322
+ break;
1323
+
1324
+ case LXB_ENCODING_ENCODE_2022_JP_ROMAN:
1325
+ if (cp == 0x000E || cp == 0x000F || cp == 0x001B) {
1326
+ goto failed;
1327
+ }
1328
+
1329
+ if (cp < 0x80) {
1330
+ switch (cp) {
1331
+ case 0x005C:
1332
+ case 0x007E:
1333
+ break;
1334
+
1335
+ case 0x00A5:
1336
+ *(*data)++ = 0x5C;
1337
+ return size + 1;
1338
+
1339
+ case 0x203E:
1340
+ *(*data)++ = 0x7E;
1341
+ return size + 1;
1342
+
1343
+ default:
1344
+ *(*data)++ = (lxb_char_t) cp;
1345
+ return size + 1;
1346
+ }
1347
+
1348
+ /*
1349
+ * Do not switch to the ANSI stage with prepend code point
1350
+ * to stream, add it immediately.
1351
+ */
1352
+ if ((*data + 4) > end) {
1353
+ goto small_buffer;
1354
+ }
1355
+
1356
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ASCII;
1357
+
1358
+ memcpy(*data, "\x1B\x28\x42", 3);
1359
+ *data = *data + 3;
1360
+
1361
+ *(*data)++ = (lxb_char_t) cp;
1362
+
1363
+ return size + 4;
1364
+ }
1365
+
1366
+ break;
1367
+
1368
+ case LXB_ENCODING_ENCODE_2022_JP_JIS0208:
1369
+ if (cp < 0x80) {
1370
+ if ((*data + 4) > end) {
1371
+ goto small_buffer;
1372
+ }
1373
+
1374
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ASCII;
1375
+
1376
+ memcpy(*data, "\x1B\x28\x42", 3);
1377
+ *data = *data + 3;
1378
+
1379
+ *(*data)++ = (lxb_char_t) cp;
1380
+
1381
+ return size + 4;
1382
+ }
1383
+
1384
+ if (cp == 0x00A5 || cp == 0x203E) {
1385
+ if ((*data + 4) > end) {
1386
+ goto small_buffer;
1387
+ }
1388
+
1389
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ROMAN;
1390
+
1391
+ if (cp == 0x00A5) {
1392
+ memcpy(*data, "\x1B\x28\x4A\x5C", 4);
1393
+ *data = *data + 4;
1394
+
1395
+ return size + 4;
1396
+ }
1397
+
1398
+ memcpy(*data, "\x1B\x28\x4A\x7E", 4);
1399
+ *data = *data + 4;
1400
+
1401
+ return size + 4;
1402
+ }
1403
+
1404
+ break;
1405
+ }
1406
+
1407
+ if ((*data + 2) > end) {
1408
+ goto small_buffer;
1409
+ }
1410
+
1411
+ if (cp == 0x2212) {
1412
+ cp = 0xFF0D;
1413
+ }
1414
+
1415
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1416
+ cp = lxb_encoding_multi_index_iso_2022_jp_katakana[cp - 0xFF61].codepoint;
1417
+ }
1418
+
1419
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_jis0208,
1420
+ LXB_ENCODING_MULTI_HASH_JIS0208_SIZE, cp);
1421
+ if (hash == NULL) {
1422
+ goto failed;
1423
+ }
1424
+
1425
+ if (ctx->state != LXB_ENCODING_ENCODE_2022_JP_JIS0208) {
1426
+ if ((*data + 3) > end) {
1427
+ goto small_buffer;
1428
+ }
1429
+
1430
+ memcpy(*data, "\x1B\x24\x42", 3);
1431
+ *data = *data + 3;
1432
+
1433
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_JIS0208;
1434
+ size += 3;
1435
+
1436
+ goto begin;
1437
+ }
1438
+
1439
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value / 94 + 0x21;
1440
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value % 94 + 0x21;
1441
+
1442
+ return size + 2;
1443
+
1444
+ small_buffer:
1445
+
1446
+ ctx->state = state;
1447
+ *data = *data - size;
1448
+
1449
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1450
+
1451
+ failed:
1452
+
1453
+ *data = *data - size;
1454
+
1455
+ return LXB_ENCODING_ENCODE_ERROR;
1456
+ }
1457
+
1458
+ int8_t
1459
+ lxb_encoding_encode_iso_2022_jp_eof_single(lxb_encoding_encode_t *ctx,
1460
+ lxb_char_t **data, const lxb_char_t *end)
1461
+ {
1462
+ if (ctx->state != LXB_ENCODING_ENCODE_2022_JP_ASCII) {
1463
+ if ((*data + 3) > end) {
1464
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1465
+ }
1466
+
1467
+ memcpy(*data, "\x1B\x28\x42", 3);
1468
+ *data = *data + 3;
1469
+
1470
+ ctx->state = LXB_ENCODING_ENCODE_2022_JP_ASCII;
1471
+
1472
+ return 3;
1473
+ }
1474
+
1475
+ return 0;
1476
+ }
1477
+
1478
+ int8_t
1479
+ lxb_encoding_encode_iso_8859_10_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1480
+ const lxb_char_t *end, lxb_codepoint_t cp)
1481
+ {
1482
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_10,
1483
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_10_SIZE);
1484
+ }
1485
+
1486
+ int8_t
1487
+ lxb_encoding_encode_iso_8859_13_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1488
+ const lxb_char_t *end, lxb_codepoint_t cp)
1489
+ {
1490
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_13,
1491
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_13_SIZE);
1492
+ }
1493
+
1494
+ int8_t
1495
+ lxb_encoding_encode_iso_8859_14_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1496
+ const lxb_char_t *end, lxb_codepoint_t cp)
1497
+ {
1498
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_14,
1499
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_14_SIZE);
1500
+ }
1501
+
1502
+ int8_t
1503
+ lxb_encoding_encode_iso_8859_15_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1504
+ const lxb_char_t *end, lxb_codepoint_t cp)
1505
+ {
1506
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_15,
1507
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_15_SIZE);
1508
+ }
1509
+
1510
+ int8_t
1511
+ lxb_encoding_encode_iso_8859_16_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1512
+ const lxb_char_t *end, lxb_codepoint_t cp)
1513
+ {
1514
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_16,
1515
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_16_SIZE);
1516
+ }
1517
+
1518
+ int8_t
1519
+ lxb_encoding_encode_iso_8859_2_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1520
+ const lxb_char_t *end, lxb_codepoint_t cp)
1521
+ {
1522
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_2,
1523
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_2_SIZE);
1524
+ }
1525
+
1526
+ int8_t
1527
+ lxb_encoding_encode_iso_8859_3_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1528
+ const lxb_char_t *end, lxb_codepoint_t cp)
1529
+ {
1530
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_3,
1531
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_3_SIZE);
1532
+ }
1533
+
1534
+ int8_t
1535
+ lxb_encoding_encode_iso_8859_4_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1536
+ const lxb_char_t *end, lxb_codepoint_t cp)
1537
+ {
1538
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_4,
1539
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_4_SIZE);
1540
+ }
1541
+
1542
+ int8_t
1543
+ lxb_encoding_encode_iso_8859_5_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1544
+ const lxb_char_t *end, lxb_codepoint_t cp)
1545
+ {
1546
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_5,
1547
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_5_SIZE);
1548
+ }
1549
+
1550
+ int8_t
1551
+ lxb_encoding_encode_iso_8859_6_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1552
+ const lxb_char_t *end, lxb_codepoint_t cp)
1553
+ {
1554
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_6,
1555
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_6_SIZE);
1556
+ }
1557
+
1558
+ int8_t
1559
+ lxb_encoding_encode_iso_8859_7_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1560
+ const lxb_char_t *end, lxb_codepoint_t cp)
1561
+ {
1562
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_7,
1563
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_7_SIZE);
1564
+ }
1565
+
1566
+ int8_t
1567
+ lxb_encoding_encode_iso_8859_8_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1568
+ const lxb_char_t *end, lxb_codepoint_t cp)
1569
+ {
1570
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_8,
1571
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_8_SIZE);
1572
+ }
1573
+
1574
+ int8_t
1575
+ lxb_encoding_encode_iso_8859_8_i_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1576
+ const lxb_char_t *end, lxb_codepoint_t cp)
1577
+ {
1578
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_iso_8859_8,
1579
+ LXB_ENCODING_SINGLE_HASH_ISO_8859_8_SIZE);
1580
+ }
1581
+
1582
+ int8_t
1583
+ lxb_encoding_encode_koi8_r_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1584
+ const lxb_char_t *end, lxb_codepoint_t cp)
1585
+ {
1586
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_koi8_r,
1587
+ LXB_ENCODING_SINGLE_HASH_KOI8_R_SIZE);
1588
+ }
1589
+
1590
+ int8_t
1591
+ lxb_encoding_encode_koi8_u_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1592
+ const lxb_char_t *end, lxb_codepoint_t cp)
1593
+ {
1594
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_koi8_u,
1595
+ LXB_ENCODING_SINGLE_HASH_KOI8_U_SIZE);
1596
+ }
1597
+
1598
+ int8_t
1599
+ lxb_encoding_encode_shift_jis_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1600
+ const lxb_char_t *end, lxb_codepoint_t cp)
1601
+ {
1602
+ uint32_t lead, trail;
1603
+ const lexbor_shs_hash_t *hash;
1604
+
1605
+ if (cp <= 0x80) {
1606
+ *(*data)++ = (lxb_char_t) cp;
1607
+
1608
+ return 1;
1609
+ }
1610
+
1611
+ if ((unsigned) (cp - 0xFF61) <= (0xFF9F - 0xFF61)) {
1612
+ *(*data)++ = cp - 0xFF61 + 0xA1;
1613
+
1614
+ return 1;
1615
+ }
1616
+
1617
+ switch (cp) {
1618
+ case 0x00A5:
1619
+ *(*data)++ = 0x5C;
1620
+ return 1;
1621
+
1622
+ case 0x203E:
1623
+ *(*data)++ = 0x7E;
1624
+ return 1;
1625
+
1626
+ case 0x2212:
1627
+ cp = 0xFF0D;
1628
+ break;
1629
+ }
1630
+
1631
+ hash = lxb_encoding_encode_shift_jis_index(cp);
1632
+ if (hash == NULL) {
1633
+ return LXB_ENCODING_ENCODE_ERROR;
1634
+ }
1635
+
1636
+ if ((*data + 2) > end) {
1637
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1638
+ }
1639
+
1640
+ lead = (uint32_t) (uintptr_t) hash->value / 188;
1641
+ trail = (uint32_t) (uintptr_t) hash->value % 188;
1642
+
1643
+ *(*data)++ = lead + ((lead < 0x1F) ? 0x81 : 0xC1);
1644
+ *(*data)++ = trail + ((trail < 0x3F) ? 0x40 : 0x41);
1645
+
1646
+ return 2;
1647
+ }
1648
+
1649
+ lxb_inline void
1650
+ lxb_encoding_encode_utf_16_write_single(bool is_be, lxb_char_t **data,
1651
+ lxb_codepoint_t cp)
1652
+ {
1653
+ if (is_be) {
1654
+ *(*data)++ = cp >> 8;
1655
+ *(*data)++ = cp & 0x00FF;
1656
+
1657
+ return;
1658
+ }
1659
+
1660
+ *(*data)++ = cp & 0x00FF;
1661
+ *(*data)++ = cp >> 8;
1662
+ }
1663
+
1664
+ lxb_inline int8_t
1665
+ lxb_encoding_encode_utf_16_single(lxb_encoding_encode_t *ctx, bool is_be,
1666
+ lxb_char_t **data, const lxb_char_t *end, lxb_codepoint_t cp)
1667
+ {
1668
+ if ((*data + 2) > end) {
1669
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1670
+ }
1671
+
1672
+ if (cp < 0x10000) {
1673
+ lxb_encoding_encode_utf_16_write_single(is_be, data, cp);
1674
+
1675
+ return 2;
1676
+ }
1677
+
1678
+ if ((*data + 4) > end) {
1679
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1680
+ }
1681
+
1682
+ cp -= 0x10000;
1683
+
1684
+ lxb_encoding_encode_utf_16_write_single(is_be, data, (0xD800 | (cp >> 0x0A)));
1685
+ lxb_encoding_encode_utf_16_write_single(is_be, data, (0xDC00 | (cp & 0x03FF)));
1686
+
1687
+ return 4;
1688
+ }
1689
+
1690
+ int8_t
1691
+ lxb_encoding_encode_utf_16be_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1692
+ const lxb_char_t *end, lxb_codepoint_t cp)
1693
+ {
1694
+ return lxb_encoding_encode_utf_16_single(ctx, true, data, end, cp);
1695
+ }
1696
+
1697
+ int8_t
1698
+ lxb_encoding_encode_utf_16le_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1699
+ const lxb_char_t *end, lxb_codepoint_t cp)
1700
+ {
1701
+ return lxb_encoding_encode_utf_16_single(ctx, false, data, end, cp);
1702
+ }
1703
+
1704
+ int8_t
1705
+ lxb_encoding_encode_utf_8_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1706
+ const lxb_char_t *end, lxb_codepoint_t cp)
1707
+ {
1708
+ if (cp < 0x80) {
1709
+ /* 0xxxxxxx */
1710
+ *(*data)++ = (lxb_char_t) cp;
1711
+
1712
+ return 1;
1713
+ }
1714
+
1715
+ if (cp < 0x800) {
1716
+ if ((*data + 2) > end) {
1717
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1718
+ }
1719
+
1720
+ /* 110xxxxx 10xxxxxx */
1721
+ *(*data)++ = (lxb_char_t) (0xC0 | (cp >> 6 ));
1722
+ *(*data)++ = (lxb_char_t) (0x80 | (cp & 0x3F));
1723
+
1724
+ return 2;
1725
+ }
1726
+
1727
+ if (cp < 0x10000) {
1728
+ if ((*data + 3) > end) {
1729
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1730
+ }
1731
+
1732
+ /* 1110xxxx 10xxxxxx 10xxxxxx */
1733
+ *(*data)++ = (lxb_char_t) (0xE0 | ((cp >> 12)));
1734
+ *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
1735
+ *(*data)++ = (lxb_char_t) (0x80 | ( cp & 0x3F));
1736
+
1737
+ return 3;
1738
+ }
1739
+
1740
+ if (cp < 0x110000) {
1741
+ if ((*data + 4) > end) {
1742
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1743
+ }
1744
+
1745
+ /* 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx */
1746
+ *(*data)++ = (lxb_char_t) (0xF0 | ( cp >> 18));
1747
+ *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 12) & 0x3F));
1748
+ *(*data)++ = (lxb_char_t) (0x80 | ((cp >> 6 ) & 0x3F));
1749
+ *(*data)++ = (lxb_char_t) (0x80 | ( cp & 0x3F));
1750
+
1751
+ return 4;
1752
+ }
1753
+
1754
+ return LXB_ENCODING_ENCODE_ERROR;
1755
+ }
1756
+
1757
+ int8_t
1758
+ lxb_encoding_encode_gb18030_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1759
+ const lxb_char_t *end, lxb_codepoint_t cp)
1760
+ {
1761
+ uint32_t index;
1762
+ const lexbor_shs_hash_t *hash;
1763
+
1764
+ if (cp < 0x80) {
1765
+ *(*data)++ = (lxb_char_t) cp;
1766
+
1767
+ return 1;
1768
+ }
1769
+
1770
+ if (cp == 0xE5E5) {
1771
+ return LXB_ENCODING_ENCODE_ERROR;
1772
+ }
1773
+
1774
+ hash = lexbor_shs_hash_get_static(lxb_encoding_multi_hash_gb18030,
1775
+ LXB_ENCODING_MULTI_HASH_GB18030_SIZE, cp);
1776
+ if (hash != NULL) {
1777
+ if ((*data + 2) > end) {
1778
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1779
+ }
1780
+
1781
+ *(*data)++ = (uint32_t) (uintptr_t) hash->value / 190 + 0x81;
1782
+
1783
+ if (((uint32_t) (uintptr_t) hash->value % 190) < 0x3F) {
1784
+ *(*data)++ = ((uint32_t) (uintptr_t) hash->value % 190) + 0x40;
1785
+ }
1786
+ else {
1787
+ *(*data)++ = ((uint32_t) (uintptr_t) hash->value % 190) + 0x41;
1788
+ }
1789
+
1790
+ return 2;
1791
+ }
1792
+
1793
+ if ((*data + 4) > end) {
1794
+ return LXB_ENCODING_ENCODE_SMALL_BUFFER;
1795
+ }
1796
+
1797
+ index = lxb_encoding_encode_gb18030_range(cp);
1798
+
1799
+ *(*data)++ = (index / (10 * 126 * 10)) + 0x81;
1800
+ *(*data)++ = ((index % (10 * 126 * 10)) / (10 * 126)) + 0x30;
1801
+
1802
+ index = (index % (10 * 126 * 10)) % (10 * 126);
1803
+
1804
+ *(*data)++ = (index / 10) + 0x81;
1805
+ *(*data)++ = (index % 10) + 0x30;
1806
+
1807
+ return 4;
1808
+ }
1809
+
1810
+ int8_t
1811
+ lxb_encoding_encode_macintosh_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1812
+ const lxb_char_t *end, lxb_codepoint_t cp)
1813
+ {
1814
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_macintosh,
1815
+ LXB_ENCODING_SINGLE_HASH_MACINTOSH_SIZE);
1816
+ }
1817
+
1818
+ int8_t
1819
+ lxb_encoding_encode_replacement_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1820
+ const lxb_char_t *end, lxb_codepoint_t cp)
1821
+ {
1822
+ (*data)++;
1823
+ return LXB_ENCODING_ENCODE_ERROR;
1824
+ }
1825
+
1826
+ int8_t
1827
+ lxb_encoding_encode_windows_1250_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1828
+ const lxb_char_t *end, lxb_codepoint_t cp)
1829
+ {
1830
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1250,
1831
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1250_SIZE);
1832
+ }
1833
+
1834
+ int8_t
1835
+ lxb_encoding_encode_windows_1251_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1836
+ const lxb_char_t *end, lxb_codepoint_t cp)
1837
+ {
1838
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1251,
1839
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1251_SIZE);
1840
+ }
1841
+
1842
+ int8_t
1843
+ lxb_encoding_encode_windows_1252_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1844
+ const lxb_char_t *end, lxb_codepoint_t cp)
1845
+ {
1846
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1252,
1847
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1252_SIZE);
1848
+ }
1849
+
1850
+ int8_t
1851
+ lxb_encoding_encode_windows_1253_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1852
+ const lxb_char_t *end, lxb_codepoint_t cp)
1853
+ {
1854
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1253,
1855
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1253_SIZE);
1856
+ }
1857
+
1858
+ int8_t
1859
+ lxb_encoding_encode_windows_1254_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1860
+ const lxb_char_t *end, lxb_codepoint_t cp)
1861
+ {
1862
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1254,
1863
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1254_SIZE);
1864
+ }
1865
+
1866
+ int8_t
1867
+ lxb_encoding_encode_windows_1255_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1868
+ const lxb_char_t *end, lxb_codepoint_t cp)
1869
+ {
1870
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1255,
1871
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1255_SIZE);
1872
+ }
1873
+
1874
+ int8_t
1875
+ lxb_encoding_encode_windows_1256_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1876
+ const lxb_char_t *end, lxb_codepoint_t cp)
1877
+ {
1878
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1256,
1879
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1256_SIZE);
1880
+ }
1881
+
1882
+ int8_t
1883
+ lxb_encoding_encode_windows_1257_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1884
+ const lxb_char_t *end, lxb_codepoint_t cp)
1885
+ {
1886
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1257,
1887
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1257_SIZE);
1888
+ }
1889
+
1890
+ int8_t
1891
+ lxb_encoding_encode_windows_1258_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1892
+ const lxb_char_t *end, lxb_codepoint_t cp)
1893
+ {
1894
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_1258,
1895
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_1258_SIZE);
1896
+ }
1897
+
1898
+ int8_t
1899
+ lxb_encoding_encode_windows_874_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1900
+ const lxb_char_t *end, lxb_codepoint_t cp)
1901
+ {
1902
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_windows_874,
1903
+ LXB_ENCODING_SINGLE_HASH_WINDOWS_874_SIZE);
1904
+ }
1905
+
1906
+ int8_t
1907
+ lxb_encoding_encode_x_mac_cyrillic_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1908
+ const lxb_char_t *end, lxb_codepoint_t cp)
1909
+ {
1910
+ LXB_ENCODING_ENCODE_BYTE_SINGLE(lxb_encoding_single_hash_x_mac_cyrillic,
1911
+ LXB_ENCODING_SINGLE_HASH_X_MAC_CYRILLIC_SIZE);
1912
+ }
1913
+
1914
+ int8_t
1915
+ lxb_encoding_encode_x_user_defined_single(lxb_encoding_encode_t *ctx, lxb_char_t **data,
1916
+ const lxb_char_t *end, lxb_codepoint_t cp)
1917
+ {
1918
+ if (cp < 0x80) {
1919
+ *(*data)++ = (lxb_char_t) cp;
1920
+
1921
+ return 1;
1922
+ }
1923
+
1924
+ if (cp >= 0xF780 && cp <= 0xF7FF) {
1925
+ *(*data)++ = (lxb_char_t) (cp - 0xF780 + 0x80);
1926
+
1927
+ return 1;
1928
+ }
1929
+
1930
+ return LXB_ENCODING_ENCODE_ERROR;
1931
+ }