ires 0.1.3 → 0.1.4

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.
Files changed (1024) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -45
  3. data/ext/Gopkg.lock +31 -1
  4. data/ext/ires/image.go +227 -0
  5. data/ext/ires/ires.go +47 -59
  6. data/ext/ires/uri.go +143 -0
  7. data/ext/main.go +18 -9
  8. data/ext/vendor/github.com/PuerkitoBio/purell/LICENSE +12 -0
  9. data/ext/vendor/github.com/PuerkitoBio/purell/README.md +187 -0
  10. data/ext/vendor/github.com/PuerkitoBio/purell/bench_test.go +57 -0
  11. data/ext/vendor/github.com/PuerkitoBio/purell/benchmarks/v0.1.0 +9 -0
  12. data/ext/vendor/github.com/PuerkitoBio/purell/example_test.go +35 -0
  13. data/ext/vendor/github.com/PuerkitoBio/purell/purell.go +379 -0
  14. data/ext/vendor/github.com/PuerkitoBio/purell/purell_test.go +768 -0
  15. data/ext/vendor/github.com/PuerkitoBio/purell/urlnorm_test.go +53 -0
  16. data/ext/vendor/github.com/PuerkitoBio/urlesc/LICENSE +27 -0
  17. data/ext/vendor/github.com/PuerkitoBio/urlesc/README.md +16 -0
  18. data/ext/vendor/github.com/PuerkitoBio/urlesc/urlesc.go +180 -0
  19. data/ext/vendor/github.com/PuerkitoBio/urlesc/urlesc_test.go +641 -0
  20. data/ext/vendor/github.com/{satori/go.uuid → goware/urlx}/LICENSE +3 -1
  21. data/ext/vendor/github.com/goware/urlx/README.md +172 -0
  22. data/ext/vendor/github.com/goware/urlx/urlx.go +196 -0
  23. data/ext/vendor/github.com/goware/urlx/urlx_test.go +232 -0
  24. data/ext/vendor/golang.org/x/net/AUTHORS +3 -0
  25. data/ext/vendor/golang.org/x/net/CONTRIBUTING.md +31 -0
  26. data/ext/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
  27. data/ext/vendor/golang.org/x/net/LICENSE +27 -0
  28. data/ext/vendor/golang.org/x/net/PATENTS +22 -0
  29. data/ext/vendor/golang.org/x/net/README.md +16 -0
  30. data/ext/vendor/golang.org/x/net/bpf/asm.go +41 -0
  31. data/ext/vendor/golang.org/x/net/bpf/constants.go +218 -0
  32. data/ext/vendor/golang.org/x/net/bpf/doc.go +82 -0
  33. data/ext/vendor/golang.org/x/net/bpf/instructions.go +704 -0
  34. data/ext/vendor/golang.org/x/net/bpf/instructions_test.go +525 -0
  35. data/ext/vendor/golang.org/x/net/bpf/setter.go +10 -0
  36. data/ext/vendor/golang.org/x/net/bpf/testdata/all_instructions.bpf +1 -0
  37. data/ext/vendor/golang.org/x/net/bpf/testdata/all_instructions.txt +79 -0
  38. data/ext/vendor/golang.org/x/net/bpf/vm.go +140 -0
  39. data/ext/vendor/golang.org/x/net/bpf/vm_aluop_test.go +512 -0
  40. data/ext/vendor/golang.org/x/net/bpf/vm_bpf_test.go +192 -0
  41. data/ext/vendor/golang.org/x/net/bpf/vm_extension_test.go +49 -0
  42. data/ext/vendor/golang.org/x/net/bpf/vm_instructions.go +174 -0
  43. data/ext/vendor/golang.org/x/net/bpf/vm_jump_test.go +380 -0
  44. data/ext/vendor/golang.org/x/net/bpf/vm_load_test.go +246 -0
  45. data/ext/vendor/golang.org/x/net/bpf/vm_ret_test.go +115 -0
  46. data/ext/vendor/golang.org/x/net/bpf/vm_scratch_test.go +247 -0
  47. data/ext/vendor/golang.org/x/net/bpf/vm_test.go +144 -0
  48. data/ext/vendor/golang.org/x/net/codereview.cfg +1 -0
  49. data/ext/vendor/golang.org/x/net/context/context.go +54 -0
  50. data/ext/vendor/golang.org/x/net/context/context_test.go +583 -0
  51. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +74 -0
  52. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go +29 -0
  53. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go +147 -0
  54. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17_test.go +79 -0
  55. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_test.go +105 -0
  56. data/ext/vendor/golang.org/x/net/context/go17.go +72 -0
  57. data/ext/vendor/golang.org/x/net/context/go19.go +20 -0
  58. data/ext/vendor/golang.org/x/net/context/pre_go17.go +300 -0
  59. data/ext/vendor/golang.org/x/net/context/pre_go19.go +109 -0
  60. data/ext/vendor/golang.org/x/net/context/withtimeout_test.go +31 -0
  61. data/ext/vendor/golang.org/x/net/dict/dict.go +210 -0
  62. data/ext/vendor/golang.org/x/net/dns/dnsmessage/example_test.go +132 -0
  63. data/ext/vendor/golang.org/x/net/dns/dnsmessage/message.go +1997 -0
  64. data/ext/vendor/golang.org/x/net/dns/dnsmessage/message_test.go +1116 -0
  65. data/ext/vendor/golang.org/x/net/html/atom/atom.go +78 -0
  66. data/ext/vendor/golang.org/x/net/html/atom/atom_test.go +109 -0
  67. data/ext/vendor/golang.org/x/net/html/atom/gen.go +709 -0
  68. data/ext/vendor/golang.org/x/net/html/atom/table.go +777 -0
  69. data/ext/vendor/golang.org/x/net/html/atom/table_test.go +373 -0
  70. data/ext/vendor/golang.org/x/net/html/charset/charset.go +257 -0
  71. data/ext/vendor/golang.org/x/net/html/charset/charset_test.go +237 -0
  72. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-charset.html +48 -0
  73. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-UTF-8-BOM.html +48 -0
  74. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-charset.html +49 -0
  75. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-content.html +49 -0
  76. data/ext/vendor/golang.org/x/net/html/charset/testdata/No-encoding-declaration.html +47 -0
  77. data/ext/vendor/golang.org/x/net/html/charset/testdata/README +9 -0
  78. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-16BE-BOM.html +0 -0
  79. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-16LE-BOM.html +0 -0
  80. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-charset.html +49 -0
  81. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-content.html +48 -0
  82. data/ext/vendor/golang.org/x/net/html/charset/testdata/meta-charset-attribute.html +48 -0
  83. data/ext/vendor/golang.org/x/net/html/charset/testdata/meta-content-attribute.html +48 -0
  84. data/ext/vendor/golang.org/x/net/html/const.go +104 -0
  85. data/ext/vendor/golang.org/x/net/html/doc.go +106 -0
  86. data/ext/vendor/golang.org/x/net/html/doctype.go +156 -0
  87. data/ext/vendor/golang.org/x/net/html/entity.go +2253 -0
  88. data/ext/vendor/golang.org/x/net/html/entity_test.go +29 -0
  89. data/ext/vendor/golang.org/x/net/html/escape.go +258 -0
  90. data/ext/vendor/golang.org/x/net/html/escape_test.go +97 -0
  91. data/ext/vendor/golang.org/x/net/html/example_test.go +40 -0
  92. data/ext/vendor/golang.org/x/net/html/foreign.go +226 -0
  93. data/ext/vendor/golang.org/x/net/html/node.go +193 -0
  94. data/ext/vendor/golang.org/x/net/html/node_test.go +146 -0
  95. data/ext/vendor/golang.org/x/net/html/parse.go +2094 -0
  96. data/ext/vendor/golang.org/x/net/html/parse_test.go +388 -0
  97. data/ext/vendor/golang.org/x/net/html/render.go +271 -0
  98. data/ext/vendor/golang.org/x/net/html/render_test.go +156 -0
  99. data/ext/vendor/golang.org/x/net/html/testdata/go1.html +2237 -0
  100. data/ext/vendor/golang.org/x/net/html/testdata/webkit/README +28 -0
  101. data/ext/vendor/golang.org/x/net/html/testdata/webkit/adoption01.dat +194 -0
  102. data/ext/vendor/golang.org/x/net/html/testdata/webkit/adoption02.dat +31 -0
  103. data/ext/vendor/golang.org/x/net/html/testdata/webkit/comments01.dat +135 -0
  104. data/ext/vendor/golang.org/x/net/html/testdata/webkit/doctype01.dat +370 -0
  105. data/ext/vendor/golang.org/x/net/html/testdata/webkit/entities01.dat +603 -0
  106. data/ext/vendor/golang.org/x/net/html/testdata/webkit/entities02.dat +249 -0
  107. data/ext/vendor/golang.org/x/net/html/testdata/webkit/html5test-com.dat +246 -0
  108. data/ext/vendor/golang.org/x/net/html/testdata/webkit/inbody01.dat +43 -0
  109. data/ext/vendor/golang.org/x/net/html/testdata/webkit/isindex.dat +40 -0
  110. data/ext/vendor/golang.org/x/net/html/testdata/webkit/pending-spec-changes-plain-text-unsafe.dat +0 -0
  111. data/ext/vendor/golang.org/x/net/html/testdata/webkit/pending-spec-changes.dat +52 -0
  112. data/ext/vendor/golang.org/x/net/html/testdata/webkit/plain-text-unsafe.dat +0 -0
  113. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scriptdata01.dat +308 -0
  114. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scripted/adoption01.dat +15 -0
  115. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scripted/webkit01.dat +28 -0
  116. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tables01.dat +212 -0
  117. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests1.dat +1952 -0
  118. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests10.dat +799 -0
  119. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests11.dat +482 -0
  120. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests12.dat +62 -0
  121. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests14.dat +74 -0
  122. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests15.dat +208 -0
  123. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests16.dat +2299 -0
  124. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests17.dat +153 -0
  125. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests18.dat +269 -0
  126. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests19.dat +1237 -0
  127. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests2.dat +763 -0
  128. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests20.dat +455 -0
  129. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests21.dat +221 -0
  130. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests22.dat +157 -0
  131. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests23.dat +155 -0
  132. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests24.dat +79 -0
  133. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests25.dat +219 -0
  134. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests26.dat +313 -0
  135. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests3.dat +305 -0
  136. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests4.dat +59 -0
  137. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests5.dat +191 -0
  138. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests6.dat +663 -0
  139. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests7.dat +390 -0
  140. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests8.dat +148 -0
  141. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests9.dat +457 -0
  142. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests_innerHTML_1.dat +741 -0
  143. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tricky01.dat +261 -0
  144. data/ext/vendor/golang.org/x/net/html/testdata/webkit/webkit01.dat +610 -0
  145. data/ext/vendor/golang.org/x/net/html/testdata/webkit/webkit02.dat +159 -0
  146. data/ext/vendor/golang.org/x/net/html/token.go +1219 -0
  147. data/ext/vendor/golang.org/x/net/html/token_test.go +748 -0
  148. data/ext/vendor/golang.org/x/net/http2/Dockerfile +51 -0
  149. data/ext/vendor/golang.org/x/net/http2/Makefile +3 -0
  150. data/ext/vendor/golang.org/x/net/http2/README +20 -0
  151. data/ext/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  152. data/ext/vendor/golang.org/x/net/http2/ciphers_test.go +309 -0
  153. data/ext/vendor/golang.org/x/net/http2/client_conn_pool.go +256 -0
  154. data/ext/vendor/golang.org/x/net/http2/configure_transport.go +80 -0
  155. data/ext/vendor/golang.org/x/net/http2/databuffer.go +146 -0
  156. data/ext/vendor/golang.org/x/net/http2/databuffer_test.go +157 -0
  157. data/ext/vendor/golang.org/x/net/http2/errors.go +133 -0
  158. data/ext/vendor/golang.org/x/net/http2/errors_test.go +24 -0
  159. data/ext/vendor/golang.org/x/net/http2/flow.go +50 -0
  160. data/ext/vendor/golang.org/x/net/http2/flow_test.go +53 -0
  161. data/ext/vendor/golang.org/x/net/http2/frame.go +1579 -0
  162. data/ext/vendor/golang.org/x/net/http2/frame_test.go +1191 -0
  163. data/ext/vendor/golang.org/x/net/http2/go16.go +16 -0
  164. data/ext/vendor/golang.org/x/net/http2/go17.go +106 -0
  165. data/ext/vendor/golang.org/x/net/http2/go17_not18.go +36 -0
  166. data/ext/vendor/golang.org/x/net/http2/go18.go +56 -0
  167. data/ext/vendor/golang.org/x/net/http2/go18_test.go +79 -0
  168. data/ext/vendor/golang.org/x/net/http2/go19.go +16 -0
  169. data/ext/vendor/golang.org/x/net/http2/go19_test.go +60 -0
  170. data/ext/vendor/golang.org/x/net/http2/gotrack.go +170 -0
  171. data/ext/vendor/golang.org/x/net/http2/gotrack_test.go +33 -0
  172. data/ext/vendor/golang.org/x/net/http2/h2demo/Makefile +8 -0
  173. data/ext/vendor/golang.org/x/net/http2/h2demo/README +16 -0
  174. data/ext/vendor/golang.org/x/net/http2/h2demo/h2demo.go +538 -0
  175. data/ext/vendor/golang.org/x/net/http2/h2demo/launch.go +302 -0
  176. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.key +27 -0
  177. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.pem +26 -0
  178. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.srl +1 -0
  179. data/ext/vendor/golang.org/x/net/http2/h2demo/server.crt +20 -0
  180. data/ext/vendor/golang.org/x/net/http2/h2demo/server.key +27 -0
  181. data/ext/vendor/golang.org/x/net/http2/h2demo/tmpl.go +1991 -0
  182. data/ext/vendor/golang.org/x/net/http2/h2i/README.md +97 -0
  183. data/ext/vendor/golang.org/x/net/http2/h2i/h2i.go +522 -0
  184. data/ext/vendor/golang.org/x/net/http2/headermap.go +78 -0
  185. data/ext/vendor/golang.org/x/net/http2/hpack/encode.go +240 -0
  186. data/ext/vendor/golang.org/x/net/http2/hpack/encode_test.go +386 -0
  187. data/ext/vendor/golang.org/x/net/http2/hpack/hpack.go +490 -0
  188. data/ext/vendor/golang.org/x/net/http2/hpack/hpack_test.go +722 -0
  189. data/ext/vendor/golang.org/x/net/http2/hpack/huffman.go +212 -0
  190. data/ext/vendor/golang.org/x/net/http2/hpack/tables.go +479 -0
  191. data/ext/vendor/golang.org/x/net/http2/hpack/tables_test.go +214 -0
  192. data/ext/vendor/golang.org/x/net/http2/http2.go +391 -0
  193. data/ext/vendor/golang.org/x/net/http2/http2_test.go +199 -0
  194. data/ext/vendor/golang.org/x/net/http2/not_go16.go +21 -0
  195. data/ext/vendor/golang.org/x/net/http2/not_go17.go +87 -0
  196. data/ext/vendor/golang.org/x/net/http2/not_go18.go +29 -0
  197. data/ext/vendor/golang.org/x/net/http2/not_go19.go +16 -0
  198. data/ext/vendor/golang.org/x/net/http2/pipe.go +163 -0
  199. data/ext/vendor/golang.org/x/net/http2/pipe_test.go +130 -0
  200. data/ext/vendor/golang.org/x/net/http2/server.go +2857 -0
  201. data/ext/vendor/golang.org/x/net/http2/server_push_test.go +521 -0
  202. data/ext/vendor/golang.org/x/net/http2/server_test.go +3721 -0
  203. data/ext/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml +5021 -0
  204. data/ext/vendor/golang.org/x/net/http2/transport.go +2285 -0
  205. data/ext/vendor/golang.org/x/net/http2/transport_test.go +3714 -0
  206. data/ext/vendor/golang.org/x/net/http2/write.go +370 -0
  207. data/ext/vendor/golang.org/x/net/http2/writesched.go +242 -0
  208. data/ext/vendor/golang.org/x/net/http2/writesched_priority.go +452 -0
  209. data/ext/vendor/golang.org/x/net/http2/writesched_priority_test.go +541 -0
  210. data/ext/vendor/golang.org/x/net/http2/writesched_random.go +72 -0
  211. data/ext/vendor/golang.org/x/net/http2/writesched_random_test.go +44 -0
  212. data/ext/vendor/golang.org/x/net/http2/writesched_test.go +125 -0
  213. data/ext/vendor/golang.org/x/net/http2/z_spec_test.go +356 -0
  214. data/ext/vendor/golang.org/x/net/icmp/dstunreach.go +41 -0
  215. data/ext/vendor/golang.org/x/net/icmp/echo.go +45 -0
  216. data/ext/vendor/golang.org/x/net/icmp/endpoint.go +113 -0
  217. data/ext/vendor/golang.org/x/net/icmp/example_test.go +63 -0
  218. data/ext/vendor/golang.org/x/net/icmp/extension.go +89 -0
  219. data/ext/vendor/golang.org/x/net/icmp/extension_test.go +259 -0
  220. data/ext/vendor/golang.org/x/net/icmp/helper_posix.go +75 -0
  221. data/ext/vendor/golang.org/x/net/icmp/interface.go +236 -0
  222. data/ext/vendor/golang.org/x/net/icmp/ipv4.go +61 -0
  223. data/ext/vendor/golang.org/x/net/icmp/ipv4_test.go +83 -0
  224. data/ext/vendor/golang.org/x/net/icmp/ipv6.go +23 -0
  225. data/ext/vendor/golang.org/x/net/icmp/listen_posix.go +100 -0
  226. data/ext/vendor/golang.org/x/net/icmp/listen_stub.go +33 -0
  227. data/ext/vendor/golang.org/x/net/icmp/message.go +152 -0
  228. data/ext/vendor/golang.org/x/net/icmp/message_test.go +134 -0
  229. data/ext/vendor/golang.org/x/net/icmp/messagebody.go +41 -0
  230. data/ext/vendor/golang.org/x/net/icmp/mpls.go +77 -0
  231. data/ext/vendor/golang.org/x/net/icmp/multipart.go +109 -0
  232. data/ext/vendor/golang.org/x/net/icmp/multipart_test.go +442 -0
  233. data/ext/vendor/golang.org/x/net/icmp/packettoobig.go +43 -0
  234. data/ext/vendor/golang.org/x/net/icmp/paramprob.go +63 -0
  235. data/ext/vendor/golang.org/x/net/icmp/ping_test.go +200 -0
  236. data/ext/vendor/golang.org/x/net/icmp/sys_freebsd.go +11 -0
  237. data/ext/vendor/golang.org/x/net/icmp/timeexceeded.go +39 -0
  238. data/ext/vendor/golang.org/x/net/idna/example_test.go +70 -0
  239. data/ext/vendor/golang.org/x/net/idna/idna.go +680 -0
  240. data/ext/vendor/golang.org/x/net/idna/idna_test.go +108 -0
  241. data/ext/vendor/golang.org/x/net/idna/punycode.go +203 -0
  242. data/ext/vendor/golang.org/x/net/idna/punycode_test.go +198 -0
  243. data/ext/vendor/golang.org/x/net/idna/tables.go +4477 -0
  244. data/ext/vendor/golang.org/x/net/idna/trie.go +72 -0
  245. data/ext/vendor/golang.org/x/net/idna/trieval.go +114 -0
  246. data/ext/vendor/golang.org/x/net/internal/iana/const.go +180 -0
  247. data/ext/vendor/golang.org/x/net/internal/iana/gen.go +293 -0
  248. data/ext/vendor/golang.org/x/net/internal/nettest/helper_bsd.go +53 -0
  249. data/ext/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go +15 -0
  250. data/ext/vendor/golang.org/x/net/internal/nettest/helper_posix.go +31 -0
  251. data/ext/vendor/golang.org/x/net/internal/nettest/helper_stub.go +32 -0
  252. data/ext/vendor/golang.org/x/net/internal/nettest/helper_unix.go +29 -0
  253. data/ext/vendor/golang.org/x/net/internal/nettest/helper_windows.go +42 -0
  254. data/ext/vendor/golang.org/x/net/internal/nettest/interface.go +94 -0
  255. data/ext/vendor/golang.org/x/net/internal/nettest/rlimit.go +11 -0
  256. data/ext/vendor/golang.org/x/net/internal/nettest/stack.go +147 -0
  257. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr.go +11 -0
  258. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go +13 -0
  259. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go +14 -0
  260. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go +14 -0
  261. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go +14 -0
  262. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go +17 -0
  263. data/ext/vendor/golang.org/x/net/internal/socket/defs_darwin.go +44 -0
  264. data/ext/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go +44 -0
  265. data/ext/vendor/golang.org/x/net/internal/socket/defs_freebsd.go +44 -0
  266. data/ext/vendor/golang.org/x/net/internal/socket/defs_linux.go +49 -0
  267. data/ext/vendor/golang.org/x/net/internal/socket/defs_netbsd.go +47 -0
  268. data/ext/vendor/golang.org/x/net/internal/socket/defs_openbsd.go +44 -0
  269. data/ext/vendor/golang.org/x/net/internal/socket/defs_solaris.go +44 -0
  270. data/ext/vendor/golang.org/x/net/internal/socket/error_unix.go +31 -0
  271. data/ext/vendor/golang.org/x/net/internal/socket/error_windows.go +26 -0
  272. data/ext/vendor/golang.org/x/net/internal/socket/iovec_32bit.go +19 -0
  273. data/ext/vendor/golang.org/x/net/internal/socket/iovec_64bit.go +19 -0
  274. data/ext/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go +19 -0
  275. data/ext/vendor/golang.org/x/net/internal/socket/iovec_stub.go +11 -0
  276. data/ext/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go +21 -0
  277. data/ext/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go +42 -0
  278. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go +39 -0
  279. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go +16 -0
  280. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux.go +36 -0
  281. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go +24 -0
  282. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go +24 -0
  283. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go +14 -0
  284. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go +36 -0
  285. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_stub.go +14 -0
  286. data/ext/vendor/golang.org/x/net/internal/socket/rawconn.go +66 -0
  287. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +74 -0
  288. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +77 -0
  289. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go +18 -0
  290. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go +18 -0
  291. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_stub.go +25 -0
  292. data/ext/vendor/golang.org/x/net/internal/socket/reflect.go +62 -0
  293. data/ext/vendor/golang.org/x/net/internal/socket/socket.go +285 -0
  294. data/ext/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go +259 -0
  295. data/ext/vendor/golang.org/x/net/internal/socket/socket_test.go +46 -0
  296. data/ext/vendor/golang.org/x/net/internal/socket/sys.go +33 -0
  297. data/ext/vendor/golang.org/x/net/internal/socket/sys_bsd.go +17 -0
  298. data/ext/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go +14 -0
  299. data/ext/vendor/golang.org/x/net/internal/socket/sys_darwin.go +7 -0
  300. data/ext/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go +7 -0
  301. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux.go +27 -0
  302. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +55 -0
  303. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +11 -0
  304. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go +10 -0
  305. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go +10 -0
  306. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go +10 -0
  307. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go +10 -0
  308. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go +10 -0
  309. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go +10 -0
  310. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go +10 -0
  311. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go +10 -0
  312. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go +10 -0
  313. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go +55 -0
  314. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s +11 -0
  315. data/ext/vendor/golang.org/x/net/internal/socket/sys_netbsd.go +25 -0
  316. data/ext/vendor/golang.org/x/net/internal/socket/sys_posix.go +168 -0
  317. data/ext/vendor/golang.org/x/net/internal/socket/sys_solaris.go +71 -0
  318. data/ext/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s +11 -0
  319. data/ext/vendor/golang.org/x/net/internal/socket/sys_stub.go +64 -0
  320. data/ext/vendor/golang.org/x/net/internal/socket/sys_unix.go +33 -0
  321. data/ext/vendor/golang.org/x/net/internal/socket/sys_windows.go +70 -0
  322. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go +59 -0
  323. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go +61 -0
  324. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go +59 -0
  325. data/ext/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go +61 -0
  326. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go +59 -0
  327. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go +61 -0
  328. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go +59 -0
  329. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +63 -0
  330. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +66 -0
  331. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +63 -0
  332. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +66 -0
  333. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +63 -0
  334. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +66 -0
  335. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +66 -0
  336. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +63 -0
  337. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +66 -0
  338. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +66 -0
  339. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +66 -0
  340. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +65 -0
  341. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +68 -0
  342. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +59 -0
  343. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go +59 -0
  344. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go +61 -0
  345. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go +59 -0
  346. data/ext/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go +60 -0
  347. data/ext/vendor/golang.org/x/net/internal/timeseries/timeseries.go +525 -0
  348. data/ext/vendor/golang.org/x/net/internal/timeseries/timeseries_test.go +170 -0
  349. data/ext/vendor/golang.org/x/net/ipv4/batch.go +191 -0
  350. data/ext/vendor/golang.org/x/net/ipv4/bpf_test.go +93 -0
  351. data/ext/vendor/golang.org/x/net/ipv4/control.go +144 -0
  352. data/ext/vendor/golang.org/x/net/ipv4/control_bsd.go +40 -0
  353. data/ext/vendor/golang.org/x/net/ipv4/control_pktinfo.go +39 -0
  354. data/ext/vendor/golang.org/x/net/ipv4/control_stub.go +13 -0
  355. data/ext/vendor/golang.org/x/net/ipv4/control_test.go +21 -0
  356. data/ext/vendor/golang.org/x/net/ipv4/control_unix.go +73 -0
  357. data/ext/vendor/golang.org/x/net/ipv4/control_windows.go +16 -0
  358. data/ext/vendor/golang.org/x/net/ipv4/defs_darwin.go +77 -0
  359. data/ext/vendor/golang.org/x/net/ipv4/defs_dragonfly.go +38 -0
  360. data/ext/vendor/golang.org/x/net/ipv4/defs_freebsd.go +75 -0
  361. data/ext/vendor/golang.org/x/net/ipv4/defs_linux.go +122 -0
  362. data/ext/vendor/golang.org/x/net/ipv4/defs_netbsd.go +37 -0
  363. data/ext/vendor/golang.org/x/net/ipv4/defs_openbsd.go +37 -0
  364. data/ext/vendor/golang.org/x/net/ipv4/defs_solaris.go +84 -0
  365. data/ext/vendor/golang.org/x/net/ipv4/dgramopt.go +265 -0
  366. data/ext/vendor/golang.org/x/net/ipv4/doc.go +244 -0
  367. data/ext/vendor/golang.org/x/net/ipv4/endpoint.go +187 -0
  368. data/ext/vendor/golang.org/x/net/ipv4/example_test.go +224 -0
  369. data/ext/vendor/golang.org/x/net/ipv4/gen.go +199 -0
  370. data/ext/vendor/golang.org/x/net/ipv4/genericopt.go +57 -0
  371. data/ext/vendor/golang.org/x/net/ipv4/header.go +159 -0
  372. data/ext/vendor/golang.org/x/net/ipv4/header_test.go +228 -0
  373. data/ext/vendor/golang.org/x/net/ipv4/helper.go +63 -0
  374. data/ext/vendor/golang.org/x/net/ipv4/iana.go +34 -0
  375. data/ext/vendor/golang.org/x/net/ipv4/icmp.go +57 -0
  376. data/ext/vendor/golang.org/x/net/ipv4/icmp_linux.go +25 -0
  377. data/ext/vendor/golang.org/x/net/ipv4/icmp_stub.go +25 -0
  378. data/ext/vendor/golang.org/x/net/ipv4/icmp_test.go +95 -0
  379. data/ext/vendor/golang.org/x/net/ipv4/multicast_test.go +334 -0
  380. data/ext/vendor/golang.org/x/net/ipv4/multicastlistener_test.go +265 -0
  381. data/ext/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go +195 -0
  382. data/ext/vendor/golang.org/x/net/ipv4/packet.go +69 -0
  383. data/ext/vendor/golang.org/x/net/ipv4/packet_go1_8.go +56 -0
  384. data/ext/vendor/golang.org/x/net/ipv4/packet_go1_9.go +67 -0
  385. data/ext/vendor/golang.org/x/net/ipv4/payload.go +23 -0
  386. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg.go +36 -0
  387. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go +59 -0
  388. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go +67 -0
  389. data/ext/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +42 -0
  390. data/ext/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go +248 -0
  391. data/ext/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go +388 -0
  392. data/ext/vendor/golang.org/x/net/ipv4/readwrite_test.go +140 -0
  393. data/ext/vendor/golang.org/x/net/ipv4/sockopt.go +44 -0
  394. data/ext/vendor/golang.org/x/net/ipv4/sockopt_posix.go +71 -0
  395. data/ext/vendor/golang.org/x/net/ipv4/sockopt_stub.go +42 -0
  396. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreq.go +119 -0
  397. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go +25 -0
  398. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreqn.go +42 -0
  399. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go +21 -0
  400. data/ext/vendor/golang.org/x/net/ipv4/sys_bpf.go +23 -0
  401. data/ext/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go +16 -0
  402. data/ext/vendor/golang.org/x/net/ipv4/sys_bsd.go +37 -0
  403. data/ext/vendor/golang.org/x/net/ipv4/sys_darwin.go +93 -0
  404. data/ext/vendor/golang.org/x/net/ipv4/sys_dragonfly.go +35 -0
  405. data/ext/vendor/golang.org/x/net/ipv4/sys_freebsd.go +76 -0
  406. data/ext/vendor/golang.org/x/net/ipv4/sys_linux.go +59 -0
  407. data/ext/vendor/golang.org/x/net/ipv4/sys_solaris.go +57 -0
  408. data/ext/vendor/golang.org/x/net/ipv4/sys_ssmreq.go +54 -0
  409. data/ext/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go +21 -0
  410. data/ext/vendor/golang.org/x/net/ipv4/sys_stub.go +13 -0
  411. data/ext/vendor/golang.org/x/net/ipv4/sys_windows.go +67 -0
  412. data/ext/vendor/golang.org/x/net/ipv4/unicast_test.go +247 -0
  413. data/ext/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go +148 -0
  414. data/ext/vendor/golang.org/x/net/ipv4/zsys_darwin.go +99 -0
  415. data/ext/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go +31 -0
  416. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go +93 -0
  417. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go +95 -0
  418. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go +95 -0
  419. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +148 -0
  420. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +150 -0
  421. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +148 -0
  422. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +150 -0
  423. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +148 -0
  424. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +150 -0
  425. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +150 -0
  426. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +148 -0
  427. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +148 -0
  428. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +150 -0
  429. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +150 -0
  430. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +150 -0
  431. data/ext/vendor/golang.org/x/net/ipv4/zsys_netbsd.go +30 -0
  432. data/ext/vendor/golang.org/x/net/ipv4/zsys_openbsd.go +30 -0
  433. data/ext/vendor/golang.org/x/net/ipv4/zsys_solaris.go +100 -0
  434. data/ext/vendor/golang.org/x/net/ipv6/batch.go +119 -0
  435. data/ext/vendor/golang.org/x/net/ipv6/bpf_test.go +96 -0
  436. data/ext/vendor/golang.org/x/net/ipv6/control.go +187 -0
  437. data/ext/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +48 -0
  438. data/ext/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +94 -0
  439. data/ext/vendor/golang.org/x/net/ipv6/control_stub.go +13 -0
  440. data/ext/vendor/golang.org/x/net/ipv6/control_test.go +21 -0
  441. data/ext/vendor/golang.org/x/net/ipv6/control_unix.go +55 -0
  442. data/ext/vendor/golang.org/x/net/ipv6/control_windows.go +16 -0
  443. data/ext/vendor/golang.org/x/net/ipv6/defs_darwin.go +112 -0
  444. data/ext/vendor/golang.org/x/net/ipv6/defs_dragonfly.go +84 -0
  445. data/ext/vendor/golang.org/x/net/ipv6/defs_freebsd.go +105 -0
  446. data/ext/vendor/golang.org/x/net/ipv6/defs_linux.go +147 -0
  447. data/ext/vendor/golang.org/x/net/ipv6/defs_netbsd.go +80 -0
  448. data/ext/vendor/golang.org/x/net/ipv6/defs_openbsd.go +89 -0
  449. data/ext/vendor/golang.org/x/net/ipv6/defs_solaris.go +114 -0
  450. data/ext/vendor/golang.org/x/net/ipv6/dgramopt.go +302 -0
  451. data/ext/vendor/golang.org/x/net/ipv6/doc.go +243 -0
  452. data/ext/vendor/golang.org/x/net/ipv6/endpoint.go +128 -0
  453. data/ext/vendor/golang.org/x/net/ipv6/example_test.go +216 -0
  454. data/ext/vendor/golang.org/x/net/ipv6/gen.go +199 -0
  455. data/ext/vendor/golang.org/x/net/ipv6/genericopt.go +58 -0
  456. data/ext/vendor/golang.org/x/net/ipv6/header.go +55 -0
  457. data/ext/vendor/golang.org/x/net/ipv6/header_test.go +55 -0
  458. data/ext/vendor/golang.org/x/net/ipv6/helper.go +57 -0
  459. data/ext/vendor/golang.org/x/net/ipv6/iana.go +82 -0
  460. data/ext/vendor/golang.org/x/net/ipv6/icmp.go +60 -0
  461. data/ext/vendor/golang.org/x/net/ipv6/icmp_bsd.go +29 -0
  462. data/ext/vendor/golang.org/x/net/ipv6/icmp_linux.go +27 -0
  463. data/ext/vendor/golang.org/x/net/ipv6/icmp_solaris.go +27 -0
  464. data/ext/vendor/golang.org/x/net/ipv6/icmp_stub.go +23 -0
  465. data/ext/vendor/golang.org/x/net/ipv6/icmp_test.go +96 -0
  466. data/ext/vendor/golang.org/x/net/ipv6/icmp_windows.go +22 -0
  467. data/ext/vendor/golang.org/x/net/ipv6/mocktransponder_test.go +32 -0
  468. data/ext/vendor/golang.org/x/net/ipv6/multicast_test.go +264 -0
  469. data/ext/vendor/golang.org/x/net/ipv6/multicastlistener_test.go +261 -0
  470. data/ext/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go +157 -0
  471. data/ext/vendor/golang.org/x/net/ipv6/payload.go +23 -0
  472. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg.go +35 -0
  473. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go +55 -0
  474. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go +57 -0
  475. data/ext/vendor/golang.org/x/net/ipv6/payload_nocmsg.go +41 -0
  476. data/ext/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go +242 -0
  477. data/ext/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go +373 -0
  478. data/ext/vendor/golang.org/x/net/ipv6/readwrite_test.go +148 -0
  479. data/ext/vendor/golang.org/x/net/ipv6/sockopt.go +43 -0
  480. data/ext/vendor/golang.org/x/net/ipv6/sockopt_posix.go +87 -0
  481. data/ext/vendor/golang.org/x/net/ipv6/sockopt_stub.go +46 -0
  482. data/ext/vendor/golang.org/x/net/ipv6/sockopt_test.go +133 -0
  483. data/ext/vendor/golang.org/x/net/ipv6/sys_asmreq.go +24 -0
  484. data/ext/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go +17 -0
  485. data/ext/vendor/golang.org/x/net/ipv6/sys_bpf.go +23 -0
  486. data/ext/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go +16 -0
  487. data/ext/vendor/golang.org/x/net/ipv6/sys_bsd.go +57 -0
  488. data/ext/vendor/golang.org/x/net/ipv6/sys_darwin.go +106 -0
  489. data/ext/vendor/golang.org/x/net/ipv6/sys_freebsd.go +92 -0
  490. data/ext/vendor/golang.org/x/net/ipv6/sys_linux.go +74 -0
  491. data/ext/vendor/golang.org/x/net/ipv6/sys_solaris.go +74 -0
  492. data/ext/vendor/golang.org/x/net/ipv6/sys_ssmreq.go +54 -0
  493. data/ext/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go +21 -0
  494. data/ext/vendor/golang.org/x/net/ipv6/sys_stub.go +13 -0
  495. data/ext/vendor/golang.org/x/net/ipv6/sys_windows.go +75 -0
  496. data/ext/vendor/golang.org/x/net/ipv6/unicast_test.go +184 -0
  497. data/ext/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go +120 -0
  498. data/ext/vendor/golang.org/x/net/ipv6/zsys_darwin.go +131 -0
  499. data/ext/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go +88 -0
  500. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go +122 -0
  501. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go +124 -0
  502. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go +124 -0
  503. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +170 -0
  504. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +172 -0
  505. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +170 -0
  506. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +172 -0
  507. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +170 -0
  508. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +172 -0
  509. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +172 -0
  510. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +170 -0
  511. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +170 -0
  512. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +172 -0
  513. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +172 -0
  514. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +172 -0
  515. data/ext/vendor/golang.org/x/net/ipv6/zsys_netbsd.go +84 -0
  516. data/ext/vendor/golang.org/x/net/ipv6/zsys_openbsd.go +93 -0
  517. data/ext/vendor/golang.org/x/net/ipv6/zsys_solaris.go +131 -0
  518. data/ext/vendor/golang.org/x/net/lex/httplex/httplex.go +351 -0
  519. data/ext/vendor/golang.org/x/net/lex/httplex/httplex_test.go +119 -0
  520. data/ext/vendor/golang.org/x/net/lif/address.go +105 -0
  521. data/ext/vendor/golang.org/x/net/lif/address_test.go +123 -0
  522. data/ext/vendor/golang.org/x/net/lif/binary.go +115 -0
  523. data/ext/vendor/golang.org/x/net/lif/defs_solaris.go +90 -0
  524. data/ext/vendor/golang.org/x/net/lif/lif.go +43 -0
  525. data/ext/vendor/golang.org/x/net/lif/link.go +126 -0
  526. data/ext/vendor/golang.org/x/net/lif/link_test.go +63 -0
  527. data/ext/vendor/golang.org/x/net/lif/sys.go +21 -0
  528. data/ext/vendor/golang.org/x/net/lif/sys_solaris_amd64.s +8 -0
  529. data/ext/vendor/golang.org/x/net/lif/syscall.go +28 -0
  530. data/ext/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go +103 -0
  531. data/ext/vendor/golang.org/x/net/nettest/conntest.go +456 -0
  532. data/ext/vendor/golang.org/x/net/nettest/conntest_go16.go +24 -0
  533. data/ext/vendor/golang.org/x/net/nettest/conntest_go17.go +24 -0
  534. data/ext/vendor/golang.org/x/net/nettest/conntest_test.go +76 -0
  535. data/ext/vendor/golang.org/x/net/netutil/listen.go +48 -0
  536. data/ext/vendor/golang.org/x/net/netutil/listen_test.go +101 -0
  537. data/ext/vendor/golang.org/x/net/proxy/direct.go +18 -0
  538. data/ext/vendor/golang.org/x/net/proxy/per_host.go +140 -0
  539. data/ext/vendor/golang.org/x/net/proxy/per_host_test.go +55 -0
  540. data/ext/vendor/golang.org/x/net/proxy/proxy.go +134 -0
  541. data/ext/vendor/golang.org/x/net/proxy/proxy_test.go +215 -0
  542. data/ext/vendor/golang.org/x/net/proxy/socks5.go +214 -0
  543. data/ext/vendor/golang.org/x/net/publicsuffix/gen.go +713 -0
  544. data/ext/vendor/golang.org/x/net/publicsuffix/list.go +135 -0
  545. data/ext/vendor/golang.org/x/net/publicsuffix/list_test.go +416 -0
  546. data/ext/vendor/golang.org/x/net/publicsuffix/table.go +9419 -0
  547. data/ext/vendor/golang.org/x/net/publicsuffix/table_test.go +16756 -0
  548. data/ext/vendor/golang.org/x/net/route/address.go +425 -0
  549. data/ext/vendor/golang.org/x/net/route/address_darwin_test.go +63 -0
  550. data/ext/vendor/golang.org/x/net/route/address_test.go +103 -0
  551. data/ext/vendor/golang.org/x/net/route/binary.go +90 -0
  552. data/ext/vendor/golang.org/x/net/route/defs_darwin.go +114 -0
  553. data/ext/vendor/golang.org/x/net/route/defs_dragonfly.go +113 -0
  554. data/ext/vendor/golang.org/x/net/route/defs_freebsd.go +337 -0
  555. data/ext/vendor/golang.org/x/net/route/defs_netbsd.go +112 -0
  556. data/ext/vendor/golang.org/x/net/route/defs_openbsd.go +116 -0
  557. data/ext/vendor/golang.org/x/net/route/interface.go +64 -0
  558. data/ext/vendor/golang.org/x/net/route/interface_announce.go +32 -0
  559. data/ext/vendor/golang.org/x/net/route/interface_classic.go +66 -0
  560. data/ext/vendor/golang.org/x/net/route/interface_freebsd.go +78 -0
  561. data/ext/vendor/golang.org/x/net/route/interface_multicast.go +30 -0
  562. data/ext/vendor/golang.org/x/net/route/interface_openbsd.go +90 -0
  563. data/ext/vendor/golang.org/x/net/route/message.go +72 -0
  564. data/ext/vendor/golang.org/x/net/route/message_darwin_test.go +34 -0
  565. data/ext/vendor/golang.org/x/net/route/message_freebsd_test.go +92 -0
  566. data/ext/vendor/golang.org/x/net/route/message_test.go +239 -0
  567. data/ext/vendor/golang.org/x/net/route/route.go +123 -0
  568. data/ext/vendor/golang.org/x/net/route/route_classic.go +67 -0
  569. data/ext/vendor/golang.org/x/net/route/route_openbsd.go +65 -0
  570. data/ext/vendor/golang.org/x/net/route/route_test.go +390 -0
  571. data/ext/vendor/golang.org/x/net/route/sys.go +39 -0
  572. data/ext/vendor/golang.org/x/net/route/sys_darwin.go +87 -0
  573. data/ext/vendor/golang.org/x/net/route/sys_dragonfly.go +76 -0
  574. data/ext/vendor/golang.org/x/net/route/sys_freebsd.go +155 -0
  575. data/ext/vendor/golang.org/x/net/route/sys_netbsd.go +71 -0
  576. data/ext/vendor/golang.org/x/net/route/sys_openbsd.go +80 -0
  577. data/ext/vendor/golang.org/x/net/route/syscall.go +28 -0
  578. data/ext/vendor/golang.org/x/net/route/zsys_darwin.go +99 -0
  579. data/ext/vendor/golang.org/x/net/route/zsys_dragonfly.go +98 -0
  580. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_386.go +126 -0
  581. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go +123 -0
  582. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_arm.go +123 -0
  583. data/ext/vendor/golang.org/x/net/route/zsys_netbsd.go +97 -0
  584. data/ext/vendor/golang.org/x/net/route/zsys_openbsd.go +101 -0
  585. data/ext/vendor/golang.org/x/net/trace/events.go +532 -0
  586. data/ext/vendor/golang.org/x/net/trace/histogram.go +365 -0
  587. data/ext/vendor/golang.org/x/net/trace/histogram_test.go +325 -0
  588. data/ext/vendor/golang.org/x/net/trace/trace.go +1082 -0
  589. data/ext/vendor/golang.org/x/net/trace/trace_go16.go +21 -0
  590. data/ext/vendor/golang.org/x/net/trace/trace_go17.go +21 -0
  591. data/ext/vendor/golang.org/x/net/trace/trace_test.go +178 -0
  592. data/ext/vendor/golang.org/x/net/webdav/file.go +796 -0
  593. data/ext/vendor/golang.org/x/net/webdav/file_go1.6.go +17 -0
  594. data/ext/vendor/golang.org/x/net/webdav/file_go1.7.go +16 -0
  595. data/ext/vendor/golang.org/x/net/webdav/file_test.go +1184 -0
  596. data/ext/vendor/golang.org/x/net/webdav/if.go +173 -0
  597. data/ext/vendor/golang.org/x/net/webdav/if_test.go +322 -0
  598. data/ext/vendor/golang.org/x/net/webdav/internal/xml/README +11 -0
  599. data/ext/vendor/golang.org/x/net/webdav/internal/xml/atom_test.go +56 -0
  600. data/ext/vendor/golang.org/x/net/webdav/internal/xml/example_test.go +151 -0
  601. data/ext/vendor/golang.org/x/net/webdav/internal/xml/marshal.go +1223 -0
  602. data/ext/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go +1939 -0
  603. data/ext/vendor/golang.org/x/net/webdav/internal/xml/read.go +692 -0
  604. data/ext/vendor/golang.org/x/net/webdav/internal/xml/read_test.go +744 -0
  605. data/ext/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go +371 -0
  606. data/ext/vendor/golang.org/x/net/webdav/internal/xml/xml.go +1998 -0
  607. data/ext/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go +752 -0
  608. data/ext/vendor/golang.org/x/net/webdav/litmus_test_server.go +94 -0
  609. data/ext/vendor/golang.org/x/net/webdav/lock.go +445 -0
  610. data/ext/vendor/golang.org/x/net/webdav/lock_test.go +731 -0
  611. data/ext/vendor/golang.org/x/net/webdav/prop.go +418 -0
  612. data/ext/vendor/golang.org/x/net/webdav/prop_test.go +613 -0
  613. data/ext/vendor/golang.org/x/net/webdav/webdav.go +702 -0
  614. data/ext/vendor/golang.org/x/net/webdav/webdav_test.go +344 -0
  615. data/ext/vendor/golang.org/x/net/webdav/xml.go +519 -0
  616. data/ext/vendor/golang.org/x/net/webdav/xml_test.go +906 -0
  617. data/ext/vendor/golang.org/x/net/websocket/client.go +106 -0
  618. data/ext/vendor/golang.org/x/net/websocket/dial.go +24 -0
  619. data/ext/vendor/golang.org/x/net/websocket/dial_test.go +43 -0
  620. data/ext/vendor/golang.org/x/net/websocket/exampledial_test.go +31 -0
  621. data/ext/vendor/golang.org/x/net/websocket/examplehandler_test.go +26 -0
  622. data/ext/vendor/golang.org/x/net/websocket/hybi.go +583 -0
  623. data/ext/vendor/golang.org/x/net/websocket/hybi_test.go +608 -0
  624. data/ext/vendor/golang.org/x/net/websocket/server.go +113 -0
  625. data/ext/vendor/golang.org/x/net/websocket/websocket.go +448 -0
  626. data/ext/vendor/golang.org/x/net/websocket/websocket_test.go +665 -0
  627. data/ext/vendor/golang.org/x/net/xsrftoken/xsrf.go +94 -0
  628. data/ext/vendor/golang.org/x/net/xsrftoken/xsrf_test.go +83 -0
  629. data/ext/vendor/golang.org/x/text/AUTHORS +3 -0
  630. data/ext/vendor/golang.org/x/text/CONTRIBUTING.md +31 -0
  631. data/ext/vendor/golang.org/x/text/CONTRIBUTORS +3 -0
  632. data/ext/vendor/golang.org/x/text/LICENSE +27 -0
  633. data/ext/vendor/golang.org/x/text/PATENTS +22 -0
  634. data/ext/vendor/golang.org/x/text/README.md +91 -0
  635. data/ext/vendor/golang.org/x/text/cases/cases.go +162 -0
  636. data/ext/vendor/golang.org/x/text/cases/context.go +376 -0
  637. data/ext/vendor/golang.org/x/text/cases/context_test.go +438 -0
  638. data/ext/vendor/golang.org/x/text/cases/example_test.go +53 -0
  639. data/ext/vendor/golang.org/x/text/cases/fold.go +34 -0
  640. data/ext/vendor/golang.org/x/text/cases/fold_test.go +51 -0
  641. data/ext/vendor/golang.org/x/text/cases/gen.go +839 -0
  642. data/ext/vendor/golang.org/x/text/cases/gen_trieval.go +219 -0
  643. data/ext/vendor/golang.org/x/text/cases/icu.go +61 -0
  644. data/ext/vendor/golang.org/x/text/cases/icu_test.go +210 -0
  645. data/ext/vendor/golang.org/x/text/cases/info.go +82 -0
  646. data/ext/vendor/golang.org/x/text/cases/map.go +816 -0
  647. data/ext/vendor/golang.org/x/text/cases/map_test.go +950 -0
  648. data/ext/vendor/golang.org/x/text/cases/tables.go +2251 -0
  649. data/ext/vendor/golang.org/x/text/cases/tables_test.go +1158 -0
  650. data/ext/vendor/golang.org/x/text/cases/trieval.go +215 -0
  651. data/ext/vendor/golang.org/x/text/cmd/gotext/doc.go +35 -0
  652. data/ext/vendor/golang.org/x/text/cmd/gotext/extract.go +195 -0
  653. data/ext/vendor/golang.org/x/text/cmd/gotext/main.go +356 -0
  654. data/ext/vendor/golang.org/x/text/cmd/gotext/message.go +127 -0
  655. data/ext/vendor/golang.org/x/text/codereview.cfg +1 -0
  656. data/ext/vendor/golang.org/x/text/collate/build/builder.go +702 -0
  657. data/ext/vendor/golang.org/x/text/collate/build/builder_test.go +290 -0
  658. data/ext/vendor/golang.org/x/text/collate/build/colelem.go +294 -0
  659. data/ext/vendor/golang.org/x/text/collate/build/colelem_test.go +215 -0
  660. data/ext/vendor/golang.org/x/text/collate/build/contract.go +309 -0
  661. data/ext/vendor/golang.org/x/text/collate/build/contract_test.go +266 -0
  662. data/ext/vendor/golang.org/x/text/collate/build/order.go +393 -0
  663. data/ext/vendor/golang.org/x/text/collate/build/order_test.go +229 -0
  664. data/ext/vendor/golang.org/x/text/collate/build/table.go +81 -0
  665. data/ext/vendor/golang.org/x/text/collate/build/trie.go +290 -0
  666. data/ext/vendor/golang.org/x/text/collate/build/trie_test.go +107 -0
  667. data/ext/vendor/golang.org/x/text/collate/collate.go +403 -0
  668. data/ext/vendor/golang.org/x/text/collate/collate_test.go +482 -0
  669. data/ext/vendor/golang.org/x/text/collate/export_test.go +51 -0
  670. data/ext/vendor/golang.org/x/text/collate/index.go +32 -0
  671. data/ext/vendor/golang.org/x/text/collate/maketables.go +553 -0
  672. data/ext/vendor/golang.org/x/text/collate/option.go +239 -0
  673. data/ext/vendor/golang.org/x/text/collate/option_test.go +209 -0
  674. data/ext/vendor/golang.org/x/text/collate/reg_test.go +230 -0
  675. data/ext/vendor/golang.org/x/text/collate/sort.go +81 -0
  676. data/ext/vendor/golang.org/x/text/collate/sort_test.go +55 -0
  677. data/ext/vendor/golang.org/x/text/collate/table_test.go +291 -0
  678. data/ext/vendor/golang.org/x/text/collate/tables.go +73789 -0
  679. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/Makefile +7 -0
  680. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/chars.go +1156 -0
  681. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/col.go +97 -0
  682. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go +529 -0
  683. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go +111 -0
  684. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/gen.go +183 -0
  685. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/icu.go +209 -0
  686. data/ext/vendor/golang.org/x/text/currency/common.go +66 -0
  687. data/ext/vendor/golang.org/x/text/currency/currency.go +185 -0
  688. data/ext/vendor/golang.org/x/text/currency/currency_test.go +171 -0
  689. data/ext/vendor/golang.org/x/text/currency/example_test.go +27 -0
  690. data/ext/vendor/golang.org/x/text/currency/format.go +215 -0
  691. data/ext/vendor/golang.org/x/text/currency/format_test.go +70 -0
  692. data/ext/vendor/golang.org/x/text/currency/gen.go +400 -0
  693. data/ext/vendor/golang.org/x/text/currency/gen_common.go +70 -0
  694. data/ext/vendor/golang.org/x/text/currency/query.go +152 -0
  695. data/ext/vendor/golang.org/x/text/currency/query_test.go +107 -0
  696. data/ext/vendor/golang.org/x/text/currency/tables.go +2574 -0
  697. data/ext/vendor/golang.org/x/text/currency/tables_test.go +93 -0
  698. data/ext/vendor/golang.org/x/text/doc.go +13 -0
  699. data/ext/vendor/golang.org/x/text/encoding/charmap/charmap.go +249 -0
  700. data/ext/vendor/golang.org/x/text/encoding/charmap/charmap_test.go +258 -0
  701. data/ext/vendor/golang.org/x/text/encoding/charmap/maketables.go +556 -0
  702. data/ext/vendor/golang.org/x/text/encoding/charmap/tables.go +7410 -0
  703. data/ext/vendor/golang.org/x/text/encoding/encoding.go +335 -0
  704. data/ext/vendor/golang.org/x/text/encoding/encoding_test.go +290 -0
  705. data/ext/vendor/golang.org/x/text/encoding/example_test.go +42 -0
  706. data/ext/vendor/golang.org/x/text/encoding/htmlindex/gen.go +173 -0
  707. data/ext/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go +86 -0
  708. data/ext/vendor/golang.org/x/text/encoding/htmlindex/htmlindex_test.go +144 -0
  709. data/ext/vendor/golang.org/x/text/encoding/htmlindex/map.go +105 -0
  710. data/ext/vendor/golang.org/x/text/encoding/htmlindex/tables.go +352 -0
  711. data/ext/vendor/golang.org/x/text/encoding/ianaindex/example_test.go +27 -0
  712. data/ext/vendor/golang.org/x/text/encoding/ianaindex/gen.go +192 -0
  713. data/ext/vendor/golang.org/x/text/encoding/ianaindex/ianaindex.go +209 -0
  714. data/ext/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go +192 -0
  715. data/ext/vendor/golang.org/x/text/encoding/ianaindex/tables.go +2348 -0
  716. data/ext/vendor/golang.org/x/text/encoding/internal/enctest/enctest.go +180 -0
  717. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/gen.go +137 -0
  718. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go +81 -0
  719. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/mib.go +1621 -0
  720. data/ext/vendor/golang.org/x/text/encoding/internal/internal.go +75 -0
  721. data/ext/vendor/golang.org/x/text/encoding/japanese/all.go +12 -0
  722. data/ext/vendor/golang.org/x/text/encoding/japanese/all_test.go +248 -0
  723. data/ext/vendor/golang.org/x/text/encoding/japanese/eucjp.go +225 -0
  724. data/ext/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go +299 -0
  725. data/ext/vendor/golang.org/x/text/encoding/japanese/maketables.go +161 -0
  726. data/ext/vendor/golang.org/x/text/encoding/japanese/shiftjis.go +189 -0
  727. data/ext/vendor/golang.org/x/text/encoding/japanese/tables.go +26971 -0
  728. data/ext/vendor/golang.org/x/text/encoding/korean/all_test.go +94 -0
  729. data/ext/vendor/golang.org/x/text/encoding/korean/euckr.go +177 -0
  730. data/ext/vendor/golang.org/x/text/encoding/korean/maketables.go +143 -0
  731. data/ext/vendor/golang.org/x/text/encoding/korean/tables.go +34152 -0
  732. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go +12 -0
  733. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/all_test.go +143 -0
  734. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go +269 -0
  735. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go +245 -0
  736. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go +161 -0
  737. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go +43999 -0
  738. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-gb18030.txt +510 -0
  739. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-16le.txt +0 -0
  740. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-32be.txt +0 -0
  741. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-8.txt +510 -0
  742. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-windows-1252.txt +510 -0
  743. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-euc-jp.txt +178 -0
  744. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-iso-2022-jp.txt +178 -0
  745. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-shift-jis.txt +178 -0
  746. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-utf-8.txt +178 -0
  747. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt +107 -0
  748. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-utf-8.txt +107 -0
  749. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-gbk.txt +107 -0
  750. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-utf-8.txt +107 -0
  751. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-big5.txt +106 -0
  752. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-utf-8.txt +106 -0
  753. data/ext/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-euc-kr.txt +175 -0
  754. data/ext/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-utf-8.txt +175 -0
  755. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/all_test.go +114 -0
  756. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go +199 -0
  757. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go +140 -0
  758. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go +37142 -0
  759. data/ext/vendor/golang.org/x/text/encoding/unicode/override.go +82 -0
  760. data/ext/vendor/golang.org/x/text/encoding/unicode/unicode.go +434 -0
  761. data/ext/vendor/golang.org/x/text/encoding/unicode/unicode_test.go +499 -0
  762. data/ext/vendor/golang.org/x/text/encoding/unicode/utf32/utf32.go +296 -0
  763. data/ext/vendor/golang.org/x/text/encoding/unicode/utf32/utf32_test.go +248 -0
  764. data/ext/vendor/golang.org/x/text/feature/plural/common.go +70 -0
  765. data/ext/vendor/golang.org/x/text/feature/plural/data_test.go +190 -0
  766. data/ext/vendor/golang.org/x/text/feature/plural/example_test.go +46 -0
  767. data/ext/vendor/golang.org/x/text/feature/plural/gen.go +513 -0
  768. data/ext/vendor/golang.org/x/text/feature/plural/gen_common.go +74 -0
  769. data/ext/vendor/golang.org/x/text/feature/plural/message.go +244 -0
  770. data/ext/vendor/golang.org/x/text/feature/plural/message_test.go +197 -0
  771. data/ext/vendor/golang.org/x/text/feature/plural/plural.go +258 -0
  772. data/ext/vendor/golang.org/x/text/feature/plural/plural_test.go +216 -0
  773. data/ext/vendor/golang.org/x/text/feature/plural/tables.go +540 -0
  774. data/ext/vendor/golang.org/x/text/gen.go +318 -0
  775. data/ext/vendor/golang.org/x/text/internal/catmsg/catmsg.go +366 -0
  776. data/ext/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go +316 -0
  777. data/ext/vendor/golang.org/x/text/internal/catmsg/codec.go +407 -0
  778. data/ext/vendor/golang.org/x/text/internal/catmsg/varint.go +62 -0
  779. data/ext/vendor/golang.org/x/text/internal/catmsg/varint_test.go +123 -0
  780. data/ext/vendor/golang.org/x/text/internal/colltab/collate_test.go +121 -0
  781. data/ext/vendor/golang.org/x/text/internal/colltab/collelem.go +371 -0
  782. data/ext/vendor/golang.org/x/text/internal/colltab/collelem_test.go +183 -0
  783. data/ext/vendor/golang.org/x/text/internal/colltab/colltab.go +105 -0
  784. data/ext/vendor/golang.org/x/text/internal/colltab/colltab_test.go +64 -0
  785. data/ext/vendor/golang.org/x/text/internal/colltab/contract.go +145 -0
  786. data/ext/vendor/golang.org/x/text/internal/colltab/contract_test.go +131 -0
  787. data/ext/vendor/golang.org/x/text/internal/colltab/iter.go +178 -0
  788. data/ext/vendor/golang.org/x/text/internal/colltab/iter_test.go +63 -0
  789. data/ext/vendor/golang.org/x/text/internal/colltab/numeric.go +236 -0
  790. data/ext/vendor/golang.org/x/text/internal/colltab/numeric_test.go +159 -0
  791. data/ext/vendor/golang.org/x/text/internal/colltab/table.go +275 -0
  792. data/ext/vendor/golang.org/x/text/internal/colltab/trie.go +159 -0
  793. data/ext/vendor/golang.org/x/text/internal/colltab/trie_test.go +106 -0
  794. data/ext/vendor/golang.org/x/text/internal/colltab/weighter.go +31 -0
  795. data/ext/vendor/golang.org/x/text/internal/colltab/weighter_test.go +42 -0
  796. data/ext/vendor/golang.org/x/text/internal/export/README +4 -0
  797. data/ext/vendor/golang.org/x/text/internal/export/idna/common_test.go +55 -0
  798. data/ext/vendor/golang.org/x/text/internal/export/idna/example_test.go +68 -0
  799. data/ext/vendor/golang.org/x/text/internal/export/idna/gen.go +276 -0
  800. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_common.go +59 -0
  801. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_test.go +91 -0
  802. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go +123 -0
  803. data/ext/vendor/golang.org/x/text/internal/export/idna/idna.go +717 -0
  804. data/ext/vendor/golang.org/x/text/internal/export/idna/idna_test.go +308 -0
  805. data/ext/vendor/golang.org/x/text/internal/export/idna/punycode.go +201 -0
  806. data/ext/vendor/golang.org/x/text/internal/export/idna/punycode_test.go +198 -0
  807. data/ext/vendor/golang.org/x/text/internal/export/idna/tables.go +4557 -0
  808. data/ext/vendor/golang.org/x/text/internal/export/idna/trie.go +70 -0
  809. data/ext/vendor/golang.org/x/text/internal/export/idna/trieval.go +119 -0
  810. data/ext/vendor/golang.org/x/text/internal/format/format.go +41 -0
  811. data/ext/vendor/golang.org/x/text/internal/gen.go +52 -0
  812. data/ext/vendor/golang.org/x/text/internal/gen/code.go +351 -0
  813. data/ext/vendor/golang.org/x/text/internal/gen/gen.go +281 -0
  814. data/ext/vendor/golang.org/x/text/internal/gen_test.go +38 -0
  815. data/ext/vendor/golang.org/x/text/internal/internal.go +51 -0
  816. data/ext/vendor/golang.org/x/text/internal/internal_test.go +38 -0
  817. data/ext/vendor/golang.org/x/text/internal/match.go +67 -0
  818. data/ext/vendor/golang.org/x/text/internal/match_test.go +56 -0
  819. data/ext/vendor/golang.org/x/text/internal/number/common.go +40 -0
  820. data/ext/vendor/golang.org/x/text/internal/number/decimal.go +498 -0
  821. data/ext/vendor/golang.org/x/text/internal/number/decimal_test.go +329 -0
  822. data/ext/vendor/golang.org/x/text/internal/number/format.go +540 -0
  823. data/ext/vendor/golang.org/x/text/internal/number/format_test.go +522 -0
  824. data/ext/vendor/golang.org/x/text/internal/number/gen.go +458 -0
  825. data/ext/vendor/golang.org/x/text/internal/number/gen_common.go +44 -0
  826. data/ext/vendor/golang.org/x/text/internal/number/number.go +154 -0
  827. data/ext/vendor/golang.org/x/text/internal/number/number_test.go +100 -0
  828. data/ext/vendor/golang.org/x/text/internal/number/pattern.go +485 -0
  829. data/ext/vendor/golang.org/x/text/internal/number/pattern_test.go +438 -0
  830. data/ext/vendor/golang.org/x/text/internal/number/roundingmode_string.go +16 -0
  831. data/ext/vendor/golang.org/x/text/internal/number/tables.go +1154 -0
  832. data/ext/vendor/golang.org/x/text/internal/number/tables_test.go +125 -0
  833. data/ext/vendor/golang.org/x/text/internal/stringset/set.go +86 -0
  834. data/ext/vendor/golang.org/x/text/internal/stringset/set_test.go +53 -0
  835. data/ext/vendor/golang.org/x/text/internal/tables.go +117 -0
  836. data/ext/vendor/golang.org/x/text/internal/tag/tag.go +100 -0
  837. data/ext/vendor/golang.org/x/text/internal/tag/tag_test.go +67 -0
  838. data/ext/vendor/golang.org/x/text/internal/testtext/codesize.go +53 -0
  839. data/ext/vendor/golang.org/x/text/internal/testtext/flag.go +22 -0
  840. data/ext/vendor/golang.org/x/text/internal/testtext/gc.go +14 -0
  841. data/ext/vendor/golang.org/x/text/internal/testtext/gccgo.go +11 -0
  842. data/ext/vendor/golang.org/x/text/internal/testtext/go1_6.go +23 -0
  843. data/ext/vendor/golang.org/x/text/internal/testtext/go1_7.go +17 -0
  844. data/ext/vendor/golang.org/x/text/internal/testtext/text.go +105 -0
  845. data/ext/vendor/golang.org/x/text/internal/triegen/compact.go +58 -0
  846. data/ext/vendor/golang.org/x/text/internal/triegen/data_test.go +875 -0
  847. data/ext/vendor/golang.org/x/text/internal/triegen/example_compact_test.go +71 -0
  848. data/ext/vendor/golang.org/x/text/internal/triegen/example_test.go +148 -0
  849. data/ext/vendor/golang.org/x/text/internal/triegen/gen_test.go +68 -0
  850. data/ext/vendor/golang.org/x/text/internal/triegen/print.go +251 -0
  851. data/ext/vendor/golang.org/x/text/internal/triegen/triegen.go +494 -0
  852. data/ext/vendor/golang.org/x/text/internal/ucd/example_test.go +81 -0
  853. data/ext/vendor/golang.org/x/text/internal/ucd/ucd.go +371 -0
  854. data/ext/vendor/golang.org/x/text/internal/ucd/ucd_test.go +105 -0
  855. data/ext/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go +87 -0
  856. data/ext/vendor/golang.org/x/text/language/Makefile +16 -0
  857. data/ext/vendor/golang.org/x/text/language/common.go +16 -0
  858. data/ext/vendor/golang.org/x/text/language/coverage.go +197 -0
  859. data/ext/vendor/golang.org/x/text/language/coverage_test.go +154 -0
  860. data/ext/vendor/golang.org/x/text/language/display/dict.go +92 -0
  861. data/ext/vendor/golang.org/x/text/language/display/dict_test.go +39 -0
  862. data/ext/vendor/golang.org/x/text/language/display/display.go +420 -0
  863. data/ext/vendor/golang.org/x/text/language/display/display_test.go +705 -0
  864. data/ext/vendor/golang.org/x/text/language/display/examples_test.go +116 -0
  865. data/ext/vendor/golang.org/x/text/language/display/lookup.go +251 -0
  866. data/ext/vendor/golang.org/x/text/language/display/maketables.go +602 -0
  867. data/ext/vendor/golang.org/x/text/language/display/tables.go +50344 -0
  868. data/ext/vendor/golang.org/x/text/language/doc.go +102 -0
  869. data/ext/vendor/golang.org/x/text/language/examples_test.go +413 -0
  870. data/ext/vendor/golang.org/x/text/language/gen.go +1706 -0
  871. data/ext/vendor/golang.org/x/text/language/gen_common.go +20 -0
  872. data/ext/vendor/golang.org/x/text/language/gen_index.go +162 -0
  873. data/ext/vendor/golang.org/x/text/language/go1_1.go +38 -0
  874. data/ext/vendor/golang.org/x/text/language/go1_2.go +11 -0
  875. data/ext/vendor/golang.org/x/text/language/httpexample_test.go +48 -0
  876. data/ext/vendor/golang.org/x/text/language/index.go +769 -0
  877. data/ext/vendor/golang.org/x/text/language/language.go +887 -0
  878. data/ext/vendor/golang.org/x/text/language/language_test.go +878 -0
  879. data/ext/vendor/golang.org/x/text/language/lookup.go +396 -0
  880. data/ext/vendor/golang.org/x/text/language/lookup_test.go +457 -0
  881. data/ext/vendor/golang.org/x/text/language/match.go +933 -0
  882. data/ext/vendor/golang.org/x/text/language/match_test.go +505 -0
  883. data/ext/vendor/golang.org/x/text/language/parse.go +859 -0
  884. data/ext/vendor/golang.org/x/text/language/parse_test.go +517 -0
  885. data/ext/vendor/golang.org/x/text/language/tables.go +3675 -0
  886. data/ext/vendor/golang.org/x/text/language/tags.go +143 -0
  887. data/ext/vendor/golang.org/x/text/language/testdata/CLDRLocaleMatcherTest.txt +389 -0
  888. data/ext/vendor/golang.org/x/text/language/testdata/GoLocaleMatcherTest.txt +226 -0
  889. data/ext/vendor/golang.org/x/text/message/catalog.go +28 -0
  890. data/ext/vendor/golang.org/x/text/message/catalog/catalog.go +292 -0
  891. data/ext/vendor/golang.org/x/text/message/catalog/catalog_test.go +194 -0
  892. data/ext/vendor/golang.org/x/text/message/catalog/dict.go +90 -0
  893. data/ext/vendor/golang.org/x/text/message/doc.go +100 -0
  894. data/ext/vendor/golang.org/x/text/message/examples_test.go +42 -0
  895. data/ext/vendor/golang.org/x/text/message/fmt_test.go +1889 -0
  896. data/ext/vendor/golang.org/x/text/message/format.go +532 -0
  897. data/ext/vendor/golang.org/x/text/message/message.go +169 -0
  898. data/ext/vendor/golang.org/x/text/message/message_test.go +181 -0
  899. data/ext/vendor/golang.org/x/text/message/print.go +1194 -0
  900. data/ext/vendor/golang.org/x/text/number/doc.go +28 -0
  901. data/ext/vendor/golang.org/x/text/number/examples_test.go +28 -0
  902. data/ext/vendor/golang.org/x/text/number/format.go +122 -0
  903. data/ext/vendor/golang.org/x/text/number/format_test.go +107 -0
  904. data/ext/vendor/golang.org/x/text/number/number.go +77 -0
  905. data/ext/vendor/golang.org/x/text/number/number_test.go +190 -0
  906. data/ext/vendor/golang.org/x/text/number/option.go +177 -0
  907. data/ext/vendor/golang.org/x/text/runes/cond.go +187 -0
  908. data/ext/vendor/golang.org/x/text/runes/cond_test.go +282 -0
  909. data/ext/vendor/golang.org/x/text/runes/example_test.go +60 -0
  910. data/ext/vendor/golang.org/x/text/runes/runes.go +355 -0
  911. data/ext/vendor/golang.org/x/text/runes/runes_test.go +664 -0
  912. data/ext/vendor/golang.org/x/text/search/index.go +35 -0
  913. data/ext/vendor/golang.org/x/text/search/pattern.go +155 -0
  914. data/ext/vendor/golang.org/x/text/search/pattern_test.go +357 -0
  915. data/ext/vendor/golang.org/x/text/search/search.go +237 -0
  916. data/ext/vendor/golang.org/x/text/search/tables.go +12448 -0
  917. data/ext/vendor/golang.org/x/text/secure/bidirule/bench_test.go +54 -0
  918. data/ext/vendor/golang.org/x/text/secure/bidirule/bidirule.go +340 -0
  919. data/ext/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go +851 -0
  920. data/ext/vendor/golang.org/x/text/secure/doc.go +6 -0
  921. data/ext/vendor/golang.org/x/text/secure/precis/benchmark_test.go +82 -0
  922. data/ext/vendor/golang.org/x/text/secure/precis/class.go +36 -0
  923. data/ext/vendor/golang.org/x/text/secure/precis/class_test.go +50 -0
  924. data/ext/vendor/golang.org/x/text/secure/precis/context.go +139 -0
  925. data/ext/vendor/golang.org/x/text/secure/precis/doc.go +14 -0
  926. data/ext/vendor/golang.org/x/text/secure/precis/enforce_test.go +396 -0
  927. data/ext/vendor/golang.org/x/text/secure/precis/gen.go +310 -0
  928. data/ext/vendor/golang.org/x/text/secure/precis/gen_trieval.go +68 -0
  929. data/ext/vendor/golang.org/x/text/secure/precis/nickname.go +72 -0
  930. data/ext/vendor/golang.org/x/text/secure/precis/options.go +157 -0
  931. data/ext/vendor/golang.org/x/text/secure/precis/profile.go +402 -0
  932. data/ext/vendor/golang.org/x/text/secure/precis/profile_test.go +149 -0
  933. data/ext/vendor/golang.org/x/text/secure/precis/profiles.go +78 -0
  934. data/ext/vendor/golang.org/x/text/secure/precis/tables.go +3887 -0
  935. data/ext/vendor/golang.org/x/text/secure/precis/tables_test.go +69 -0
  936. data/ext/vendor/golang.org/x/text/secure/precis/transformer.go +32 -0
  937. data/ext/vendor/golang.org/x/text/secure/precis/trieval.go +64 -0
  938. data/ext/vendor/golang.org/x/text/transform/examples_test.go +37 -0
  939. data/ext/vendor/golang.org/x/text/transform/transform.go +705 -0
  940. data/ext/vendor/golang.org/x/text/transform/transform_test.go +1317 -0
  941. data/ext/vendor/golang.org/x/text/unicode/bidi/bidi.go +198 -0
  942. data/ext/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  943. data/ext/vendor/golang.org/x/text/unicode/bidi/core.go +1058 -0
  944. data/ext/vendor/golang.org/x/text/unicode/bidi/core_test.go +224 -0
  945. data/ext/vendor/golang.org/x/text/unicode/bidi/gen.go +133 -0
  946. data/ext/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go +57 -0
  947. data/ext/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go +64 -0
  948. data/ext/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  949. data/ext/vendor/golang.org/x/text/unicode/bidi/ranges_test.go +53 -0
  950. data/ext/vendor/golang.org/x/text/unicode/bidi/tables.go +1813 -0
  951. data/ext/vendor/golang.org/x/text/unicode/bidi/tables_test.go +82 -0
  952. data/ext/vendor/golang.org/x/text/unicode/bidi/trieval.go +60 -0
  953. data/ext/vendor/golang.org/x/text/unicode/cldr/base.go +100 -0
  954. data/ext/vendor/golang.org/x/text/unicode/cldr/cldr.go +130 -0
  955. data/ext/vendor/golang.org/x/text/unicode/cldr/cldr_test.go +27 -0
  956. data/ext/vendor/golang.org/x/text/unicode/cldr/collate.go +359 -0
  957. data/ext/vendor/golang.org/x/text/unicode/cldr/collate_test.go +275 -0
  958. data/ext/vendor/golang.org/x/text/unicode/cldr/data_test.go +186 -0
  959. data/ext/vendor/golang.org/x/text/unicode/cldr/decode.go +171 -0
  960. data/ext/vendor/golang.org/x/text/unicode/cldr/examples_test.go +21 -0
  961. data/ext/vendor/golang.org/x/text/unicode/cldr/makexml.go +400 -0
  962. data/ext/vendor/golang.org/x/text/unicode/cldr/resolve.go +602 -0
  963. data/ext/vendor/golang.org/x/text/unicode/cldr/resolve_test.go +368 -0
  964. data/ext/vendor/golang.org/x/text/unicode/cldr/slice.go +144 -0
  965. data/ext/vendor/golang.org/x/text/unicode/cldr/slice_test.go +175 -0
  966. data/ext/vendor/golang.org/x/text/unicode/cldr/xml.go +1487 -0
  967. data/ext/vendor/golang.org/x/text/unicode/doc.go +8 -0
  968. data/ext/vendor/golang.org/x/text/unicode/norm/composition.go +508 -0
  969. data/ext/vendor/golang.org/x/text/unicode/norm/composition_test.go +130 -0
  970. data/ext/vendor/golang.org/x/text/unicode/norm/example_iter_test.go +82 -0
  971. data/ext/vendor/golang.org/x/text/unicode/norm/example_test.go +27 -0
  972. data/ext/vendor/golang.org/x/text/unicode/norm/forminfo.go +259 -0
  973. data/ext/vendor/golang.org/x/text/unicode/norm/forminfo_test.go +54 -0
  974. data/ext/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  975. data/ext/vendor/golang.org/x/text/unicode/norm/iter.go +457 -0
  976. data/ext/vendor/golang.org/x/text/unicode/norm/iter_test.go +98 -0
  977. data/ext/vendor/golang.org/x/text/unicode/norm/maketables.go +976 -0
  978. data/ext/vendor/golang.org/x/text/unicode/norm/norm_test.go +14 -0
  979. data/ext/vendor/golang.org/x/text/unicode/norm/normalize.go +609 -0
  980. data/ext/vendor/golang.org/x/text/unicode/norm/normalize_test.go +1287 -0
  981. data/ext/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  982. data/ext/vendor/golang.org/x/text/unicode/norm/readwriter_test.go +56 -0
  983. data/ext/vendor/golang.org/x/text/unicode/norm/tables.go +7651 -0
  984. data/ext/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  985. data/ext/vendor/golang.org/x/text/unicode/norm/transform_test.go +101 -0
  986. data/ext/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  987. data/ext/vendor/golang.org/x/text/unicode/norm/triegen.go +117 -0
  988. data/ext/vendor/golang.org/x/text/unicode/norm/ucd_test.go +275 -0
  989. data/ext/vendor/golang.org/x/text/unicode/rangetable/gen.go +115 -0
  990. data/ext/vendor/golang.org/x/text/unicode/rangetable/merge.go +260 -0
  991. data/ext/vendor/golang.org/x/text/unicode/rangetable/merge_test.go +184 -0
  992. data/ext/vendor/golang.org/x/text/unicode/rangetable/rangetable.go +70 -0
  993. data/ext/vendor/golang.org/x/text/unicode/rangetable/rangetable_test.go +55 -0
  994. data/ext/vendor/golang.org/x/text/unicode/rangetable/tables.go +6376 -0
  995. data/ext/vendor/golang.org/x/text/unicode/runenames/bits.go +59 -0
  996. data/ext/vendor/golang.org/x/text/unicode/runenames/example_test.go +118 -0
  997. data/ext/vendor/golang.org/x/text/unicode/runenames/gen.go +195 -0
  998. data/ext/vendor/golang.org/x/text/unicode/runenames/gen_bits.go +63 -0
  999. data/ext/vendor/golang.org/x/text/unicode/runenames/runenames.go +48 -0
  1000. data/ext/vendor/golang.org/x/text/unicode/runenames/runenames_test.go +46 -0
  1001. data/ext/vendor/golang.org/x/text/unicode/runenames/tables.go +15514 -0
  1002. data/ext/vendor/golang.org/x/text/width/common_test.go +92 -0
  1003. data/ext/vendor/golang.org/x/text/width/example_test.go +52 -0
  1004. data/ext/vendor/golang.org/x/text/width/gen.go +115 -0
  1005. data/ext/vendor/golang.org/x/text/width/gen_common.go +96 -0
  1006. data/ext/vendor/golang.org/x/text/width/gen_trieval.go +34 -0
  1007. data/ext/vendor/golang.org/x/text/width/kind_string.go +16 -0
  1008. data/ext/vendor/golang.org/x/text/width/runes_test.go +461 -0
  1009. data/ext/vendor/golang.org/x/text/width/tables.go +1316 -0
  1010. data/ext/vendor/golang.org/x/text/width/tables_test.go +59 -0
  1011. data/ext/vendor/golang.org/x/text/width/transform.go +239 -0
  1012. data/ext/vendor/golang.org/x/text/width/transform_test.go +701 -0
  1013. data/ext/vendor/golang.org/x/text/width/trieval.go +30 -0
  1014. data/ext/vendor/golang.org/x/text/width/width.go +206 -0
  1015. data/lib/ires/version.rb +1 -1
  1016. data/shared/darwin/ires.so +0 -0
  1017. data/shared/linux/ires.so +0 -0
  1018. metadata +1011 -23
  1019. data/ext/operate/image.go +0 -176
  1020. data/ext/util/uri/uri.go +0 -105
  1021. data/ext/vendor/github.com/satori/go.uuid/README.md +0 -65
  1022. data/ext/vendor/github.com/satori/go.uuid/benchmarks_test.go +0 -121
  1023. data/ext/vendor/github.com/satori/go.uuid/uuid.go +0 -488
  1024. data/ext/vendor/github.com/satori/go.uuid/uuid_test.go +0 -633
