ires 0.1.3 → 0.1.4

Sign up to get free protection for your applications and to get access to all the features.
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
+ }