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,11 @@
1
+ This is a fork of the encoding/xml package at ca1d6c4, the last commit before
2
+ https://go.googlesource.com/go/+/c0d6d33 "encoding/xml: restore Go 1.4 name
3
+ space behavior" made late in the lead-up to the Go 1.5 release.
4
+
5
+ The list of encoding/xml changes is at
6
+ https://go.googlesource.com/go/+log/master/src/encoding/xml
7
+
8
+ This fork is temporary, and I (nigeltao) expect to revert it after Go 1.6 is
9
+ released.
10
+
11
+ See http://golang.org/issue/11841
@@ -0,0 +1,56 @@
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 "time"
8
+
9
+ var atomValue = &Feed{
10
+ XMLName: Name{"http://www.w3.org/2005/Atom", "feed"},
11
+ Title: "Example Feed",
12
+ Link: []Link{{Href: "http://example.org/"}},
13
+ Updated: ParseTime("2003-12-13T18:30:02Z"),
14
+ Author: Person{Name: "John Doe"},
15
+ Id: "urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6",
16
+
17
+ Entry: []Entry{
18
+ {
19
+ Title: "Atom-Powered Robots Run Amok",
20
+ Link: []Link{{Href: "http://example.org/2003/12/13/atom03"}},
21
+ Id: "urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a",
22
+ Updated: ParseTime("2003-12-13T18:30:02Z"),
23
+ Summary: NewText("Some text."),
24
+ },
25
+ },
26
+ }
27
+
28
+ var atomXml = `` +
29
+ `<feed xmlns="http://www.w3.org/2005/Atom" updated="2003-12-13T18:30:02Z">` +
30
+ `<title>Example Feed</title>` +
31
+ `<id>urn:uuid:60a76c80-d399-11d9-b93C-0003939e0af6</id>` +
32
+ `<link href="http://example.org/"></link>` +
33
+ `<author><name>John Doe</name><uri></uri><email></email></author>` +
34
+ `<entry>` +
35
+ `<title>Atom-Powered Robots Run Amok</title>` +
36
+ `<id>urn:uuid:1225c695-cfb8-4ebb-aaaa-80da344efa6a</id>` +
37
+ `<link href="http://example.org/2003/12/13/atom03"></link>` +
38
+ `<updated>2003-12-13T18:30:02Z</updated>` +
39
+ `<author><name></name><uri></uri><email></email></author>` +
40
+ `<summary>Some text.</summary>` +
41
+ `</entry>` +
42
+ `</feed>`
43
+
44
+ func ParseTime(str string) time.Time {
45
+ t, err := time.Parse(time.RFC3339, str)
46
+ if err != nil {
47
+ panic(err)
48
+ }
49
+ return t
50
+ }
51
+
52
+ func NewText(text string) Text {
53
+ return Text{
54
+ Body: text,
55
+ }
56
+ }
@@ -0,0 +1,151 @@
1
+ // Copyright 2012 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_test
6
+
7
+ import (
8
+ "encoding/xml"
9
+ "fmt"
10
+ "os"
11
+ )
12
+
13
+ func ExampleMarshalIndent() {
14
+ type Address struct {
15
+ City, State string
16
+ }
17
+ type Person struct {
18
+ XMLName xml.Name `xml:"person"`
19
+ Id int `xml:"id,attr"`
20
+ FirstName string `xml:"name>first"`
21
+ LastName string `xml:"name>last"`
22
+ Age int `xml:"age"`
23
+ Height float32 `xml:"height,omitempty"`
24
+ Married bool
25
+ Address
26
+ Comment string `xml:",comment"`
27
+ }
28
+
29
+ v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42}
30
+ v.Comment = " Need more details. "
31
+ v.Address = Address{"Hanga Roa", "Easter Island"}
32
+
33
+ output, err := xml.MarshalIndent(v, " ", " ")
34
+ if err != nil {
35
+ fmt.Printf("error: %v\n", err)
36
+ }
37
+
38
+ os.Stdout.Write(output)
39
+ // Output:
40
+ // <person id="13">
41
+ // <name>
42
+ // <first>John</first>
43
+ // <last>Doe</last>
44
+ // </name>
45
+ // <age>42</age>
46
+ // <Married>false</Married>
47
+ // <City>Hanga Roa</City>
48
+ // <State>Easter Island</State>
49
+ // <!-- Need more details. -->
50
+ // </person>
51
+ }
52
+
53
+ func ExampleEncoder() {
54
+ type Address struct {
55
+ City, State string
56
+ }
57
+ type Person struct {
58
+ XMLName xml.Name `xml:"person"`
59
+ Id int `xml:"id,attr"`
60
+ FirstName string `xml:"name>first"`
61
+ LastName string `xml:"name>last"`
62
+ Age int `xml:"age"`
63
+ Height float32 `xml:"height,omitempty"`
64
+ Married bool
65
+ Address
66
+ Comment string `xml:",comment"`
67
+ }
68
+
69
+ v := &Person{Id: 13, FirstName: "John", LastName: "Doe", Age: 42}
70
+ v.Comment = " Need more details. "
71
+ v.Address = Address{"Hanga Roa", "Easter Island"}
72
+
73
+ enc := xml.NewEncoder(os.Stdout)
74
+ enc.Indent(" ", " ")
75
+ if err := enc.Encode(v); err != nil {
76
+ fmt.Printf("error: %v\n", err)
77
+ }
78
+
79
+ // Output:
80
+ // <person id="13">
81
+ // <name>
82
+ // <first>John</first>
83
+ // <last>Doe</last>
84
+ // </name>
85
+ // <age>42</age>
86
+ // <Married>false</Married>
87
+ // <City>Hanga Roa</City>
88
+ // <State>Easter Island</State>
89
+ // <!-- Need more details. -->
90
+ // </person>
91
+ }
92
+
93
+ // This example demonstrates unmarshaling an XML excerpt into a value with
94
+ // some preset fields. Note that the Phone field isn't modified and that
95
+ // the XML <Company> element is ignored. Also, the Groups field is assigned
96
+ // considering the element path provided in its tag.
97
+ func ExampleUnmarshal() {
98
+ type Email struct {
99
+ Where string `xml:"where,attr"`
100
+ Addr string
101
+ }
102
+ type Address struct {
103
+ City, State string
104
+ }
105
+ type Result struct {
106
+ XMLName xml.Name `xml:"Person"`
107
+ Name string `xml:"FullName"`
108
+ Phone string
109
+ Email []Email
110
+ Groups []string `xml:"Group>Value"`
111
+ Address
112
+ }
113
+ v := Result{Name: "none", Phone: "none"}
114
+
115
+ data := `
116
+ <Person>
117
+ <FullName>Grace R. Emlin</FullName>
118
+ <Company>Example Inc.</Company>
119
+ <Email where="home">
120
+ <Addr>gre@example.com</Addr>
121
+ </Email>
122
+ <Email where='work'>
123
+ <Addr>gre@work.com</Addr>
124
+ </Email>
125
+ <Group>
126
+ <Value>Friends</Value>
127
+ <Value>Squash</Value>
128
+ </Group>
129
+ <City>Hanga Roa</City>
130
+ <State>Easter Island</State>
131
+ </Person>
132
+ `
133
+ err := xml.Unmarshal([]byte(data), &v)
134
+ if err != nil {
135
+ fmt.Printf("error: %v", err)
136
+ return
137
+ }
138
+ fmt.Printf("XMLName: %#v\n", v.XMLName)
139
+ fmt.Printf("Name: %q\n", v.Name)
140
+ fmt.Printf("Phone: %q\n", v.Phone)
141
+ fmt.Printf("Email: %v\n", v.Email)
142
+ fmt.Printf("Groups: %v\n", v.Groups)
143
+ fmt.Printf("Address: %v\n", v.Address)
144
+ // Output:
145
+ // XMLName: xml.Name{Space:"", Local:"Person"}
146
+ // Name: "Grace R. Emlin"
147
+ // Phone: "none"
148
+ // Email: [{home gre@example.com} {work gre@work.com}]
149
+ // Groups: [Friends Squash]
150
+ // Address: {Hanga Roa Easter Island}
151
+ }
@@ -0,0 +1,1223 @@
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
+ "bufio"
9
+ "bytes"
10
+ "encoding"
11
+ "fmt"
12
+ "io"
13
+ "reflect"
14
+ "strconv"
15
+ "strings"
16
+ )
17
+
18
+ const (
19
+ // A generic XML header suitable for use with the output of Marshal.
20
+ // This is not automatically added to any output of this package,
21
+ // it is provided as a convenience.
22
+ Header = `<?xml version="1.0" encoding="UTF-8"?>` + "\n"
23
+ )
24
+
25
+ // Marshal returns the XML encoding of v.
26
+ //
27
+ // Marshal handles an array or slice by marshalling each of the elements.
28
+ // Marshal handles a pointer by marshalling the value it points at or, if the
29
+ // pointer is nil, by writing nothing. Marshal handles an interface value by
30
+ // marshalling the value it contains or, if the interface value is nil, by
31
+ // writing nothing. Marshal handles all other data by writing one or more XML
32
+ // elements containing the data.
33
+ //
34
+ // The name for the XML elements is taken from, in order of preference:
35
+ // - the tag on the XMLName field, if the data is a struct
36
+ // - the value of the XMLName field of type xml.Name
37
+ // - the tag of the struct field used to obtain the data
38
+ // - the name of the struct field used to obtain the data
39
+ // - the name of the marshalled type
40
+ //
41
+ // The XML element for a struct contains marshalled elements for each of the
42
+ // exported fields of the struct, with these exceptions:
43
+ // - the XMLName field, described above, is omitted.
44
+ // - a field with tag "-" is omitted.
45
+ // - a field with tag "name,attr" becomes an attribute with
46
+ // the given name in the XML element.
47
+ // - a field with tag ",attr" becomes an attribute with the
48
+ // field name in the XML element.
49
+ // - a field with tag ",chardata" is written as character data,
50
+ // not as an XML element.
51
+ // - a field with tag ",innerxml" is written verbatim, not subject
52
+ // to the usual marshalling procedure.
53
+ // - a field with tag ",comment" is written as an XML comment, not
54
+ // subject to the usual marshalling procedure. It must not contain
55
+ // the "--" string within it.
56
+ // - a field with a tag including the "omitempty" option is omitted
57
+ // if the field value is empty. The empty values are false, 0, any
58
+ // nil pointer or interface value, and any array, slice, map, or
59
+ // string of length zero.
60
+ // - an anonymous struct field is handled as if the fields of its
61
+ // value were part of the outer struct.
62
+ //
63
+ // If a field uses a tag "a>b>c", then the element c will be nested inside
64
+ // parent elements a and b. Fields that appear next to each other that name
65
+ // the same parent will be enclosed in one XML element.
66
+ //
67
+ // See MarshalIndent for an example.
68
+ //
69
+ // Marshal will return an error if asked to marshal a channel, function, or map.
70
+ func Marshal(v interface{}) ([]byte, error) {
71
+ var b bytes.Buffer
72
+ if err := NewEncoder(&b).Encode(v); err != nil {
73
+ return nil, err
74
+ }
75
+ return b.Bytes(), nil
76
+ }
77
+
78
+ // Marshaler is the interface implemented by objects that can marshal
79
+ // themselves into valid XML elements.
80
+ //
81
+ // MarshalXML encodes the receiver as zero or more XML elements.
82
+ // By convention, arrays or slices are typically encoded as a sequence
83
+ // of elements, one per entry.
84
+ // Using start as the element tag is not required, but doing so
85
+ // will enable Unmarshal to match the XML elements to the correct
86
+ // struct field.
87
+ // One common implementation strategy is to construct a separate
88
+ // value with a layout corresponding to the desired XML and then
89
+ // to encode it using e.EncodeElement.
90
+ // Another common strategy is to use repeated calls to e.EncodeToken
91
+ // to generate the XML output one token at a time.
92
+ // The sequence of encoded tokens must make up zero or more valid
93
+ // XML elements.
94
+ type Marshaler interface {
95
+ MarshalXML(e *Encoder, start StartElement) error
96
+ }
97
+
98
+ // MarshalerAttr is the interface implemented by objects that can marshal
99
+ // themselves into valid XML attributes.
100
+ //
101
+ // MarshalXMLAttr returns an XML attribute with the encoded value of the receiver.
102
+ // Using name as the attribute name is not required, but doing so
103
+ // will enable Unmarshal to match the attribute to the correct
104
+ // struct field.
105
+ // If MarshalXMLAttr returns the zero attribute Attr{}, no attribute
106
+ // will be generated in the output.
107
+ // MarshalXMLAttr is used only for struct fields with the
108
+ // "attr" option in the field tag.
109
+ type MarshalerAttr interface {
110
+ MarshalXMLAttr(name Name) (Attr, error)
111
+ }
112
+
113
+ // MarshalIndent works like Marshal, but each XML element begins on a new
114
+ // indented line that starts with prefix and is followed by one or more
115
+ // copies of indent according to the nesting depth.
116
+ func MarshalIndent(v interface{}, prefix, indent string) ([]byte, error) {
117
+ var b bytes.Buffer
118
+ enc := NewEncoder(&b)
119
+ enc.Indent(prefix, indent)
120
+ if err := enc.Encode(v); err != nil {
121
+ return nil, err
122
+ }
123
+ return b.Bytes(), nil
124
+ }
125
+
126
+ // An Encoder writes XML data to an output stream.
127
+ type Encoder struct {
128
+ p printer
129
+ }
130
+
131
+ // NewEncoder returns a new encoder that writes to w.
132
+ func NewEncoder(w io.Writer) *Encoder {
133
+ e := &Encoder{printer{Writer: bufio.NewWriter(w)}}
134
+ e.p.encoder = e
135
+ return e
136
+ }
137
+
138
+ // Indent sets the encoder to generate XML in which each element
139
+ // begins on a new indented line that starts with prefix and is followed by
140
+ // one or more copies of indent according to the nesting depth.
141
+ func (enc *Encoder) Indent(prefix, indent string) {
142
+ enc.p.prefix = prefix
143
+ enc.p.indent = indent
144
+ }
145
+
146
+ // Encode writes the XML encoding of v to the stream.
147
+ //
148
+ // See the documentation for Marshal for details about the conversion
149
+ // of Go values to XML.
150
+ //
151
+ // Encode calls Flush before returning.
152
+ func (enc *Encoder) Encode(v interface{}) error {
153
+ err := enc.p.marshalValue(reflect.ValueOf(v), nil, nil)
154
+ if err != nil {
155
+ return err
156
+ }
157
+ return enc.p.Flush()
158
+ }
159
+
160
+ // EncodeElement writes the XML encoding of v to the stream,
161
+ // using start as the outermost tag in the encoding.
162
+ //
163
+ // See the documentation for Marshal for details about the conversion
164
+ // of Go values to XML.
165
+ //
166
+ // EncodeElement calls Flush before returning.
167
+ func (enc *Encoder) EncodeElement(v interface{}, start StartElement) error {
168
+ err := enc.p.marshalValue(reflect.ValueOf(v), nil, &start)
169
+ if err != nil {
170
+ return err
171
+ }
172
+ return enc.p.Flush()
173
+ }
174
+
175
+ var (
176
+ begComment = []byte("<!--")
177
+ endComment = []byte("-->")
178
+ endProcInst = []byte("?>")
179
+ endDirective = []byte(">")
180
+ )
181
+
182
+ // EncodeToken writes the given XML token to the stream.
183
+ // It returns an error if StartElement and EndElement tokens are not
184
+ // properly matched.
185
+ //
186
+ // EncodeToken does not call Flush, because usually it is part of a
187
+ // larger operation such as Encode or EncodeElement (or a custom
188
+ // Marshaler's MarshalXML invoked during those), and those will call
189
+ // Flush when finished. Callers that create an Encoder and then invoke
190
+ // EncodeToken directly, without using Encode or EncodeElement, need to
191
+ // call Flush when finished to ensure that the XML is written to the
192
+ // underlying writer.
193
+ //
194
+ // EncodeToken allows writing a ProcInst with Target set to "xml" only
195
+ // as the first token in the stream.
196
+ //
197
+ // When encoding a StartElement holding an XML namespace prefix
198
+ // declaration for a prefix that is not already declared, contained
199
+ // elements (including the StartElement itself) will use the declared
200
+ // prefix when encoding names with matching namespace URIs.
201
+ func (enc *Encoder) EncodeToken(t Token) error {
202
+
203
+ p := &enc.p
204
+ switch t := t.(type) {
205
+ case StartElement:
206
+ if err := p.writeStart(&t); err != nil {
207
+ return err
208
+ }
209
+ case EndElement:
210
+ if err := p.writeEnd(t.Name); err != nil {
211
+ return err
212
+ }
213
+ case CharData:
214
+ escapeText(p, t, false)
215
+ case Comment:
216
+ if bytes.Contains(t, endComment) {
217
+ return fmt.Errorf("xml: EncodeToken of Comment containing --> marker")
218
+ }
219
+ p.WriteString("<!--")
220
+ p.Write(t)
221
+ p.WriteString("-->")
222
+ return p.cachedWriteError()
223
+ case ProcInst:
224
+ // First token to be encoded which is also a ProcInst with target of xml
225
+ // is the xml declaration. The only ProcInst where target of xml is allowed.
226
+ if t.Target == "xml" && p.Buffered() != 0 {
227
+ return fmt.Errorf("xml: EncodeToken of ProcInst xml target only valid for xml declaration, first token encoded")
228
+ }
229
+ if !isNameString(t.Target) {
230
+ return fmt.Errorf("xml: EncodeToken of ProcInst with invalid Target")
231
+ }
232
+ if bytes.Contains(t.Inst, endProcInst) {
233
+ return fmt.Errorf("xml: EncodeToken of ProcInst containing ?> marker")
234
+ }
235
+ p.WriteString("<?")
236
+ p.WriteString(t.Target)
237
+ if len(t.Inst) > 0 {
238
+ p.WriteByte(' ')
239
+ p.Write(t.Inst)
240
+ }
241
+ p.WriteString("?>")
242
+ case Directive:
243
+ if !isValidDirective(t) {
244
+ return fmt.Errorf("xml: EncodeToken of Directive containing wrong < or > markers")
245
+ }
246
+ p.WriteString("<!")
247
+ p.Write(t)
248
+ p.WriteString(">")
249
+ default:
250
+ return fmt.Errorf("xml: EncodeToken of invalid token type")
251
+
252
+ }
253
+ return p.cachedWriteError()
254
+ }
255
+
256
+ // isValidDirective reports whether dir is a valid directive text,
257
+ // meaning angle brackets are matched, ignoring comments and strings.
258
+ func isValidDirective(dir Directive) bool {
259
+ var (
260
+ depth int
261
+ inquote uint8
262
+ incomment bool
263
+ )
264
+ for i, c := range dir {
265
+ switch {
266
+ case incomment:
267
+ if c == '>' {
268
+ if n := 1 + i - len(endComment); n >= 0 && bytes.Equal(dir[n:i+1], endComment) {
269
+ incomment = false
270
+ }
271
+ }
272
+ // Just ignore anything in comment
273
+ case inquote != 0:
274
+ if c == inquote {
275
+ inquote = 0
276
+ }
277
+ // Just ignore anything within quotes
278
+ case c == '\'' || c == '"':
279
+ inquote = c
280
+ case c == '<':
281
+ if i+len(begComment) < len(dir) && bytes.Equal(dir[i:i+len(begComment)], begComment) {
282
+ incomment = true
283
+ } else {
284
+ depth++
285
+ }
286
+ case c == '>':
287
+ if depth == 0 {
288
+ return false
289
+ }
290
+ depth--
291
+ }
292
+ }
293
+ return depth == 0 && inquote == 0 && !incomment
294
+ }
295
+
296
+ // Flush flushes any buffered XML to the underlying writer.
297
+ // See the EncodeToken documentation for details about when it is necessary.
298
+ func (enc *Encoder) Flush() error {
299
+ return enc.p.Flush()
300
+ }
301
+
302
+ type printer struct {
303
+ *bufio.Writer
304
+ encoder *Encoder
305
+ seq int
306
+ indent string
307
+ prefix string
308
+ depth int
309
+ indentedIn bool
310
+ putNewline bool
311
+ defaultNS string
312
+ attrNS map[string]string // map prefix -> name space
313
+ attrPrefix map[string]string // map name space -> prefix
314
+ prefixes []printerPrefix
315
+ tags []Name
316
+ }
317
+
318
+ // printerPrefix holds a namespace undo record.
319
+ // When an element is popped, the prefix record
320
+ // is set back to the recorded URL. The empty
321
+ // prefix records the URL for the default name space.
322
+ //
323
+ // The start of an element is recorded with an element
324
+ // that has mark=true.
325
+ type printerPrefix struct {
326
+ prefix string
327
+ url string
328
+ mark bool
329
+ }
330
+
331
+ func (p *printer) prefixForNS(url string, isAttr bool) string {
332
+ // The "http://www.w3.org/XML/1998/namespace" name space is predefined as "xml"
333
+ // and must be referred to that way.
334
+ // (The "http://www.w3.org/2000/xmlns/" name space is also predefined as "xmlns",
335
+ // but users should not be trying to use that one directly - that's our job.)
336
+ if url == xmlURL {
337
+ return "xml"
338
+ }
339
+ if !isAttr && url == p.defaultNS {
340
+ // We can use the default name space.
341
+ return ""
342
+ }
343
+ return p.attrPrefix[url]
344
+ }
345
+
346
+ // defineNS pushes any namespace definition found in the given attribute.
347
+ // If ignoreNonEmptyDefault is true, an xmlns="nonempty"
348
+ // attribute will be ignored.
349
+ func (p *printer) defineNS(attr Attr, ignoreNonEmptyDefault bool) error {
350
+ var prefix string
351
+ if attr.Name.Local == "xmlns" {
352
+ if attr.Name.Space != "" && attr.Name.Space != "xml" && attr.Name.Space != xmlURL {
353
+ return fmt.Errorf("xml: cannot redefine xmlns attribute prefix")
354
+ }
355
+ } else if attr.Name.Space == "xmlns" && attr.Name.Local != "" {
356
+ prefix = attr.Name.Local
357
+ if attr.Value == "" {
358
+ // Technically, an empty XML namespace is allowed for an attribute.
359
+ // From http://www.w3.org/TR/xml-names11/#scoping-defaulting:
360
+ //
361
+ // The attribute value in a namespace declaration for a prefix may be
362
+ // empty. This has the effect, within the scope of the declaration, of removing
363
+ // any association of the prefix with a namespace name.
364
+ //
365
+ // However our namespace prefixes here are used only as hints. There's
366
+ // no need to respect the removal of a namespace prefix, so we ignore it.
367
+ return nil
368
+ }
369
+ } else {
370
+ // Ignore: it's not a namespace definition
371
+ return nil
372
+ }
373
+ if prefix == "" {
374
+ if attr.Value == p.defaultNS {
375
+ // No need for redefinition.
376
+ return nil
377
+ }
378
+ if attr.Value != "" && ignoreNonEmptyDefault {
379
+ // We have an xmlns="..." value but
380
+ // it can't define a name space in this context,
381
+ // probably because the element has an empty
382
+ // name space. In this case, we just ignore
383
+ // the name space declaration.
384
+ return nil
385
+ }
386
+ } else if _, ok := p.attrPrefix[attr.Value]; ok {
387
+ // There's already a prefix for the given name space,
388
+ // so use that. This prevents us from
389
+ // having two prefixes for the same name space
390
+ // so attrNS and attrPrefix can remain bijective.
391
+ return nil
392
+ }
393
+ p.pushPrefix(prefix, attr.Value)
394
+ return nil
395
+ }
396
+
397
+ // createNSPrefix creates a name space prefix attribute
398
+ // to use for the given name space, defining a new prefix
399
+ // if necessary.
400
+ // If isAttr is true, the prefix is to be created for an attribute
401
+ // prefix, which means that the default name space cannot
402
+ // be used.
403
+ func (p *printer) createNSPrefix(url string, isAttr bool) {
404
+ if _, ok := p.attrPrefix[url]; ok {
405
+ // We already have a prefix for the given URL.
406
+ return
407
+ }
408
+ switch {
409
+ case !isAttr && url == p.defaultNS:
410
+ // We can use the default name space.
411
+ return
412
+ case url == "":
413
+ // The only way we can encode names in the empty
414
+ // name space is by using the default name space,
415
+ // so we must use that.
416
+ if p.defaultNS != "" {
417
+ // The default namespace is non-empty, so we
418
+ // need to set it to empty.
419
+ p.pushPrefix("", "")
420
+ }
421
+ return
422
+ case url == xmlURL:
423
+ return
424
+ }
425
+ // TODO If the URL is an existing prefix, we could
426
+ // use it as is. That would enable the
427
+ // marshaling of elements that had been unmarshaled
428
+ // and with a name space prefix that was not found.
429
+ // although technically it would be incorrect.
430
+
431
+ // Pick a name. We try to use the final element of the path
432
+ // but fall back to _.
433
+ prefix := strings.TrimRight(url, "/")
434
+ if i := strings.LastIndex(prefix, "/"); i >= 0 {
435
+ prefix = prefix[i+1:]
436
+ }
437
+ if prefix == "" || !isName([]byte(prefix)) || strings.Contains(prefix, ":") {
438
+ prefix = "_"
439
+ }
440
+ if strings.HasPrefix(prefix, "xml") {
441
+ // xmlanything is reserved.
442
+ prefix = "_" + prefix
443
+ }
444
+ if p.attrNS[prefix] != "" {
445
+ // Name is taken. Find a better one.
446
+ for p.seq++; ; p.seq++ {
447
+ if id := prefix + "_" + strconv.Itoa(p.seq); p.attrNS[id] == "" {
448
+ prefix = id
449
+ break
450
+ }
451
+ }
452
+ }
453
+
454
+ p.pushPrefix(prefix, url)
455
+ }
456
+
457
+ // writeNamespaces writes xmlns attributes for all the
458
+ // namespace prefixes that have been defined in
459
+ // the current element.
460
+ func (p *printer) writeNamespaces() {
461
+ for i := len(p.prefixes) - 1; i >= 0; i-- {
462
+ prefix := p.prefixes[i]
463
+ if prefix.mark {
464
+ return
465
+ }
466
+ p.WriteString(" ")
467
+ if prefix.prefix == "" {
468
+ // Default name space.
469
+ p.WriteString(`xmlns="`)
470
+ } else {
471
+ p.WriteString("xmlns:")
472
+ p.WriteString(prefix.prefix)
473
+ p.WriteString(`="`)
474
+ }
475
+ EscapeText(p, []byte(p.nsForPrefix(prefix.prefix)))
476
+ p.WriteString(`"`)
477
+ }
478
+ }
479
+
480
+ // pushPrefix pushes a new prefix on the prefix stack
481
+ // without checking to see if it is already defined.
482
+ func (p *printer) pushPrefix(prefix, url string) {
483
+ p.prefixes = append(p.prefixes, printerPrefix{
484
+ prefix: prefix,
485
+ url: p.nsForPrefix(prefix),
486
+ })
487
+ p.setAttrPrefix(prefix, url)
488
+ }
489
+
490
+ // nsForPrefix returns the name space for the given
491
+ // prefix. Note that this is not valid for the
492
+ // empty attribute prefix, which always has an empty
493
+ // name space.
494
+ func (p *printer) nsForPrefix(prefix string) string {
495
+ if prefix == "" {
496
+ return p.defaultNS
497
+ }
498
+ return p.attrNS[prefix]
499
+ }
500
+
501
+ // markPrefix marks the start of an element on the prefix
502
+ // stack.
503
+ func (p *printer) markPrefix() {
504
+ p.prefixes = append(p.prefixes, printerPrefix{
505
+ mark: true,
506
+ })
507
+ }
508
+
509
+ // popPrefix pops all defined prefixes for the current
510
+ // element.
511
+ func (p *printer) popPrefix() {
512
+ for len(p.prefixes) > 0 {
513
+ prefix := p.prefixes[len(p.prefixes)-1]
514
+ p.prefixes = p.prefixes[:len(p.prefixes)-1]
515
+ if prefix.mark {
516
+ break
517
+ }
518
+ p.setAttrPrefix(prefix.prefix, prefix.url)
519
+ }
520
+ }
521
+
522
+ // setAttrPrefix sets an attribute name space prefix.
523
+ // If url is empty, the attribute is removed.
524
+ // If prefix is empty, the default name space is set.
525
+ func (p *printer) setAttrPrefix(prefix, url string) {
526
+ if prefix == "" {
527
+ p.defaultNS = url
528
+ return
529
+ }
530
+ if url == "" {
531
+ delete(p.attrPrefix, p.attrNS[prefix])
532
+ delete(p.attrNS, prefix)
533
+ return
534
+ }
535
+ if p.attrPrefix == nil {
536
+ // Need to define a new name space.
537
+ p.attrPrefix = make(map[string]string)
538
+ p.attrNS = make(map[string]string)
539
+ }
540
+ // Remove any old prefix value. This is OK because we maintain a
541
+ // strict one-to-one mapping between prefix and URL (see
542
+ // defineNS)
543
+ delete(p.attrPrefix, p.attrNS[prefix])
544
+ p.attrPrefix[url] = prefix
545
+ p.attrNS[prefix] = url
546
+ }
547
+
548
+ var (
549
+ marshalerType = reflect.TypeOf((*Marshaler)(nil)).Elem()
550
+ marshalerAttrType = reflect.TypeOf((*MarshalerAttr)(nil)).Elem()
551
+ textMarshalerType = reflect.TypeOf((*encoding.TextMarshaler)(nil)).Elem()
552
+ )
553
+
554
+ // marshalValue writes one or more XML elements representing val.
555
+ // If val was obtained from a struct field, finfo must have its details.
556
+ func (p *printer) marshalValue(val reflect.Value, finfo *fieldInfo, startTemplate *StartElement) error {
557
+ if startTemplate != nil && startTemplate.Name.Local == "" {
558
+ return fmt.Errorf("xml: EncodeElement of StartElement with missing name")
559
+ }
560
+
561
+ if !val.IsValid() {
562
+ return nil
563
+ }
564
+ if finfo != nil && finfo.flags&fOmitEmpty != 0 && isEmptyValue(val) {
565
+ return nil
566
+ }
567
+
568
+ // Drill into interfaces and pointers.
569
+ // This can turn into an infinite loop given a cyclic chain,
570
+ // but it matches the Go 1 behavior.
571
+ for val.Kind() == reflect.Interface || val.Kind() == reflect.Ptr {
572
+ if val.IsNil() {
573
+ return nil
574
+ }
575
+ val = val.Elem()
576
+ }
577
+
578
+ kind := val.Kind()
579
+ typ := val.Type()
580
+
581
+ // Check for marshaler.
582
+ if val.CanInterface() && typ.Implements(marshalerType) {
583
+ return p.marshalInterface(val.Interface().(Marshaler), p.defaultStart(typ, finfo, startTemplate))
584
+ }
585
+ if val.CanAddr() {
586
+ pv := val.Addr()
587
+ if pv.CanInterface() && pv.Type().Implements(marshalerType) {
588
+ return p.marshalInterface(pv.Interface().(Marshaler), p.defaultStart(pv.Type(), finfo, startTemplate))
589
+ }
590
+ }
591
+
592
+ // Check for text marshaler.
593
+ if val.CanInterface() && typ.Implements(textMarshalerType) {
594
+ return p.marshalTextInterface(val.Interface().(encoding.TextMarshaler), p.defaultStart(typ, finfo, startTemplate))
595
+ }
596
+ if val.CanAddr() {
597
+ pv := val.Addr()
598
+ if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
599
+ return p.marshalTextInterface(pv.Interface().(encoding.TextMarshaler), p.defaultStart(pv.Type(), finfo, startTemplate))
600
+ }
601
+ }
602
+
603
+ // Slices and arrays iterate over the elements. They do not have an enclosing tag.
604
+ if (kind == reflect.Slice || kind == reflect.Array) && typ.Elem().Kind() != reflect.Uint8 {
605
+ for i, n := 0, val.Len(); i < n; i++ {
606
+ if err := p.marshalValue(val.Index(i), finfo, startTemplate); err != nil {
607
+ return err
608
+ }
609
+ }
610
+ return nil
611
+ }
612
+
613
+ tinfo, err := getTypeInfo(typ)
614
+ if err != nil {
615
+ return err
616
+ }
617
+
618
+ // Create start element.
619
+ // Precedence for the XML element name is:
620
+ // 0. startTemplate
621
+ // 1. XMLName field in underlying struct;
622
+ // 2. field name/tag in the struct field; and
623
+ // 3. type name
624
+ var start StartElement
625
+
626
+ // explicitNS records whether the element's name space has been
627
+ // explicitly set (for example an XMLName field).
628
+ explicitNS := false
629
+
630
+ if startTemplate != nil {
631
+ start.Name = startTemplate.Name
632
+ explicitNS = true
633
+ start.Attr = append(start.Attr, startTemplate.Attr...)
634
+ } else if tinfo.xmlname != nil {
635
+ xmlname := tinfo.xmlname
636
+ if xmlname.name != "" {
637
+ start.Name.Space, start.Name.Local = xmlname.xmlns, xmlname.name
638
+ } else if v, ok := xmlname.value(val).Interface().(Name); ok && v.Local != "" {
639
+ start.Name = v
640
+ }
641
+ explicitNS = true
642
+ }
643
+ if start.Name.Local == "" && finfo != nil {
644
+ start.Name.Local = finfo.name
645
+ if finfo.xmlns != "" {
646
+ start.Name.Space = finfo.xmlns
647
+ explicitNS = true
648
+ }
649
+ }
650
+ if start.Name.Local == "" {
651
+ name := typ.Name()
652
+ if name == "" {
653
+ return &UnsupportedTypeError{typ}
654
+ }
655
+ start.Name.Local = name
656
+ }
657
+
658
+ // defaultNS records the default name space as set by a xmlns="..."
659
+ // attribute. We don't set p.defaultNS because we want to let
660
+ // the attribute writing code (in p.defineNS) be solely responsible
661
+ // for maintaining that.
662
+ defaultNS := p.defaultNS
663
+
664
+ // Attributes
665
+ for i := range tinfo.fields {
666
+ finfo := &tinfo.fields[i]
667
+ if finfo.flags&fAttr == 0 {
668
+ continue
669
+ }
670
+ attr, err := p.fieldAttr(finfo, val)
671
+ if err != nil {
672
+ return err
673
+ }
674
+ if attr.Name.Local == "" {
675
+ continue
676
+ }
677
+ start.Attr = append(start.Attr, attr)
678
+ if attr.Name.Space == "" && attr.Name.Local == "xmlns" {
679
+ defaultNS = attr.Value
680
+ }
681
+ }
682
+ if !explicitNS {
683
+ // Historic behavior: elements use the default name space
684
+ // they are contained in by default.
685
+ start.Name.Space = defaultNS
686
+ }
687
+ // Historic behaviour: an element that's in a namespace sets
688
+ // the default namespace for all elements contained within it.
689
+ start.setDefaultNamespace()
690
+
691
+ if err := p.writeStart(&start); err != nil {
692
+ return err
693
+ }
694
+
695
+ if val.Kind() == reflect.Struct {
696
+ err = p.marshalStruct(tinfo, val)
697
+ } else {
698
+ s, b, err1 := p.marshalSimple(typ, val)
699
+ if err1 != nil {
700
+ err = err1
701
+ } else if b != nil {
702
+ EscapeText(p, b)
703
+ } else {
704
+ p.EscapeString(s)
705
+ }
706
+ }
707
+ if err != nil {
708
+ return err
709
+ }
710
+
711
+ if err := p.writeEnd(start.Name); err != nil {
712
+ return err
713
+ }
714
+
715
+ return p.cachedWriteError()
716
+ }
717
+
718
+ // fieldAttr returns the attribute of the given field.
719
+ // If the returned attribute has an empty Name.Local,
720
+ // it should not be used.
721
+ // The given value holds the value containing the field.
722
+ func (p *printer) fieldAttr(finfo *fieldInfo, val reflect.Value) (Attr, error) {
723
+ fv := finfo.value(val)
724
+ name := Name{Space: finfo.xmlns, Local: finfo.name}
725
+ if finfo.flags&fOmitEmpty != 0 && isEmptyValue(fv) {
726
+ return Attr{}, nil
727
+ }
728
+ if fv.Kind() == reflect.Interface && fv.IsNil() {
729
+ return Attr{}, nil
730
+ }
731
+ if fv.CanInterface() && fv.Type().Implements(marshalerAttrType) {
732
+ attr, err := fv.Interface().(MarshalerAttr).MarshalXMLAttr(name)
733
+ return attr, err
734
+ }
735
+ if fv.CanAddr() {
736
+ pv := fv.Addr()
737
+ if pv.CanInterface() && pv.Type().Implements(marshalerAttrType) {
738
+ attr, err := pv.Interface().(MarshalerAttr).MarshalXMLAttr(name)
739
+ return attr, err
740
+ }
741
+ }
742
+ if fv.CanInterface() && fv.Type().Implements(textMarshalerType) {
743
+ text, err := fv.Interface().(encoding.TextMarshaler).MarshalText()
744
+ if err != nil {
745
+ return Attr{}, err
746
+ }
747
+ return Attr{name, string(text)}, nil
748
+ }
749
+ if fv.CanAddr() {
750
+ pv := fv.Addr()
751
+ if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
752
+ text, err := pv.Interface().(encoding.TextMarshaler).MarshalText()
753
+ if err != nil {
754
+ return Attr{}, err
755
+ }
756
+ return Attr{name, string(text)}, nil
757
+ }
758
+ }
759
+ // Dereference or skip nil pointer, interface values.
760
+ switch fv.Kind() {
761
+ case reflect.Ptr, reflect.Interface:
762
+ if fv.IsNil() {
763
+ return Attr{}, nil
764
+ }
765
+ fv = fv.Elem()
766
+ }
767
+ s, b, err := p.marshalSimple(fv.Type(), fv)
768
+ if err != nil {
769
+ return Attr{}, err
770
+ }
771
+ if b != nil {
772
+ s = string(b)
773
+ }
774
+ return Attr{name, s}, nil
775
+ }
776
+
777
+ // defaultStart returns the default start element to use,
778
+ // given the reflect type, field info, and start template.
779
+ func (p *printer) defaultStart(typ reflect.Type, finfo *fieldInfo, startTemplate *StartElement) StartElement {
780
+ var start StartElement
781
+ // Precedence for the XML element name is as above,
782
+ // except that we do not look inside structs for the first field.
783
+ if startTemplate != nil {
784
+ start.Name = startTemplate.Name
785
+ start.Attr = append(start.Attr, startTemplate.Attr...)
786
+ } else if finfo != nil && finfo.name != "" {
787
+ start.Name.Local = finfo.name
788
+ start.Name.Space = finfo.xmlns
789
+ } else if typ.Name() != "" {
790
+ start.Name.Local = typ.Name()
791
+ } else {
792
+ // Must be a pointer to a named type,
793
+ // since it has the Marshaler methods.
794
+ start.Name.Local = typ.Elem().Name()
795
+ }
796
+ // Historic behaviour: elements use the name space of
797
+ // the element they are contained in by default.
798
+ if start.Name.Space == "" {
799
+ start.Name.Space = p.defaultNS
800
+ }
801
+ start.setDefaultNamespace()
802
+ return start
803
+ }
804
+
805
+ // marshalInterface marshals a Marshaler interface value.
806
+ func (p *printer) marshalInterface(val Marshaler, start StartElement) error {
807
+ // Push a marker onto the tag stack so that MarshalXML
808
+ // cannot close the XML tags that it did not open.
809
+ p.tags = append(p.tags, Name{})
810
+ n := len(p.tags)
811
+
812
+ err := val.MarshalXML(p.encoder, start)
813
+ if err != nil {
814
+ return err
815
+ }
816
+
817
+ // Make sure MarshalXML closed all its tags. p.tags[n-1] is the mark.
818
+ if len(p.tags) > n {
819
+ return fmt.Errorf("xml: %s.MarshalXML wrote invalid XML: <%s> not closed", receiverType(val), p.tags[len(p.tags)-1].Local)
820
+ }
821
+ p.tags = p.tags[:n-1]
822
+ return nil
823
+ }
824
+
825
+ // marshalTextInterface marshals a TextMarshaler interface value.
826
+ func (p *printer) marshalTextInterface(val encoding.TextMarshaler, start StartElement) error {
827
+ if err := p.writeStart(&start); err != nil {
828
+ return err
829
+ }
830
+ text, err := val.MarshalText()
831
+ if err != nil {
832
+ return err
833
+ }
834
+ EscapeText(p, text)
835
+ return p.writeEnd(start.Name)
836
+ }
837
+
838
+ // writeStart writes the given start element.
839
+ func (p *printer) writeStart(start *StartElement) error {
840
+ if start.Name.Local == "" {
841
+ return fmt.Errorf("xml: start tag with no name")
842
+ }
843
+
844
+ p.tags = append(p.tags, start.Name)
845
+ p.markPrefix()
846
+ // Define any name spaces explicitly declared in the attributes.
847
+ // We do this as a separate pass so that explicitly declared prefixes
848
+ // will take precedence over implicitly declared prefixes
849
+ // regardless of the order of the attributes.
850
+ ignoreNonEmptyDefault := start.Name.Space == ""
851
+ for _, attr := range start.Attr {
852
+ if err := p.defineNS(attr, ignoreNonEmptyDefault); err != nil {
853
+ return err
854
+ }
855
+ }
856
+ // Define any new name spaces implied by the attributes.
857
+ for _, attr := range start.Attr {
858
+ name := attr.Name
859
+ // From http://www.w3.org/TR/xml-names11/#defaulting
860
+ // "Default namespace declarations do not apply directly
861
+ // to attribute names; the interpretation of unprefixed
862
+ // attributes is determined by the element on which they
863
+ // appear."
864
+ // This means we don't need to create a new namespace
865
+ // when an attribute name space is empty.
866
+ if name.Space != "" && !name.isNamespace() {
867
+ p.createNSPrefix(name.Space, true)
868
+ }
869
+ }
870
+ p.createNSPrefix(start.Name.Space, false)
871
+
872
+ p.writeIndent(1)
873
+ p.WriteByte('<')
874
+ p.writeName(start.Name, false)
875
+ p.writeNamespaces()
876
+ for _, attr := range start.Attr {
877
+ name := attr.Name
878
+ if name.Local == "" || name.isNamespace() {
879
+ // Namespaces have already been written by writeNamespaces above.
880
+ continue
881
+ }
882
+ p.WriteByte(' ')
883
+ p.writeName(name, true)
884
+ p.WriteString(`="`)
885
+ p.EscapeString(attr.Value)
886
+ p.WriteByte('"')
887
+ }
888
+ p.WriteByte('>')
889
+ return nil
890
+ }
891
+
892
+ // writeName writes the given name. It assumes
893
+ // that p.createNSPrefix(name) has already been called.
894
+ func (p *printer) writeName(name Name, isAttr bool) {
895
+ if prefix := p.prefixForNS(name.Space, isAttr); prefix != "" {
896
+ p.WriteString(prefix)
897
+ p.WriteByte(':')
898
+ }
899
+ p.WriteString(name.Local)
900
+ }
901
+
902
+ func (p *printer) writeEnd(name Name) error {
903
+ if name.Local == "" {
904
+ return fmt.Errorf("xml: end tag with no name")
905
+ }
906
+ if len(p.tags) == 0 || p.tags[len(p.tags)-1].Local == "" {
907
+ return fmt.Errorf("xml: end tag </%s> without start tag", name.Local)
908
+ }
909
+ if top := p.tags[len(p.tags)-1]; top != name {
910
+ if top.Local != name.Local {
911
+ return fmt.Errorf("xml: end tag </%s> does not match start tag <%s>", name.Local, top.Local)
912
+ }
913
+ return fmt.Errorf("xml: end tag </%s> in namespace %s does not match start tag <%s> in namespace %s", name.Local, name.Space, top.Local, top.Space)
914
+ }
915
+ p.tags = p.tags[:len(p.tags)-1]
916
+
917
+ p.writeIndent(-1)
918
+ p.WriteByte('<')
919
+ p.WriteByte('/')
920
+ p.writeName(name, false)
921
+ p.WriteByte('>')
922
+ p.popPrefix()
923
+ return nil
924
+ }
925
+
926
+ func (p *printer) marshalSimple(typ reflect.Type, val reflect.Value) (string, []byte, error) {
927
+ switch val.Kind() {
928
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
929
+ return strconv.FormatInt(val.Int(), 10), nil, nil
930
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
931
+ return strconv.FormatUint(val.Uint(), 10), nil, nil
932
+ case reflect.Float32, reflect.Float64:
933
+ return strconv.FormatFloat(val.Float(), 'g', -1, val.Type().Bits()), nil, nil
934
+ case reflect.String:
935
+ return val.String(), nil, nil
936
+ case reflect.Bool:
937
+ return strconv.FormatBool(val.Bool()), nil, nil
938
+ case reflect.Array:
939
+ if typ.Elem().Kind() != reflect.Uint8 {
940
+ break
941
+ }
942
+ // [...]byte
943
+ var bytes []byte
944
+ if val.CanAddr() {
945
+ bytes = val.Slice(0, val.Len()).Bytes()
946
+ } else {
947
+ bytes = make([]byte, val.Len())
948
+ reflect.Copy(reflect.ValueOf(bytes), val)
949
+ }
950
+ return "", bytes, nil
951
+ case reflect.Slice:
952
+ if typ.Elem().Kind() != reflect.Uint8 {
953
+ break
954
+ }
955
+ // []byte
956
+ return "", val.Bytes(), nil
957
+ }
958
+ return "", nil, &UnsupportedTypeError{typ}
959
+ }
960
+
961
+ var ddBytes = []byte("--")
962
+
963
+ func (p *printer) marshalStruct(tinfo *typeInfo, val reflect.Value) error {
964
+ s := parentStack{p: p}
965
+ for i := range tinfo.fields {
966
+ finfo := &tinfo.fields[i]
967
+ if finfo.flags&fAttr != 0 {
968
+ continue
969
+ }
970
+ vf := finfo.value(val)
971
+
972
+ // Dereference or skip nil pointer, interface values.
973
+ switch vf.Kind() {
974
+ case reflect.Ptr, reflect.Interface:
975
+ if !vf.IsNil() {
976
+ vf = vf.Elem()
977
+ }
978
+ }
979
+
980
+ switch finfo.flags & fMode {
981
+ case fCharData:
982
+ if err := s.setParents(&noField, reflect.Value{}); err != nil {
983
+ return err
984
+ }
985
+ if vf.CanInterface() && vf.Type().Implements(textMarshalerType) {
986
+ data, err := vf.Interface().(encoding.TextMarshaler).MarshalText()
987
+ if err != nil {
988
+ return err
989
+ }
990
+ Escape(p, data)
991
+ continue
992
+ }
993
+ if vf.CanAddr() {
994
+ pv := vf.Addr()
995
+ if pv.CanInterface() && pv.Type().Implements(textMarshalerType) {
996
+ data, err := pv.Interface().(encoding.TextMarshaler).MarshalText()
997
+ if err != nil {
998
+ return err
999
+ }
1000
+ Escape(p, data)
1001
+ continue
1002
+ }
1003
+ }
1004
+ var scratch [64]byte
1005
+ switch vf.Kind() {
1006
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
1007
+ Escape(p, strconv.AppendInt(scratch[:0], vf.Int(), 10))
1008
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
1009
+ Escape(p, strconv.AppendUint(scratch[:0], vf.Uint(), 10))
1010
+ case reflect.Float32, reflect.Float64:
1011
+ Escape(p, strconv.AppendFloat(scratch[:0], vf.Float(), 'g', -1, vf.Type().Bits()))
1012
+ case reflect.Bool:
1013
+ Escape(p, strconv.AppendBool(scratch[:0], vf.Bool()))
1014
+ case reflect.String:
1015
+ if err := EscapeText(p, []byte(vf.String())); err != nil {
1016
+ return err
1017
+ }
1018
+ case reflect.Slice:
1019
+ if elem, ok := vf.Interface().([]byte); ok {
1020
+ if err := EscapeText(p, elem); err != nil {
1021
+ return err
1022
+ }
1023
+ }
1024
+ }
1025
+ continue
1026
+
1027
+ case fComment:
1028
+ if err := s.setParents(&noField, reflect.Value{}); err != nil {
1029
+ return err
1030
+ }
1031
+ k := vf.Kind()
1032
+ if !(k == reflect.String || k == reflect.Slice && vf.Type().Elem().Kind() == reflect.Uint8) {
1033
+ return fmt.Errorf("xml: bad type for comment field of %s", val.Type())
1034
+ }
1035
+ if vf.Len() == 0 {
1036
+ continue
1037
+ }
1038
+ p.writeIndent(0)
1039
+ p.WriteString("<!--")
1040
+ dashDash := false
1041
+ dashLast := false
1042
+ switch k {
1043
+ case reflect.String:
1044
+ s := vf.String()
1045
+ dashDash = strings.Index(s, "--") >= 0
1046
+ dashLast = s[len(s)-1] == '-'
1047
+ if !dashDash {
1048
+ p.WriteString(s)
1049
+ }
1050
+ case reflect.Slice:
1051
+ b := vf.Bytes()
1052
+ dashDash = bytes.Index(b, ddBytes) >= 0
1053
+ dashLast = b[len(b)-1] == '-'
1054
+ if !dashDash {
1055
+ p.Write(b)
1056
+ }
1057
+ default:
1058
+ panic("can't happen")
1059
+ }
1060
+ if dashDash {
1061
+ return fmt.Errorf(`xml: comments must not contain "--"`)
1062
+ }
1063
+ if dashLast {
1064
+ // "--->" is invalid grammar. Make it "- -->"
1065
+ p.WriteByte(' ')
1066
+ }
1067
+ p.WriteString("-->")
1068
+ continue
1069
+
1070
+ case fInnerXml:
1071
+ iface := vf.Interface()
1072
+ switch raw := iface.(type) {
1073
+ case []byte:
1074
+ p.Write(raw)
1075
+ continue
1076
+ case string:
1077
+ p.WriteString(raw)
1078
+ continue
1079
+ }
1080
+
1081
+ case fElement, fElement | fAny:
1082
+ if err := s.setParents(finfo, vf); err != nil {
1083
+ return err
1084
+ }
1085
+ }
1086
+ if err := p.marshalValue(vf, finfo, nil); err != nil {
1087
+ return err
1088
+ }
1089
+ }
1090
+ if err := s.setParents(&noField, reflect.Value{}); err != nil {
1091
+ return err
1092
+ }
1093
+ return p.cachedWriteError()
1094
+ }
1095
+
1096
+ var noField fieldInfo
1097
+
1098
+ // return the bufio Writer's cached write error
1099
+ func (p *printer) cachedWriteError() error {
1100
+ _, err := p.Write(nil)
1101
+ return err
1102
+ }
1103
+
1104
+ func (p *printer) writeIndent(depthDelta int) {
1105
+ if len(p.prefix) == 0 && len(p.indent) == 0 {
1106
+ return
1107
+ }
1108
+ if depthDelta < 0 {
1109
+ p.depth--
1110
+ if p.indentedIn {
1111
+ p.indentedIn = false
1112
+ return
1113
+ }
1114
+ p.indentedIn = false
1115
+ }
1116
+ if p.putNewline {
1117
+ p.WriteByte('\n')
1118
+ } else {
1119
+ p.putNewline = true
1120
+ }
1121
+ if len(p.prefix) > 0 {
1122
+ p.WriteString(p.prefix)
1123
+ }
1124
+ if len(p.indent) > 0 {
1125
+ for i := 0; i < p.depth; i++ {
1126
+ p.WriteString(p.indent)
1127
+ }
1128
+ }
1129
+ if depthDelta > 0 {
1130
+ p.depth++
1131
+ p.indentedIn = true
1132
+ }
1133
+ }
1134
+
1135
+ type parentStack struct {
1136
+ p *printer
1137
+ xmlns string
1138
+ parents []string
1139
+ }
1140
+
1141
+ // setParents sets the stack of current parents to those found in finfo.
1142
+ // It only writes the start elements if vf holds a non-nil value.
1143
+ // If finfo is &noField, it pops all elements.
1144
+ func (s *parentStack) setParents(finfo *fieldInfo, vf reflect.Value) error {
1145
+ xmlns := s.p.defaultNS
1146
+ if finfo.xmlns != "" {
1147
+ xmlns = finfo.xmlns
1148
+ }
1149
+ commonParents := 0
1150
+ if xmlns == s.xmlns {
1151
+ for ; commonParents < len(finfo.parents) && commonParents < len(s.parents); commonParents++ {
1152
+ if finfo.parents[commonParents] != s.parents[commonParents] {
1153
+ break
1154
+ }
1155
+ }
1156
+ }
1157
+ // Pop off any parents that aren't in common with the previous field.
1158
+ for i := len(s.parents) - 1; i >= commonParents; i-- {
1159
+ if err := s.p.writeEnd(Name{
1160
+ Space: s.xmlns,
1161
+ Local: s.parents[i],
1162
+ }); err != nil {
1163
+ return err
1164
+ }
1165
+ }
1166
+ s.parents = finfo.parents
1167
+ s.xmlns = xmlns
1168
+ if commonParents >= len(s.parents) {
1169
+ // No new elements to push.
1170
+ return nil
1171
+ }
1172
+ if (vf.Kind() == reflect.Ptr || vf.Kind() == reflect.Interface) && vf.IsNil() {
1173
+ // The element is nil, so no need for the start elements.
1174
+ s.parents = s.parents[:commonParents]
1175
+ return nil
1176
+ }
1177
+ // Push any new parents required.
1178
+ for _, name := range s.parents[commonParents:] {
1179
+ start := &StartElement{
1180
+ Name: Name{
1181
+ Space: s.xmlns,
1182
+ Local: name,
1183
+ },
1184
+ }
1185
+ // Set the default name space for parent elements
1186
+ // to match what we do with other elements.
1187
+ if s.xmlns != s.p.defaultNS {
1188
+ start.setDefaultNamespace()
1189
+ }
1190
+ if err := s.p.writeStart(start); err != nil {
1191
+ return err
1192
+ }
1193
+ }
1194
+ return nil
1195
+ }
1196
+
1197
+ // A MarshalXMLError is returned when Marshal encounters a type
1198
+ // that cannot be converted into XML.
1199
+ type UnsupportedTypeError struct {
1200
+ Type reflect.Type
1201
+ }
1202
+
1203
+ func (e *UnsupportedTypeError) Error() string {
1204
+ return "xml: unsupported type: " + e.Type.String()
1205
+ }
1206
+
1207
+ func isEmptyValue(v reflect.Value) bool {
1208
+ switch v.Kind() {
1209
+ case reflect.Array, reflect.Map, reflect.Slice, reflect.String:
1210
+ return v.Len() == 0
1211
+ case reflect.Bool:
1212
+ return !v.Bool()
1213
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
1214
+ return v.Int() == 0
1215
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
1216
+ return v.Uint() == 0
1217
+ case reflect.Float32, reflect.Float64:
1218
+ return v.Float() == 0
1219
+ case reflect.Interface, reflect.Ptr:
1220
+ return v.IsNil()
1221
+ }
1222
+ return false
1223
+ }