ires 0.1.3 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1024) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +32 -45
  3. data/ext/Gopkg.lock +31 -1
  4. data/ext/ires/image.go +227 -0
  5. data/ext/ires/ires.go +47 -59
  6. data/ext/ires/uri.go +143 -0
  7. data/ext/main.go +18 -9
  8. data/ext/vendor/github.com/PuerkitoBio/purell/LICENSE +12 -0
  9. data/ext/vendor/github.com/PuerkitoBio/purell/README.md +187 -0
  10. data/ext/vendor/github.com/PuerkitoBio/purell/bench_test.go +57 -0
  11. data/ext/vendor/github.com/PuerkitoBio/purell/benchmarks/v0.1.0 +9 -0
  12. data/ext/vendor/github.com/PuerkitoBio/purell/example_test.go +35 -0
  13. data/ext/vendor/github.com/PuerkitoBio/purell/purell.go +379 -0
  14. data/ext/vendor/github.com/PuerkitoBio/purell/purell_test.go +768 -0
  15. data/ext/vendor/github.com/PuerkitoBio/purell/urlnorm_test.go +53 -0
  16. data/ext/vendor/github.com/PuerkitoBio/urlesc/LICENSE +27 -0
  17. data/ext/vendor/github.com/PuerkitoBio/urlesc/README.md +16 -0
  18. data/ext/vendor/github.com/PuerkitoBio/urlesc/urlesc.go +180 -0
  19. data/ext/vendor/github.com/PuerkitoBio/urlesc/urlesc_test.go +641 -0
  20. data/ext/vendor/github.com/{satori/go.uuid → goware/urlx}/LICENSE +3 -1
  21. data/ext/vendor/github.com/goware/urlx/README.md +172 -0
  22. data/ext/vendor/github.com/goware/urlx/urlx.go +196 -0
  23. data/ext/vendor/github.com/goware/urlx/urlx_test.go +232 -0
  24. data/ext/vendor/golang.org/x/net/AUTHORS +3 -0
  25. data/ext/vendor/golang.org/x/net/CONTRIBUTING.md +31 -0
  26. data/ext/vendor/golang.org/x/net/CONTRIBUTORS +3 -0
  27. data/ext/vendor/golang.org/x/net/LICENSE +27 -0
  28. data/ext/vendor/golang.org/x/net/PATENTS +22 -0
  29. data/ext/vendor/golang.org/x/net/README.md +16 -0
  30. data/ext/vendor/golang.org/x/net/bpf/asm.go +41 -0
  31. data/ext/vendor/golang.org/x/net/bpf/constants.go +218 -0
  32. data/ext/vendor/golang.org/x/net/bpf/doc.go +82 -0
  33. data/ext/vendor/golang.org/x/net/bpf/instructions.go +704 -0
  34. data/ext/vendor/golang.org/x/net/bpf/instructions_test.go +525 -0
  35. data/ext/vendor/golang.org/x/net/bpf/setter.go +10 -0
  36. data/ext/vendor/golang.org/x/net/bpf/testdata/all_instructions.bpf +1 -0
  37. data/ext/vendor/golang.org/x/net/bpf/testdata/all_instructions.txt +79 -0
  38. data/ext/vendor/golang.org/x/net/bpf/vm.go +140 -0
  39. data/ext/vendor/golang.org/x/net/bpf/vm_aluop_test.go +512 -0
  40. data/ext/vendor/golang.org/x/net/bpf/vm_bpf_test.go +192 -0
  41. data/ext/vendor/golang.org/x/net/bpf/vm_extension_test.go +49 -0
  42. data/ext/vendor/golang.org/x/net/bpf/vm_instructions.go +174 -0
  43. data/ext/vendor/golang.org/x/net/bpf/vm_jump_test.go +380 -0
  44. data/ext/vendor/golang.org/x/net/bpf/vm_load_test.go +246 -0
  45. data/ext/vendor/golang.org/x/net/bpf/vm_ret_test.go +115 -0
  46. data/ext/vendor/golang.org/x/net/bpf/vm_scratch_test.go +247 -0
  47. data/ext/vendor/golang.org/x/net/bpf/vm_test.go +144 -0
  48. data/ext/vendor/golang.org/x/net/codereview.cfg +1 -0
  49. data/ext/vendor/golang.org/x/net/context/context.go +54 -0
  50. data/ext/vendor/golang.org/x/net/context/context_test.go +583 -0
  51. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp.go +74 -0
  52. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_17_test.go +29 -0
  53. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17.go +147 -0
  54. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_pre17_test.go +79 -0
  55. data/ext/vendor/golang.org/x/net/context/ctxhttp/ctxhttp_test.go +105 -0
  56. data/ext/vendor/golang.org/x/net/context/go17.go +72 -0
  57. data/ext/vendor/golang.org/x/net/context/go19.go +20 -0
  58. data/ext/vendor/golang.org/x/net/context/pre_go17.go +300 -0
  59. data/ext/vendor/golang.org/x/net/context/pre_go19.go +109 -0
  60. data/ext/vendor/golang.org/x/net/context/withtimeout_test.go +31 -0
  61. data/ext/vendor/golang.org/x/net/dict/dict.go +210 -0
  62. data/ext/vendor/golang.org/x/net/dns/dnsmessage/example_test.go +132 -0
  63. data/ext/vendor/golang.org/x/net/dns/dnsmessage/message.go +1997 -0
  64. data/ext/vendor/golang.org/x/net/dns/dnsmessage/message_test.go +1116 -0
  65. data/ext/vendor/golang.org/x/net/html/atom/atom.go +78 -0
  66. data/ext/vendor/golang.org/x/net/html/atom/atom_test.go +109 -0
  67. data/ext/vendor/golang.org/x/net/html/atom/gen.go +709 -0
  68. data/ext/vendor/golang.org/x/net/html/atom/table.go +777 -0
  69. data/ext/vendor/golang.org/x/net/html/atom/table_test.go +373 -0
  70. data/ext/vendor/golang.org/x/net/html/charset/charset.go +257 -0
  71. data/ext/vendor/golang.org/x/net/html/charset/charset_test.go +237 -0
  72. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-charset.html +48 -0
  73. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-UTF-8-BOM.html +48 -0
  74. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-charset.html +49 -0
  75. data/ext/vendor/golang.org/x/net/html/charset/testdata/HTTP-vs-meta-content.html +49 -0
  76. data/ext/vendor/golang.org/x/net/html/charset/testdata/No-encoding-declaration.html +47 -0
  77. data/ext/vendor/golang.org/x/net/html/charset/testdata/README +9 -0
  78. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-16BE-BOM.html +0 -0
  79. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-16LE-BOM.html +0 -0
  80. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-charset.html +49 -0
  81. data/ext/vendor/golang.org/x/net/html/charset/testdata/UTF-8-BOM-vs-meta-content.html +48 -0
  82. data/ext/vendor/golang.org/x/net/html/charset/testdata/meta-charset-attribute.html +48 -0
  83. data/ext/vendor/golang.org/x/net/html/charset/testdata/meta-content-attribute.html +48 -0
  84. data/ext/vendor/golang.org/x/net/html/const.go +104 -0
  85. data/ext/vendor/golang.org/x/net/html/doc.go +106 -0
  86. data/ext/vendor/golang.org/x/net/html/doctype.go +156 -0
  87. data/ext/vendor/golang.org/x/net/html/entity.go +2253 -0
  88. data/ext/vendor/golang.org/x/net/html/entity_test.go +29 -0
  89. data/ext/vendor/golang.org/x/net/html/escape.go +258 -0
  90. data/ext/vendor/golang.org/x/net/html/escape_test.go +97 -0
  91. data/ext/vendor/golang.org/x/net/html/example_test.go +40 -0
  92. data/ext/vendor/golang.org/x/net/html/foreign.go +226 -0
  93. data/ext/vendor/golang.org/x/net/html/node.go +193 -0
  94. data/ext/vendor/golang.org/x/net/html/node_test.go +146 -0
  95. data/ext/vendor/golang.org/x/net/html/parse.go +2094 -0
  96. data/ext/vendor/golang.org/x/net/html/parse_test.go +388 -0
  97. data/ext/vendor/golang.org/x/net/html/render.go +271 -0
  98. data/ext/vendor/golang.org/x/net/html/render_test.go +156 -0
  99. data/ext/vendor/golang.org/x/net/html/testdata/go1.html +2237 -0
  100. data/ext/vendor/golang.org/x/net/html/testdata/webkit/README +28 -0
  101. data/ext/vendor/golang.org/x/net/html/testdata/webkit/adoption01.dat +194 -0
  102. data/ext/vendor/golang.org/x/net/html/testdata/webkit/adoption02.dat +31 -0
  103. data/ext/vendor/golang.org/x/net/html/testdata/webkit/comments01.dat +135 -0
  104. data/ext/vendor/golang.org/x/net/html/testdata/webkit/doctype01.dat +370 -0
  105. data/ext/vendor/golang.org/x/net/html/testdata/webkit/entities01.dat +603 -0
  106. data/ext/vendor/golang.org/x/net/html/testdata/webkit/entities02.dat +249 -0
  107. data/ext/vendor/golang.org/x/net/html/testdata/webkit/html5test-com.dat +246 -0
  108. data/ext/vendor/golang.org/x/net/html/testdata/webkit/inbody01.dat +43 -0
  109. data/ext/vendor/golang.org/x/net/html/testdata/webkit/isindex.dat +40 -0
  110. data/ext/vendor/golang.org/x/net/html/testdata/webkit/pending-spec-changes-plain-text-unsafe.dat +0 -0
  111. data/ext/vendor/golang.org/x/net/html/testdata/webkit/pending-spec-changes.dat +52 -0
  112. data/ext/vendor/golang.org/x/net/html/testdata/webkit/plain-text-unsafe.dat +0 -0
  113. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scriptdata01.dat +308 -0
  114. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scripted/adoption01.dat +15 -0
  115. data/ext/vendor/golang.org/x/net/html/testdata/webkit/scripted/webkit01.dat +28 -0
  116. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tables01.dat +212 -0
  117. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests1.dat +1952 -0
  118. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests10.dat +799 -0
  119. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests11.dat +482 -0
  120. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests12.dat +62 -0
  121. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests14.dat +74 -0
  122. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests15.dat +208 -0
  123. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests16.dat +2299 -0
  124. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests17.dat +153 -0
  125. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests18.dat +269 -0
  126. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests19.dat +1237 -0
  127. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests2.dat +763 -0
  128. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests20.dat +455 -0
  129. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests21.dat +221 -0
  130. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests22.dat +157 -0
  131. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests23.dat +155 -0
  132. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests24.dat +79 -0
  133. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests25.dat +219 -0
  134. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests26.dat +313 -0
  135. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests3.dat +305 -0
  136. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests4.dat +59 -0
  137. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests5.dat +191 -0
  138. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests6.dat +663 -0
  139. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests7.dat +390 -0
  140. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests8.dat +148 -0
  141. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests9.dat +457 -0
  142. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tests_innerHTML_1.dat +741 -0
  143. data/ext/vendor/golang.org/x/net/html/testdata/webkit/tricky01.dat +261 -0
  144. data/ext/vendor/golang.org/x/net/html/testdata/webkit/webkit01.dat +610 -0
  145. data/ext/vendor/golang.org/x/net/html/testdata/webkit/webkit02.dat +159 -0
  146. data/ext/vendor/golang.org/x/net/html/token.go +1219 -0
  147. data/ext/vendor/golang.org/x/net/html/token_test.go +748 -0
  148. data/ext/vendor/golang.org/x/net/http2/Dockerfile +51 -0
  149. data/ext/vendor/golang.org/x/net/http2/Makefile +3 -0
  150. data/ext/vendor/golang.org/x/net/http2/README +20 -0
  151. data/ext/vendor/golang.org/x/net/http2/ciphers.go +641 -0
  152. data/ext/vendor/golang.org/x/net/http2/ciphers_test.go +309 -0
  153. data/ext/vendor/golang.org/x/net/http2/client_conn_pool.go +256 -0
  154. data/ext/vendor/golang.org/x/net/http2/configure_transport.go +80 -0
  155. data/ext/vendor/golang.org/x/net/http2/databuffer.go +146 -0
  156. data/ext/vendor/golang.org/x/net/http2/databuffer_test.go +157 -0
  157. data/ext/vendor/golang.org/x/net/http2/errors.go +133 -0
  158. data/ext/vendor/golang.org/x/net/http2/errors_test.go +24 -0
  159. data/ext/vendor/golang.org/x/net/http2/flow.go +50 -0
  160. data/ext/vendor/golang.org/x/net/http2/flow_test.go +53 -0
  161. data/ext/vendor/golang.org/x/net/http2/frame.go +1579 -0
  162. data/ext/vendor/golang.org/x/net/http2/frame_test.go +1191 -0
  163. data/ext/vendor/golang.org/x/net/http2/go16.go +16 -0
  164. data/ext/vendor/golang.org/x/net/http2/go17.go +106 -0
  165. data/ext/vendor/golang.org/x/net/http2/go17_not18.go +36 -0
  166. data/ext/vendor/golang.org/x/net/http2/go18.go +56 -0
  167. data/ext/vendor/golang.org/x/net/http2/go18_test.go +79 -0
  168. data/ext/vendor/golang.org/x/net/http2/go19.go +16 -0
  169. data/ext/vendor/golang.org/x/net/http2/go19_test.go +60 -0
  170. data/ext/vendor/golang.org/x/net/http2/gotrack.go +170 -0
  171. data/ext/vendor/golang.org/x/net/http2/gotrack_test.go +33 -0
  172. data/ext/vendor/golang.org/x/net/http2/h2demo/Makefile +8 -0
  173. data/ext/vendor/golang.org/x/net/http2/h2demo/README +16 -0
  174. data/ext/vendor/golang.org/x/net/http2/h2demo/h2demo.go +538 -0
  175. data/ext/vendor/golang.org/x/net/http2/h2demo/launch.go +302 -0
  176. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.key +27 -0
  177. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.pem +26 -0
  178. data/ext/vendor/golang.org/x/net/http2/h2demo/rootCA.srl +1 -0
  179. data/ext/vendor/golang.org/x/net/http2/h2demo/server.crt +20 -0
  180. data/ext/vendor/golang.org/x/net/http2/h2demo/server.key +27 -0
  181. data/ext/vendor/golang.org/x/net/http2/h2demo/tmpl.go +1991 -0
  182. data/ext/vendor/golang.org/x/net/http2/h2i/README.md +97 -0
  183. data/ext/vendor/golang.org/x/net/http2/h2i/h2i.go +522 -0
  184. data/ext/vendor/golang.org/x/net/http2/headermap.go +78 -0
  185. data/ext/vendor/golang.org/x/net/http2/hpack/encode.go +240 -0
  186. data/ext/vendor/golang.org/x/net/http2/hpack/encode_test.go +386 -0
  187. data/ext/vendor/golang.org/x/net/http2/hpack/hpack.go +490 -0
  188. data/ext/vendor/golang.org/x/net/http2/hpack/hpack_test.go +722 -0
  189. data/ext/vendor/golang.org/x/net/http2/hpack/huffman.go +212 -0
  190. data/ext/vendor/golang.org/x/net/http2/hpack/tables.go +479 -0
  191. data/ext/vendor/golang.org/x/net/http2/hpack/tables_test.go +214 -0
  192. data/ext/vendor/golang.org/x/net/http2/http2.go +391 -0
  193. data/ext/vendor/golang.org/x/net/http2/http2_test.go +199 -0
  194. data/ext/vendor/golang.org/x/net/http2/not_go16.go +21 -0
  195. data/ext/vendor/golang.org/x/net/http2/not_go17.go +87 -0
  196. data/ext/vendor/golang.org/x/net/http2/not_go18.go +29 -0
  197. data/ext/vendor/golang.org/x/net/http2/not_go19.go +16 -0
  198. data/ext/vendor/golang.org/x/net/http2/pipe.go +163 -0
  199. data/ext/vendor/golang.org/x/net/http2/pipe_test.go +130 -0
  200. data/ext/vendor/golang.org/x/net/http2/server.go +2857 -0
  201. data/ext/vendor/golang.org/x/net/http2/server_push_test.go +521 -0
  202. data/ext/vendor/golang.org/x/net/http2/server_test.go +3721 -0
  203. data/ext/vendor/golang.org/x/net/http2/testdata/draft-ietf-httpbis-http2.xml +5021 -0
  204. data/ext/vendor/golang.org/x/net/http2/transport.go +2285 -0
  205. data/ext/vendor/golang.org/x/net/http2/transport_test.go +3714 -0
  206. data/ext/vendor/golang.org/x/net/http2/write.go +370 -0
  207. data/ext/vendor/golang.org/x/net/http2/writesched.go +242 -0
  208. data/ext/vendor/golang.org/x/net/http2/writesched_priority.go +452 -0
  209. data/ext/vendor/golang.org/x/net/http2/writesched_priority_test.go +541 -0
  210. data/ext/vendor/golang.org/x/net/http2/writesched_random.go +72 -0
  211. data/ext/vendor/golang.org/x/net/http2/writesched_random_test.go +44 -0
  212. data/ext/vendor/golang.org/x/net/http2/writesched_test.go +125 -0
  213. data/ext/vendor/golang.org/x/net/http2/z_spec_test.go +356 -0
  214. data/ext/vendor/golang.org/x/net/icmp/dstunreach.go +41 -0
  215. data/ext/vendor/golang.org/x/net/icmp/echo.go +45 -0
  216. data/ext/vendor/golang.org/x/net/icmp/endpoint.go +113 -0
  217. data/ext/vendor/golang.org/x/net/icmp/example_test.go +63 -0
  218. data/ext/vendor/golang.org/x/net/icmp/extension.go +89 -0
  219. data/ext/vendor/golang.org/x/net/icmp/extension_test.go +259 -0
  220. data/ext/vendor/golang.org/x/net/icmp/helper_posix.go +75 -0
  221. data/ext/vendor/golang.org/x/net/icmp/interface.go +236 -0
  222. data/ext/vendor/golang.org/x/net/icmp/ipv4.go +61 -0
  223. data/ext/vendor/golang.org/x/net/icmp/ipv4_test.go +83 -0
  224. data/ext/vendor/golang.org/x/net/icmp/ipv6.go +23 -0
  225. data/ext/vendor/golang.org/x/net/icmp/listen_posix.go +100 -0
  226. data/ext/vendor/golang.org/x/net/icmp/listen_stub.go +33 -0
  227. data/ext/vendor/golang.org/x/net/icmp/message.go +152 -0
  228. data/ext/vendor/golang.org/x/net/icmp/message_test.go +134 -0
  229. data/ext/vendor/golang.org/x/net/icmp/messagebody.go +41 -0
  230. data/ext/vendor/golang.org/x/net/icmp/mpls.go +77 -0
  231. data/ext/vendor/golang.org/x/net/icmp/multipart.go +109 -0
  232. data/ext/vendor/golang.org/x/net/icmp/multipart_test.go +442 -0
  233. data/ext/vendor/golang.org/x/net/icmp/packettoobig.go +43 -0
  234. data/ext/vendor/golang.org/x/net/icmp/paramprob.go +63 -0
  235. data/ext/vendor/golang.org/x/net/icmp/ping_test.go +200 -0
  236. data/ext/vendor/golang.org/x/net/icmp/sys_freebsd.go +11 -0
  237. data/ext/vendor/golang.org/x/net/icmp/timeexceeded.go +39 -0
  238. data/ext/vendor/golang.org/x/net/idna/example_test.go +70 -0
  239. data/ext/vendor/golang.org/x/net/idna/idna.go +680 -0
  240. data/ext/vendor/golang.org/x/net/idna/idna_test.go +108 -0
  241. data/ext/vendor/golang.org/x/net/idna/punycode.go +203 -0
  242. data/ext/vendor/golang.org/x/net/idna/punycode_test.go +198 -0
  243. data/ext/vendor/golang.org/x/net/idna/tables.go +4477 -0
  244. data/ext/vendor/golang.org/x/net/idna/trie.go +72 -0
  245. data/ext/vendor/golang.org/x/net/idna/trieval.go +114 -0
  246. data/ext/vendor/golang.org/x/net/internal/iana/const.go +180 -0
  247. data/ext/vendor/golang.org/x/net/internal/iana/gen.go +293 -0
  248. data/ext/vendor/golang.org/x/net/internal/nettest/helper_bsd.go +53 -0
  249. data/ext/vendor/golang.org/x/net/internal/nettest/helper_nobsd.go +15 -0
  250. data/ext/vendor/golang.org/x/net/internal/nettest/helper_posix.go +31 -0
  251. data/ext/vendor/golang.org/x/net/internal/nettest/helper_stub.go +32 -0
  252. data/ext/vendor/golang.org/x/net/internal/nettest/helper_unix.go +29 -0
  253. data/ext/vendor/golang.org/x/net/internal/nettest/helper_windows.go +42 -0
  254. data/ext/vendor/golang.org/x/net/internal/nettest/interface.go +94 -0
  255. data/ext/vendor/golang.org/x/net/internal/nettest/rlimit.go +11 -0
  256. data/ext/vendor/golang.org/x/net/internal/nettest/stack.go +147 -0
  257. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr.go +11 -0
  258. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_bsd.go +13 -0
  259. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_32bit.go +14 -0
  260. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_linux_64bit.go +14 -0
  261. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_solaris_64bit.go +14 -0
  262. data/ext/vendor/golang.org/x/net/internal/socket/cmsghdr_stub.go +17 -0
  263. data/ext/vendor/golang.org/x/net/internal/socket/defs_darwin.go +44 -0
  264. data/ext/vendor/golang.org/x/net/internal/socket/defs_dragonfly.go +44 -0
  265. data/ext/vendor/golang.org/x/net/internal/socket/defs_freebsd.go +44 -0
  266. data/ext/vendor/golang.org/x/net/internal/socket/defs_linux.go +49 -0
  267. data/ext/vendor/golang.org/x/net/internal/socket/defs_netbsd.go +47 -0
  268. data/ext/vendor/golang.org/x/net/internal/socket/defs_openbsd.go +44 -0
  269. data/ext/vendor/golang.org/x/net/internal/socket/defs_solaris.go +44 -0
  270. data/ext/vendor/golang.org/x/net/internal/socket/error_unix.go +31 -0
  271. data/ext/vendor/golang.org/x/net/internal/socket/error_windows.go +26 -0
  272. data/ext/vendor/golang.org/x/net/internal/socket/iovec_32bit.go +19 -0
  273. data/ext/vendor/golang.org/x/net/internal/socket/iovec_64bit.go +19 -0
  274. data/ext/vendor/golang.org/x/net/internal/socket/iovec_solaris_64bit.go +19 -0
  275. data/ext/vendor/golang.org/x/net/internal/socket/iovec_stub.go +11 -0
  276. data/ext/vendor/golang.org/x/net/internal/socket/mmsghdr_stub.go +21 -0
  277. data/ext/vendor/golang.org/x/net/internal/socket/mmsghdr_unix.go +42 -0
  278. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_bsd.go +39 -0
  279. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_bsdvar.go +16 -0
  280. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux.go +36 -0
  281. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux_32bit.go +24 -0
  282. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_linux_64bit.go +24 -0
  283. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_openbsd.go +14 -0
  284. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_solaris_64bit.go +36 -0
  285. data/ext/vendor/golang.org/x/net/internal/socket/msghdr_stub.go +14 -0
  286. data/ext/vendor/golang.org/x/net/internal/socket/rawconn.go +66 -0
  287. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_mmsg.go +74 -0
  288. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_msg.go +77 -0
  289. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_nommsg.go +18 -0
  290. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_nomsg.go +18 -0
  291. data/ext/vendor/golang.org/x/net/internal/socket/rawconn_stub.go +25 -0
  292. data/ext/vendor/golang.org/x/net/internal/socket/reflect.go +62 -0
  293. data/ext/vendor/golang.org/x/net/internal/socket/socket.go +285 -0
  294. data/ext/vendor/golang.org/x/net/internal/socket/socket_go1_9_test.go +259 -0
  295. data/ext/vendor/golang.org/x/net/internal/socket/socket_test.go +46 -0
  296. data/ext/vendor/golang.org/x/net/internal/socket/sys.go +33 -0
  297. data/ext/vendor/golang.org/x/net/internal/socket/sys_bsd.go +17 -0
  298. data/ext/vendor/golang.org/x/net/internal/socket/sys_bsdvar.go +14 -0
  299. data/ext/vendor/golang.org/x/net/internal/socket/sys_darwin.go +7 -0
  300. data/ext/vendor/golang.org/x/net/internal/socket/sys_dragonfly.go +7 -0
  301. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux.go +27 -0
  302. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_386.go +55 -0
  303. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_386.s +11 -0
  304. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_amd64.go +10 -0
  305. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_arm.go +10 -0
  306. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_arm64.go +10 -0
  307. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips.go +10 -0
  308. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips64.go +10 -0
  309. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mips64le.go +10 -0
  310. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_mipsle.go +10 -0
  311. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64.go +10 -0
  312. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_ppc64le.go +10 -0
  313. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.go +55 -0
  314. data/ext/vendor/golang.org/x/net/internal/socket/sys_linux_s390x.s +11 -0
  315. data/ext/vendor/golang.org/x/net/internal/socket/sys_netbsd.go +25 -0
  316. data/ext/vendor/golang.org/x/net/internal/socket/sys_posix.go +168 -0
  317. data/ext/vendor/golang.org/x/net/internal/socket/sys_solaris.go +71 -0
  318. data/ext/vendor/golang.org/x/net/internal/socket/sys_solaris_amd64.s +11 -0
  319. data/ext/vendor/golang.org/x/net/internal/socket/sys_stub.go +64 -0
  320. data/ext/vendor/golang.org/x/net/internal/socket/sys_unix.go +33 -0
  321. data/ext/vendor/golang.org/x/net/internal/socket/sys_windows.go +70 -0
  322. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_386.go +59 -0
  323. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_amd64.go +61 -0
  324. data/ext/vendor/golang.org/x/net/internal/socket/zsys_darwin_arm.go +59 -0
  325. data/ext/vendor/golang.org/x/net/internal/socket/zsys_dragonfly_amd64.go +61 -0
  326. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_386.go +59 -0
  327. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_amd64.go +61 -0
  328. data/ext/vendor/golang.org/x/net/internal/socket/zsys_freebsd_arm.go +59 -0
  329. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_386.go +63 -0
  330. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_amd64.go +66 -0
  331. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_arm.go +63 -0
  332. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_arm64.go +66 -0
  333. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips.go +63 -0
  334. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64.go +66 -0
  335. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mips64le.go +66 -0
  336. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_mipsle.go +63 -0
  337. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64.go +66 -0
  338. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_ppc64le.go +66 -0
  339. data/ext/vendor/golang.org/x/net/internal/socket/zsys_linux_s390x.go +66 -0
  340. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_386.go +65 -0
  341. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_amd64.go +68 -0
  342. data/ext/vendor/golang.org/x/net/internal/socket/zsys_netbsd_arm.go +59 -0
  343. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_386.go +59 -0
  344. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_amd64.go +61 -0
  345. data/ext/vendor/golang.org/x/net/internal/socket/zsys_openbsd_arm.go +59 -0
  346. data/ext/vendor/golang.org/x/net/internal/socket/zsys_solaris_amd64.go +60 -0
  347. data/ext/vendor/golang.org/x/net/internal/timeseries/timeseries.go +525 -0
  348. data/ext/vendor/golang.org/x/net/internal/timeseries/timeseries_test.go +170 -0
  349. data/ext/vendor/golang.org/x/net/ipv4/batch.go +191 -0
  350. data/ext/vendor/golang.org/x/net/ipv4/bpf_test.go +93 -0
  351. data/ext/vendor/golang.org/x/net/ipv4/control.go +144 -0
  352. data/ext/vendor/golang.org/x/net/ipv4/control_bsd.go +40 -0
  353. data/ext/vendor/golang.org/x/net/ipv4/control_pktinfo.go +39 -0
  354. data/ext/vendor/golang.org/x/net/ipv4/control_stub.go +13 -0
  355. data/ext/vendor/golang.org/x/net/ipv4/control_test.go +21 -0
  356. data/ext/vendor/golang.org/x/net/ipv4/control_unix.go +73 -0
  357. data/ext/vendor/golang.org/x/net/ipv4/control_windows.go +16 -0
  358. data/ext/vendor/golang.org/x/net/ipv4/defs_darwin.go +77 -0
  359. data/ext/vendor/golang.org/x/net/ipv4/defs_dragonfly.go +38 -0
  360. data/ext/vendor/golang.org/x/net/ipv4/defs_freebsd.go +75 -0
  361. data/ext/vendor/golang.org/x/net/ipv4/defs_linux.go +122 -0
  362. data/ext/vendor/golang.org/x/net/ipv4/defs_netbsd.go +37 -0
  363. data/ext/vendor/golang.org/x/net/ipv4/defs_openbsd.go +37 -0
  364. data/ext/vendor/golang.org/x/net/ipv4/defs_solaris.go +84 -0
  365. data/ext/vendor/golang.org/x/net/ipv4/dgramopt.go +265 -0
  366. data/ext/vendor/golang.org/x/net/ipv4/doc.go +244 -0
  367. data/ext/vendor/golang.org/x/net/ipv4/endpoint.go +187 -0
  368. data/ext/vendor/golang.org/x/net/ipv4/example_test.go +224 -0
  369. data/ext/vendor/golang.org/x/net/ipv4/gen.go +199 -0
  370. data/ext/vendor/golang.org/x/net/ipv4/genericopt.go +57 -0
  371. data/ext/vendor/golang.org/x/net/ipv4/header.go +159 -0
  372. data/ext/vendor/golang.org/x/net/ipv4/header_test.go +228 -0
  373. data/ext/vendor/golang.org/x/net/ipv4/helper.go +63 -0
  374. data/ext/vendor/golang.org/x/net/ipv4/iana.go +34 -0
  375. data/ext/vendor/golang.org/x/net/ipv4/icmp.go +57 -0
  376. data/ext/vendor/golang.org/x/net/ipv4/icmp_linux.go +25 -0
  377. data/ext/vendor/golang.org/x/net/ipv4/icmp_stub.go +25 -0
  378. data/ext/vendor/golang.org/x/net/ipv4/icmp_test.go +95 -0
  379. data/ext/vendor/golang.org/x/net/ipv4/multicast_test.go +334 -0
  380. data/ext/vendor/golang.org/x/net/ipv4/multicastlistener_test.go +265 -0
  381. data/ext/vendor/golang.org/x/net/ipv4/multicastsockopt_test.go +195 -0
  382. data/ext/vendor/golang.org/x/net/ipv4/packet.go +69 -0
  383. data/ext/vendor/golang.org/x/net/ipv4/packet_go1_8.go +56 -0
  384. data/ext/vendor/golang.org/x/net/ipv4/packet_go1_9.go +67 -0
  385. data/ext/vendor/golang.org/x/net/ipv4/payload.go +23 -0
  386. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg.go +36 -0
  387. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_8.go +59 -0
  388. data/ext/vendor/golang.org/x/net/ipv4/payload_cmsg_go1_9.go +67 -0
  389. data/ext/vendor/golang.org/x/net/ipv4/payload_nocmsg.go +42 -0
  390. data/ext/vendor/golang.org/x/net/ipv4/readwrite_go1_8_test.go +248 -0
  391. data/ext/vendor/golang.org/x/net/ipv4/readwrite_go1_9_test.go +388 -0
  392. data/ext/vendor/golang.org/x/net/ipv4/readwrite_test.go +140 -0
  393. data/ext/vendor/golang.org/x/net/ipv4/sockopt.go +44 -0
  394. data/ext/vendor/golang.org/x/net/ipv4/sockopt_posix.go +71 -0
  395. data/ext/vendor/golang.org/x/net/ipv4/sockopt_stub.go +42 -0
  396. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreq.go +119 -0
  397. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreq_stub.go +25 -0
  398. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreqn.go +42 -0
  399. data/ext/vendor/golang.org/x/net/ipv4/sys_asmreqn_stub.go +21 -0
  400. data/ext/vendor/golang.org/x/net/ipv4/sys_bpf.go +23 -0
  401. data/ext/vendor/golang.org/x/net/ipv4/sys_bpf_stub.go +16 -0
  402. data/ext/vendor/golang.org/x/net/ipv4/sys_bsd.go +37 -0
  403. data/ext/vendor/golang.org/x/net/ipv4/sys_darwin.go +93 -0
  404. data/ext/vendor/golang.org/x/net/ipv4/sys_dragonfly.go +35 -0
  405. data/ext/vendor/golang.org/x/net/ipv4/sys_freebsd.go +76 -0
  406. data/ext/vendor/golang.org/x/net/ipv4/sys_linux.go +59 -0
  407. data/ext/vendor/golang.org/x/net/ipv4/sys_solaris.go +57 -0
  408. data/ext/vendor/golang.org/x/net/ipv4/sys_ssmreq.go +54 -0
  409. data/ext/vendor/golang.org/x/net/ipv4/sys_ssmreq_stub.go +21 -0
  410. data/ext/vendor/golang.org/x/net/ipv4/sys_stub.go +13 -0
  411. data/ext/vendor/golang.org/x/net/ipv4/sys_windows.go +67 -0
  412. data/ext/vendor/golang.org/x/net/ipv4/unicast_test.go +247 -0
  413. data/ext/vendor/golang.org/x/net/ipv4/unicastsockopt_test.go +148 -0
  414. data/ext/vendor/golang.org/x/net/ipv4/zsys_darwin.go +99 -0
  415. data/ext/vendor/golang.org/x/net/ipv4/zsys_dragonfly.go +31 -0
  416. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_386.go +93 -0
  417. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_amd64.go +95 -0
  418. data/ext/vendor/golang.org/x/net/ipv4/zsys_freebsd_arm.go +95 -0
  419. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_386.go +148 -0
  420. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_amd64.go +150 -0
  421. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_arm.go +148 -0
  422. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_arm64.go +150 -0
  423. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips.go +148 -0
  424. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips64.go +150 -0
  425. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mips64le.go +150 -0
  426. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_mipsle.go +148 -0
  427. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc.go +148 -0
  428. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64.go +150 -0
  429. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_ppc64le.go +150 -0
  430. data/ext/vendor/golang.org/x/net/ipv4/zsys_linux_s390x.go +150 -0
  431. data/ext/vendor/golang.org/x/net/ipv4/zsys_netbsd.go +30 -0
  432. data/ext/vendor/golang.org/x/net/ipv4/zsys_openbsd.go +30 -0
  433. data/ext/vendor/golang.org/x/net/ipv4/zsys_solaris.go +100 -0
  434. data/ext/vendor/golang.org/x/net/ipv6/batch.go +119 -0
  435. data/ext/vendor/golang.org/x/net/ipv6/bpf_test.go +96 -0
  436. data/ext/vendor/golang.org/x/net/ipv6/control.go +187 -0
  437. data/ext/vendor/golang.org/x/net/ipv6/control_rfc2292_unix.go +48 -0
  438. data/ext/vendor/golang.org/x/net/ipv6/control_rfc3542_unix.go +94 -0
  439. data/ext/vendor/golang.org/x/net/ipv6/control_stub.go +13 -0
  440. data/ext/vendor/golang.org/x/net/ipv6/control_test.go +21 -0
  441. data/ext/vendor/golang.org/x/net/ipv6/control_unix.go +55 -0
  442. data/ext/vendor/golang.org/x/net/ipv6/control_windows.go +16 -0
  443. data/ext/vendor/golang.org/x/net/ipv6/defs_darwin.go +112 -0
  444. data/ext/vendor/golang.org/x/net/ipv6/defs_dragonfly.go +84 -0
  445. data/ext/vendor/golang.org/x/net/ipv6/defs_freebsd.go +105 -0
  446. data/ext/vendor/golang.org/x/net/ipv6/defs_linux.go +147 -0
  447. data/ext/vendor/golang.org/x/net/ipv6/defs_netbsd.go +80 -0
  448. data/ext/vendor/golang.org/x/net/ipv6/defs_openbsd.go +89 -0
  449. data/ext/vendor/golang.org/x/net/ipv6/defs_solaris.go +114 -0
  450. data/ext/vendor/golang.org/x/net/ipv6/dgramopt.go +302 -0
  451. data/ext/vendor/golang.org/x/net/ipv6/doc.go +243 -0
  452. data/ext/vendor/golang.org/x/net/ipv6/endpoint.go +128 -0
  453. data/ext/vendor/golang.org/x/net/ipv6/example_test.go +216 -0
  454. data/ext/vendor/golang.org/x/net/ipv6/gen.go +199 -0
  455. data/ext/vendor/golang.org/x/net/ipv6/genericopt.go +58 -0
  456. data/ext/vendor/golang.org/x/net/ipv6/header.go +55 -0
  457. data/ext/vendor/golang.org/x/net/ipv6/header_test.go +55 -0
  458. data/ext/vendor/golang.org/x/net/ipv6/helper.go +57 -0
  459. data/ext/vendor/golang.org/x/net/ipv6/iana.go +82 -0
  460. data/ext/vendor/golang.org/x/net/ipv6/icmp.go +60 -0
  461. data/ext/vendor/golang.org/x/net/ipv6/icmp_bsd.go +29 -0
  462. data/ext/vendor/golang.org/x/net/ipv6/icmp_linux.go +27 -0
  463. data/ext/vendor/golang.org/x/net/ipv6/icmp_solaris.go +27 -0
  464. data/ext/vendor/golang.org/x/net/ipv6/icmp_stub.go +23 -0
  465. data/ext/vendor/golang.org/x/net/ipv6/icmp_test.go +96 -0
  466. data/ext/vendor/golang.org/x/net/ipv6/icmp_windows.go +22 -0
  467. data/ext/vendor/golang.org/x/net/ipv6/mocktransponder_test.go +32 -0
  468. data/ext/vendor/golang.org/x/net/ipv6/multicast_test.go +264 -0
  469. data/ext/vendor/golang.org/x/net/ipv6/multicastlistener_test.go +261 -0
  470. data/ext/vendor/golang.org/x/net/ipv6/multicastsockopt_test.go +157 -0
  471. data/ext/vendor/golang.org/x/net/ipv6/payload.go +23 -0
  472. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg.go +35 -0
  473. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_8.go +55 -0
  474. data/ext/vendor/golang.org/x/net/ipv6/payload_cmsg_go1_9.go +57 -0
  475. data/ext/vendor/golang.org/x/net/ipv6/payload_nocmsg.go +41 -0
  476. data/ext/vendor/golang.org/x/net/ipv6/readwrite_go1_8_test.go +242 -0
  477. data/ext/vendor/golang.org/x/net/ipv6/readwrite_go1_9_test.go +373 -0
  478. data/ext/vendor/golang.org/x/net/ipv6/readwrite_test.go +148 -0
  479. data/ext/vendor/golang.org/x/net/ipv6/sockopt.go +43 -0
  480. data/ext/vendor/golang.org/x/net/ipv6/sockopt_posix.go +87 -0
  481. data/ext/vendor/golang.org/x/net/ipv6/sockopt_stub.go +46 -0
  482. data/ext/vendor/golang.org/x/net/ipv6/sockopt_test.go +133 -0
  483. data/ext/vendor/golang.org/x/net/ipv6/sys_asmreq.go +24 -0
  484. data/ext/vendor/golang.org/x/net/ipv6/sys_asmreq_stub.go +17 -0
  485. data/ext/vendor/golang.org/x/net/ipv6/sys_bpf.go +23 -0
  486. data/ext/vendor/golang.org/x/net/ipv6/sys_bpf_stub.go +16 -0
  487. data/ext/vendor/golang.org/x/net/ipv6/sys_bsd.go +57 -0
  488. data/ext/vendor/golang.org/x/net/ipv6/sys_darwin.go +106 -0
  489. data/ext/vendor/golang.org/x/net/ipv6/sys_freebsd.go +92 -0
  490. data/ext/vendor/golang.org/x/net/ipv6/sys_linux.go +74 -0
  491. data/ext/vendor/golang.org/x/net/ipv6/sys_solaris.go +74 -0
  492. data/ext/vendor/golang.org/x/net/ipv6/sys_ssmreq.go +54 -0
  493. data/ext/vendor/golang.org/x/net/ipv6/sys_ssmreq_stub.go +21 -0
  494. data/ext/vendor/golang.org/x/net/ipv6/sys_stub.go +13 -0
  495. data/ext/vendor/golang.org/x/net/ipv6/sys_windows.go +75 -0
  496. data/ext/vendor/golang.org/x/net/ipv6/unicast_test.go +184 -0
  497. data/ext/vendor/golang.org/x/net/ipv6/unicastsockopt_test.go +120 -0
  498. data/ext/vendor/golang.org/x/net/ipv6/zsys_darwin.go +131 -0
  499. data/ext/vendor/golang.org/x/net/ipv6/zsys_dragonfly.go +88 -0
  500. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_386.go +122 -0
  501. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_amd64.go +124 -0
  502. data/ext/vendor/golang.org/x/net/ipv6/zsys_freebsd_arm.go +124 -0
  503. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_386.go +170 -0
  504. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_amd64.go +172 -0
  505. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_arm.go +170 -0
  506. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_arm64.go +172 -0
  507. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips.go +170 -0
  508. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips64.go +172 -0
  509. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mips64le.go +172 -0
  510. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_mipsle.go +170 -0
  511. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc.go +170 -0
  512. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64.go +172 -0
  513. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_ppc64le.go +172 -0
  514. data/ext/vendor/golang.org/x/net/ipv6/zsys_linux_s390x.go +172 -0
  515. data/ext/vendor/golang.org/x/net/ipv6/zsys_netbsd.go +84 -0
  516. data/ext/vendor/golang.org/x/net/ipv6/zsys_openbsd.go +93 -0
  517. data/ext/vendor/golang.org/x/net/ipv6/zsys_solaris.go +131 -0
  518. data/ext/vendor/golang.org/x/net/lex/httplex/httplex.go +351 -0
  519. data/ext/vendor/golang.org/x/net/lex/httplex/httplex_test.go +119 -0
  520. data/ext/vendor/golang.org/x/net/lif/address.go +105 -0
  521. data/ext/vendor/golang.org/x/net/lif/address_test.go +123 -0
  522. data/ext/vendor/golang.org/x/net/lif/binary.go +115 -0
  523. data/ext/vendor/golang.org/x/net/lif/defs_solaris.go +90 -0
  524. data/ext/vendor/golang.org/x/net/lif/lif.go +43 -0
  525. data/ext/vendor/golang.org/x/net/lif/link.go +126 -0
  526. data/ext/vendor/golang.org/x/net/lif/link_test.go +63 -0
  527. data/ext/vendor/golang.org/x/net/lif/sys.go +21 -0
  528. data/ext/vendor/golang.org/x/net/lif/sys_solaris_amd64.s +8 -0
  529. data/ext/vendor/golang.org/x/net/lif/syscall.go +28 -0
  530. data/ext/vendor/golang.org/x/net/lif/zsys_solaris_amd64.go +103 -0
  531. data/ext/vendor/golang.org/x/net/nettest/conntest.go +456 -0
  532. data/ext/vendor/golang.org/x/net/nettest/conntest_go16.go +24 -0
  533. data/ext/vendor/golang.org/x/net/nettest/conntest_go17.go +24 -0
  534. data/ext/vendor/golang.org/x/net/nettest/conntest_test.go +76 -0
  535. data/ext/vendor/golang.org/x/net/netutil/listen.go +48 -0
  536. data/ext/vendor/golang.org/x/net/netutil/listen_test.go +101 -0
  537. data/ext/vendor/golang.org/x/net/proxy/direct.go +18 -0
  538. data/ext/vendor/golang.org/x/net/proxy/per_host.go +140 -0
  539. data/ext/vendor/golang.org/x/net/proxy/per_host_test.go +55 -0
  540. data/ext/vendor/golang.org/x/net/proxy/proxy.go +134 -0
  541. data/ext/vendor/golang.org/x/net/proxy/proxy_test.go +215 -0
  542. data/ext/vendor/golang.org/x/net/proxy/socks5.go +214 -0
  543. data/ext/vendor/golang.org/x/net/publicsuffix/gen.go +713 -0
  544. data/ext/vendor/golang.org/x/net/publicsuffix/list.go +135 -0
  545. data/ext/vendor/golang.org/x/net/publicsuffix/list_test.go +416 -0
  546. data/ext/vendor/golang.org/x/net/publicsuffix/table.go +9419 -0
  547. data/ext/vendor/golang.org/x/net/publicsuffix/table_test.go +16756 -0
  548. data/ext/vendor/golang.org/x/net/route/address.go +425 -0
  549. data/ext/vendor/golang.org/x/net/route/address_darwin_test.go +63 -0
  550. data/ext/vendor/golang.org/x/net/route/address_test.go +103 -0
  551. data/ext/vendor/golang.org/x/net/route/binary.go +90 -0
  552. data/ext/vendor/golang.org/x/net/route/defs_darwin.go +114 -0
  553. data/ext/vendor/golang.org/x/net/route/defs_dragonfly.go +113 -0
  554. data/ext/vendor/golang.org/x/net/route/defs_freebsd.go +337 -0
  555. data/ext/vendor/golang.org/x/net/route/defs_netbsd.go +112 -0
  556. data/ext/vendor/golang.org/x/net/route/defs_openbsd.go +116 -0
  557. data/ext/vendor/golang.org/x/net/route/interface.go +64 -0
  558. data/ext/vendor/golang.org/x/net/route/interface_announce.go +32 -0
  559. data/ext/vendor/golang.org/x/net/route/interface_classic.go +66 -0
  560. data/ext/vendor/golang.org/x/net/route/interface_freebsd.go +78 -0
  561. data/ext/vendor/golang.org/x/net/route/interface_multicast.go +30 -0
  562. data/ext/vendor/golang.org/x/net/route/interface_openbsd.go +90 -0
  563. data/ext/vendor/golang.org/x/net/route/message.go +72 -0
  564. data/ext/vendor/golang.org/x/net/route/message_darwin_test.go +34 -0
  565. data/ext/vendor/golang.org/x/net/route/message_freebsd_test.go +92 -0
  566. data/ext/vendor/golang.org/x/net/route/message_test.go +239 -0
  567. data/ext/vendor/golang.org/x/net/route/route.go +123 -0
  568. data/ext/vendor/golang.org/x/net/route/route_classic.go +67 -0
  569. data/ext/vendor/golang.org/x/net/route/route_openbsd.go +65 -0
  570. data/ext/vendor/golang.org/x/net/route/route_test.go +390 -0
  571. data/ext/vendor/golang.org/x/net/route/sys.go +39 -0
  572. data/ext/vendor/golang.org/x/net/route/sys_darwin.go +87 -0
  573. data/ext/vendor/golang.org/x/net/route/sys_dragonfly.go +76 -0
  574. data/ext/vendor/golang.org/x/net/route/sys_freebsd.go +155 -0
  575. data/ext/vendor/golang.org/x/net/route/sys_netbsd.go +71 -0
  576. data/ext/vendor/golang.org/x/net/route/sys_openbsd.go +80 -0
  577. data/ext/vendor/golang.org/x/net/route/syscall.go +28 -0
  578. data/ext/vendor/golang.org/x/net/route/zsys_darwin.go +99 -0
  579. data/ext/vendor/golang.org/x/net/route/zsys_dragonfly.go +98 -0
  580. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_386.go +126 -0
  581. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_amd64.go +123 -0
  582. data/ext/vendor/golang.org/x/net/route/zsys_freebsd_arm.go +123 -0
  583. data/ext/vendor/golang.org/x/net/route/zsys_netbsd.go +97 -0
  584. data/ext/vendor/golang.org/x/net/route/zsys_openbsd.go +101 -0
  585. data/ext/vendor/golang.org/x/net/trace/events.go +532 -0
  586. data/ext/vendor/golang.org/x/net/trace/histogram.go +365 -0
  587. data/ext/vendor/golang.org/x/net/trace/histogram_test.go +325 -0
  588. data/ext/vendor/golang.org/x/net/trace/trace.go +1082 -0
  589. data/ext/vendor/golang.org/x/net/trace/trace_go16.go +21 -0
  590. data/ext/vendor/golang.org/x/net/trace/trace_go17.go +21 -0
  591. data/ext/vendor/golang.org/x/net/trace/trace_test.go +178 -0
  592. data/ext/vendor/golang.org/x/net/webdav/file.go +796 -0
  593. data/ext/vendor/golang.org/x/net/webdav/file_go1.6.go +17 -0
  594. data/ext/vendor/golang.org/x/net/webdav/file_go1.7.go +16 -0
  595. data/ext/vendor/golang.org/x/net/webdav/file_test.go +1184 -0
  596. data/ext/vendor/golang.org/x/net/webdav/if.go +173 -0
  597. data/ext/vendor/golang.org/x/net/webdav/if_test.go +322 -0
  598. data/ext/vendor/golang.org/x/net/webdav/internal/xml/README +11 -0
  599. data/ext/vendor/golang.org/x/net/webdav/internal/xml/atom_test.go +56 -0
  600. data/ext/vendor/golang.org/x/net/webdav/internal/xml/example_test.go +151 -0
  601. data/ext/vendor/golang.org/x/net/webdav/internal/xml/marshal.go +1223 -0
  602. data/ext/vendor/golang.org/x/net/webdav/internal/xml/marshal_test.go +1939 -0
  603. data/ext/vendor/golang.org/x/net/webdav/internal/xml/read.go +692 -0
  604. data/ext/vendor/golang.org/x/net/webdav/internal/xml/read_test.go +744 -0
  605. data/ext/vendor/golang.org/x/net/webdav/internal/xml/typeinfo.go +371 -0
  606. data/ext/vendor/golang.org/x/net/webdav/internal/xml/xml.go +1998 -0
  607. data/ext/vendor/golang.org/x/net/webdav/internal/xml/xml_test.go +752 -0
  608. data/ext/vendor/golang.org/x/net/webdav/litmus_test_server.go +94 -0
  609. data/ext/vendor/golang.org/x/net/webdav/lock.go +445 -0
  610. data/ext/vendor/golang.org/x/net/webdav/lock_test.go +731 -0
  611. data/ext/vendor/golang.org/x/net/webdav/prop.go +418 -0
  612. data/ext/vendor/golang.org/x/net/webdav/prop_test.go +613 -0
  613. data/ext/vendor/golang.org/x/net/webdav/webdav.go +702 -0
  614. data/ext/vendor/golang.org/x/net/webdav/webdav_test.go +344 -0
  615. data/ext/vendor/golang.org/x/net/webdav/xml.go +519 -0
  616. data/ext/vendor/golang.org/x/net/webdav/xml_test.go +906 -0
  617. data/ext/vendor/golang.org/x/net/websocket/client.go +106 -0
  618. data/ext/vendor/golang.org/x/net/websocket/dial.go +24 -0
  619. data/ext/vendor/golang.org/x/net/websocket/dial_test.go +43 -0
  620. data/ext/vendor/golang.org/x/net/websocket/exampledial_test.go +31 -0
  621. data/ext/vendor/golang.org/x/net/websocket/examplehandler_test.go +26 -0
  622. data/ext/vendor/golang.org/x/net/websocket/hybi.go +583 -0
  623. data/ext/vendor/golang.org/x/net/websocket/hybi_test.go +608 -0
  624. data/ext/vendor/golang.org/x/net/websocket/server.go +113 -0
  625. data/ext/vendor/golang.org/x/net/websocket/websocket.go +448 -0
  626. data/ext/vendor/golang.org/x/net/websocket/websocket_test.go +665 -0
  627. data/ext/vendor/golang.org/x/net/xsrftoken/xsrf.go +94 -0
  628. data/ext/vendor/golang.org/x/net/xsrftoken/xsrf_test.go +83 -0
  629. data/ext/vendor/golang.org/x/text/AUTHORS +3 -0
  630. data/ext/vendor/golang.org/x/text/CONTRIBUTING.md +31 -0
  631. data/ext/vendor/golang.org/x/text/CONTRIBUTORS +3 -0
  632. data/ext/vendor/golang.org/x/text/LICENSE +27 -0
  633. data/ext/vendor/golang.org/x/text/PATENTS +22 -0
  634. data/ext/vendor/golang.org/x/text/README.md +91 -0
  635. data/ext/vendor/golang.org/x/text/cases/cases.go +162 -0
  636. data/ext/vendor/golang.org/x/text/cases/context.go +376 -0
  637. data/ext/vendor/golang.org/x/text/cases/context_test.go +438 -0
  638. data/ext/vendor/golang.org/x/text/cases/example_test.go +53 -0
  639. data/ext/vendor/golang.org/x/text/cases/fold.go +34 -0
  640. data/ext/vendor/golang.org/x/text/cases/fold_test.go +51 -0
  641. data/ext/vendor/golang.org/x/text/cases/gen.go +839 -0
  642. data/ext/vendor/golang.org/x/text/cases/gen_trieval.go +219 -0
  643. data/ext/vendor/golang.org/x/text/cases/icu.go +61 -0
  644. data/ext/vendor/golang.org/x/text/cases/icu_test.go +210 -0
  645. data/ext/vendor/golang.org/x/text/cases/info.go +82 -0
  646. data/ext/vendor/golang.org/x/text/cases/map.go +816 -0
  647. data/ext/vendor/golang.org/x/text/cases/map_test.go +950 -0
  648. data/ext/vendor/golang.org/x/text/cases/tables.go +2251 -0
  649. data/ext/vendor/golang.org/x/text/cases/tables_test.go +1158 -0
  650. data/ext/vendor/golang.org/x/text/cases/trieval.go +215 -0
  651. data/ext/vendor/golang.org/x/text/cmd/gotext/doc.go +35 -0
  652. data/ext/vendor/golang.org/x/text/cmd/gotext/extract.go +195 -0
  653. data/ext/vendor/golang.org/x/text/cmd/gotext/main.go +356 -0
  654. data/ext/vendor/golang.org/x/text/cmd/gotext/message.go +127 -0
  655. data/ext/vendor/golang.org/x/text/codereview.cfg +1 -0
  656. data/ext/vendor/golang.org/x/text/collate/build/builder.go +702 -0
  657. data/ext/vendor/golang.org/x/text/collate/build/builder_test.go +290 -0
  658. data/ext/vendor/golang.org/x/text/collate/build/colelem.go +294 -0
  659. data/ext/vendor/golang.org/x/text/collate/build/colelem_test.go +215 -0
  660. data/ext/vendor/golang.org/x/text/collate/build/contract.go +309 -0
  661. data/ext/vendor/golang.org/x/text/collate/build/contract_test.go +266 -0
  662. data/ext/vendor/golang.org/x/text/collate/build/order.go +393 -0
  663. data/ext/vendor/golang.org/x/text/collate/build/order_test.go +229 -0
  664. data/ext/vendor/golang.org/x/text/collate/build/table.go +81 -0
  665. data/ext/vendor/golang.org/x/text/collate/build/trie.go +290 -0
  666. data/ext/vendor/golang.org/x/text/collate/build/trie_test.go +107 -0
  667. data/ext/vendor/golang.org/x/text/collate/collate.go +403 -0
  668. data/ext/vendor/golang.org/x/text/collate/collate_test.go +482 -0
  669. data/ext/vendor/golang.org/x/text/collate/export_test.go +51 -0
  670. data/ext/vendor/golang.org/x/text/collate/index.go +32 -0
  671. data/ext/vendor/golang.org/x/text/collate/maketables.go +553 -0
  672. data/ext/vendor/golang.org/x/text/collate/option.go +239 -0
  673. data/ext/vendor/golang.org/x/text/collate/option_test.go +209 -0
  674. data/ext/vendor/golang.org/x/text/collate/reg_test.go +230 -0
  675. data/ext/vendor/golang.org/x/text/collate/sort.go +81 -0
  676. data/ext/vendor/golang.org/x/text/collate/sort_test.go +55 -0
  677. data/ext/vendor/golang.org/x/text/collate/table_test.go +291 -0
  678. data/ext/vendor/golang.org/x/text/collate/tables.go +73789 -0
  679. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/Makefile +7 -0
  680. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/chars.go +1156 -0
  681. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/col.go +97 -0
  682. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/colcmp.go +529 -0
  683. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/darwin.go +111 -0
  684. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/gen.go +183 -0
  685. data/ext/vendor/golang.org/x/text/collate/tools/colcmp/icu.go +209 -0
  686. data/ext/vendor/golang.org/x/text/currency/common.go +66 -0
  687. data/ext/vendor/golang.org/x/text/currency/currency.go +185 -0
  688. data/ext/vendor/golang.org/x/text/currency/currency_test.go +171 -0
  689. data/ext/vendor/golang.org/x/text/currency/example_test.go +27 -0
  690. data/ext/vendor/golang.org/x/text/currency/format.go +215 -0
  691. data/ext/vendor/golang.org/x/text/currency/format_test.go +70 -0
  692. data/ext/vendor/golang.org/x/text/currency/gen.go +400 -0
  693. data/ext/vendor/golang.org/x/text/currency/gen_common.go +70 -0
  694. data/ext/vendor/golang.org/x/text/currency/query.go +152 -0
  695. data/ext/vendor/golang.org/x/text/currency/query_test.go +107 -0
  696. data/ext/vendor/golang.org/x/text/currency/tables.go +2574 -0
  697. data/ext/vendor/golang.org/x/text/currency/tables_test.go +93 -0
  698. data/ext/vendor/golang.org/x/text/doc.go +13 -0
  699. data/ext/vendor/golang.org/x/text/encoding/charmap/charmap.go +249 -0
  700. data/ext/vendor/golang.org/x/text/encoding/charmap/charmap_test.go +258 -0
  701. data/ext/vendor/golang.org/x/text/encoding/charmap/maketables.go +556 -0
  702. data/ext/vendor/golang.org/x/text/encoding/charmap/tables.go +7410 -0
  703. data/ext/vendor/golang.org/x/text/encoding/encoding.go +335 -0
  704. data/ext/vendor/golang.org/x/text/encoding/encoding_test.go +290 -0
  705. data/ext/vendor/golang.org/x/text/encoding/example_test.go +42 -0
  706. data/ext/vendor/golang.org/x/text/encoding/htmlindex/gen.go +173 -0
  707. data/ext/vendor/golang.org/x/text/encoding/htmlindex/htmlindex.go +86 -0
  708. data/ext/vendor/golang.org/x/text/encoding/htmlindex/htmlindex_test.go +144 -0
  709. data/ext/vendor/golang.org/x/text/encoding/htmlindex/map.go +105 -0
  710. data/ext/vendor/golang.org/x/text/encoding/htmlindex/tables.go +352 -0
  711. data/ext/vendor/golang.org/x/text/encoding/ianaindex/example_test.go +27 -0
  712. data/ext/vendor/golang.org/x/text/encoding/ianaindex/gen.go +192 -0
  713. data/ext/vendor/golang.org/x/text/encoding/ianaindex/ianaindex.go +209 -0
  714. data/ext/vendor/golang.org/x/text/encoding/ianaindex/ianaindex_test.go +192 -0
  715. data/ext/vendor/golang.org/x/text/encoding/ianaindex/tables.go +2348 -0
  716. data/ext/vendor/golang.org/x/text/encoding/internal/enctest/enctest.go +180 -0
  717. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/gen.go +137 -0
  718. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/identifier.go +81 -0
  719. data/ext/vendor/golang.org/x/text/encoding/internal/identifier/mib.go +1621 -0
  720. data/ext/vendor/golang.org/x/text/encoding/internal/internal.go +75 -0
  721. data/ext/vendor/golang.org/x/text/encoding/japanese/all.go +12 -0
  722. data/ext/vendor/golang.org/x/text/encoding/japanese/all_test.go +248 -0
  723. data/ext/vendor/golang.org/x/text/encoding/japanese/eucjp.go +225 -0
  724. data/ext/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go +299 -0
  725. data/ext/vendor/golang.org/x/text/encoding/japanese/maketables.go +161 -0
  726. data/ext/vendor/golang.org/x/text/encoding/japanese/shiftjis.go +189 -0
  727. data/ext/vendor/golang.org/x/text/encoding/japanese/tables.go +26971 -0
  728. data/ext/vendor/golang.org/x/text/encoding/korean/all_test.go +94 -0
  729. data/ext/vendor/golang.org/x/text/encoding/korean/euckr.go +177 -0
  730. data/ext/vendor/golang.org/x/text/encoding/korean/maketables.go +143 -0
  731. data/ext/vendor/golang.org/x/text/encoding/korean/tables.go +34152 -0
  732. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/all.go +12 -0
  733. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/all_test.go +143 -0
  734. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go +269 -0
  735. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go +245 -0
  736. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go +161 -0
  737. data/ext/vendor/golang.org/x/text/encoding/simplifiedchinese/tables.go +43999 -0
  738. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-gb18030.txt +510 -0
  739. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-16le.txt +0 -0
  740. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-32be.txt +0 -0
  741. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-utf-8.txt +510 -0
  742. data/ext/vendor/golang.org/x/text/encoding/testdata/candide-windows-1252.txt +510 -0
  743. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-euc-jp.txt +178 -0
  744. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-iso-2022-jp.txt +178 -0
  745. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-shift-jis.txt +178 -0
  746. data/ext/vendor/golang.org/x/text/encoding/testdata/rashomon-utf-8.txt +178 -0
  747. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-hz-gb2312.txt +107 -0
  748. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-gb-levels-1-and-2-utf-8.txt +107 -0
  749. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-gbk.txt +107 -0
  750. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-simplified-utf-8.txt +107 -0
  751. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-big5.txt +106 -0
  752. data/ext/vendor/golang.org/x/text/encoding/testdata/sunzi-bingfa-traditional-utf-8.txt +106 -0
  753. data/ext/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-euc-kr.txt +175 -0
  754. data/ext/vendor/golang.org/x/text/encoding/testdata/unsu-joh-eun-nal-utf-8.txt +175 -0
  755. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/all_test.go +114 -0
  756. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go +199 -0
  757. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go +140 -0
  758. data/ext/vendor/golang.org/x/text/encoding/traditionalchinese/tables.go +37142 -0
  759. data/ext/vendor/golang.org/x/text/encoding/unicode/override.go +82 -0
  760. data/ext/vendor/golang.org/x/text/encoding/unicode/unicode.go +434 -0
  761. data/ext/vendor/golang.org/x/text/encoding/unicode/unicode_test.go +499 -0
  762. data/ext/vendor/golang.org/x/text/encoding/unicode/utf32/utf32.go +296 -0
  763. data/ext/vendor/golang.org/x/text/encoding/unicode/utf32/utf32_test.go +248 -0
  764. data/ext/vendor/golang.org/x/text/feature/plural/common.go +70 -0
  765. data/ext/vendor/golang.org/x/text/feature/plural/data_test.go +190 -0
  766. data/ext/vendor/golang.org/x/text/feature/plural/example_test.go +46 -0
  767. data/ext/vendor/golang.org/x/text/feature/plural/gen.go +513 -0
  768. data/ext/vendor/golang.org/x/text/feature/plural/gen_common.go +74 -0
  769. data/ext/vendor/golang.org/x/text/feature/plural/message.go +244 -0
  770. data/ext/vendor/golang.org/x/text/feature/plural/message_test.go +197 -0
  771. data/ext/vendor/golang.org/x/text/feature/plural/plural.go +258 -0
  772. data/ext/vendor/golang.org/x/text/feature/plural/plural_test.go +216 -0
  773. data/ext/vendor/golang.org/x/text/feature/plural/tables.go +540 -0
  774. data/ext/vendor/golang.org/x/text/gen.go +318 -0
  775. data/ext/vendor/golang.org/x/text/internal/catmsg/catmsg.go +366 -0
  776. data/ext/vendor/golang.org/x/text/internal/catmsg/catmsg_test.go +316 -0
  777. data/ext/vendor/golang.org/x/text/internal/catmsg/codec.go +407 -0
  778. data/ext/vendor/golang.org/x/text/internal/catmsg/varint.go +62 -0
  779. data/ext/vendor/golang.org/x/text/internal/catmsg/varint_test.go +123 -0
  780. data/ext/vendor/golang.org/x/text/internal/colltab/collate_test.go +121 -0
  781. data/ext/vendor/golang.org/x/text/internal/colltab/collelem.go +371 -0
  782. data/ext/vendor/golang.org/x/text/internal/colltab/collelem_test.go +183 -0
  783. data/ext/vendor/golang.org/x/text/internal/colltab/colltab.go +105 -0
  784. data/ext/vendor/golang.org/x/text/internal/colltab/colltab_test.go +64 -0
  785. data/ext/vendor/golang.org/x/text/internal/colltab/contract.go +145 -0
  786. data/ext/vendor/golang.org/x/text/internal/colltab/contract_test.go +131 -0
  787. data/ext/vendor/golang.org/x/text/internal/colltab/iter.go +178 -0
  788. data/ext/vendor/golang.org/x/text/internal/colltab/iter_test.go +63 -0
  789. data/ext/vendor/golang.org/x/text/internal/colltab/numeric.go +236 -0
  790. data/ext/vendor/golang.org/x/text/internal/colltab/numeric_test.go +159 -0
  791. data/ext/vendor/golang.org/x/text/internal/colltab/table.go +275 -0
  792. data/ext/vendor/golang.org/x/text/internal/colltab/trie.go +159 -0
  793. data/ext/vendor/golang.org/x/text/internal/colltab/trie_test.go +106 -0
  794. data/ext/vendor/golang.org/x/text/internal/colltab/weighter.go +31 -0
  795. data/ext/vendor/golang.org/x/text/internal/colltab/weighter_test.go +42 -0
  796. data/ext/vendor/golang.org/x/text/internal/export/README +4 -0
  797. data/ext/vendor/golang.org/x/text/internal/export/idna/common_test.go +55 -0
  798. data/ext/vendor/golang.org/x/text/internal/export/idna/example_test.go +68 -0
  799. data/ext/vendor/golang.org/x/text/internal/export/idna/gen.go +276 -0
  800. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_common.go +59 -0
  801. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_test.go +91 -0
  802. data/ext/vendor/golang.org/x/text/internal/export/idna/gen_trieval.go +123 -0
  803. data/ext/vendor/golang.org/x/text/internal/export/idna/idna.go +717 -0
  804. data/ext/vendor/golang.org/x/text/internal/export/idna/idna_test.go +308 -0
  805. data/ext/vendor/golang.org/x/text/internal/export/idna/punycode.go +201 -0
  806. data/ext/vendor/golang.org/x/text/internal/export/idna/punycode_test.go +198 -0
  807. data/ext/vendor/golang.org/x/text/internal/export/idna/tables.go +4557 -0
  808. data/ext/vendor/golang.org/x/text/internal/export/idna/trie.go +70 -0
  809. data/ext/vendor/golang.org/x/text/internal/export/idna/trieval.go +119 -0
  810. data/ext/vendor/golang.org/x/text/internal/format/format.go +41 -0
  811. data/ext/vendor/golang.org/x/text/internal/gen.go +52 -0
  812. data/ext/vendor/golang.org/x/text/internal/gen/code.go +351 -0
  813. data/ext/vendor/golang.org/x/text/internal/gen/gen.go +281 -0
  814. data/ext/vendor/golang.org/x/text/internal/gen_test.go +38 -0
  815. data/ext/vendor/golang.org/x/text/internal/internal.go +51 -0
  816. data/ext/vendor/golang.org/x/text/internal/internal_test.go +38 -0
  817. data/ext/vendor/golang.org/x/text/internal/match.go +67 -0
  818. data/ext/vendor/golang.org/x/text/internal/match_test.go +56 -0
  819. data/ext/vendor/golang.org/x/text/internal/number/common.go +40 -0
  820. data/ext/vendor/golang.org/x/text/internal/number/decimal.go +498 -0
  821. data/ext/vendor/golang.org/x/text/internal/number/decimal_test.go +329 -0
  822. data/ext/vendor/golang.org/x/text/internal/number/format.go +540 -0
  823. data/ext/vendor/golang.org/x/text/internal/number/format_test.go +522 -0
  824. data/ext/vendor/golang.org/x/text/internal/number/gen.go +458 -0
  825. data/ext/vendor/golang.org/x/text/internal/number/gen_common.go +44 -0
  826. data/ext/vendor/golang.org/x/text/internal/number/number.go +154 -0
  827. data/ext/vendor/golang.org/x/text/internal/number/number_test.go +100 -0
  828. data/ext/vendor/golang.org/x/text/internal/number/pattern.go +485 -0
  829. data/ext/vendor/golang.org/x/text/internal/number/pattern_test.go +438 -0
  830. data/ext/vendor/golang.org/x/text/internal/number/roundingmode_string.go +16 -0
  831. data/ext/vendor/golang.org/x/text/internal/number/tables.go +1154 -0
  832. data/ext/vendor/golang.org/x/text/internal/number/tables_test.go +125 -0
  833. data/ext/vendor/golang.org/x/text/internal/stringset/set.go +86 -0
  834. data/ext/vendor/golang.org/x/text/internal/stringset/set_test.go +53 -0
  835. data/ext/vendor/golang.org/x/text/internal/tables.go +117 -0
  836. data/ext/vendor/golang.org/x/text/internal/tag/tag.go +100 -0
  837. data/ext/vendor/golang.org/x/text/internal/tag/tag_test.go +67 -0
  838. data/ext/vendor/golang.org/x/text/internal/testtext/codesize.go +53 -0
  839. data/ext/vendor/golang.org/x/text/internal/testtext/flag.go +22 -0
  840. data/ext/vendor/golang.org/x/text/internal/testtext/gc.go +14 -0
  841. data/ext/vendor/golang.org/x/text/internal/testtext/gccgo.go +11 -0
  842. data/ext/vendor/golang.org/x/text/internal/testtext/go1_6.go +23 -0
  843. data/ext/vendor/golang.org/x/text/internal/testtext/go1_7.go +17 -0
  844. data/ext/vendor/golang.org/x/text/internal/testtext/text.go +105 -0
  845. data/ext/vendor/golang.org/x/text/internal/triegen/compact.go +58 -0
  846. data/ext/vendor/golang.org/x/text/internal/triegen/data_test.go +875 -0
  847. data/ext/vendor/golang.org/x/text/internal/triegen/example_compact_test.go +71 -0
  848. data/ext/vendor/golang.org/x/text/internal/triegen/example_test.go +148 -0
  849. data/ext/vendor/golang.org/x/text/internal/triegen/gen_test.go +68 -0
  850. data/ext/vendor/golang.org/x/text/internal/triegen/print.go +251 -0
  851. data/ext/vendor/golang.org/x/text/internal/triegen/triegen.go +494 -0
  852. data/ext/vendor/golang.org/x/text/internal/ucd/example_test.go +81 -0
  853. data/ext/vendor/golang.org/x/text/internal/ucd/ucd.go +371 -0
  854. data/ext/vendor/golang.org/x/text/internal/ucd/ucd_test.go +105 -0
  855. data/ext/vendor/golang.org/x/text/internal/utf8internal/utf8internal.go +87 -0
  856. data/ext/vendor/golang.org/x/text/language/Makefile +16 -0
  857. data/ext/vendor/golang.org/x/text/language/common.go +16 -0
  858. data/ext/vendor/golang.org/x/text/language/coverage.go +197 -0
  859. data/ext/vendor/golang.org/x/text/language/coverage_test.go +154 -0
  860. data/ext/vendor/golang.org/x/text/language/display/dict.go +92 -0
  861. data/ext/vendor/golang.org/x/text/language/display/dict_test.go +39 -0
  862. data/ext/vendor/golang.org/x/text/language/display/display.go +420 -0
  863. data/ext/vendor/golang.org/x/text/language/display/display_test.go +705 -0
  864. data/ext/vendor/golang.org/x/text/language/display/examples_test.go +116 -0
  865. data/ext/vendor/golang.org/x/text/language/display/lookup.go +251 -0
  866. data/ext/vendor/golang.org/x/text/language/display/maketables.go +602 -0
  867. data/ext/vendor/golang.org/x/text/language/display/tables.go +50344 -0
  868. data/ext/vendor/golang.org/x/text/language/doc.go +102 -0
  869. data/ext/vendor/golang.org/x/text/language/examples_test.go +413 -0
  870. data/ext/vendor/golang.org/x/text/language/gen.go +1706 -0
  871. data/ext/vendor/golang.org/x/text/language/gen_common.go +20 -0
  872. data/ext/vendor/golang.org/x/text/language/gen_index.go +162 -0
  873. data/ext/vendor/golang.org/x/text/language/go1_1.go +38 -0
  874. data/ext/vendor/golang.org/x/text/language/go1_2.go +11 -0
  875. data/ext/vendor/golang.org/x/text/language/httpexample_test.go +48 -0
  876. data/ext/vendor/golang.org/x/text/language/index.go +769 -0
  877. data/ext/vendor/golang.org/x/text/language/language.go +887 -0
  878. data/ext/vendor/golang.org/x/text/language/language_test.go +878 -0
  879. data/ext/vendor/golang.org/x/text/language/lookup.go +396 -0
  880. data/ext/vendor/golang.org/x/text/language/lookup_test.go +457 -0
  881. data/ext/vendor/golang.org/x/text/language/match.go +933 -0
  882. data/ext/vendor/golang.org/x/text/language/match_test.go +505 -0
  883. data/ext/vendor/golang.org/x/text/language/parse.go +859 -0
  884. data/ext/vendor/golang.org/x/text/language/parse_test.go +517 -0
  885. data/ext/vendor/golang.org/x/text/language/tables.go +3675 -0
  886. data/ext/vendor/golang.org/x/text/language/tags.go +143 -0
  887. data/ext/vendor/golang.org/x/text/language/testdata/CLDRLocaleMatcherTest.txt +389 -0
  888. data/ext/vendor/golang.org/x/text/language/testdata/GoLocaleMatcherTest.txt +226 -0
  889. data/ext/vendor/golang.org/x/text/message/catalog.go +28 -0
  890. data/ext/vendor/golang.org/x/text/message/catalog/catalog.go +292 -0
  891. data/ext/vendor/golang.org/x/text/message/catalog/catalog_test.go +194 -0
  892. data/ext/vendor/golang.org/x/text/message/catalog/dict.go +90 -0
  893. data/ext/vendor/golang.org/x/text/message/doc.go +100 -0
  894. data/ext/vendor/golang.org/x/text/message/examples_test.go +42 -0
  895. data/ext/vendor/golang.org/x/text/message/fmt_test.go +1889 -0
  896. data/ext/vendor/golang.org/x/text/message/format.go +532 -0
  897. data/ext/vendor/golang.org/x/text/message/message.go +169 -0
  898. data/ext/vendor/golang.org/x/text/message/message_test.go +181 -0
  899. data/ext/vendor/golang.org/x/text/message/print.go +1194 -0
  900. data/ext/vendor/golang.org/x/text/number/doc.go +28 -0
  901. data/ext/vendor/golang.org/x/text/number/examples_test.go +28 -0
  902. data/ext/vendor/golang.org/x/text/number/format.go +122 -0
  903. data/ext/vendor/golang.org/x/text/number/format_test.go +107 -0
  904. data/ext/vendor/golang.org/x/text/number/number.go +77 -0
  905. data/ext/vendor/golang.org/x/text/number/number_test.go +190 -0
  906. data/ext/vendor/golang.org/x/text/number/option.go +177 -0
  907. data/ext/vendor/golang.org/x/text/runes/cond.go +187 -0
  908. data/ext/vendor/golang.org/x/text/runes/cond_test.go +282 -0
  909. data/ext/vendor/golang.org/x/text/runes/example_test.go +60 -0
  910. data/ext/vendor/golang.org/x/text/runes/runes.go +355 -0
  911. data/ext/vendor/golang.org/x/text/runes/runes_test.go +664 -0
  912. data/ext/vendor/golang.org/x/text/search/index.go +35 -0
  913. data/ext/vendor/golang.org/x/text/search/pattern.go +155 -0
  914. data/ext/vendor/golang.org/x/text/search/pattern_test.go +357 -0
  915. data/ext/vendor/golang.org/x/text/search/search.go +237 -0
  916. data/ext/vendor/golang.org/x/text/search/tables.go +12448 -0
  917. data/ext/vendor/golang.org/x/text/secure/bidirule/bench_test.go +54 -0
  918. data/ext/vendor/golang.org/x/text/secure/bidirule/bidirule.go +340 -0
  919. data/ext/vendor/golang.org/x/text/secure/bidirule/bidirule_test.go +851 -0
  920. data/ext/vendor/golang.org/x/text/secure/doc.go +6 -0
  921. data/ext/vendor/golang.org/x/text/secure/precis/benchmark_test.go +82 -0
  922. data/ext/vendor/golang.org/x/text/secure/precis/class.go +36 -0
  923. data/ext/vendor/golang.org/x/text/secure/precis/class_test.go +50 -0
  924. data/ext/vendor/golang.org/x/text/secure/precis/context.go +139 -0
  925. data/ext/vendor/golang.org/x/text/secure/precis/doc.go +14 -0
  926. data/ext/vendor/golang.org/x/text/secure/precis/enforce_test.go +396 -0
  927. data/ext/vendor/golang.org/x/text/secure/precis/gen.go +310 -0
  928. data/ext/vendor/golang.org/x/text/secure/precis/gen_trieval.go +68 -0
  929. data/ext/vendor/golang.org/x/text/secure/precis/nickname.go +72 -0
  930. data/ext/vendor/golang.org/x/text/secure/precis/options.go +157 -0
  931. data/ext/vendor/golang.org/x/text/secure/precis/profile.go +402 -0
  932. data/ext/vendor/golang.org/x/text/secure/precis/profile_test.go +149 -0
  933. data/ext/vendor/golang.org/x/text/secure/precis/profiles.go +78 -0
  934. data/ext/vendor/golang.org/x/text/secure/precis/tables.go +3887 -0
  935. data/ext/vendor/golang.org/x/text/secure/precis/tables_test.go +69 -0
  936. data/ext/vendor/golang.org/x/text/secure/precis/transformer.go +32 -0
  937. data/ext/vendor/golang.org/x/text/secure/precis/trieval.go +64 -0
  938. data/ext/vendor/golang.org/x/text/transform/examples_test.go +37 -0
  939. data/ext/vendor/golang.org/x/text/transform/transform.go +705 -0
  940. data/ext/vendor/golang.org/x/text/transform/transform_test.go +1317 -0
  941. data/ext/vendor/golang.org/x/text/unicode/bidi/bidi.go +198 -0
  942. data/ext/vendor/golang.org/x/text/unicode/bidi/bracket.go +335 -0
  943. data/ext/vendor/golang.org/x/text/unicode/bidi/core.go +1058 -0
  944. data/ext/vendor/golang.org/x/text/unicode/bidi/core_test.go +224 -0
  945. data/ext/vendor/golang.org/x/text/unicode/bidi/gen.go +133 -0
  946. data/ext/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go +57 -0
  947. data/ext/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go +64 -0
  948. data/ext/vendor/golang.org/x/text/unicode/bidi/prop.go +206 -0
  949. data/ext/vendor/golang.org/x/text/unicode/bidi/ranges_test.go +53 -0
  950. data/ext/vendor/golang.org/x/text/unicode/bidi/tables.go +1813 -0
  951. data/ext/vendor/golang.org/x/text/unicode/bidi/tables_test.go +82 -0
  952. data/ext/vendor/golang.org/x/text/unicode/bidi/trieval.go +60 -0
  953. data/ext/vendor/golang.org/x/text/unicode/cldr/base.go +100 -0
  954. data/ext/vendor/golang.org/x/text/unicode/cldr/cldr.go +130 -0
  955. data/ext/vendor/golang.org/x/text/unicode/cldr/cldr_test.go +27 -0
  956. data/ext/vendor/golang.org/x/text/unicode/cldr/collate.go +359 -0
  957. data/ext/vendor/golang.org/x/text/unicode/cldr/collate_test.go +275 -0
  958. data/ext/vendor/golang.org/x/text/unicode/cldr/data_test.go +186 -0
  959. data/ext/vendor/golang.org/x/text/unicode/cldr/decode.go +171 -0
  960. data/ext/vendor/golang.org/x/text/unicode/cldr/examples_test.go +21 -0
  961. data/ext/vendor/golang.org/x/text/unicode/cldr/makexml.go +400 -0
  962. data/ext/vendor/golang.org/x/text/unicode/cldr/resolve.go +602 -0
  963. data/ext/vendor/golang.org/x/text/unicode/cldr/resolve_test.go +368 -0
  964. data/ext/vendor/golang.org/x/text/unicode/cldr/slice.go +144 -0
  965. data/ext/vendor/golang.org/x/text/unicode/cldr/slice_test.go +175 -0
  966. data/ext/vendor/golang.org/x/text/unicode/cldr/xml.go +1487 -0
  967. data/ext/vendor/golang.org/x/text/unicode/doc.go +8 -0
  968. data/ext/vendor/golang.org/x/text/unicode/norm/composition.go +508 -0
  969. data/ext/vendor/golang.org/x/text/unicode/norm/composition_test.go +130 -0
  970. data/ext/vendor/golang.org/x/text/unicode/norm/example_iter_test.go +82 -0
  971. data/ext/vendor/golang.org/x/text/unicode/norm/example_test.go +27 -0
  972. data/ext/vendor/golang.org/x/text/unicode/norm/forminfo.go +259 -0
  973. data/ext/vendor/golang.org/x/text/unicode/norm/forminfo_test.go +54 -0
  974. data/ext/vendor/golang.org/x/text/unicode/norm/input.go +109 -0
  975. data/ext/vendor/golang.org/x/text/unicode/norm/iter.go +457 -0
  976. data/ext/vendor/golang.org/x/text/unicode/norm/iter_test.go +98 -0
  977. data/ext/vendor/golang.org/x/text/unicode/norm/maketables.go +976 -0
  978. data/ext/vendor/golang.org/x/text/unicode/norm/norm_test.go +14 -0
  979. data/ext/vendor/golang.org/x/text/unicode/norm/normalize.go +609 -0
  980. data/ext/vendor/golang.org/x/text/unicode/norm/normalize_test.go +1287 -0
  981. data/ext/vendor/golang.org/x/text/unicode/norm/readwriter.go +125 -0
  982. data/ext/vendor/golang.org/x/text/unicode/norm/readwriter_test.go +56 -0
  983. data/ext/vendor/golang.org/x/text/unicode/norm/tables.go +7651 -0
  984. data/ext/vendor/golang.org/x/text/unicode/norm/transform.go +88 -0
  985. data/ext/vendor/golang.org/x/text/unicode/norm/transform_test.go +101 -0
  986. data/ext/vendor/golang.org/x/text/unicode/norm/trie.go +54 -0
  987. data/ext/vendor/golang.org/x/text/unicode/norm/triegen.go +117 -0
  988. data/ext/vendor/golang.org/x/text/unicode/norm/ucd_test.go +275 -0
  989. data/ext/vendor/golang.org/x/text/unicode/rangetable/gen.go +115 -0
  990. data/ext/vendor/golang.org/x/text/unicode/rangetable/merge.go +260 -0
  991. data/ext/vendor/golang.org/x/text/unicode/rangetable/merge_test.go +184 -0
  992. data/ext/vendor/golang.org/x/text/unicode/rangetable/rangetable.go +70 -0
  993. data/ext/vendor/golang.org/x/text/unicode/rangetable/rangetable_test.go +55 -0
  994. data/ext/vendor/golang.org/x/text/unicode/rangetable/tables.go +6376 -0
  995. data/ext/vendor/golang.org/x/text/unicode/runenames/bits.go +59 -0
  996. data/ext/vendor/golang.org/x/text/unicode/runenames/example_test.go +118 -0
  997. data/ext/vendor/golang.org/x/text/unicode/runenames/gen.go +195 -0
  998. data/ext/vendor/golang.org/x/text/unicode/runenames/gen_bits.go +63 -0
  999. data/ext/vendor/golang.org/x/text/unicode/runenames/runenames.go +48 -0
  1000. data/ext/vendor/golang.org/x/text/unicode/runenames/runenames_test.go +46 -0
  1001. data/ext/vendor/golang.org/x/text/unicode/runenames/tables.go +15514 -0
  1002. data/ext/vendor/golang.org/x/text/width/common_test.go +92 -0
  1003. data/ext/vendor/golang.org/x/text/width/example_test.go +52 -0
  1004. data/ext/vendor/golang.org/x/text/width/gen.go +115 -0
  1005. data/ext/vendor/golang.org/x/text/width/gen_common.go +96 -0
  1006. data/ext/vendor/golang.org/x/text/width/gen_trieval.go +34 -0
  1007. data/ext/vendor/golang.org/x/text/width/kind_string.go +16 -0
  1008. data/ext/vendor/golang.org/x/text/width/runes_test.go +461 -0
  1009. data/ext/vendor/golang.org/x/text/width/tables.go +1316 -0
  1010. data/ext/vendor/golang.org/x/text/width/tables_test.go +59 -0
  1011. data/ext/vendor/golang.org/x/text/width/transform.go +239 -0
  1012. data/ext/vendor/golang.org/x/text/width/transform_test.go +701 -0
  1013. data/ext/vendor/golang.org/x/text/width/trieval.go +30 -0
  1014. data/ext/vendor/golang.org/x/text/width/width.go +206 -0
  1015. data/lib/ires/version.rb +1 -1
  1016. data/shared/darwin/ires.so +0 -0
  1017. data/shared/linux/ires.so +0 -0
  1018. metadata +1011 -23
  1019. data/ext/operate/image.go +0 -176
  1020. data/ext/util/uri/uri.go +0 -105
  1021. data/ext/vendor/github.com/satori/go.uuid/README.md +0 -65
  1022. data/ext/vendor/github.com/satori/go.uuid/benchmarks_test.go +0 -121
  1023. data/ext/vendor/github.com/satori/go.uuid/uuid.go +0 -488
  1024. data/ext/vendor/github.com/satori/go.uuid/uuid_test.go +0 -633
@@ -0,0 +1,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
+ }