@@ -0,0 +1,371 @@
1
+ // Copyright 2011 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ package xml
6
+
7
+ import (
8
+ "fmt"
9
+ "reflect"
10
+ "strings"
11
+ "sync"
12
+ )
13
+
14
+ // typeInfo holds details for the xml representation of a type.
15
+ type typeInfo struct {
16
+ xmlname *fieldInfo
17
+ fields []fieldInfo
18
+ }
19
+
20
+ // fieldInfo holds details for the xml representation of a single field.
21
+ type fieldInfo struct {
22
+ idx []int
23
+ name string
24
+ xmlns string
25
+ flags fieldFlags
26
+ parents []string
27
+ }
28
+
29
+ type fieldFlags int
30
+
31
+ const (
32
+ fElement fieldFlags = 1 << iota
33
+ fAttr
34
+ fCharData
35
+ fInnerXml
36
+ fComment
37
+ fAny
38
+
39
+ fOmitEmpty
40
+
41
+ fMode = fElement | fAttr | fCharData | fInnerXml | fComment | fAny
42
+ )
43
+
44
+ var tinfoMap = make(map[reflect.Type]*typeInfo)
45
+ var tinfoLock sync.RWMutex
46
+
47
+ var nameType = reflect.TypeOf(Name{})
48
+
49
+ // getTypeInfo returns the typeInfo structure with details necessary
50
+ // for marshalling and unmarshalling typ.
51
+ func getTypeInfo(typ reflect.Type) (*typeInfo, error) {
52
+ tinfoLock.RLock()
53
+ tinfo, ok := tinfoMap[typ]
54
+ tinfoLock.RUnlock()
55
+ if ok {
56
+ return tinfo, nil
57
+ }
58
+ tinfo = &typeInfo{}
59
+ if typ.Kind() == reflect.Struct && typ != nameType {
60
+ n := typ.NumField()
61
+ for i := 0; i < n; i++ {
62
+ f := typ.Field(i)
63
+ if f.PkgPath != "" || f.Tag.Get("xml") == "-" {
64
+ continue // Private field
65
+ }
66
+
67
+ // For embedded structs, embed its fields.
68
+ if f.Anonymous {
69
+ t := f.Type
70
+ if t.Kind() == reflect.Ptr {
71
+ t = t.Elem()
72
+ }
73
+ if t.Kind() == reflect.Struct {
74
+ inner, err := getTypeInfo(t)
75
+ if err != nil {
76
+ return nil, err
77
+ }
78
+ if tinfo.xmlname == nil {
79
+ tinfo.xmlname = inner.xmlname
80
+ }
81
+ for _, finfo := range inner.fields {
82
+ finfo.idx = append([]int{i}, finfo.idx...)
83
+ if err := addFieldInfo(typ, tinfo, &finfo); err != nil {
84
+ return nil, err
85
+ }
86
+ }
87
+ continue
88
+ }
89
+ }
90
+
91
+ finfo, err := structFieldInfo(typ, &f)
92
+ if err != nil {
93
+ return nil, err
94
+ }
95
+
96
+ if f.Name == "XMLName" {
97
+ tinfo.xmlname = finfo
98
+ continue
99
+ }
100
+
101
+ // Add the field if it doesn't conflict with other fields.
102
+ if err := addFieldInfo(typ, tinfo, finfo); err != nil {
103
+ return nil, err
104
+ }
105
+ }
106
+ }
107
+ tinfoLock.Lock()
108
+ tinfoMap[typ] = tinfo
109
+ tinfoLock.Unlock()
110
+ return tinfo, nil
111
+ }
112
+
113
+ // structFieldInfo builds and returns a fieldInfo for f.
114
+ func structFieldInfo(typ reflect.Type, f *reflect.StructField) (*fieldInfo, error) {
115
+ finfo := &fieldInfo{idx: f.Index}
116
+
117
+ // Split the tag from the xml namespace if necessary.
118
+ tag := f.Tag.Get("xml")
119
+ if i := strings.Index(tag, " "); i >= 0 {
120
+ finfo.xmlns, tag = tag[:i], tag[i+1:]
121
+ }
122
+
123
+ // Parse flags.
124
+ tokens := strings.Split(tag, ",")
125
+ if len(tokens) == 1 {
126
+ finfo.flags = fElement
127
+ } else {
128
+ tag = tokens[0]
129
+ for _, flag := range tokens[1:] {
130
+ switch flag {
131
+ case "attr":
132
+ finfo.flags |= fAttr
133
+ case "chardata":
134
+ finfo.flags |= fCharData
135
+ case "innerxml":
136
+ finfo.flags |= fInnerXml
137
+ case "comment":
138
+ finfo.flags |= fComment
139
+ case "any":
140
+ finfo.flags |= fAny
141
+ case "omitempty":
142
+ finfo.flags |= fOmitEmpty
143
+ }
144
+ }
145
+
146
+ // Validate the flags used.
147
+ valid := true
148
+ switch mode := finfo.flags & fMode; mode {
149
+ case 0:
150
+ finfo.flags |= fElement
151
+ case fAttr, fCharData, fInnerXml, fComment, fAny:
152
+ if f.Name == "XMLName" || tag != "" && mode != fAttr {
153
+ valid = false
154
+ }
155
+ default:
156
+ // This will also catch multiple modes in a single field.
157
+ valid = false
158
+ }
159
+ if finfo.flags&fMode == fAny {
160
+ finfo.flags |= fElement
161
+ }
162
+ if finfo.flags&fOmitEmpty != 0 && finfo.flags&(fElement|fAttr) == 0 {
163
+ valid = false
164
+ }
165
+ if !valid {
166
+ return nil, fmt.Errorf("xml: invalid tag in field %s of type %s: %q",
167
+ f.Name, typ, f.Tag.Get("xml"))
168
+ }
169
+ }
170
+
171
+ // Use of xmlns without a name is not allowed.
172
+ if finfo.xmlns != "" && tag == "" {
173
+ return nil, fmt.Errorf("xml: namespace without name in field %s of type %s: %q",
174
+ f.Name, typ, f.Tag.Get("xml"))
175
+ }
176
+
177
+ if f.Name == "XMLName" {
178
+ // The XMLName field records the XML element name. Don't
179
+ // process it as usual because its name should default to
180
+ // empty rather than to the field name.
181
+ finfo.name = tag
182
+ return finfo, nil
183
+ }
184
+
185
+ if tag == "" {
186
+ // If the name part of the tag is completely empty, get
187
+ // default from XMLName of underlying struct if feasible,
188
+ // or field name otherwise.
189
+ if xmlname := lookupXMLName(f.Type); xmlname != nil {
190
+ finfo.xmlns, finfo.name = xmlname.xmlns, xmlname.name
191
+ } else {
192
+ finfo.name = f.Name
193
+ }
194
+ return finfo, nil
195
+ }
196
+
197
+ if finfo.xmlns == "" && finfo.flags&fAttr == 0 {
198
+ // If it's an element no namespace specified, get the default
199
+ // from the XMLName of enclosing struct if possible.
200
+ if xmlname := lookupXMLName(typ); xmlname != nil {
201
+ finfo.xmlns = xmlname.xmlns
202
+ }
203
+ }
204
+
205
+ // Prepare field name and parents.
206
+ parents := strings.Split(tag, ">")
207
+ if parents[0] == "" {
208
+ parents[0] = f.Name
209
+ }
210
+ if parents[len(parents)-1] == "" {
211
+ return nil, fmt.Errorf("xml: trailing '>' in field %s of type %s", f.Name, typ)
212
+ }
213
+ finfo.name = parents[len(parents)-1]
214
+ if len(parents) > 1 {
215
+ if (finfo.flags & fElement) == 0 {
216
+ return nil, fmt.Errorf("xml: %s chain not valid with %s flag", tag, strings.Join(tokens[1:], ","))
217
+ }
218
+ finfo.parents = parents[:len(parents)-1]
219
+ }
220
+
221
+ // If the field type has an XMLName field, the names must match
222
+ // so that the behavior of both marshalling and unmarshalling
223
+ // is straightforward and unambiguous.
224
+ if finfo.flags&fElement != 0 {
225
+ ftyp := f.Type
226
+ xmlname := lookupXMLName(ftyp)
227
+ if xmlname != nil && xmlname.name != finfo.name {
228
+ return nil, fmt.Errorf("xml: name %q in tag of %s.%s conflicts with name %q in %s.XMLName",
229
+ finfo.name, typ, f.Name, xmlname.name, ftyp)
230
+ }
231
+ }
232
+ return finfo, nil
233
+ }
234
+
235
+ // lookupXMLName returns the fieldInfo for typ's XMLName field
236
+ // in case it exists and has a valid xml field tag, otherwise
237
+ // it returns nil.
238
+ func lookupXMLName(typ reflect.Type) (xmlname *fieldInfo) {
239
+ for typ.Kind() == reflect.Ptr {
240
+ typ = typ.Elem()
241
+ }
242
+ if typ.Kind() != reflect.Struct {
243
+ return nil
244
+ }
245
+ for i, n := 0, typ.NumField(); i < n; i++ {
246
+ f := typ.Field(i)
247
+ if f.Name != "XMLName" {
248
+ continue
249
+ }
250
+ finfo, err := structFieldInfo(typ, &f)
251
+ if finfo.name != "" && err == nil {
252
+ return finfo
253
+ }
254
+ // Also consider errors as a non-existent field tag
255
+ // and let getTypeInfo itself report the error.
256
+ break
257
+ }
258
+ return nil
259
+ }
260
+
261
+ func min(a, b int) int {
262
+ if a <= b {
263
+ return a
264
+ }
265
+ return b
266
+ }
267
+
268
+ // addFieldInfo adds finfo to tinfo.fields if there are no
269
+ // conflicts, or if conflicts arise from previous fields that were
270
+ // obtained from deeper embedded structures than finfo. In the latter
271
+ // case, the conflicting entries are dropped.
272
+ // A conflict occurs when the path (parent + name) to a field is
273
+ // itself a prefix of another path, or when two paths match exactly.
274
+ // It is okay for field paths to share a common, shorter prefix.
275
+ func addFieldInfo(typ reflect.Type, tinfo *typeInfo, newf *fieldInfo) error {
276
+ var conflicts []int
277
+ Loop:
278
+ // First, figure all conflicts. Most working code will have none.
279
+ for i := range tinfo.fields {
280
+ oldf := &tinfo.fields[i]
281
+ if oldf.flags&fMode != newf.flags&fMode {
282
+ continue
283
+ }
284
+ if oldf.xmlns != "" && newf.xmlns != "" && oldf.xmlns != newf.xmlns {
285
+ continue
286
+ }
287
+ minl := min(len(newf.parents), len(oldf.parents))
288
+ for p := 0; p < minl; p++ {
289
+ if oldf.parents[p] != newf.parents[p] {
290
+ continue Loop
291
+ }
292
+ }
293
+ if len(oldf.parents) > len(newf.parents) {
294
+ if oldf.parents[len(newf.parents)] == newf.name {
295
+ conflicts = append(conflicts, i)
296
+ }
297
+ } else if len(oldf.parents) < len(newf.parents) {
298
+ if newf.parents[len(oldf.parents)] == oldf.name {
299
+ conflicts = append(conflicts, i)
300
+ }
301
+ } else {
302
+ if newf.name == oldf.name {
303
+ conflicts = append(conflicts, i)
304
+ }
305
+ }
306
+ }
307
+ // Without conflicts, add the new field and return.
308
+ if conflicts == nil {
309
+ tinfo.fields = append(tinfo.fields, *newf)
310
+ return nil
311
+ }
312
+
313
+ // If any conflict is shallower, ignore the new field.
314
+ // This matches the Go field resolution on embedding.
315
+ for _, i := range conflicts {
316
+ if len(tinfo.fields[i].idx) < len(newf.idx) {
317
+ return nil
318
+ }
319
+ }
320
+
321
+ // Otherwise, if any of them is at the same depth level, it's an error.
322
+ for _, i := range conflicts {
323
+ oldf := &tinfo.fields[i]
324
+ if len(oldf.idx) == len(newf.idx) {
325
+ f1 := typ.FieldByIndex(oldf.idx)
326
+ f2 := typ.FieldByIndex(newf.idx)
327
+ return &TagPathError{typ, f1.Name, f1.Tag.Get("xml"), f2.Name, f2.Tag.Get("xml")}
328
+ }
329
+ }
330
+
331
+ // Otherwise, the new field is shallower, and thus takes precedence,
332
+ // so drop the conflicting fields from tinfo and append the new one.
333
+ for c := len(conflicts) - 1; c >= 0; c-- {
334
+ i := conflicts[c]
335
+ copy(tinfo.fields[i:], tinfo.fields[i+1:])
336
+ tinfo.fields = tinfo.fields[:len(tinfo.fields)-1]
337
+ }
338
+ tinfo.fields = append(tinfo.fields, *newf)
339
+ return nil
340
+ }
341
+
342
+ // A TagPathError represents an error in the unmarshalling process
343
+ // caused by the use of field tags with conflicting paths.
344
+ type TagPathError struct {
345
+ Struct reflect.Type
346
+ Field1, Tag1 string
347
+ Field2, Tag2 string
348
+ }
349
+
350
+ func (e *TagPathError) Error() string {
351
+ return fmt.Sprintf("%s field %q with tag %q conflicts with field %q with tag %q", e.Struct, e.Field1, e.Tag1, e.Field2, e.Tag2)
352
+ }
353
+
354
+ // value returns v's field value corresponding to finfo.
355
+ // It's equivalent to v.FieldByIndex(finfo.idx), but initializes
356
+ // and dereferences pointers as necessary.
357
+ func (finfo *fieldInfo) value(v reflect.Value) reflect.Value {
358
+ for i, x := range finfo.idx {
359
+ if i > 0 {
360
+ t := v.Type()
361
+ if t.Kind() == reflect.Ptr && t.Elem().Kind() == reflect.Struct {
362
+ if v.IsNil() {
363
+ v.Set(reflect.New(v.Type().Elem()))
364
+ }
365
+ v = v.Elem()
366
+ }
367
+ }
368
+ v = v.Field(x)
369
+ }
370
+ return v
371
+ }
@@ -0,0 +1,1998 @@
1
+ // Copyright 2009 The Go Authors. All rights reserved.
2
+ // Use of this source code is governed by a BSD-style
3
+ // license that can be found in the LICENSE file.
4
+
5
+ // Package xml implements a simple XML 1.0 parser that
6
+ // understands XML name spaces.
7
+ package xml
8
+
9
+ // References:
10
+ // Annotated XML spec: http://www.xml.com/axml/testaxml.htm
11
+ // XML name spaces: http://www.w3.org/TR/REC-xml-names/
12
+
13
+ // TODO(rsc):
14
+ // Test error handling.
15
+
16
+ import (
17
+ "bufio"
18
+ "bytes"
19
+ "errors"
20
+ "fmt"
21
+ "io"
22
+ "strconv"
23
+ "strings"
24
+ "unicode"
25
+ "unicode/utf8"
26
+ )
27
+
28
+ // A SyntaxError represents a syntax error in the XML input stream.
29
+ type SyntaxError struct {
30
+ Msg string
31
+ Line int
32
+ }
33
+
34
+ func (e *SyntaxError) Error() string {
35
+ return "XML syntax error on line " + strconv.Itoa(e.Line) + ": " + e.Msg
36
+ }
37
+
38
+ // A Name represents an XML name (Local) annotated with a name space
39
+ // identifier (Space). In tokens returned by Decoder.Token, the Space
40
+ // identifier is given as a canonical URL, not the short prefix used in
41
+ // the document being parsed.
42
+ //
43
+ // As a special case, XML namespace declarations will use the literal
44
+ // string "xmlns" for the Space field instead of the fully resolved URL.
45
+ // See Encoder.EncodeToken for more information on namespace encoding
46
+ // behaviour.
47
+ type Name struct {
48
+ Space, Local string
49
+ }
50
+
51
+ // isNamespace reports whether the name is a namespace-defining name.
52
+ func (name Name) isNamespace() bool {
53
+ return name.Local == "xmlns" || name.Space == "xmlns"
54
+ }
55
+
56
+ // An Attr represents an attribute in an XML element (Name=Value).
57
+ type Attr struct {
58
+ Name Name
59
+ Value string
60
+ }
61
+
62
+ // A Token is an interface holding one of the token types:
63
+ // StartElement, EndElement, CharData, Comment, ProcInst, or Directive.
64
+ type Token interface{}
65
+
66
+ // A StartElement represents an XML start element.
67
+ type StartElement struct {
68
+ Name Name
69
+ Attr []Attr
70
+ }
71
+
72
+ func (e StartElement) Copy() StartElement {
73
+ attrs := make([]Attr, len(e.Attr))
74
+ copy(attrs, e.Attr)
75
+ e.Attr = attrs
76
+ return e
77
+ }
78
+
79
+ // End returns the corresponding XML end element.
80
+ func (e StartElement) End() EndElement {
81
+ return EndElement{e.Name}
82
+ }
83
+
84
+ // setDefaultNamespace sets the namespace of the element
85
+ // as the default for all elements contained within it.
86
+ func (e *StartElement) setDefaultNamespace() {
87
+ if e.Name.Space == "" {
88
+ // If there's no namespace on the element, don't
89
+ // set the default. Strictly speaking this might be wrong, as
90
+ // we can't tell if the element had no namespace set
91
+ // or was just using the default namespace.
92
+ return
93
+ }
94
+ // Don't add a default name space if there's already one set.
95
+ for _, attr := range e.Attr {
96
+ if attr.Name.Space == "" && attr.Name.Local == "xmlns" {
97
+ return
98
+ }
99
+ }
100
+ e.Attr = append(e.Attr, Attr{
101
+ Name: Name{
102
+ Local: "xmlns",
103
+ },
104
+ Value: e.Name.Space,
105
+ })
106
+ }
107
+
108
+ // An EndElement represents an XML end element.
109
+ type EndElement struct {
110
+ Name Name
111
+ }
112
+
113
+ // A CharData represents XML character data (raw text),
114
+ // in which XML escape sequences have been replaced by
115
+ // the characters they represent.
116
+ type CharData []byte
117
+
118
+ func makeCopy(b []byte) []byte {
119
+ b1 := make([]byte, len(b))
120
+ copy(b1, b)
121
+ return b1
122
+ }
123
+
124
+ func (c CharData) Copy() CharData { return CharData(makeCopy(c)) }
125
+
126
+ // A Comment represents an XML comment of the form <!--comment-->.
127
+ // The bytes do not include the <!-- and --> comment markers.
128
+ type Comment []byte
129
+
130
+ func (c Comment) Copy() Comment { return Comment(makeCopy(c)) }
131
+
132
+ // A ProcInst represents an XML processing instruction of the form <?target inst?>
133
+ type ProcInst struct {
134
+ Target string
135
+ Inst []byte
136
+ }
137
+
138
+ func (p ProcInst) Copy() ProcInst {
139
+ p.Inst = makeCopy(p.Inst)
140
+ return p
141
+ }
142
+
143
+ // A Directive represents an XML directive of the form <!text>.
144
+ // The bytes do not include the <! and > markers.
145
+ type Directive []byte
146
+
147
+ func (d Directive) Copy() Directive { return Directive(makeCopy(d)) }
148
+
149
+ // CopyToken returns a copy of a Token.
150
+ func CopyToken(t Token) Token {
151
+ switch v := t.(type) {
152
+ case CharData:
153
+ return v.Copy()
154
+ case Comment:
155
+ return v.Copy()
156
+ case Directive:
157
+ return v.Copy()
158
+ case ProcInst:
159
+ return v.Copy()
160
+ case StartElement:
161
+ return v.Copy()
162
+ }
163
+ return t
164
+ }
165
+
166
+ // A Decoder represents an XML parser reading a particular input stream.
167
+ // The parser assumes that its input is encoded in UTF-8.
168
+ type Decoder struct {
169
+ // Strict defaults to true, enforcing the requirements
170
+ // of the XML specification.
171
+ // If set to false, the parser allows input containing common
172
+ // mistakes:
173
+ // * If an element is missing an end tag, the parser invents
174
+ // end tags as necessary to keep the return values from Token
175
+ // properly balanced.
176
+ // * In attribute values and character data, unknown or malformed
177
+ // character entities (sequences beginning with &) are left alone.
178
+ //
179
+ // Setting:
180
+ //
181
+ // d.Strict = false;
182
+ // d.AutoClose = HTMLAutoClose;
183
+ // d.Entity = HTMLEntity
184
+ //
185
+ // creates a parser that can handle typical HTML.
186
+ //
187
+ // Strict mode does not enforce the requirements of the XML name spaces TR.
188
+ // In particular it does not reject name space tags using undefined prefixes.
189
+ // Such tags are recorded with the unknown prefix as the name space URL.
190
+ Strict bool
191
+
192
+ // When Strict == false, AutoClose indicates a set of elements to
193
+ // consider closed immediately after they are opened, regardless
194
+ // of whether an end element is present.
195
+ AutoClose []string
196
+
197
+ // Entity can be used to map non-standard entity names to string replacements.
198
+ // The parser behaves as if these standard mappings are present in the map,
199
+ // regardless of the actual map content:
200
+ //
201
+ // "lt": "<",
202
+ // "gt": ">",
203
+ // "amp": "&",
204
+ // "apos": "'",
205
+ // "quot": `"`,
206
+ Entity map[string]string
207
+
208
+ // CharsetReader, if non-nil, defines a function to generate
209
+ // charset-conversion readers, converting from the provided
210
+ // non-UTF-8 charset into UTF-8. If CharsetReader is nil or
211
+ // returns an error, parsing stops with an error. One of the
212
+ // the CharsetReader's result values must be non-nil.
213
+ CharsetReader func(charset string, input io.Reader) (io.Reader, error)
214
+
215
+ // DefaultSpace sets the default name space used for unadorned tags,
216
+ // as if the entire XML stream were wrapped in an element containing
217
+ // the attribute xmlns="DefaultSpace".
218
+ DefaultSpace string
219
+
220
+ r io.ByteReader
221
+ buf bytes.Buffer
222
+ saved *bytes.Buffer
223
+ stk *stack
224
+ free *stack
225
+ needClose bool
226
+ toClose Name
227
+ nextToken Token
228
+ nextByte int
229
+ ns map[string]string
230
+ err error
231
+ line int
232
+ offset int64
233
+ unmarshalDepth int
234
+ }
235
+
236
+ // NewDecoder creates a new XML parser reading from r.
237
+ // If r does not implement io.ByteReader, NewDecoder will
238
+ // do its own buffering.
239
+ func NewDecoder(r io.Reader) *Decoder {
240
+ d := &Decoder{
241
+ ns: make(map[string]string),
242
+ nextByte: -1,
243
+ line: 1,
244
+ Strict: true,
245
+ }
246
+ d.switchToReader(r)
247
+ return d
248
+ }
249
+
250
+ // Token returns the next XML token in the input stream.
251
+ // At the end of the input stream, Token returns nil, io.EOF.
252
+ //
253
+ // Slices of bytes in the returned token data refer to the
254
+ // parser's internal buffer and remain valid only until the next
255
+ // call to Token. To acquire a copy of the bytes, call CopyToken
256
+ // or the token's Copy method.
257
+ //
258
+ // Token expands self-closing elements such as <br/>
259
+ // into separate start and end elements returned by successive calls.
260
+ //
261
+ // Token guarantees that the StartElement and EndElement
262
+ // tokens it returns are properly nested and matched:
263
+ // if Token encounters an unexpected end element,
264
+ // it will return an error.
265
+ //
266
+ // Token implements XML name spaces as described by
267
+ // http://www.w3.org/TR/REC-xml-names/. Each of the
268
+ // Name structures contained in the Token has the Space
269
+ // set to the URL identifying its name space when known.
270
+ // If Token encounters an unrecognized name space prefix,
271
+ // it uses the prefix as the Space rather than report an error.
272
+ func (d *Decoder) Token() (t Token, err error) {
273
+ if d.stk != nil && d.stk.kind == stkEOF {
274
+ err = io.EOF
275
+ return
276
+ }
277
+ if d.nextToken != nil {
278
+ t = d.nextToken
279
+ d.nextToken = nil
280
+ } else if t, err = d.rawToken(); err != nil {
281
+ return
282
+ }
283
+
284
+ if !d.Strict {
285
+ if t1, ok := d.autoClose(t); ok {
286
+ d.nextToken = t
287
+ t = t1
288
+ }
289
+ }
290
+ switch t1 := t.(type) {
291
+ case StartElement:
292
+ // In XML name spaces, the translations listed in the
293
+ // attributes apply to the element name and
294
+ // to the other attribute names, so process
295
+ // the translations first.
296
+ for _, a := range t1.Attr {
297
+ if a.Name.Space == "xmlns" {
298
+ v, ok := d.ns[a.Name.Local]
299
+ d.pushNs(a.Name.Local, v, ok)
300
+ d.ns[a.Name.Local] = a.Value
301
+ }
302
+ if a.Name.Space == "" && a.Name.Local == "xmlns" {
303
+ // Default space for untagged names
304
+ v, ok := d.ns[""]
305
+ d.pushNs("", v, ok)
306
+ d.ns[""] = a.Value
307
+ }
308
+ }
309
+
310
+ d.translate(&t1.Name, true)
311
+ for i := range t1.Attr {
312
+ d.translate(&t1.Attr[i].Name, false)
313
+ }
314
+ d.pushElement(t1.Name)
315
+ t = t1
316
+
317
+ case EndElement:
318
+ d.translate(&t1.Name, true)
319
+ if !d.popElement(&t1) {
320
+ return nil, d.err
321
+ }
322
+ t = t1
323
+ }
324
+ return
325
+ }
326
+
327
+ const xmlURL = "http://www.w3.org/XML/1998/namespace"
328
+
329
+ // Apply name space translation to name n.
330
+ // The default name space (for Space=="")
331
+ // applies only to element names, not to attribute names.
332
+ func (d *Decoder) translate(n *Name, isElementName bool) {
333
+ switch {
334
+ case n.Space == "xmlns":
335
+ return
336
+ case n.Space == "" && !isElementName:
337
+ return
338
+ case n.Space == "xml":
339
+ n.Space = xmlURL
340
+ case n.Space == "" && n.Local == "xmlns":
341
+ return
342
+ }
343
+ if v, ok := d.ns[n.Space]; ok {
344
+ n.Space = v
345
+ } else if n.Space == "" {
346
+ n.Space = d.DefaultSpace
347
+ }
348
+ }
349
+
350
+ func (d *Decoder) switchToReader(r io.Reader) {
351
+ // Get efficient byte at a time reader.
352
+ // Assume that if reader has its own
353
+ // ReadByte, it's efficient enough.
354
+ // Otherwise, use bufio.
355
+ if rb, ok := r.(io.ByteReader); ok {
356
+ d.r = rb
357
+ } else {
358
+ d.r = bufio.NewReader(r)
359
+ }
360
+ }
361
+
362
+ // Parsing state - stack holds old name space translations
363
+ // and the current set of open elements. The translations to pop when
364
+ // ending a given tag are *below* it on the stack, which is
365
+ // more work but forced on us by XML.
366
+ type stack struct {
367
+ next *stack
368
+ kind int
369
+ name Name
370
+ ok bool
371
+ }
372
+
373
+ const (
374
+ stkStart = iota
375
+ stkNs
376
+ stkEOF
377
+ )
378
+
379
+ func (d *Decoder) push(kind int) *stack {
380
+ s := d.free
381
+ if s != nil {
382
+ d.free = s.next
383
+ } else {
384
+ s = new(stack)
385
+ }
386
+ s.next = d.stk
387
+ s.kind = kind
388
+ d.stk = s
389
+ return s
390
+ }
391
+
392
+ func (d *Decoder) pop() *stack {
393
+ s := d.stk
394
+ if s != nil {
395
+ d.stk = s.next
396
+ s.next = d.free
397
+ d.free = s
398
+ }
399
+ return s
400
+ }
401
+
402
+ // Record that after the current element is finished
403
+ // (that element is already pushed on the stack)
404
+ // Token should return EOF until popEOF is called.
405
+ func (d *Decoder) pushEOF() {
406
+ // Walk down stack to find Start.
407
+ // It might not be the top, because there might be stkNs
408
+ // entries above it.
409
+ start := d.stk
410
+ for start.kind != stkStart {
411
+ start = start.next
412
+ }
413
+ // The stkNs entries below a start are associated with that
414
+ // element too; skip over them.
415
+ for start.next != nil && start.next.kind == stkNs {
416
+ start = start.next
417
+ }
418
+ s := d.free
419
+ if s != nil {
420
+ d.free = s.next
421
+ } else {
422
+ s = new(stack)
423
+ }
424
+ s.kind = stkEOF
425
+ s.next = start.next
426
+ start.next = s
427
+ }
428
+
429
+ // Undo a pushEOF.
430
+ // The element must have been finished, so the EOF should be at the top of the stack.
431
+ func (d *Decoder) popEOF() bool {
432
+ if d.stk == nil || d.stk.kind != stkEOF {
433
+ return false
434
+ }
435
+ d.pop()
436
+ return true
437
+ }
438
+
439
+ // Record that we are starting an element with the given name.
440
+ func (d *Decoder) pushElement(name Name) {
441
+ s := d.push(stkStart)
442
+ s.name = name
443
+ }
444
+
445
+ // Record that we are changing the value of ns[local].
446
+ // The old value is url, ok.
447
+ func (d *Decoder) pushNs(local string, url string, ok bool) {
448
+ s := d.push(stkNs)
449
+ s.name.Local = local
450
+ s.name.Space = url
451
+ s.ok = ok
452
+ }
453
+
454
+ // Creates a SyntaxError with the current line number.
455
+ func (d *Decoder) syntaxError(msg string) error {
456
+ return &SyntaxError{Msg: msg, Line: d.line}
457
+ }
458
+
459
+ // Record that we are ending an element with the given name.
460
+ // The name must match the record at the top of the stack,
461
+ // which must be a pushElement record.
462
+ // After popping the element, apply any undo records from
463
+ // the stack to restore the name translations that existed
464
+ // before we saw this element.
465
+ func (d *Decoder) popElement(t *EndElement) bool {
466
+ s := d.pop()
467
+ name := t.Name
468
+ switch {
469
+ case s == nil || s.kind != stkStart:
470
+ d.err = d.syntaxError("unexpected end element </" + name.Local + ">")
471
+ return false
472
+ case s.name.Local != name.Local:
473
+ if !d.Strict {
474
+ d.needClose = true
475
+ d.toClose = t.Name
476
+ t.Name = s.name
477
+ return true
478
+ }
479
+ d.err = d.syntaxError("element <" + s.name.Local + "> closed by </" + name.Local + ">")
480
+ return false
481
+ case s.name.Space != name.Space:
482
+ d.err = d.syntaxError("element <" + s.name.Local + "> in space " + s.name.Space +
483
+ "closed by </" + name.Local + "> in space " + name.Space)
484
+ return false
485
+ }
486
+
487
+ // Pop stack until a Start or EOF is on the top, undoing the
488
+ // translations that were associated with the element we just closed.
489
+ for d.stk != nil && d.stk.kind != stkStart && d.stk.kind != stkEOF {
490
+ s := d.pop()
491
+ if s.ok {
492
+ d.ns[s.name.Local] = s.name.Space
493
+ } else {
494
+ delete(d.ns, s.name.Local)
495
+ }
496
+ }
497
+
498
+ return true
499
+ }
500
+
501
+ // If the top element on the stack is autoclosing and
502
+ // t is not the end tag, invent the end tag.
503
+ func (d *Decoder) autoClose(t Token) (Token, bool) {
504
+ if d.stk == nil || d.stk.kind != stkStart {
505
+ return nil, false
506
+ }
507
+ name := strings.ToLower(d.stk.name.Local)
508
+ for _, s := range d.AutoClose {
509
+ if strings.ToLower(s) == name {
510
+ // This one should be auto closed if t doesn't close it.
511
+ et, ok := t.(EndElement)
512
+ if !ok || et.Name.Local != name {
513
+ return EndElement{d.stk.name}, true
514
+ }
515
+ break
516
+ }
517
+ }
518
+ return nil, false
519
+ }
520
+
521
+ var errRawToken = errors.New("xml: cannot use RawToken from UnmarshalXML method")
522
+
523
+ // RawToken is like Token but does not verify that
524
+ // start and end elements match and does not translate
525
+ // name space prefixes to their corresponding URLs.
526
+ func (d *Decoder) RawToken() (Token, error) {
527
+ if d.unmarshalDepth > 0 {
528
+ return nil, errRawToken
529
+ }
530
+ return d.rawToken()
531
+ }
532
+
533
+ func (d *Decoder) rawToken() (Token, error) {
534
+ if d.err != nil {
535
+ return nil, d.err
536
+ }
537
+ if d.needClose {
538
+ // The last element we read was self-closing and
539
+ // we returned just the StartElement half.
540
+ // Return the EndElement half now.
541
+ d.needClose = false
542
+ return EndElement{d.toClose}, nil
543
+ }
544
+
545
+ b, ok := d.getc()
546
+ if !ok {
547
+ return nil, d.err
548
+ }
549
+
550
+ if b != '<' {
551
+ // Text section.
552
+ d.ungetc(b)
553
+ data := d.text(-1, false)
554
+ if data == nil {
555
+ return nil, d.err
556
+ }
557
+ return CharData(data), nil
558
+ }
559
+
560
+ if b, ok = d.mustgetc(); !ok {
561
+ return nil, d.err
562
+ }
563
+ switch b {
564
+ case '/':
565
+ // </: End element
566
+ var name Name
567
+ if name, ok = d.nsname(); !ok {
568
+ if d.err == nil {
569
+ d.err = d.syntaxError("expected element name after </")
570
+ }
571
+ return nil, d.err
572
+ }
573
+ d.space()
574
+ if b, ok = d.mustgetc(); !ok {
575
+ return nil, d.err
576
+ }
577
+ if b != '>' {
578
+ d.err = d.syntaxError("invalid characters between </" + name.Local + " and >")
579
+ return nil, d.err
580
+ }
581
+ return EndElement{name}, nil
582
+
583
+ case '?':
584
+ // <?: Processing instruction.
585
+ var target string
586
+ if target, ok = d.name(); !ok {
587
+ if d.err == nil {
588
+ d.err = d.syntaxError("expected target name after <?")
589
+ }
590
+ return nil, d.err
591
+ }
592
+ d.space()
593
+ d.buf.Reset()
594
+ var b0 byte
595
+ for {
596
+ if b, ok = d.mustgetc(); !ok {
597
+ return nil, d.err
598
+ }
599
+ d.buf.WriteByte(b)
600
+ if b0 == '?' && b == '>' {
601
+ break
602
+ }
603
+ b0 = b
604
+ }
605
+ data := d.buf.Bytes()
606
+ data = data[0 : len(data)-2] // chop ?>
607
+
608
+ if target == "xml" {
609
+ content := string(data)
610
+ ver := procInst("version", content)
611
+ if ver != "" && ver != "1.0" {
612
+ d.err = fmt.Errorf("xml: unsupported version %q; only version 1.0 is supported", ver)
613
+ return nil, d.err
614
+ }
615
+ enc := procInst("encoding", content)
616
+ if enc != "" && enc != "utf-8" && enc != "UTF-8" {
617
+ if d.CharsetReader == nil {
618
+ d.err = fmt.Errorf("xml: encoding %q declared but Decoder.CharsetReader is nil", enc)
619
+ return nil, d.err
620
+ }
621
+ newr, err := d.CharsetReader(enc, d.r.(io.Reader))
622
+ if err != nil {
623
+ d.err = fmt.Errorf("xml: opening charset %q: %v", enc, err)
624
+ return nil, d.err
625
+ }
626
+ if newr == nil {
627
+ panic("CharsetReader returned a nil Reader for charset " + enc)
628
+ }
629
+ d.switchToReader(newr)
630
+ }
631
+ }
632
+ return ProcInst{target, data}, nil
633
+
634
+ case '!':
635
+ // <!: Maybe comment, maybe CDATA.
636
+ if b, ok = d.mustgetc(); !ok {
637
+ return nil, d.err
638
+ }
639
+ switch b {
640
+ case '-': // <!-
641
+ // Probably <!-- for a comment.
642
+ if b, ok = d.mustgetc(); !ok {
643
+ return nil, d.err
644
+ }
645
+ if b != '-' {
646
+ d.err = d.syntaxError("invalid sequence <!- not part of <!--")
647
+ return nil, d.err
648
+ }
649
+ // Look for terminator.
650
+ d.buf.Reset()
651
+ var b0, b1 byte
652
+ for {
653
+ if b, ok = d.mustgetc(); !ok {
654
+ return nil, d.err
655
+ }
656
+ d.buf.WriteByte(b)
657
+ if b0 == '-' && b1 == '-' && b == '>' {
658
+ break
659
+ }
660
+ b0, b1 = b1, b
661
+ }
662
+ data := d.buf.Bytes()
663
+ data = data[0 : len(data)-3] // chop -->
664
+ return Comment(data), nil
665
+
666
+ case '[': // <![
667
+ // Probably <![CDATA[.
668
+ for i := 0; i < 6; i++ {
669
+ if b, ok = d.mustgetc(); !ok {
670
+ return nil, d.err
671
+ }
672
+ if b != "CDATA["[i] {
673
+ d.err = d.syntaxError("invalid <![ sequence")
674
+ return nil, d.err
675
+ }
676
+ }
677
+ // Have <![CDATA[. Read text until ]]>.
678
+ data := d.text(-1, true)
679
+ if data == nil {
680
+ return nil, d.err
681
+ }
682
+ return CharData(data), nil
683
+ }
684
+
685
+ // Probably a directive: <!DOCTYPE ...>, <!ENTITY ...>, etc.
686
+ // We don't care, but accumulate for caller. Quoted angle
687
+ // brackets do not count for nesting.
688
+ d.buf.Reset()
689
+ d.buf.WriteByte(b)
690
+ inquote := uint8(0)
691
+ depth := 0
692
+ for {
693
+ if b, ok = d.mustgetc(); !ok {
694
+ return nil, d.err
695
+ }
696
+ if inquote == 0 && b == '>' && depth == 0 {
697
+ break
698
+ }
699
+ HandleB:
700
+ d.buf.WriteByte(b)
701
+ switch {
702
+ case b == inquote:
703
+ inquote = 0
704
+
705
+ case inquote != 0:
706
+ // in quotes, no special action
707
+
708
+ case b == '\'' || b == '"':
709
+ inquote = b
710
+
711
+ case b == '>' && inquote == 0:
712
+ depth--
713
+
714
+ case b == '<' && inquote == 0:
715
+ // Look for <!-- to begin comment.
716
+ s := "!--"
717
+ for i := 0; i < len(s); i++ {
718
+ if b, ok = d.mustgetc(); !ok {
719
+ return nil, d.err
720
+ }
721
+ if b != s[i] {
722
+ for j := 0; j < i; j++ {
723
+ d.buf.WriteByte(s[j])
724
+ }
725
+ depth++
726
+ goto HandleB
727
+ }
728
+ }
729
+
730
+ // Remove < that was written above.
731
+ d.buf.Truncate(d.buf.Len() - 1)
732
+
733
+ // Look for terminator.
734
+ var b0, b1 byte
735
+ for {
736
+ if b, ok = d.mustgetc(); !ok {
737
+ return nil, d.err
738
+ }
739
+ if b0 == '-' && b1 == '-' && b == '>' {
740
+ break
741
+ }
742
+ b0, b1 = b1, b
743
+ }
744
+ }
745
+ }
746
+ return Directive(d.buf.Bytes()), nil
747
+ }
748
+
749
+ // Must be an open element like <a href="foo">
750
+ d.ungetc(b)
751
+
752
+ var (
753
+ name Name
754
+ empty bool
755
+ attr []Attr
756
+ )
757
+ if name, ok = d.nsname(); !ok {
758
+ if d.err == nil {
759
+ d.err = d.syntaxError("expected element name after <")
760
+ }
761
+ return nil, d.err
762
+ }
763
+
764
+ attr = []Attr{}
765
+ for {
766
+ d.space()
767
+ if b, ok = d.mustgetc(); !ok {
768
+ return nil, d.err
769
+ }
770
+ if b == '/' {
771
+ empty = true
772
+ if b, ok = d.mustgetc(); !ok {
773
+ return nil, d.err
774
+ }
775
+ if b != '>' {
776
+ d.err = d.syntaxError("expected /> in element")
777
+ return nil, d.err
778
+ }
779
+ break
780
+ }
781
+ if b == '>' {
782
+ break
783
+ }
784
+ d.ungetc(b)
785
+
786
+ n := len(attr)
787
+ if n >= cap(attr) {
788
+ nCap := 2 * cap(attr)
789
+ if nCap == 0 {
790
+ nCap = 4
791
+ }
792
+ nattr := make([]Attr, n, nCap)
793
+ copy(nattr, attr)
794
+ attr = nattr
795
+ }
796
+ attr = attr[0 : n+1]
797
+ a := &attr[n]
798
+ if a.Name, ok = d.nsname(); !ok {
799
+ if d.err == nil {
800
+ d.err = d.syntaxError("expected attribute name in element")
801
+ }
802
+ return nil, d.err
803
+ }
804
+ d.space()
805
+ if b, ok = d.mustgetc(); !ok {
806
+ return nil, d.err
807
+ }
808
+ if b != '=' {
809
+ if d.Strict {
810
+ d.err = d.syntaxError("attribute name without = in element")
811
+ return nil, d.err
812
+ } else {
813
+ d.ungetc(b)
814
+ a.Value = a.Name.Local
815
+ }
816
+ } else {
817
+ d.space()
818
+ data := d.attrval()
819
+ if data == nil {
820
+ return nil, d.err
821
+ }
822
+ a.Value = string(data)
823
+ }
824
+ }
825
+ if empty {
826
+ d.needClose = true
827
+ d.toClose = name
828
+ }
829
+ return StartElement{name, attr}, nil
830
+ }
831
+
832
+ func (d *Decoder) attrval() []byte {
833
+ b, ok := d.mustgetc()
834
+ if !ok {
835
+ return nil
836
+ }
837
+ // Handle quoted attribute values
838
+ if b == '"' || b == '\'' {
839
+ return d.text(int(b), false)
840
+ }
841
+ // Handle unquoted attribute values for strict parsers
842
+ if d.Strict {
843
+ d.err = d.syntaxError("unquoted or missing attribute value in element")
844
+ return nil
845
+ }
846
+ // Handle unquoted attribute values for unstrict parsers
847
+ d.ungetc(b)
848
+ d.buf.Reset()
849
+ for {
850
+ b, ok = d.mustgetc()
851
+ if !ok {
852
+ return nil
853
+ }
854
+ // http://www.w3.org/TR/REC-html40/intro/sgmltut.html#h-3.2.2
855
+ if 'a' <= b && b <= 'z' || 'A' <= b && b <= 'Z' ||
856
+ '0' <= b && b <= '9' || b == '_' || b == ':' || b == '-' {
857
+ d.buf.WriteByte(b)
858
+ } else {
859
+ d.ungetc(b)
860
+ break
861
+ }
862
+ }
863
+ return d.buf.Bytes()
864
+ }
865
+
866
+ // Skip spaces if any
867
+ func (d *Decoder) space() {
868
+ for {
869
+ b, ok := d.getc()
870
+ if !ok {
871
+ return
872
+ }
873
+ switch b {
874
+ case ' ', '\r', '\n', '\t':
875
+ default:
876
+ d.ungetc(b)
877
+ return
878
+ }
879
+ }
880
+ }
881
+
882
+ // Read a single byte.
883
+ // If there is no byte to read, return ok==false
884
+ // and leave the error in d.err.
885
+ // Maintain line number.
886
+ func (d *Decoder) getc() (b byte, ok bool) {
887
+ if d.err != nil {
888
+ return 0, false
889
+ }
890
+ if d.nextByte >= 0 {
891
+ b = byte(d.nextByte)
892
+ d.nextByte = -1
893
+ } else {
894
+ b, d.err = d.r.ReadByte()
895
+ if d.err != nil {
896
+ return 0, false
897
+ }
898
+ if d.saved != nil {
899
+ d.saved.WriteByte(b)
900
+ }
901
+ }
902
+ if b == '\n' {
903
+ d.line++
904
+ }
905
+ d.offset++
906
+ return b, true
907
+ }
908
+
909
+ // InputOffset returns the input stream byte offset of the current decoder position.
910
+ // The offset gives the location of the end of the most recently returned token
911
+ // and the beginning of the next token.
912
+ func (d *Decoder) InputOffset() int64 {
913
+ return d.offset
914
+ }
915
+
916
+ // Return saved offset.
917
+ // If we did ungetc (nextByte >= 0), have to back up one.
918
+ func (d *Decoder) savedOffset() int {
919
+ n := d.saved.Len()
920
+ if d.nextByte >= 0 {
921
+ n--
922
+ }
923
+ return n
924
+ }
925
+
926
+ // Must read a single byte.
927
+ // If there is no byte to read,
928
+ // set d.err to SyntaxError("unexpected EOF")
929
+ // and return ok==false
930
+ func (d *Decoder) mustgetc() (b byte, ok bool) {
931
+ if b, ok = d.getc(); !ok {
932
+ if d.err == io.EOF {
933
+ d.err = d.syntaxError("unexpected EOF")
934
+ }
935
+ }
936
+ return
937
+ }
938
+
939
+ // Unread a single byte.
940
+ func (d *Decoder) ungetc(b byte) {
941
+ if b == '\n' {
942
+ d.line--
943
+ }
944
+ d.nextByte = int(b)
945
+ d.offset--
946
+ }
947
+
948
+ var entity = map[string]int{
949
+ "lt": '<',
950
+ "gt": '>',
951
+ "amp": '&',
952
+ "apos": '\'',
953
+ "quot": '"',
954
+ }
955
+
956
+ // Read plain text section (XML calls it character data).
957
+ // If quote >= 0, we are in a quoted string and need to find the matching quote.
958
+ // If cdata == true, we are in a <![CDATA[ section and need to find ]]>.
959
+ // On failure return nil and leave the error in d.err.
960
+ func (d *Decoder) text(quote int, cdata bool) []byte {
961
+ var b0, b1 byte
962
+ var trunc int
963
+ d.buf.Reset()
964
+ Input:
965
+ for {
966
+ b, ok := d.getc()
967
+ if !ok {
968
+ if cdata {
969
+ if d.err == io.EOF {
970
+ d.err = d.syntaxError("unexpected EOF in CDATA section")
971
+ }
972
+ return nil
973
+ }
974
+ break Input
975
+ }
976
+
977
+ // <![CDATA[ section ends with ]]>.
978
+ // It is an error for ]]> to appear in ordinary text.
979
+ if b0 == ']' && b1 == ']' && b == '>' {
980
+ if cdata {
981
+ trunc = 2
982
+ break Input
983
+ }
984
+ d.err = d.syntaxError("unescaped ]]> not in CDATA section")
985
+ return nil
986
+ }
987
+
988
+ // Stop reading text if we see a <.
989
+ if b == '<' && !cdata {
990
+ if quote >= 0 {
991
+ d.err = d.syntaxError("unescaped < inside quoted string")
992
+ return nil
993
+ }
994
+ d.ungetc('<')
995
+ break Input
996
+ }
997
+ if quote >= 0 && b == byte(quote) {
998
+ break Input
999
+ }
1000
+ if b == '&' && !cdata {
1001
+ // Read escaped character expression up to semicolon.
1002
+ // XML in all its glory allows a document to define and use
1003
+ // its own character names with <!ENTITY ...> directives.
1004
+ // Parsers are required to recognize lt, gt, amp, apos, and quot
1005
+ // even if they have not been declared.
1006
+ before := d.buf.Len()
1007
+ d.buf.WriteByte('&')
1008
+ var ok bool
1009
+ var text string
1010
+ var haveText bool
1011
+ if b, ok = d.mustgetc(); !ok {
1012
+ return nil
1013
+ }
1014
+ if b == '#' {
1015
+ d.buf.WriteByte(b)
1016
+ if b, ok = d.mustgetc(); !ok {
1017
+ return nil
1018
+ }
1019
+ base := 10
1020
+ if b == 'x' {
1021
+ base = 16
1022
+ d.buf.WriteByte(b)
1023
+ if b, ok = d.mustgetc(); !ok {
1024
+ return nil
1025
+ }
1026
+ }
1027
+ start := d.buf.Len()
1028
+ for '0' <= b && b <= '9' ||
1029
+ base == 16 && 'a' <= b && b <= 'f' ||
1030
+ base == 16 && 'A' <= b && b <= 'F' {
1031
+ d.buf.WriteByte(b)
1032
+ if b, ok = d.mustgetc(); !ok {
1033
+ return nil
1034
+ }
1035
+ }
1036
+ if b != ';' {
1037
+ d.ungetc(b)
1038
+ } else {
1039
+ s := string(d.buf.Bytes()[start:])
1040
+ d.buf.WriteByte(';')
1041
+ n, err := strconv.ParseUint(s, base, 64)
1042
+ if err == nil && n <= unicode.MaxRune {
1043
+ text = string(n)
1044
+ haveText = true
1045
+ }
1046
+ }
1047
+ } else {
1048
+ d.ungetc(b)
1049
+ if !d.readName() {
1050
+ if d.err != nil {
1051
+ return nil
1052
+ }
1053
+ ok = false
1054
+ }
1055
+ if b, ok = d.mustgetc(); !ok {
1056
+ return nil
1057
+ }
1058
+ if b != ';' {
1059
+ d.ungetc(b)
1060
+ } else {
1061
+ name := d.buf.Bytes()[before+1:]
1062
+ d.buf.WriteByte(';')
1063
+ if isName(name) {
1064
+ s := string(name)
1065
+ if r, ok := entity[s]; ok {
1066
+ text = string(r)
1067
+ haveText = true
1068
+ } else if d.Entity != nil {
1069
+ text, haveText = d.Entity[s]
1070
+ }
1071
+ }
1072
+ }
1073
+ }
1074
+
1075
+ if haveText {
1076
+ d.buf.Truncate(before)
1077
+ d.buf.Write([]byte(text))
1078
+ b0, b1 = 0, 0
1079
+ continue Input
1080
+ }
1081
+ if !d.Strict {
1082
+ b0, b1 = 0, 0
1083
+ continue Input
1084
+ }
1085
+ ent := string(d.buf.Bytes()[before:])
1086
+ if ent[len(ent)-1] != ';' {
1087
+ ent += " (no semicolon)"
1088
+ }
1089
+ d.err = d.syntaxError("invalid character entity " + ent)
1090
+ return nil
1091
+ }
1092
+
1093
+ // We must rewrite unescaped \r and \r\n into \n.
1094
+ if b == '\r' {
1095
+ d.buf.WriteByte('\n')
1096
+ } else if b1 == '\r' && b == '\n' {
1097
+ // Skip \r\n--we already wrote \n.
1098
+ } else {
1099
+ d.buf.WriteByte(b)
1100
+ }
1101
+
1102
+ b0, b1 = b1, b
1103
+ }
1104
+ data := d.buf.Bytes()
1105
+ data = data[0 : len(data)-trunc]
1106
+
1107
+ // Inspect each rune for being a disallowed character.
1108
+ buf := data
1109
+ for len(buf) > 0 {
1110
+ r, size := utf8.DecodeRune(buf)
1111
+ if r == utf8.RuneError && size == 1 {
1112
+ d.err = d.syntaxError("invalid UTF-8")
1113
+ return nil
1114
+ }
1115
+ buf = buf[size:]
1116
+ if !isInCharacterRange(r) {
1117
+ d.err = d.syntaxError(fmt.Sprintf("illegal character code %U", r))
1118
+ return nil
1119
+ }
1120
+ }
1121
+
1122
+ return data
1123
+ }
1124
+
1125
+ // Decide whether the given rune is in the XML Character Range, per
1126
+ // the Char production of http://www.xml.com/axml/testaxml.htm,
1127
+ // Section 2.2 Characters.
1128
+ func isInCharacterRange(r rune) (inrange bool) {
1129
+ return r == 0x09 ||
1130
+ r == 0x0A ||
1131
+ r == 0x0D ||
1132
+ r >= 0x20 && r <= 0xDF77 ||
1133
+ r >= 0xE000 && r <= 0xFFFD ||
1134
+ r >= 0x10000 && r <= 0x10FFFF
1135
+ }
1136
+
1137
+ // Get name space name: name with a : stuck in the middle.
1138
+ // The part before the : is the name space identifier.
1139
+ func (d *Decoder) nsname() (name Name, ok bool) {
1140
+ s, ok := d.name()
1141
+ if !ok {
1142
+ return
1143
+ }
1144
+ i := strings.Index(s, ":")
1145
+ if i < 0 {
1146
+ name.Local = s
1147
+ } else {
1148
+ name.Space = s[0:i]
1149
+ name.Local = s[i+1:]
1150
+ }
1151
+ return name, true
1152
+ }
1153
+
1154
+ // Get name: /first(first|second)*/
1155
+ // Do not set d.err if the name is missing (unless unexpected EOF is received):
1156
+ // let the caller provide better context.
1157
+ func (d *Decoder) name() (s string, ok bool) {
1158
+ d.buf.Reset()
1159
+ if !d.readName() {
1160
+ return "", false
1161
+ }
1162
+
1163
+ // Now we check the characters.
1164
+ b := d.buf.Bytes()
1165
+ if !isName(b) {
1166
+ d.err = d.syntaxError("invalid XML name: " + string(b))
1167
+ return "", false
1168
+ }
1169
+ return string(b), true
1170
+ }
1171
+
1172
+ // Read a name and append its bytes to d.buf.
1173
+ // The name is delimited by any single-byte character not valid in names.
1174
+ // All multi-byte characters are accepted; the caller must check their validity.
1175
+ func (d *Decoder) readName() (ok bool) {
1176
+ var b byte
1177
+ if b, ok = d.mustgetc(); !ok {
1178
+ return
1179
+ }
1180
+ if b < utf8.RuneSelf && !isNameByte(b) {
1181
+ d.ungetc(b)
1182
+ return false
1183
+ }
1184
+ d.buf.WriteByte(b)
1185
+
1186
+ for {
1187
+ if b, ok = d.mustgetc(); !ok {
1188
+ return
1189
+ }
1190
+ if b < utf8.RuneSelf && !isNameByte(b) {
1191
+ d.ungetc(b)
1192
+ break
1193
+ }
1194
+ d.buf.WriteByte(b)
1195
+ }
1196
+ return true
1197
+ }
1198
+
1199
+ func isNameByte(c byte) bool {
1200
+ return 'A' <= c && c <= 'Z' ||
1201
+ 'a' <= c && c <= 'z' ||
1202
+ '0' <= c && c <= '9' ||
1203
+ c == '_' || c == ':' || c == '.' || c == '-'
1204
+ }
1205
+
1206
+ func isName(s []byte) bool {
1207
+ if len(s) == 0 {
1208
+ return false
1209
+ }
1210
+ c, n := utf8.DecodeRune(s)
1211
+ if c == utf8.RuneError && n == 1 {
1212
+ return false
1213
+ }
1214
+ if !unicode.Is(first, c) {
1215
+ return false
1216
+ }
1217
+ for n < len(s) {
1218
+ s = s[n:]
1219
+ c, n = utf8.DecodeRune(s)
1220
+ if c == utf8.RuneError && n == 1 {
1221
+ return false
1222
+ }
1223
+ if !unicode.Is(first, c) && !unicode.Is(second, c) {
1224
+ return false
1225
+ }
1226
+ }
1227
+ return true
1228
+ }
1229
+
1230
+ func isNameString(s string) bool {
1231
+ if len(s) == 0 {
1232
+ return false
1233
+ }
1234
+ c, n := utf8.DecodeRuneInString(s)
1235
+ if c == utf8.RuneError && n == 1 {
1236
+ return false
1237
+ }
1238
+ if !unicode.Is(first, c) {
1239
+ return false
1240
+ }
1241
+ for n < len(s) {
1242
+ s = s[n:]
1243
+ c, n = utf8.DecodeRuneInString(s)
1244
+ if c == utf8.RuneError && n == 1 {
1245
+ return false
1246
+ }
1247
+ if !unicode.Is(first, c) && !unicode.Is(second, c) {
1248
+ return false
1249
+ }
1250
+ }
1251
+ return true
1252
+ }
1253
+
1254
+ // These tables were generated by cut and paste from Appendix B of
1255
+ // the XML spec at http://www.xml.com/axml/testaxml.htm
1256
+ // and then reformatting. First corresponds to (Letter | '_' | ':')
1257
+ // and second corresponds to NameChar.
1258
+
1259
+ var first = &unicode.RangeTable{
1260
+ R16: []unicode.Range16{
1261
+ {0x003A, 0x003A, 1},
1262
+ {0x0041, 0x005A, 1},
1263
+ {0x005F, 0x005F, 1},
1264
+ {0x0061, 0x007A, 1},
1265
+ {0x00C0, 0x00D6, 1},
1266
+ {0x00D8, 0x00F6, 1},
1267
+ {0x00F8, 0x00FF, 1},
1268
+ {0x0100, 0x0131, 1},
1269
+ {0x0134, 0x013E, 1},
1270
+ {0x0141, 0x0148, 1},
1271
+ {0x014A, 0x017E, 1},
1272
+ {0x0180, 0x01C3, 1},
1273
+ {0x01CD, 0x01F0, 1},
1274
+ {0x01F4, 0x01F5, 1},
1275
+ {0x01FA, 0x0217, 1},
1276
+ {0x0250, 0x02A8, 1},
1277
+ {0x02BB, 0x02C1, 1},
1278
+ {0x0386, 0x0386, 1},
1279
+ {0x0388, 0x038A, 1},
1280
+ {0x038C, 0x038C, 1},
1281
+ {0x038E, 0x03A1, 1},
1282
+ {0x03A3, 0x03CE, 1},
1283
+ {0x03D0, 0x03D6, 1},
1284
+ {0x03DA, 0x03E0, 2},
1285
+ {0x03E2, 0x03F3, 1},
1286
+ {0x0401, 0x040C, 1},
1287
+ {0x040E, 0x044F, 1},
1288
+ {0x0451, 0x045C, 1},
1289
+ {0x045E, 0x0481, 1},
1290
+ {0x0490, 0x04C4, 1},
1291
+ {0x04C7, 0x04C8, 1},
1292
+ {0x04CB, 0x04CC, 1},
1293
+ {0x04D0, 0x04EB, 1},
1294
+ {0x04EE, 0x04F5, 1},
1295
+ {0x04F8, 0x04F9, 1},
1296
+ {0x0531, 0x0556, 1},
1297
+ {0x0559, 0x0559, 1},
1298
+ {0x0561, 0x0586, 1},
1299
+ {0x05D0, 0x05EA, 1},
1300
+ {0x05F0, 0x05F2, 1},
1301
+ {0x0621, 0x063A, 1},
1302
+ {0x0641, 0x064A, 1},
1303
+ {0x0671, 0x06B7, 1},
1304
+ {0x06BA, 0x06BE, 1},
1305
+ {0x06C0, 0x06CE, 1},
1306
+ {0x06D0, 0x06D3, 1},
1307
+ {0x06D5, 0x06D5, 1},
1308
+ {0x06E5, 0x06E6, 1},
1309
+ {0x0905, 0x0939, 1},
1310
+ {0x093D, 0x093D, 1},
1311
+ {0x0958, 0x0961, 1},
1312
+ {0x0985, 0x098C, 1},
1313
+ {0x098F, 0x0990, 1},
1314
+ {0x0993, 0x09A8, 1},
1315
+ {0x09AA, 0x09B0, 1},
1316
+ {0x09B2, 0x09B2, 1},
1317
+ {0x09B6, 0x09B9, 1},
1318
+ {0x09DC, 0x09DD, 1},
1319
+ {0x09DF, 0x09E1, 1},
1320
+ {0x09F0, 0x09F1, 1},
1321
+ {0x0A05, 0x0A0A, 1},
1322
+ {0x0A0F, 0x0A10, 1},
1323
+ {0x0A13, 0x0A28, 1},
1324
+ {0x0A2A, 0x0A30, 1},
1325
+ {0x0A32, 0x0A33, 1},
1326
+ {0x0A35, 0x0A36, 1},
1327
+ {0x0A38, 0x0A39, 1},
1328
+ {0x0A59, 0x0A5C, 1},
1329
+ {0x0A5E, 0x0A5E, 1},
1330
+ {0x0A72, 0x0A74, 1},
1331
+ {0x0A85, 0x0A8B, 1},
1332
+ {0x0A8D, 0x0A8D, 1},
1333
+ {0x0A8F, 0x0A91, 1},
1334
+ {0x0A93, 0x0AA8, 1},
1335
+ {0x0AAA, 0x0AB0, 1},
1336
+ {0x0AB2, 0x0AB3, 1},
1337
+ {0x0AB5, 0x0AB9, 1},
1338
+ {0x0ABD, 0x0AE0, 0x23},
1339
+ {0x0B05, 0x0B0C, 1},
1340
+ {0x0B0F, 0x0B10, 1},
1341
+ {0x0B13, 0x0B28, 1},
1342
+ {0x0B2A, 0x0B30, 1},
1343
+ {0x0B32, 0x0B33, 1},
1344
+ {0x0B36, 0x0B39, 1},
1345
+ {0x0B3D, 0x0B3D, 1},
1346
+ {0x0B5C, 0x0B5D, 1},
1347
+ {0x0B5F, 0x0B61, 1},
1348
+ {0x0B85, 0x0B8A, 1},
1349
+ {0x0B8E, 0x0B90, 1},
1350
+ {0x0B92, 0x0B95, 1},
1351
+ {0x0B99, 0x0B9A, 1},
1352
+ {0x0B9C, 0x0B9C, 1},
1353
+ {0x0B9E, 0x0B9F, 1},
1354
+ {0x0BA3, 0x0BA4, 1},
1355
+ {0x0BA8, 0x0BAA, 1},
1356
+ {0x0BAE, 0x0BB5, 1},
1357
+ {0x0BB7, 0x0BB9, 1},
1358
+ {0x0C05, 0x0C0C, 1},
1359
+ {0x0C0E, 0x0C10, 1},
1360
+ {0x0C12, 0x0C28, 1},
1361
+ {0x0C2A, 0x0C33, 1},
1362
+ {0x0C35, 0x0C39, 1},
1363
+ {0x0C60, 0x0C61, 1},
1364
+ {0x0C85, 0x0C8C, 1},
1365
+ {0x0C8E, 0x0C90, 1},
1366
+ {0x0C92, 0x0CA8, 1},
1367
+ {0x0CAA, 0x0CB3, 1},
1368
+ {0x0CB5, 0x0CB9, 1},
1369
+ {0x0CDE, 0x0CDE, 1},
1370
+ {0x0CE0, 0x0CE1, 1},
1371
+ {0x0D05, 0x0D0C, 1},
1372
+ {0x0D0E, 0x0D10, 1},
1373
+ {0x0D12, 0x0D28, 1},
1374
+ {0x0D2A, 0x0D39, 1},
1375
+ {0x0D60, 0x0D61, 1},
1376
+ {0x0E01, 0x0E2E, 1},
1377
+ {0x0E30, 0x0E30, 1},
1378
+ {0x0E32, 0x0E33, 1},
1379
+ {0x0E40, 0x0E45, 1},
1380
+ {0x0E81, 0x0E82, 1},
1381
+ {0x0E84, 0x0E84, 1},
1382
+ {0x0E87, 0x0E88, 1},
1383
+ {0x0E8A, 0x0E8D, 3},
1384
+ {0x0E94, 0x0E97, 1},
1385
+ {0x0E99, 0x0E9F, 1},
1386
+ {0x0EA1, 0x0EA3, 1},
1387
+ {0x0EA5, 0x0EA7, 2},
1388
+ {0x0EAA, 0x0EAB, 1},
1389
+ {0x0EAD, 0x0EAE, 1},
1390
+ {0x0EB0, 0x0EB0, 1},
1391
+ {0x0EB2, 0x0EB3, 1},
1392
+ {0x0EBD, 0x0EBD, 1},
1393
+ {0x0EC0, 0x0EC4, 1},
1394
+ {0x0F40, 0x0F47, 1},
1395
+ {0x0F49, 0x0F69, 1},
1396
+ {0x10A0, 0x10C5, 1},
1397
+ {0x10D0, 0x10F6, 1},
1398
+ {0x1100, 0x1100, 1},
1399
+ {0x1102, 0x1103, 1},
1400
+ {0x1105, 0x1107, 1},
1401
+ {0x1109, 0x1109, 1},
1402
+ {0x110B, 0x110C, 1},
1403
+ {0x110E, 0x1112, 1},
1404
+ {0x113C, 0x1140, 2},
1405
+ {0x114C, 0x1150, 2},
1406
+ {0x1154, 0x1155, 1},
1407
+ {0x1159, 0x1159, 1},
1408
+ {0x115F, 0x1161, 1},
1409
+ {0x1163, 0x1169, 2},
1410
+ {0x116D, 0x116E, 1},
1411
+ {0x1172, 0x1173, 1},
1412
+ {0x1175, 0x119E, 0x119E - 0x1175},
1413
+ {0x11A8, 0x11AB, 0x11AB - 0x11A8},
1414
+ {0x11AE, 0x11AF, 1},
1415
+ {0x11B7, 0x11B8, 1},
1416
+ {0x11BA, 0x11BA, 1},
1417
+ {0x11BC, 0x11C2, 1},
1418
+ {0x11EB, 0x11F0, 0x11F0 - 0x11EB},
1419
+ {0x11F9, 0x11F9, 1},
1420
+ {0x1E00, 0x1E9B, 1},
1421
+ {0x1EA0, 0x1EF9, 1},
1422
+ {0x1F00, 0x1F15, 1},
1423
+ {0x1F18, 0x1F1D, 1},
1424
+ {0x1F20, 0x1F45, 1},
1425
+ {0x1F48, 0x1F4D, 1},
1426
+ {0x1F50, 0x1F57, 1},
1427
+ {0x1F59, 0x1F5B, 0x1F5B - 0x1F59},
1428
+ {0x1F5D, 0x1F5D, 1},
1429
+ {0x1F5F, 0x1F7D, 1},
1430
+ {0x1F80, 0x1FB4, 1},
1431
+ {0x1FB6, 0x1FBC, 1},
1432
+ {0x1FBE, 0x1FBE, 1},
1433
+ {0x1FC2, 0x1FC4, 1},
1434
+ {0x1FC6, 0x1FCC, 1},
1435
+ {0x1FD0, 0x1FD3, 1},
1436
+ {0x1FD6, 0x1FDB, 1},
1437
+ {0x1FE0, 0x1FEC, 1},
1438
+ {0x1FF2, 0x1FF4, 1},
1439
+ {0x1FF6, 0x1FFC, 1},
1440
+ {0x2126, 0x2126, 1},
1441
+ {0x212A, 0x212B, 1},
1442
+ {0x212E, 0x212E, 1},
1443
+ {0x2180, 0x2182, 1},
1444
+ {0x3007, 0x3007, 1},
1445
+ {0x3021, 0x3029, 1},
1446
+ {0x3041, 0x3094, 1},
1447
+ {0x30A1, 0x30FA, 1},
1448
+ {0x3105, 0x312C, 1},
1449
+ {0x4E00, 0x9FA5, 1},
1450
+ {0xAC00, 0xD7A3, 1},
1451
+ },
1452
+ }
1453
+
1454
+ var second = &unicode.RangeTable{
1455
+ R16: []unicode.Range16{
1456
+ {0x002D, 0x002E, 1},
1457
+ {0x0030, 0x0039, 1},
1458
+ {0x00B7, 0x00B7, 1},
1459
+ {0x02D0, 0x02D1, 1},
1460
+ {0x0300, 0x0345, 1},
1461
+ {0x0360, 0x0361, 1},
1462
+ {0x0387, 0x0387, 1},
1463
+ {0x0483, 0x0486, 1},
1464
+ {0x0591, 0x05A1, 1},
1465
+ {0x05A3, 0x05B9, 1},
1466
+ {0x05BB, 0x05BD, 1},
1467
+ {0x05BF, 0x05BF, 1},
1468
+ {0x05C1, 0x05C2, 1},
1469
+ {0x05C4, 0x0640, 0x0640 - 0x05C4},
1470
+ {0x064B, 0x0652, 1},
1471
+ {0x0660, 0x0669, 1},
1472
+ {0x0670, 0x0670, 1},
1473
+ {0x06D6, 0x06DC, 1},
1474
+ {0x06DD, 0x06DF, 1},
1475
+ {0x06E0, 0x06E4, 1},
1476
+ {0x06E7, 0x06E8, 1},
1477
+ {0x06EA, 0x06ED, 1},
1478
+ {0x06F0, 0x06F9, 1},
1479
+ {0x0901, 0x0903, 1},
1480
+ {0x093C, 0x093C, 1},
1481
+ {0x093E, 0x094C, 1},
1482
+ {0x094D, 0x094D, 1},
1483
+ {0x0951, 0x0954, 1},
1484
+ {0x0962, 0x0963, 1},
1485
+ {0x0966, 0x096F, 1},
1486
+ {0x0981, 0x0983, 1},
1487
+ {0x09BC, 0x09BC, 1},
1488
+ {0x09BE, 0x09BF, 1},
1489
+ {0x09C0, 0x09C4, 1},
1490
+ {0x09C7, 0x09C8, 1},
1491
+ {0x09CB, 0x09CD, 1},
1492
+ {0x09D7, 0x09D7, 1},
1493
+ {0x09E2, 0x09E3, 1},
1494
+ {0x09E6, 0x09EF, 1},
1495
+ {0x0A02, 0x0A3C, 0x3A},
1496
+ {0x0A3E, 0x0A3F, 1},
1497
+ {0x0A40, 0x0A42, 1},
1498
+ {0x0A47, 0x0A48, 1},
1499
+ {0x0A4B, 0x0A4D, 1},
1500
+ {0x0A66, 0x0A6F, 1},
1501
+ {0x0A70, 0x0A71, 1},
1502
+ {0x0A81, 0x0A83, 1},
1503
+ {0x0ABC, 0x0ABC, 1},
1504
+ {0x0ABE, 0x0AC5, 1},
1505
+ {0x0AC7, 0x0AC9, 1},
1506
+ {0x0ACB, 0x0ACD, 1},
1507
+ {0x0AE6, 0x0AEF, 1},
1508
+ {0x0B01, 0x0B03, 1},
1509
+ {0x0B3C, 0x0B3C, 1},
1510
+ {0x0B3E, 0x0B43, 1},
1511
+ {0x0B47, 0x0B48, 1},
1512
+ {0x0B4B, 0x0B4D, 1},
1513
+ {0x0B56, 0x0B57, 1},
1514
+ {0x0B66, 0x0B6F, 1},
1515
+ {0x0B82, 0x0B83, 1},
1516
+ {0x0BBE, 0x0BC2, 1},
1517
+ {0x0BC6, 0x0BC8, 1},
1518
+ {0x0BCA, 0x0BCD, 1},
1519
+ {0x0BD7, 0x0BD7, 1},
1520
+ {0x0BE7, 0x0BEF, 1},
1521
+ {0x0C01, 0x0C03, 1},
1522
+ {0x0C3E, 0x0C44, 1},
1523
+ {0x0C46, 0x0C48, 1},
1524
+ {0x0C4A, 0x0C4D, 1},
1525
+ {0x0C55, 0x0C56, 1},
1526
+ {0x0C66, 0x0C6F, 1},
1527
+ {0x0C82, 0x0C83, 1},
1528
+ {0x0CBE, 0x0CC4, 1},
1529
+ {0x0CC6, 0x0CC8, 1},
1530
+ {0x0CCA, 0x0CCD, 1},
1531
+ {0x0CD5, 0x0CD6, 1},
1532
+ {0x0CE6, 0x0CEF, 1},
1533
+ {0x0D02, 0x0D03, 1},
1534
+ {0x0D3E, 0x0D43, 1},
1535
+ {0x0D46, 0x0D48, 1},
1536
+ {0x0D4A, 0x0D4D, 1},
1537
+ {0x0D57, 0x0D57, 1},
1538
+ {0x0D66, 0x0D6F, 1},
1539
+ {0x0E31, 0x0E31, 1},
1540
+ {0x0E34, 0x0E3A, 1},
1541
+ {0x0E46, 0x0E46, 1},
1542
+ {0x0E47, 0x0E4E, 1},
1543
+ {0x0E50, 0x0E59, 1},
1544
+ {0x0EB1, 0x0EB1, 1},
1545
+ {0x0EB4, 0x0EB9, 1},
1546
+ {0x0EBB, 0x0EBC, 1},
1547
+ {0x0EC6, 0x0EC6, 1},
1548
+ {0x0EC8, 0x0ECD, 1},
1549
+ {0x0ED0, 0x0ED9, 1},
1550
+ {0x0F18, 0x0F19, 1},
1551
+ {0x0F20, 0x0F29, 1},
1552
+ {0x0F35, 0x0F39, 2},
1553
+ {0x0F3E, 0x0F3F, 1},
1554
+ {0x0F71, 0x0F84, 1},
1555
+ {0x0F86, 0x0F8B, 1},
1556
+ {0x0F90, 0x0F95, 1},
1557
+ {0x0F97, 0x0F97, 1},
1558
+ {0x0F99, 0x0FAD, 1},
1559
+ {0x0FB1, 0x0FB7, 1},
1560
+ {0x0FB9, 0x0FB9, 1},
1561
+ {0x20D0, 0x20DC, 1},
1562
+ {0x20E1, 0x3005, 0x3005 - 0x20E1},
1563
+ {0x302A, 0x302F, 1},
1564
+ {0x3031, 0x3035, 1},
1565
+ {0x3099, 0x309A, 1},
1566
+ {0x309D, 0x309E, 1},
1567
+ {0x30FC, 0x30FE, 1},
1568
+ },
1569
+ }
1570
+
1571
+ // HTMLEntity is an entity map containing translations for the
1572
+ // standard HTML entity characters.
1573
+ var HTMLEntity = htmlEntity
1574
+
1575
+ var htmlEntity = map[string]string{
1576
+ /*
1577
+ hget http://www.w3.org/TR/html4/sgml/entities.html |
1578
+ ssam '
1579
+ ,y /\&gt;/ x/\&lt;(.|\n)+/ s/\n/ /g
1580
+ ,x v/^\&lt;!ENTITY/d
1581
+ ,s/\&lt;!ENTITY ([^ ]+) .*U\+([0-9A-F][0-9A-F][0-9A-F][0-9A-F]) .+/ "\1": "\\u\2",/g
1582
+ '
1583
+ */
1584
+ "nbsp": "\u00A0",
1585
+ "iexcl": "\u00A1",
1586
+ "cent": "\u00A2",
1587
+ "pound": "\u00A3",
1588
+ "curren": "\u00A4",
1589
+ "yen": "\u00A5",
1590
+ "brvbar": "\u00A6",
1591
+ "sect": "\u00A7",
1592
+ "uml": "\u00A8",
1593
+ "copy": "\u00A9",
1594
+ "ordf": "\u00AA",
1595
+ "laquo": "\u00AB",
1596
+ "not": "\u00AC",
1597
+ "shy": "\u00AD",
1598
+ "reg": "\u00AE",
1599
+ "macr": "\u00AF",
1600
+ "deg": "\u00B0",
1601
+ "plusmn": "\u00B1",
1602
+ "sup2": "\u00B2",
1603
+ "sup3": "\u00B3",
1604
+ "acute": "\u00B4",
1605
+ "micro": "\u00B5",
1606
+ "para": "\u00B6",
1607
+ "middot": "\u00B7",
1608
+ "cedil": "\u00B8",
1609
+ "sup1": "\u00B9",
1610
+ "ordm": "\u00BA",
1611
+ "raquo": "\u00BB",
1612
+ "frac14": "\u00BC",
1613
+ "frac12": "\u00BD",
1614
+ "frac34": "\u00BE",
1615
+ "iquest": "\u00BF",
1616
+ "Agrave": "\u00C0",
1617
+ "Aacute": "\u00C1",
1618
+ "Acirc": "\u00C2",
1619
+ "Atilde": "\u00C3",
1620
+ "Auml": "\u00C4",
1621
+ "Aring": "\u00C5",
1622
+ "AElig": "\u00C6",
1623
+ "Ccedil": "\u00C7",
1624
+ "Egrave": "\u00C8",
1625
+ "Eacute": "\u00C9",
1626
+ "Ecirc": "\u00CA",
1627
+ "Euml": "\u00CB",
1628
+ "Igrave": "\u00CC",
1629
+ "Iacute": "\u00CD",
1630
+ "Icirc": "\u00CE",
1631
+ "Iuml": "\u00CF",
1632
+ "ETH": "\u00D0",
1633
+ "Ntilde": "\u00D1",
1634
+ "Ograve": "\u00D2",
1635
+ "Oacute": "\u00D3",
1636
+ "Ocirc": "\u00D4",
1637
+ "Otilde": "\u00D5",
1638
+ "Ouml": "\u00D6",
1639
+ "times": "\u00D7",
1640
+ "Oslash": "\u00D8",
1641
+ "Ugrave": "\u00D9",
1642
+ "Uacute": "\u00DA",
1643
+ "Ucirc": "\u00DB",
1644
+ "Uuml": "\u00DC",
1645
+ "Yacute": "\u00DD",
1646
+ "THORN": "\u00DE",
1647
+ "szlig": "\u00DF",
1648
+ "agrave": "\u00E0",
1649
+ "aacute": "\u00E1",
1650
+ "acirc": "\u00E2",
1651
+ "atilde": "\u00E3",
1652
+ "auml": "\u00E4",
1653
+ "aring": "\u00E5",
1654
+ "aelig": "\u00E6",
1655
+ "ccedil": "\u00E7",
1656
+ "egrave": "\u00E8",
1657
+ "eacute": "\u00E9",
1658
+ "ecirc": "\u00EA",
1659
+ "euml": "\u00EB",
1660
+ "igrave": "\u00EC",
1661
+ "iacute": "\u00ED",
1662
+ "icirc": "\u00EE",
1663
+ "iuml": "\u00EF",
1664
+ "eth": "\u00F0",
1665
+ "ntilde": "\u00F1",
1666
+ "ograve": "\u00F2",
1667
+ "oacute": "\u00F3",
1668
+ "ocirc": "\u00F4",
1669
+ "otilde": "\u00F5",
1670
+ "ouml": "\u00F6",
1671
+ "divide": "\u00F7",
1672
+ "oslash": "\u00F8",
1673
+ "ugrave": "\u00F9",
1674
+ "uacute": "\u00FA",
1675
+ "ucirc": "\u00FB",
1676
+ "uuml": "\u00FC",
1677
+ "yacute": "\u00FD",
1678
+ "thorn": "\u00FE",
1679
+ "yuml": "\u00FF",
1680
+ "fnof": "\u0192",
1681
+ "Alpha": "\u0391",
1682
+ "Beta": "\u0392",
1683
+ "Gamma": "\u0393",
1684
+ "Delta": "\u0394",
1685
+ "Epsilon": "\u0395",
1686
+ "Zeta": "\u0396",
1687
+ "Eta": "\u0397",
1688
+ "Theta": "\u0398",
1689
+ "Iota": "\u0399",
1690
+ "Kappa": "\u039A",
1691
+ "Lambda": "\u039B",
1692
+ "Mu": "\u039C",
1693
+ "Nu": "\u039D",
1694
+ "Xi": "\u039E",
1695
+ "Omicron": "\u039F",
1696
+ "Pi": "\u03A0",
1697
+ "Rho": "\u03A1",
1698
+ "Sigma": "\u03A3",
1699
+ "Tau": "\u03A4",
1700
+ "Upsilon": "\u03A5",
1701
+ "Phi": "\u03A6",
1702
+ "Chi": "\u03A7",
1703
+ "Psi": "\u03A8",
1704
+ "Omega": "\u03A9",
1705
+ "alpha": "\u03B1",
1706
+ "beta": "\u03B2",
1707
+ "gamma": "\u03B3",
1708
+ "delta": "\u03B4",
1709
+ "epsilon": "\u03B5",
1710
+ "zeta": "\u03B6",
1711
+ "eta": "\u03B7",
1712
+ "theta": "\u03B8",
1713
+ "iota": "\u03B9",
1714
+ "kappa": "\u03BA",
1715
+ "lambda": "\u03BB",
1716
+ "mu": "\u03BC",
1717
+ "nu": "\u03BD",
1718
+ "xi": "\u03BE",
1719
+ "omicron": "\u03BF",
1720
+ "pi": "\u03C0",
1721
+ "rho": "\u03C1",
1722
+ "sigmaf": "\u03C2",
1723
+ "sigma": "\u03C3",
1724
+ "tau": "\u03C4",
1725
+ "upsilon": "\u03C5",
1726
+ "phi": "\u03C6",
1727
+ "chi": "\u03C7",
1728
+ "psi": "\u03C8",
1729
+ "omega": "\u03C9",
1730
+ "thetasym": "\u03D1",
1731
+ "upsih": "\u03D2",
1732
+ "piv": "\u03D6",
1733
+ "bull": "\u2022",
1734
+ "hellip": "\u2026",
1735
+ "prime": "\u2032",
1736
+ "Prime": "\u2033",
1737
+ "oline": "\u203E",
1738
+ "frasl": "\u2044",
1739
+ "weierp": "\u2118",
1740
+ "image": "\u2111",
1741
+ "real": "\u211C",
1742
+ "trade": "\u2122",
1743
+ "alefsym": "\u2135",
1744
+ "larr": "\u2190",
1745
+ "uarr": "\u2191",
1746
+ "rarr": "\u2192",
1747
+ "darr": "\u2193",
1748
+ "harr": "\u2194",
1749
+ "crarr": "\u21B5",
1750
+ "lArr": "\u21D0",
1751
+ "uArr": "\u21D1",
1752
+ "rArr": "\u21D2",
1753
+ "dArr": "\u21D3",
1754
+ "hArr": "\u21D4",
1755
+ "forall": "\u2200",
1756
+ "part": "\u2202",
1757
+ "exist": "\u2203",
1758
+ "empty": "\u2205",
1759
+ "nabla": "\u2207",
1760
+ "isin": "\u2208",
1761
+ "notin": "\u2209",
1762
+ "ni": "\u220B",
1763
+ "prod": "\u220F",
1764
+ "sum": "\u2211",
1765
+ "minus": "\u2212",
1766
+ "lowast": "\u2217",
1767
+ "radic": "\u221A",
1768
+ "prop": "\u221D",
1769
+ "infin": "\u221E",
1770
+ "ang": "\u2220",
1771
+ "and": "\u2227",
1772
+ "or": "\u2228",
1773
+ "cap": "\u2229",
1774
+ "cup": "\u222A",
1775
+ "int": "\u222B",
1776
+ "there4": "\u2234",
1777
+ "sim": "\u223C",
1778
+ "cong": "\u2245",
1779
+ "asymp": "\u2248",
1780
+ "ne": "\u2260",
1781
+ "equiv": "\u2261",
1782
+ "le": "\u2264",
1783
+ "ge": "\u2265",
1784
+ "sub": "\u2282",
1785
+ "sup": "\u2283",
1786
+ "nsub": "\u2284",
1787
+ "sube": "\u2286",
1788
+ "supe": "\u2287",
1789
+ "oplus": "\u2295",
1790
+ "otimes": "\u2297",
1791
+ "perp": "\u22A5",
1792
+ "sdot": "\u22C5",
1793
+ "lceil": "\u2308",
1794
+ "rceil": "\u2309",
1795
+ "lfloor": "\u230A",
1796
+ "rfloor": "\u230B",
1797
+ "lang": "\u2329",
1798
+ "rang": "\u232A",
1799
+ "loz": "\u25CA",
1800
+ "spades": "\u2660",
1801
+ "clubs": "\u2663",
1802
+ "hearts": "\u2665",
1803
+ "diams": "\u2666",
1804
+ "quot": "\u0022",
1805
+ "amp": "\u0026",
1806
+ "lt": "\u003C",
1807
+ "gt": "\u003E",
1808
+ "OElig": "\u0152",
1809
+ "oelig": "\u0153",
1810
+ "Scaron": "\u0160",
1811
+ "scaron": "\u0161",
1812
+ "Yuml": "\u0178",
1813
+ "circ": "\u02C6",
1814
+ "tilde": "\u02DC",
1815
+ "ensp": "\u2002",
1816
+ "emsp": "\u2003",
1817
+ "thinsp": "\u2009",
1818
+ "zwnj": "\u200C",
1819
+ "zwj": "\u200D",
1820
+ "lrm": "\u200E",
1821
+ "rlm": "\u200F",
1822
+ "ndash": "\u2013",
1823
+ "mdash": "\u2014",
1824
+ "lsquo": "\u2018",
1825
+ "rsquo": "\u2019",
1826
+ "sbquo": "\u201A",
1827
+ "ldquo": "\u201C",
1828
+ "rdquo": "\u201D",
1829
+ "bdquo": "\u201E",
1830
+ "dagger": "\u2020",
1831
+ "Dagger": "\u2021",
1832
+ "permil": "\u2030",
1833
+ "lsaquo": "\u2039",
1834
+ "rsaquo": "\u203A",
1835
+ "euro": "\u20AC",
1836
+ }
1837
+
1838
+ // HTMLAutoClose is the set of HTML elements that
1839
+ // should be considered to close automatically.
1840
+ var HTMLAutoClose = htmlAutoClose
1841
+
1842
+ var htmlAutoClose = []string{
1843
+ /*
1844
+ hget http://www.w3.org/TR/html4/loose.dtd |
1845
+ 9 sed -n 's/<!ELEMENT ([^ ]*) +- O EMPTY.+/ "\1",/p' | tr A-Z a-z
1846
+ */
1847
+ "basefont",
1848
+ "br",
1849
+ "area",
1850
+ "link",
1851
+ "img",
1852
+ "param",
1853
+ "hr",
1854
+ "input",
1855
+ "col",
1856
+ "frame",
1857
+ "isindex",
1858
+ "base",
1859
+ "meta",
1860
+ }
1861
+
1862
+ var (
1863
+ esc_quot = []byte("&#34;") // shorter than "&quot;"
1864
+ esc_apos = []byte("&#39;") // shorter than "&apos;"
1865
+ esc_amp = []byte("&amp;")
1866
+ esc_lt = []byte("&lt;")
1867
+ esc_gt = []byte("&gt;")
1868
+ esc_tab = []byte("&#x9;")
1869
+ esc_nl = []byte("&#xA;")
1870
+ esc_cr = []byte("&#xD;")
1871
+ esc_fffd = []byte("\uFFFD") // Unicode replacement character
1872
+ )
1873
+
1874
+ // EscapeText writes to w the properly escaped XML equivalent
1875
+ // of the plain text data s.
1876
+ func EscapeText(w io.Writer, s []byte) error {
1877
+ return escapeText(w, s, true)
1878
+ }
1879
+
1880
+ // escapeText writes to w the properly escaped XML equivalent
1881
+ // of the plain text data s. If escapeNewline is true, newline
1882
+ // characters will be escaped.
1883
+ func escapeText(w io.Writer, s []byte, escapeNewline bool) error {
1884
+ var esc []byte
1885
+ last := 0
1886
+ for i := 0; i < len(s); {
1887
+ r, width := utf8.DecodeRune(s[i:])
1888
+ i += width
1889
+ switch r {
1890
+ case '"':
1891
+ esc = esc_quot
1892
+ case '\'':
1893
+ esc = esc_apos
1894
+ case '&':
1895
+ esc = esc_amp
1896
+ case '<':
1897
+ esc = esc_lt
1898
+ case '>':
1899
+ esc = esc_gt
1900
+ case '\t':
1901
+ esc = esc_tab
1902
+ case '\n':
1903
+ if !escapeNewline {
1904
+ continue
1905
+ }
1906
+ esc = esc_nl
1907
+ case '\r':
1908
+ esc = esc_cr
1909
+ default:
1910
+ if !isInCharacterRange(r) || (r == 0xFFFD && width == 1) {
1911
+ esc = esc_fffd
1912
+ break
1913
+ }
1914
+ continue
1915
+ }
1916
+ if _, err := w.Write(s[last : i-width]); err != nil {
1917
+ return err
1918
+ }
1919
+ if _, err := w.Write(esc); err != nil {
1920
+ return err
1921
+ }
1922
+ last = i
1923
+ }
1924
+ if _, err := w.Write(s[last:]); err != nil {
1925
+ return err
1926
+ }
1927
+ return nil
1928
+ }
1929
+
1930
+ // EscapeString writes to p the properly escaped XML equivalent
1931
+ // of the plain text data s.
1932
+ func (p *printer) EscapeString(s string) {
1933
+ var esc []byte
1934
+ last := 0
1935
+ for i := 0; i < len(s); {
1936
+ r, width := utf8.DecodeRuneInString(s[i:])
1937
+ i += width
1938
+ switch r {
1939
+ case '"':
1940
+ esc = esc_quot
1941
+ case '\'':
1942
+ esc = esc_apos
1943
+ case '&':
1944
+ esc = esc_amp
1945
+ case '<':
1946
+ esc = esc_lt
1947
+ case '>':
1948
+ esc = esc_gt
1949
+ case '\t':
1950
+ esc = esc_tab
1951
+ case '\n':
1952
+ esc = esc_nl
1953
+ case '\r':
1954
+ esc = esc_cr
1955
+ default:
1956
+ if !isInCharacterRange(r) || (r == 0xFFFD && width == 1) {
1957
+ esc = esc_fffd
1958
+ break
1959
+ }
1960
+ continue
1961
+ }
1962
+ p.WriteString(s[last : i-width])
1963
+ p.Write(esc)
1964
+ last = i
1965
+ }
1966
+ p.WriteString(s[last:])
1967
+ }
1968
+
1969
+ // Escape is like EscapeText but omits the error return value.
1970
+ // It is provided for backwards compatibility with Go 1.0.
1971
+ // Code targeting Go 1.1 or later should use EscapeText.
1972
+ func Escape(w io.Writer, s []byte) {
1973
+ EscapeText(w, s)
1974
+ }
1975
+
1976
+ // procInst parses the `param="..."` or `param='...'`
1977
+ // value out of the provided string, returning "" if not found.
1978
+ func procInst(param, s string) string {
1979
+ // TODO: this parsing is somewhat lame and not exact.
1980
+ // It works for all actual cases, though.
1981
+ param = param + "="
1982
+ idx := strings.Index(s, param)
1983
+ if idx == -1 {
1984
+ return ""
1985
+ }
1986
+ v := s[idx+len(param):]
1987
+ if v == "" {
1988
+ return ""
1989
+ }
1990
+ if v[0] != '\'' && v[0] != '"' {
1991
+ return ""
1992
+ }
1993
+ idx = strings.IndexRune(v[1:], rune(v[0]))
1994
+ if idx == -1 {
1995
+ return ""
1996
+ }
1997
+ return v[1 : idx+1]
1998
+ }