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,169 @@
1
+ // Copyright 2015 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 message // import "golang.org/x/text/message"
6
+
7
+ import (
8
+ "io"
9
+ "os"
10
+
11
+ "golang.org/x/text/language"
12
+ "golang.org/x/text/message/catalog"
13
+ )
14
+
15
+ // TODO: allow more than one goroutine per printer. This will allow porting from
16
+ // fmt much less error prone.
17
+
18
+ // A Printer implements language-specific formatted I/O analogous to the fmt
19
+ // package. Only one goroutine may use a Printer at the same time.
20
+ type Printer struct {
21
+ // Wrap the fields in a hidden type to hide some of the implemented methods.
22
+ printer printer
23
+
24
+ // NOTE: limiting one goroutine per Printer allows for many optimizations
25
+ // and simplifications. We can consider removing this restriction down the
26
+ // road if it the benefits do not seem to outweigh the disadvantages.
27
+ }
28
+
29
+ type options struct {
30
+ cat *catalog.Catalog
31
+ // TODO:
32
+ // - allow %s to print integers in written form (tables are likely too large
33
+ // to enable this by default).
34
+ // - list behavior
35
+ //
36
+ }
37
+
38
+ // An Option defines an option of a Printer.
39
+ type Option func(o *options)
40
+
41
+ // Catalog defines the catalog to be used.
42
+ func Catalog(c *catalog.Catalog) Option {
43
+ return func(o *options) { o.cat = c }
44
+ }
45
+
46
+ // NewPrinter returns a Printer that formats messages tailored to language t.
47
+ func NewPrinter(t language.Tag, opts ...Option) *Printer {
48
+ options := &options{
49
+ cat: defaultCatalog,
50
+ }
51
+ for _, o := range opts {
52
+ o(options)
53
+ }
54
+ p := &Printer{printer{
55
+ tag: t,
56
+ }}
57
+ p.printer.toDecimal.InitDecimal(t)
58
+ p.printer.toScientific.InitScientific(t)
59
+ p.printer.catContext = options.cat.Context(t, &p.printer)
60
+ return p
61
+ }
62
+
63
+ // Sprint is like fmt.Sprint, but using language-specific formatting.
64
+ func (p *Printer) Sprint(a ...interface{}) string {
65
+ p.printer.reset()
66
+ p.printer.doPrint(a)
67
+ return p.printer.String()
68
+ }
69
+
70
+ // Fprint is like fmt.Fprint, but using language-specific formatting.
71
+ func (p *Printer) Fprint(w io.Writer, a ...interface{}) (n int, err error) {
72
+ p.printer.reset()
73
+ p.printer.doPrint(a)
74
+ n64, err := io.Copy(w, &p.printer.Buffer)
75
+ return int(n64), err
76
+ }
77
+
78
+ // Print is like fmt.Print, but using language-specific formatting.
79
+ func (p *Printer) Print(a ...interface{}) (n int, err error) {
80
+ return p.Fprint(os.Stdout, a...)
81
+ }
82
+
83
+ // Sprintln is like fmt.Sprintln, but using language-specific formatting.
84
+ func (p *Printer) Sprintln(a ...interface{}) string {
85
+ p.printer.reset()
86
+ p.printer.doPrintln(a)
87
+ return p.printer.String()
88
+ }
89
+
90
+ // Fprintln is like fmt.Fprintln, but using language-specific formatting.
91
+ func (p *Printer) Fprintln(w io.Writer, a ...interface{}) (n int, err error) {
92
+ p.printer.reset()
93
+ p.printer.doPrintln(a)
94
+ n64, err := io.Copy(w, &p.printer.Buffer)
95
+ return int(n64), err
96
+ }
97
+
98
+ // Println is like fmt.Println, but using language-specific formatting.
99
+ func (p *Printer) Println(a ...interface{}) (n int, err error) {
100
+ return p.Fprintln(os.Stdout, a...)
101
+ }
102
+
103
+ // Sprintf is like fmt.Sprintf, but using language-specific formatting.
104
+ func (p *Printer) Sprintf(key Reference, a ...interface{}) string {
105
+ lookupAndFormat(p, key, a)
106
+ return p.printer.String()
107
+ }
108
+
109
+ // Fprintf is like fmt.Fprintf, but using language-specific formatting.
110
+ func (p *Printer) Fprintf(w io.Writer, key Reference, a ...interface{}) (n int, err error) {
111
+ lookupAndFormat(p, key, a)
112
+ return w.Write(p.printer.Bytes())
113
+ }
114
+
115
+ // Printf is like fmt.Printf, but using language-specific formatting.
116
+ func (p *Printer) Printf(key Reference, a ...interface{}) (n int, err error) {
117
+ lookupAndFormat(p, key, a)
118
+ return os.Stdout.Write(p.printer.Bytes())
119
+ }
120
+
121
+ func lookupAndFormat(p *Printer, r Reference, a []interface{}) {
122
+ p.printer.reset()
123
+ p.printer.args = a
124
+ var id, msg string
125
+ switch v := r.(type) {
126
+ case string:
127
+ id, msg = v, v
128
+ case key:
129
+ id, msg = v.id, v.fallback
130
+ default:
131
+ panic("key argument is not a Reference")
132
+ }
133
+
134
+ if p.printer.catContext.Execute(id) == catalog.ErrNotFound {
135
+ if p.printer.catContext.Execute(msg) == catalog.ErrNotFound {
136
+ p.printer.Render(msg)
137
+ return
138
+ }
139
+ }
140
+ }
141
+
142
+ // Arg implements catmsg.Renderer.
143
+ func (p *printer) Arg(i int) interface{} { // TODO, also return "ok" bool
144
+ i--
145
+ if uint(i) < uint(len(p.args)) {
146
+ return p.args[i]
147
+ }
148
+ return nil
149
+ }
150
+
151
+ // Render implements catmsg.Renderer.
152
+ func (p *printer) Render(msg string) {
153
+ p.doPrintf(msg)
154
+ }
155
+
156
+ // A Reference is a string or a message reference.
157
+ type Reference interface {
158
+ // TODO: also allow []string
159
+ }
160
+
161
+ // Key creates a message Reference for a message where the given id is used for
162
+ // message lookup and the fallback is returned when no matches are found.
163
+ func Key(id string, fallback string) Reference {
164
+ return key{id, fallback}
165
+ }
166
+
167
+ type key struct {
168
+ id, fallback string
169
+ }
@@ -0,0 +1,181 @@
1
+ // Copyright 2015 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 message
6
+
7
+ import (
8
+ "bytes"
9
+ "fmt"
10
+ "io"
11
+ "testing"
12
+
13
+ "golang.org/x/text/internal"
14
+ "golang.org/x/text/internal/format"
15
+ "golang.org/x/text/language"
16
+ "golang.org/x/text/message/catalog"
17
+ )
18
+
19
+ type formatFunc func(s fmt.State, v rune)
20
+
21
+ func (f formatFunc) Format(s fmt.State, v rune) { f(s, v) }
22
+
23
+ func TestBinding(t *testing.T) {
24
+ testCases := []struct {
25
+ tag string
26
+ value interface{}
27
+ want string
28
+ }{
29
+ {"en", 1, "1"},
30
+ {"en", "2", "2"},
31
+ { // Language is passed.
32
+ "en",
33
+ formatFunc(func(fs fmt.State, v rune) {
34
+ s := fs.(format.State)
35
+ io.WriteString(s, s.Language().String())
36
+ }),
37
+ "en",
38
+ },
39
+ }
40
+ for i, tc := range testCases {
41
+ p := NewPrinter(language.MustParse(tc.tag))
42
+ if got := p.Sprint(tc.value); got != tc.want {
43
+ t.Errorf("%d:%s:Sprint(%v) = %q; want %q", i, tc.tag, tc.value, got, tc.want)
44
+ }
45
+ var buf bytes.Buffer
46
+ p.Fprint(&buf, tc.value)
47
+ if got := buf.String(); got != tc.want {
48
+ t.Errorf("%d:%s:Fprint(%v) = %q; want %q", i, tc.tag, tc.value, got, tc.want)
49
+ }
50
+ }
51
+ }
52
+
53
+ func TestLocalization(t *testing.T) {
54
+ type test struct {
55
+ tag string
56
+ key Reference
57
+ args []interface{}
58
+ want string
59
+ }
60
+ args := func(x ...interface{}) []interface{} { return x }
61
+ empty := []interface{}{}
62
+ joe := []interface{}{"Joe"}
63
+ joeAndMary := []interface{}{"Joe", "Mary"}
64
+
65
+ testCases := []struct {
66
+ desc string
67
+ cat []entry
68
+ test []test
69
+ }{{
70
+ desc: "empty",
71
+ test: []test{
72
+ {"en", "key", empty, "key"},
73
+ {"en", "", empty, ""},
74
+ {"nl", "", empty, ""},
75
+ },
76
+ }, {
77
+ desc: "hierarchical languages",
78
+ cat: []entry{
79
+ {"en", "hello %s", "Hello %s!"},
80
+ {"en-GB", "hello %s", "Hellø %s!"},
81
+ {"en-US", "hello %s", "Howdy %s!"},
82
+ {"en", "greetings %s and %s", "Greetings %s and %s!"},
83
+ },
84
+ test: []test{
85
+ {"und", "hello %s", joe, "hello Joe"},
86
+ {"nl", "hello %s", joe, "hello Joe"},
87
+ {"en", "hello %s", joe, "Hello Joe!"},
88
+ {"en-US", "hello %s", joe, "Howdy Joe!"},
89
+ {"en-GB", "hello %s", joe, "Hellø Joe!"},
90
+ {"en-oxendict", "hello %s", joe, "Hello Joe!"},
91
+ {"en-US-oxendict-u-ms-metric", "hello %s", joe, "Howdy Joe!"},
92
+
93
+ {"und", "greetings %s and %s", joeAndMary, "greetings Joe and Mary"},
94
+ {"nl", "greetings %s and %s", joeAndMary, "greetings Joe and Mary"},
95
+ {"en", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"},
96
+ {"en-US", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"},
97
+ {"en-GB", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"},
98
+ {"en-oxendict", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"},
99
+ {"en-US-oxendict-u-ms-metric", "greetings %s and %s", joeAndMary, "Greetings Joe and Mary!"},
100
+ },
101
+ }, {
102
+ desc: "references",
103
+ cat: []entry{
104
+ {"en", "hello", "Hello!"},
105
+ },
106
+ test: []test{
107
+ {"en", "hello", empty, "Hello!"},
108
+ {"en", Key("hello", "fallback"), empty, "Hello!"},
109
+ {"en", Key("xxx", "fallback"), empty, "fallback"},
110
+ {"und", Key("hello", "fallback"), empty, "fallback"},
111
+ },
112
+ }, {
113
+ desc: "zero substitution", // work around limitation of fmt
114
+ cat: []entry{
115
+ {"en", "hello %s", "Hello!"},
116
+ {"en", "hi %s and %s", "Hello %[2]s!"},
117
+ },
118
+ test: []test{
119
+ {"en", "hello %s", joe, "Hello!"},
120
+ {"en", "hello %s", joeAndMary, "Hello!"},
121
+ {"en", "hi %s and %s", joeAndMary, "Hello Mary!"},
122
+ // The following tests resolve to the fallback string.
123
+ {"und", "hello", joeAndMary, "hello"},
124
+ {"und", "hello %%%%", joeAndMary, "hello %%"},
125
+ {"und", "hello %#%%4.2% ", joeAndMary, "hello %% "},
126
+ {"und", "hello %s", joeAndMary, "hello Joe%!(EXTRA string=Mary)"},
127
+ {"und", "hello %+%%s", joeAndMary, "hello %Joe%!(EXTRA string=Mary)"},
128
+ {"und", "hello %-42%%s ", joeAndMary, "hello %Joe %!(EXTRA string=Mary)"},
129
+ },
130
+ }, {
131
+ desc: "number formatting", // work around limitation of fmt
132
+ cat: []entry{
133
+ {"und", "files", "%d files left"},
134
+ {"und", "meters", "%.2f meters"},
135
+ {"de", "files", "%d Dateien übrig"},
136
+ },
137
+ test: []test{
138
+ {"en", "meters", args(3000.2), "3,000.20 meters"},
139
+ {"en-u-nu-gujr", "files", args(123456), "૧૨૩,૪૫૬ files left"},
140
+ {"de", "files", args(1234), "1.234 Dateien übrig"},
141
+ {"de-CH", "files", args(1234), "1’234 Dateien übrig"},
142
+ {"de-CH-u-nu-mong", "files", args(1234), "᠑’᠒᠓᠔ Dateien übrig"},
143
+ },
144
+ }}
145
+
146
+ for _, tc := range testCases {
147
+ cat, _ := initCat(tc.cat)
148
+
149
+ for i, pt := range tc.test {
150
+ t.Run(fmt.Sprintf("%s:%d", tc.desc, i), func(t *testing.T) {
151
+ p := NewPrinter(language.MustParse(pt.tag), Catalog(cat))
152
+
153
+ if got := p.Sprintf(pt.key, pt.args...); got != pt.want {
154
+ t.Errorf("Sprintf(%q, %v) = %s; want %s",
155
+ pt.key, pt.args, got, pt.want)
156
+ return // Next error will likely be the same.
157
+ }
158
+
159
+ w := &bytes.Buffer{}
160
+ p.Fprintf(w, pt.key, pt.args...)
161
+ if got := w.String(); got != pt.want {
162
+ t.Errorf("Fprintf(%q, %v) = %s; want %s",
163
+ pt.key, pt.args, got, pt.want)
164
+ }
165
+ })
166
+ }
167
+ }
168
+ }
169
+
170
+ type entry struct{ tag, key, msg string }
171
+
172
+ func initCat(entries []entry) (*catalog.Catalog, []language.Tag) {
173
+ tags := []language.Tag{}
174
+ cat := catalog.New()
175
+ for _, e := range entries {
176
+ tag := language.MustParse(e.tag)
177
+ tags = append(tags, tag)
178
+ cat.SetString(tag, e.key, e.msg)
179
+ }
180
+ return cat, internal.UniqueTags(tags)
181
+ }
@@ -0,0 +1,1194 @@
1
+ // Copyright 2017 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 message
6
+
7
+ import (
8
+ "bytes"
9
+ "fmt" // TODO: consider copying interfaces from package fmt to avoid dependency.
10
+ "math"
11
+ "reflect"
12
+ "unicode/utf8"
13
+
14
+ "golang.org/x/text/internal/format"
15
+ "golang.org/x/text/internal/number"
16
+ "golang.org/x/text/language"
17
+ "golang.org/x/text/message/catalog"
18
+ )
19
+
20
+ // Strings for use with buffer.WriteString.
21
+ // This is less overhead than using buffer.Write with byte arrays.
22
+ const (
23
+ commaSpaceString = ", "
24
+ nilAngleString = "<nil>"
25
+ nilParenString = "(nil)"
26
+ nilString = "nil"
27
+ mapString = "map["
28
+ percentBangString = "%!"
29
+ missingString = "(MISSING)"
30
+ badIndexString = "(BADINDEX)"
31
+ panicString = "(PANIC="
32
+ extraString = "%!(EXTRA "
33
+ badWidthString = "%!(BADWIDTH)"
34
+ badPrecString = "%!(BADPREC)"
35
+ noVerbString = "%!(NOVERB)"
36
+
37
+ invReflectString = "<invalid reflect.Value>"
38
+ )
39
+
40
+ // printer is used to store a printer's state.
41
+ // It implements "golang.org/x/text/internal/format".State.
42
+ type printer struct {
43
+ // the context for looking up message translations
44
+ catContext *catalog.Context
45
+ // the language
46
+ tag language.Tag
47
+
48
+ // buffer for accumulating output.
49
+ bytes.Buffer
50
+
51
+ // retain arguments across calls.
52
+ args []interface{}
53
+ // retain current argument number across calls
54
+ argNum int
55
+ // arg holds the current item, as an interface{}.
56
+ arg interface{}
57
+ // value is used instead of arg for reflect values.
58
+ value reflect.Value
59
+
60
+ // fmt is used to format basic items such as integers or strings.
61
+ fmt formatInfo
62
+
63
+ // reordered records whether the format string used argument reordering.
64
+ reordered bool
65
+ // goodArgNum records whether the most recent reordering directive was valid.
66
+ goodArgNum bool
67
+ // panicking is set by catchPanic to avoid infinite panic, recover, panic, ... recursion.
68
+ panicking bool
69
+ // erroring is set when printing an error string to guard against calling handleMethods.
70
+ erroring bool
71
+
72
+ toDecimal number.Formatter
73
+ toScientific number.Formatter
74
+ }
75
+
76
+ func (p *printer) reset() {
77
+ p.Buffer.Reset()
78
+ p.argNum = 0
79
+ p.reordered = false
80
+ p.panicking = false
81
+ p.erroring = false
82
+ p.fmt.init(&p.Buffer)
83
+ }
84
+
85
+ // Language implements "golang.org/x/text/internal/format".State.
86
+ func (p *printer) Language() language.Tag { return p.tag }
87
+
88
+ func (p *printer) Width() (wid int, ok bool) { return p.fmt.wid, p.fmt.widPresent }
89
+
90
+ func (p *printer) Precision() (prec int, ok bool) { return p.fmt.prec, p.fmt.precPresent }
91
+
92
+ func (p *printer) Flag(b int) bool {
93
+ switch b {
94
+ case '-':
95
+ return p.fmt.minus
96
+ case '+':
97
+ return p.fmt.plus || p.fmt.plusV
98
+ case '#':
99
+ return p.fmt.sharp || p.fmt.sharpV
100
+ case ' ':
101
+ return p.fmt.space
102
+ case '0':
103
+ return p.fmt.zero
104
+ }
105
+ return false
106
+ }
107
+
108
+ // getField gets the i'th field of the struct value.
109
+ // If the field is itself is an interface, return a value for
110
+ // the thing inside the interface, not the interface itself.
111
+ func getField(v reflect.Value, i int) reflect.Value {
112
+ val := v.Field(i)
113
+ if val.Kind() == reflect.Interface && !val.IsNil() {
114
+ val = val.Elem()
115
+ }
116
+ return val
117
+ }
118
+
119
+ // tooLarge reports whether the magnitude of the integer is
120
+ // too large to be used as a formatting width or precision.
121
+ func tooLarge(x int) bool {
122
+ const max int = 1e6
123
+ return x > max || x < -max
124
+ }
125
+
126
+ // parsenum converts ASCII to integer. num is 0 (and isnum is false) if no number present.
127
+ func parsenum(s string, start, end int) (num int, isnum bool, newi int) {
128
+ if start >= end {
129
+ return 0, false, end
130
+ }
131
+ for newi = start; newi < end && '0' <= s[newi] && s[newi] <= '9'; newi++ {
132
+ if tooLarge(num) {
133
+ return 0, false, end // Overflow; crazy long number most likely.
134
+ }
135
+ num = num*10 + int(s[newi]-'0')
136
+ isnum = true
137
+ }
138
+ return
139
+ }
140
+
141
+ func (p *printer) unknownType(v reflect.Value) {
142
+ if !v.IsValid() {
143
+ p.WriteString(nilAngleString)
144
+ return
145
+ }
146
+ p.WriteByte('?')
147
+ p.WriteString(v.Type().String())
148
+ p.WriteByte('?')
149
+ }
150
+
151
+ func (p *printer) badVerb(verb rune) {
152
+ p.erroring = true
153
+ p.WriteString(percentBangString)
154
+ p.WriteRune(verb)
155
+ p.WriteByte('(')
156
+ switch {
157
+ case p.arg != nil:
158
+ p.WriteString(reflect.TypeOf(p.arg).String())
159
+ p.WriteByte('=')
160
+ p.printArg(p.arg, 'v')
161
+ case p.value.IsValid():
162
+ p.WriteString(p.value.Type().String())
163
+ p.WriteByte('=')
164
+ p.printValue(p.value, 'v', 0)
165
+ default:
166
+ p.WriteString(nilAngleString)
167
+ }
168
+ p.WriteByte(')')
169
+ p.erroring = false
170
+ }
171
+
172
+ func (p *printer) fmtBool(v bool, verb rune) {
173
+ switch verb {
174
+ case 't', 'v':
175
+ p.fmt.fmt_boolean(v)
176
+ default:
177
+ p.badVerb(verb)
178
+ }
179
+ }
180
+
181
+ // fmt0x64 formats a uint64 in hexadecimal and prefixes it with 0x or
182
+ // not, as requested, by temporarily setting the sharp flag.
183
+ func (p *printer) fmt0x64(v uint64, leading0x bool) {
184
+ sharp := p.fmt.sharp
185
+ p.fmt.sharp = leading0x
186
+ p.fmt.fmt_integer(v, 16, unsigned, ldigits)
187
+ p.fmt.sharp = sharp
188
+ }
189
+
190
+ // fmtInteger formats a signed or unsigned integer.
191
+ func (p *printer) fmtInteger(v uint64, isSigned bool, verb rune) {
192
+ switch verb {
193
+ case 'v':
194
+ if p.fmt.sharpV && !isSigned {
195
+ p.fmt0x64(v, true)
196
+ return
197
+ }
198
+ fallthrough
199
+ case 'd':
200
+ if p.fmt.sharp || p.fmt.sharpV {
201
+ p.fmt.fmt_integer(v, 10, isSigned, ldigits)
202
+ } else {
203
+ p.fmtDecimalInt(v, isSigned)
204
+ }
205
+ case 'b':
206
+ p.fmt.fmt_integer(v, 2, isSigned, ldigits)
207
+ case 'o':
208
+ p.fmt.fmt_integer(v, 8, isSigned, ldigits)
209
+ case 'x':
210
+ p.fmt.fmt_integer(v, 16, isSigned, ldigits)
211
+ case 'X':
212
+ p.fmt.fmt_integer(v, 16, isSigned, udigits)
213
+ case 'c':
214
+ p.fmt.fmt_c(v)
215
+ case 'q':
216
+ if v <= utf8.MaxRune {
217
+ p.fmt.fmt_qc(v)
218
+ } else {
219
+ p.badVerb(verb)
220
+ }
221
+ case 'U':
222
+ p.fmt.fmt_unicode(v)
223
+ default:
224
+ p.badVerb(verb)
225
+ }
226
+ }
227
+
228
+ // fmtFloat formats a float. The default precision for each verb
229
+ // is specified as last argument in the call to fmt_float.
230
+ func (p *printer) fmtFloat(v float64, size int, verb rune) {
231
+ switch verb {
232
+ case 'b':
233
+ p.fmt.fmt_float(v, size, verb, -1)
234
+ case 'v':
235
+ verb = 'g'
236
+ fallthrough
237
+ case 'g', 'G':
238
+ if p.fmt.sharp || p.fmt.sharpV {
239
+ p.fmt.fmt_float(v, size, verb, -1)
240
+ } else {
241
+ p.fmtVariableFloat(v, size)
242
+ }
243
+ case 'e', 'E':
244
+ if p.fmt.sharp || p.fmt.sharpV {
245
+ p.fmt.fmt_float(v, size, verb, 6)
246
+ } else {
247
+ p.fmtScientific(v, size, 6)
248
+ }
249
+ case 'f', 'F':
250
+ if p.fmt.sharp || p.fmt.sharpV {
251
+ p.fmt.fmt_float(v, size, verb, 6)
252
+ } else {
253
+ p.fmtDecimalFloat(v, size, 6)
254
+ }
255
+ default:
256
+ p.badVerb(verb)
257
+ }
258
+ }
259
+
260
+ func (p *printer) setFlags(f *number.Formatter) {
261
+ f.Flags &^= number.ElideSign
262
+ if p.fmt.plus || p.fmt.space {
263
+ f.Flags |= number.AlwaysSign
264
+ if !p.fmt.plus {
265
+ f.Flags |= number.ElideSign
266
+ }
267
+ } else {
268
+ f.Flags &^= number.AlwaysSign
269
+ }
270
+ }
271
+
272
+ func (p *printer) updatePadding(f *number.Formatter) {
273
+ f.Flags &^= number.PadMask
274
+ if p.fmt.minus {
275
+ f.Flags |= number.PadAfterSuffix
276
+ } else {
277
+ f.Flags |= number.PadBeforePrefix
278
+ }
279
+ f.PadRune = ' '
280
+ f.FormatWidth = uint16(p.fmt.wid)
281
+ }
282
+
283
+ func (p *printer) initDecimal(minFrac, maxFrac int) {
284
+ f := &p.toDecimal
285
+ f.MinIntegerDigits = 1
286
+ f.MaxIntegerDigits = 0
287
+ f.MinFractionDigits = uint8(minFrac)
288
+ f.MaxFractionDigits = int16(maxFrac)
289
+ p.setFlags(f)
290
+ f.PadRune = 0
291
+ if p.fmt.widPresent {
292
+ if p.fmt.zero {
293
+ wid := p.fmt.wid
294
+ // Use significant integers for this.
295
+ // TODO: this is not the same as width, but so be it.
296
+ if f.MinFractionDigits > 0 {
297
+ wid -= 1 + int(f.MinFractionDigits)
298
+ }
299
+ if p.fmt.plus || p.fmt.space {
300
+ wid--
301
+ }
302
+ if wid > 0 && wid > int(f.MinIntegerDigits) {
303
+ f.MinIntegerDigits = uint8(wid)
304
+ }
305
+ }
306
+ p.updatePadding(f)
307
+ }
308
+ }
309
+
310
+ func (p *printer) initScientific(minFrac, maxFrac int) {
311
+ f := &p.toScientific
312
+ if maxFrac < 0 {
313
+ f.SetPrecision(maxFrac)
314
+ } else {
315
+ f.SetPrecision(maxFrac + 1)
316
+ f.MinFractionDigits = uint8(minFrac)
317
+ f.MaxFractionDigits = int16(maxFrac)
318
+ }
319
+ f.MinExponentDigits = 2
320
+ p.setFlags(f)
321
+ f.PadRune = 0
322
+ if p.fmt.widPresent {
323
+ f.Flags &^= number.PadMask
324
+ if p.fmt.zero {
325
+ f.PadRune = f.Digit(0)
326
+ f.Flags |= number.PadAfterPrefix
327
+ } else {
328
+ f.PadRune = ' '
329
+ f.Flags |= number.PadBeforePrefix
330
+ }
331
+ p.updatePadding(f)
332
+ }
333
+ }
334
+
335
+ func (p *printer) fmtDecimalInt(v uint64, isSigned bool) {
336
+ var d number.Decimal
337
+
338
+ f := &p.toDecimal
339
+ if p.fmt.precPresent {
340
+ p.setFlags(f)
341
+ f.MinIntegerDigits = uint8(p.fmt.prec)
342
+ f.MaxIntegerDigits = 0
343
+ f.MinFractionDigits = 0
344
+ f.MaxFractionDigits = 0
345
+ if p.fmt.widPresent {
346
+ p.updatePadding(f)
347
+ }
348
+ } else {
349
+ p.initDecimal(0, 0)
350
+ }
351
+ d.ConvertInt(p.toDecimal.RoundingContext, isSigned, v)
352
+
353
+ out := p.toDecimal.Format([]byte(nil), &d)
354
+ p.Buffer.Write(out)
355
+ }
356
+
357
+ func (p *printer) fmtDecimalFloat(v float64, size, prec int) {
358
+ var d number.Decimal
359
+ if p.fmt.precPresent {
360
+ prec = p.fmt.prec
361
+ }
362
+ p.initDecimal(prec, prec)
363
+ d.ConvertFloat(p.toDecimal.RoundingContext, v, size)
364
+
365
+ out := p.toDecimal.Format([]byte(nil), &d)
366
+ p.Buffer.Write(out)
367
+ }
368
+
369
+ func (p *printer) fmtVariableFloat(v float64, size int) {
370
+ prec := -1
371
+ if p.fmt.precPresent {
372
+ prec = p.fmt.prec
373
+ }
374
+ var d number.Decimal
375
+ p.initScientific(0, prec)
376
+ d.ConvertFloat(p.toScientific.RoundingContext, v, size)
377
+
378
+ // Copy logic of 'g' formatting from strconv. It is simplified a bit as
379
+ // we don't have to mind having prec > len(d.Digits).
380
+ shortest := prec < 0
381
+ ePrec := prec
382
+ if shortest {
383
+ prec = len(d.Digits)
384
+ ePrec = 6
385
+ } else if prec == 0 {
386
+ prec = 1
387
+ ePrec = 1
388
+ }
389
+ exp := int(d.Exp) - 1
390
+ if exp < -4 || exp >= ePrec {
391
+ p.initScientific(0, prec)
392
+
393
+ out := p.toScientific.Format([]byte(nil), &d)
394
+ p.Buffer.Write(out)
395
+ } else {
396
+ if prec > int(d.Exp) {
397
+ prec = len(d.Digits)
398
+ }
399
+ if prec -= int(d.Exp); prec < 0 {
400
+ prec = 0
401
+ }
402
+ p.initDecimal(0, prec)
403
+
404
+ out := p.toDecimal.Format([]byte(nil), &d)
405
+ p.Buffer.Write(out)
406
+ }
407
+ }
408
+
409
+ func (p *printer) fmtScientific(v float64, size, prec int) {
410
+ var d number.Decimal
411
+ if p.fmt.precPresent {
412
+ prec = p.fmt.prec
413
+ }
414
+ p.initScientific(prec, prec)
415
+ rc := p.toScientific.RoundingContext
416
+ d.ConvertFloat(rc, v, size)
417
+
418
+ out := p.toScientific.Format([]byte(nil), &d)
419
+ p.Buffer.Write(out)
420
+
421
+ }
422
+
423
+ // fmtComplex formats a complex number v with
424
+ // r = real(v) and j = imag(v) as (r+ji) using
425
+ // fmtFloat for r and j formatting.
426
+ func (p *printer) fmtComplex(v complex128, size int, verb rune) {
427
+ // Make sure any unsupported verbs are found before the
428
+ // calls to fmtFloat to not generate an incorrect error string.
429
+ switch verb {
430
+ case 'v', 'b', 'g', 'G', 'f', 'F', 'e', 'E':
431
+ p.WriteByte('(')
432
+ p.fmtFloat(real(v), size/2, verb)
433
+ // Imaginary part always has a sign.
434
+ if math.IsNaN(imag(v)) {
435
+ // By CLDR's rules, NaNs do not use patterns or signs. As this code
436
+ // relies on AlwaysSign working for imaginary parts, we need to
437
+ // manually handle NaNs.
438
+ f := &p.toScientific
439
+ p.setFlags(f)
440
+ p.updatePadding(f)
441
+ p.setFlags(f)
442
+ nan := f.Symbol(number.SymNan)
443
+ extra := 0
444
+ if w, ok := p.Width(); ok {
445
+ extra = w - utf8.RuneCountInString(nan) - 1
446
+ }
447
+ if f.Flags&number.PadAfterNumber == 0 {
448
+ for ; extra > 0; extra-- {
449
+ p.WriteRune(f.PadRune)
450
+ }
451
+ }
452
+ p.WriteString(f.Symbol(number.SymPlusSign))
453
+ p.WriteString(nan)
454
+ for ; extra > 0; extra-- {
455
+ p.WriteRune(f.PadRune)
456
+ }
457
+ p.WriteString("i)")
458
+ return
459
+ }
460
+ oldPlus := p.fmt.plus
461
+ p.fmt.plus = true
462
+ p.fmtFloat(imag(v), size/2, verb)
463
+ p.WriteString("i)") // TODO: use symbol?
464
+ p.fmt.plus = oldPlus
465
+ default:
466
+ p.badVerb(verb)
467
+ }
468
+ }
469
+
470
+ func (p *printer) fmtString(v string, verb rune) {
471
+ switch verb {
472
+ case 'v':
473
+ if p.fmt.sharpV {
474
+ p.fmt.fmt_q(v)
475
+ } else {
476
+ p.fmt.fmt_s(v)
477
+ }
478
+ case 's':
479
+ p.fmt.fmt_s(v)
480
+ case 'x':
481
+ p.fmt.fmt_sx(v, ldigits)
482
+ case 'X':
483
+ p.fmt.fmt_sx(v, udigits)
484
+ case 'q':
485
+ p.fmt.fmt_q(v)
486
+ default:
487
+ p.badVerb(verb)
488
+ }
489
+ }
490
+
491
+ func (p *printer) fmtBytes(v []byte, verb rune, typeString string) {
492
+ switch verb {
493
+ case 'v', 'd':
494
+ if p.fmt.sharpV {
495
+ p.WriteString(typeString)
496
+ if v == nil {
497
+ p.WriteString(nilParenString)
498
+ return
499
+ }
500
+ p.WriteByte('{')
501
+ for i, c := range v {
502
+ if i > 0 {
503
+ p.WriteString(commaSpaceString)
504
+ }
505
+ p.fmt0x64(uint64(c), true)
506
+ }
507
+ p.WriteByte('}')
508
+ } else {
509
+ p.WriteByte('[')
510
+ for i, c := range v {
511
+ if i > 0 {
512
+ p.WriteByte(' ')
513
+ }
514
+ p.fmt.fmt_integer(uint64(c), 10, unsigned, ldigits)
515
+ }
516
+ p.WriteByte(']')
517
+ }
518
+ case 's':
519
+ p.fmt.fmt_s(string(v))
520
+ case 'x':
521
+ p.fmt.fmt_bx(v, ldigits)
522
+ case 'X':
523
+ p.fmt.fmt_bx(v, udigits)
524
+ case 'q':
525
+ p.fmt.fmt_q(string(v))
526
+ default:
527
+ p.printValue(reflect.ValueOf(v), verb, 0)
528
+ }
529
+ }
530
+
531
+ func (p *printer) fmtPointer(value reflect.Value, verb rune) {
532
+ var u uintptr
533
+ switch value.Kind() {
534
+ case reflect.Chan, reflect.Func, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer:
535
+ u = value.Pointer()
536
+ default:
537
+ p.badVerb(verb)
538
+ return
539
+ }
540
+
541
+ switch verb {
542
+ case 'v':
543
+ if p.fmt.sharpV {
544
+ p.WriteByte('(')
545
+ p.WriteString(value.Type().String())
546
+ p.WriteString(")(")
547
+ if u == 0 {
548
+ p.WriteString(nilString)
549
+ } else {
550
+ p.fmt0x64(uint64(u), true)
551
+ }
552
+ p.WriteByte(')')
553
+ } else {
554
+ if u == 0 {
555
+ p.fmt.padString(nilAngleString)
556
+ } else {
557
+ p.fmt0x64(uint64(u), !p.fmt.sharp)
558
+ }
559
+ }
560
+ case 'p':
561
+ p.fmt0x64(uint64(u), !p.fmt.sharp)
562
+ case 'b', 'o', 'd', 'x', 'X':
563
+ if verb == 'd' {
564
+ p.fmt.sharp = true // Print as standard go. TODO: does this make sense?
565
+ }
566
+ p.fmtInteger(uint64(u), unsigned, verb)
567
+ default:
568
+ p.badVerb(verb)
569
+ }
570
+ }
571
+
572
+ func (p *printer) catchPanic(arg interface{}, verb rune) {
573
+ if err := recover(); err != nil {
574
+ // If it's a nil pointer, just say "<nil>". The likeliest causes are a
575
+ // Stringer that fails to guard against nil or a nil pointer for a
576
+ // value receiver, and in either case, "<nil>" is a nice result.
577
+ if v := reflect.ValueOf(arg); v.Kind() == reflect.Ptr && v.IsNil() {
578
+ p.WriteString(nilAngleString)
579
+ return
580
+ }
581
+ // Otherwise print a concise panic message. Most of the time the panic
582
+ // value will print itself nicely.
583
+ if p.panicking {
584
+ // Nested panics; the recursion in printArg cannot succeed.
585
+ panic(err)
586
+ }
587
+
588
+ oldFlags := p.fmt.fmtFlags
589
+ // For this output we want default behavior.
590
+ p.fmt.clearflags()
591
+
592
+ p.WriteString(percentBangString)
593
+ p.WriteRune(verb)
594
+ p.WriteString(panicString)
595
+ p.panicking = true
596
+ p.printArg(err, 'v')
597
+ p.panicking = false
598
+ p.WriteByte(')')
599
+
600
+ p.fmt.fmtFlags = oldFlags
601
+ }
602
+ }
603
+
604
+ func (p *printer) handleMethods(verb rune) (handled bool) {
605
+ if p.erroring {
606
+ return
607
+ }
608
+ // Is it a Formatter?
609
+ if formatter, ok := p.arg.(format.Formatter); ok {
610
+ handled = true
611
+ defer p.catchPanic(p.arg, verb)
612
+ formatter.Format(p, verb)
613
+ return
614
+ }
615
+ if formatter, ok := p.arg.(fmt.Formatter); ok {
616
+ handled = true
617
+ defer p.catchPanic(p.arg, verb)
618
+ formatter.Format(p, verb)
619
+ return
620
+ }
621
+
622
+ // If we're doing Go syntax and the argument knows how to supply it, take care of it now.
623
+ if p.fmt.sharpV {
624
+ if stringer, ok := p.arg.(fmt.GoStringer); ok {
625
+ handled = true
626
+ defer p.catchPanic(p.arg, verb)
627
+ // Print the result of GoString unadorned.
628
+ p.fmt.fmt_s(stringer.GoString())
629
+ return
630
+ }
631
+ } else {
632
+ // If a string is acceptable according to the format, see if
633
+ // the value satisfies one of the string-valued interfaces.
634
+ // Println etc. set verb to %v, which is "stringable".
635
+ switch verb {
636
+ case 'v', 's', 'x', 'X', 'q':
637
+ // Is it an error or Stringer?
638
+ // The duplication in the bodies is necessary:
639
+ // setting handled and deferring catchPanic
640
+ // must happen before calling the method.
641
+ switch v := p.arg.(type) {
642
+ case error:
643
+ handled = true
644
+ defer p.catchPanic(p.arg, verb)
645
+ p.fmtString(v.Error(), verb)
646
+ return
647
+
648
+ case fmt.Stringer:
649
+ handled = true
650
+ defer p.catchPanic(p.arg, verb)
651
+ p.fmtString(v.String(), verb)
652
+ return
653
+ }
654
+ }
655
+ }
656
+ return false
657
+ }
658
+
659
+ func (p *printer) printArg(arg interface{}, verb rune) {
660
+ p.arg = arg
661
+ p.value = reflect.Value{}
662
+
663
+ if arg == nil {
664
+ switch verb {
665
+ case 'T', 'v':
666
+ p.fmt.padString(nilAngleString)
667
+ default:
668
+ p.badVerb(verb)
669
+ }
670
+ return
671
+ }
672
+
673
+ // Special processing considerations.
674
+ // %T (the value's type) and %p (its address) are special; we always do them first.
675
+ switch verb {
676
+ case 'T':
677
+ p.fmt.fmt_s(reflect.TypeOf(arg).String())
678
+ return
679
+ case 'p':
680
+ p.fmtPointer(reflect.ValueOf(arg), 'p')
681
+ return
682
+ }
683
+
684
+ // Some types can be done without reflection.
685
+ switch f := arg.(type) {
686
+ case bool:
687
+ p.fmtBool(f, verb)
688
+ case float32:
689
+ p.fmtFloat(float64(f), 32, verb)
690
+ case float64:
691
+ p.fmtFloat(f, 64, verb)
692
+ case complex64:
693
+ p.fmtComplex(complex128(f), 64, verb)
694
+ case complex128:
695
+ p.fmtComplex(f, 128, verb)
696
+ case int:
697
+ p.fmtInteger(uint64(f), signed, verb)
698
+ case int8:
699
+ p.fmtInteger(uint64(f), signed, verb)
700
+ case int16:
701
+ p.fmtInteger(uint64(f), signed, verb)
702
+ case int32:
703
+ p.fmtInteger(uint64(f), signed, verb)
704
+ case int64:
705
+ p.fmtInteger(uint64(f), signed, verb)
706
+ case uint:
707
+ p.fmtInteger(uint64(f), unsigned, verb)
708
+ case uint8:
709
+ p.fmtInteger(uint64(f), unsigned, verb)
710
+ case uint16:
711
+ p.fmtInteger(uint64(f), unsigned, verb)
712
+ case uint32:
713
+ p.fmtInteger(uint64(f), unsigned, verb)
714
+ case uint64:
715
+ p.fmtInteger(f, unsigned, verb)
716
+ case uintptr:
717
+ p.fmtInteger(uint64(f), unsigned, verb)
718
+ case string:
719
+ p.fmtString(f, verb)
720
+ case []byte:
721
+ p.fmtBytes(f, verb, "[]byte")
722
+ case reflect.Value:
723
+ // Handle extractable values with special methods
724
+ // since printValue does not handle them at depth 0.
725
+ if f.IsValid() && f.CanInterface() {
726
+ p.arg = f.Interface()
727
+ if p.handleMethods(verb) {
728
+ return
729
+ }
730
+ }
731
+ p.printValue(f, verb, 0)
732
+ default:
733
+ // If the type is not simple, it might have methods.
734
+ if !p.handleMethods(verb) {
735
+ // Need to use reflection, since the type had no
736
+ // interface methods that could be used for formatting.
737
+ p.printValue(reflect.ValueOf(f), verb, 0)
738
+ }
739
+ }
740
+ }
741
+
742
+ // printValue is similar to printArg but starts with a reflect value, not an interface{} value.
743
+ // It does not handle 'p' and 'T' verbs because these should have been already handled by printArg.
744
+ func (p *printer) printValue(value reflect.Value, verb rune, depth int) {
745
+ // Handle values with special methods if not already handled by printArg (depth == 0).
746
+ if depth > 0 && value.IsValid() && value.CanInterface() {
747
+ p.arg = value.Interface()
748
+ if p.handleMethods(verb) {
749
+ return
750
+ }
751
+ }
752
+ p.arg = nil
753
+ p.value = value
754
+
755
+ switch f := value; value.Kind() {
756
+ case reflect.Invalid:
757
+ if depth == 0 {
758
+ p.WriteString(invReflectString)
759
+ } else {
760
+ switch verb {
761
+ case 'v':
762
+ p.WriteString(nilAngleString)
763
+ default:
764
+ p.badVerb(verb)
765
+ }
766
+ }
767
+ case reflect.Bool:
768
+ p.fmtBool(f.Bool(), verb)
769
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
770
+ p.fmtInteger(uint64(f.Int()), signed, verb)
771
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
772
+ p.fmtInteger(f.Uint(), unsigned, verb)
773
+ case reflect.Float32:
774
+ p.fmtFloat(f.Float(), 32, verb)
775
+ case reflect.Float64:
776
+ p.fmtFloat(f.Float(), 64, verb)
777
+ case reflect.Complex64:
778
+ p.fmtComplex(f.Complex(), 64, verb)
779
+ case reflect.Complex128:
780
+ p.fmtComplex(f.Complex(), 128, verb)
781
+ case reflect.String:
782
+ p.fmtString(f.String(), verb)
783
+ case reflect.Map:
784
+ if p.fmt.sharpV {
785
+ p.WriteString(f.Type().String())
786
+ if f.IsNil() {
787
+ p.WriteString(nilParenString)
788
+ return
789
+ }
790
+ p.WriteByte('{')
791
+ } else {
792
+ p.WriteString(mapString)
793
+ }
794
+ keys := f.MapKeys()
795
+ for i, key := range keys {
796
+ if i > 0 {
797
+ if p.fmt.sharpV {
798
+ p.WriteString(commaSpaceString)
799
+ } else {
800
+ p.WriteByte(' ')
801
+ }
802
+ }
803
+ p.printValue(key, verb, depth+1)
804
+ p.WriteByte(':')
805
+ p.printValue(f.MapIndex(key), verb, depth+1)
806
+ }
807
+ if p.fmt.sharpV {
808
+ p.WriteByte('}')
809
+ } else {
810
+ p.WriteByte(']')
811
+ }
812
+ case reflect.Struct:
813
+ if p.fmt.sharpV {
814
+ p.WriteString(f.Type().String())
815
+ }
816
+ p.WriteByte('{')
817
+ for i := 0; i < f.NumField(); i++ {
818
+ if i > 0 {
819
+ if p.fmt.sharpV {
820
+ p.WriteString(commaSpaceString)
821
+ } else {
822
+ p.WriteByte(' ')
823
+ }
824
+ }
825
+ if p.fmt.plusV || p.fmt.sharpV {
826
+ if name := f.Type().Field(i).Name; name != "" {
827
+ p.WriteString(name)
828
+ p.WriteByte(':')
829
+ }
830
+ }
831
+ p.printValue(getField(f, i), verb, depth+1)
832
+ }
833
+ p.WriteByte('}')
834
+ case reflect.Interface:
835
+ value := f.Elem()
836
+ if !value.IsValid() {
837
+ if p.fmt.sharpV {
838
+ p.WriteString(f.Type().String())
839
+ p.WriteString(nilParenString)
840
+ } else {
841
+ p.WriteString(nilAngleString)
842
+ }
843
+ } else {
844
+ p.printValue(value, verb, depth+1)
845
+ }
846
+ case reflect.Array, reflect.Slice:
847
+ switch verb {
848
+ case 's', 'q', 'x', 'X':
849
+ // Handle byte and uint8 slices and arrays special for the above verbs.
850
+ t := f.Type()
851
+ if t.Elem().Kind() == reflect.Uint8 {
852
+ var bytes []byte
853
+ if f.Kind() == reflect.Slice {
854
+ bytes = f.Bytes()
855
+ } else if f.CanAddr() {
856
+ bytes = f.Slice(0, f.Len()).Bytes()
857
+ } else {
858
+ // We have an array, but we cannot Slice() a non-addressable array,
859
+ // so we build a slice by hand. This is a rare case but it would be nice
860
+ // if reflection could help a little more.
861
+ bytes = make([]byte, f.Len())
862
+ for i := range bytes {
863
+ bytes[i] = byte(f.Index(i).Uint())
864
+ }
865
+ }
866
+ p.fmtBytes(bytes, verb, t.String())
867
+ return
868
+ }
869
+ }
870
+ if p.fmt.sharpV {
871
+ p.WriteString(f.Type().String())
872
+ if f.Kind() == reflect.Slice && f.IsNil() {
873
+ p.WriteString(nilParenString)
874
+ return
875
+ }
876
+ p.WriteByte('{')
877
+ for i := 0; i < f.Len(); i++ {
878
+ if i > 0 {
879
+ p.WriteString(commaSpaceString)
880
+ }
881
+ p.printValue(f.Index(i), verb, depth+1)
882
+ }
883
+ p.WriteByte('}')
884
+ } else {
885
+ p.WriteByte('[')
886
+ for i := 0; i < f.Len(); i++ {
887
+ if i > 0 {
888
+ p.WriteByte(' ')
889
+ }
890
+ p.printValue(f.Index(i), verb, depth+1)
891
+ }
892
+ p.WriteByte(']')
893
+ }
894
+ case reflect.Ptr:
895
+ // pointer to array or slice or struct? ok at top level
896
+ // but not embedded (avoid loops)
897
+ if depth == 0 && f.Pointer() != 0 {
898
+ switch a := f.Elem(); a.Kind() {
899
+ case reflect.Array, reflect.Slice, reflect.Struct, reflect.Map:
900
+ p.WriteByte('&')
901
+ p.printValue(a, verb, depth+1)
902
+ return
903
+ }
904
+ }
905
+ fallthrough
906
+ case reflect.Chan, reflect.Func, reflect.UnsafePointer:
907
+ p.fmtPointer(f, verb)
908
+ default:
909
+ p.unknownType(f)
910
+ }
911
+ }
912
+
913
+ // intFromArg gets the argNumth element of a. On return, isInt reports whether the argument has integer type.
914
+ func (p *printer) intFromArg() (num int, isInt bool) {
915
+ if p.argNum < len(p.args) {
916
+ arg := p.args[p.argNum]
917
+ num, isInt = arg.(int) // Almost always OK.
918
+ if !isInt {
919
+ // Work harder.
920
+ switch v := reflect.ValueOf(arg); v.Kind() {
921
+ case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
922
+ n := v.Int()
923
+ if int64(int(n)) == n {
924
+ num = int(n)
925
+ isInt = true
926
+ }
927
+ case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
928
+ n := v.Uint()
929
+ if int64(n) >= 0 && uint64(int(n)) == n {
930
+ num = int(n)
931
+ isInt = true
932
+ }
933
+ default:
934
+ // Already 0, false.
935
+ }
936
+ }
937
+ p.argNum++
938
+ if tooLarge(num) {
939
+ num = 0
940
+ isInt = false
941
+ }
942
+ }
943
+ return
944
+ }
945
+
946
+ // parseArgNumber returns the value of the bracketed number, minus 1
947
+ // (explicit argument numbers are one-indexed but we want zero-indexed).
948
+ // The opening bracket is known to be present at format[0].
949
+ // The returned values are the index, the number of bytes to consume
950
+ // up to the closing paren, if present, and whether the number parsed
951
+ // ok. The bytes to consume will be 1 if no closing paren is present.
952
+ func parseArgNumber(format string) (index int, wid int, ok bool) {
953
+ // There must be at least 3 bytes: [n].
954
+ if len(format) < 3 {
955
+ return 0, 1, false
956
+ }
957
+
958
+ // Find closing bracket.
959
+ for i := 1; i < len(format); i++ {
960
+ if format[i] == ']' {
961
+ width, ok, newi := parsenum(format, 1, i)
962
+ if !ok || newi != i {
963
+ return 0, i + 1, false
964
+ }
965
+ return width - 1, i + 1, true // arg numbers are one-indexed and skip paren.
966
+ }
967
+ }
968
+ return 0, 1, false
969
+ }
970
+
971
+ // updateArgNumber returns the next argument to evaluate, which is either the value of the passed-in
972
+ // argNum or the value of the bracketed integer that begins format[i:]. It also returns
973
+ // the new value of i, that is, the index of the next byte of the format to process.
974
+ func (p *printer) updateArgNumber(format string, i int) (newi int, found bool) {
975
+ if len(format) <= i || format[i] != '[' {
976
+ return i, false
977
+ }
978
+ p.reordered = true
979
+ index, wid, ok := parseArgNumber(format[i:])
980
+ if ok && 0 <= index && index < len(p.args) {
981
+ p.argNum = index
982
+ return i + wid, true
983
+ }
984
+ p.goodArgNum = false
985
+ return i + wid, ok
986
+ }
987
+
988
+ func (p *printer) badArgNum(verb rune) {
989
+ p.WriteString(percentBangString)
990
+ p.WriteRune(verb)
991
+ p.WriteString(badIndexString)
992
+ }
993
+
994
+ func (p *printer) missingArg(verb rune) {
995
+ p.WriteString(percentBangString)
996
+ p.WriteRune(verb)
997
+ p.WriteString(missingString)
998
+ }
999
+
1000
+ func (p *printer) doPrintf(format string) {
1001
+ end := len(format)
1002
+ afterIndex := false // previous item in format was an index like [3].
1003
+ formatLoop:
1004
+ for i := 0; i < end; {
1005
+ p.goodArgNum = true
1006
+ lasti := i
1007
+ for i < end && format[i] != '%' {
1008
+ i++
1009
+ }
1010
+ if i > lasti {
1011
+ p.WriteString(format[lasti:i])
1012
+ }
1013
+ if i >= end {
1014
+ // done processing format string
1015
+ break
1016
+ }
1017
+
1018
+ // Process one verb
1019
+ i++
1020
+
1021
+ // Do we have flags?
1022
+ p.fmt.clearflags()
1023
+ simpleFormat:
1024
+ for ; i < end; i++ {
1025
+ c := format[i]
1026
+ switch c {
1027
+ case '#':
1028
+ p.fmt.sharp = true
1029
+ case '0':
1030
+ p.fmt.zero = !p.fmt.minus // Only allow zero padding to the left.
1031
+ case '+':
1032
+ p.fmt.plus = true
1033
+ case '-':
1034
+ p.fmt.minus = true
1035
+ p.fmt.zero = false // Do not pad with zeros to the right.
1036
+ case ' ':
1037
+ p.fmt.space = true
1038
+ default:
1039
+ // Fast path for common case of ascii lower case simple verbs
1040
+ // without precision or width or argument indices.
1041
+ if 'a' <= c && c <= 'z' && p.argNum < len(p.args) {
1042
+ if c == 'v' {
1043
+ // Go syntax
1044
+ p.fmt.sharpV = p.fmt.sharp
1045
+ p.fmt.sharp = false
1046
+ // Struct-field syntax
1047
+ p.fmt.plusV = p.fmt.plus
1048
+ p.fmt.plus = false
1049
+ }
1050
+ p.printArg(p.Arg(p.argNum+1), rune(c))
1051
+ p.argNum++
1052
+ i++
1053
+ continue formatLoop
1054
+ }
1055
+ // Format is more complex than simple flags and a verb or is malformed.
1056
+ break simpleFormat
1057
+ }
1058
+ }
1059
+
1060
+ // Do we have an explicit argument index?
1061
+ i, afterIndex = p.updateArgNumber(format, i)
1062
+
1063
+ // Do we have width?
1064
+ if i < end && format[i] == '*' {
1065
+ i++
1066
+ p.fmt.wid, p.fmt.widPresent = p.intFromArg()
1067
+
1068
+ if !p.fmt.widPresent {
1069
+ p.WriteString(badWidthString)
1070
+ }
1071
+
1072
+ // We have a negative width, so take its value and ensure
1073
+ // that the minus flag is set
1074
+ if p.fmt.wid < 0 {
1075
+ p.fmt.wid = -p.fmt.wid
1076
+ p.fmt.minus = true
1077
+ p.fmt.zero = false // Do not pad with zeros to the right.
1078
+ }
1079
+ afterIndex = false
1080
+ } else {
1081
+ p.fmt.wid, p.fmt.widPresent, i = parsenum(format, i, end)
1082
+ if afterIndex && p.fmt.widPresent { // "%[3]2d"
1083
+ p.goodArgNum = false
1084
+ }
1085
+ }
1086
+
1087
+ // Do we have precision?
1088
+ if i+1 < end && format[i] == '.' {
1089
+ i++
1090
+ if afterIndex { // "%[3].2d"
1091
+ p.goodArgNum = false
1092
+ }
1093
+ i, afterIndex = p.updateArgNumber(format, i)
1094
+ if i < end && format[i] == '*' {
1095
+ i++
1096
+ p.fmt.prec, p.fmt.precPresent = p.intFromArg()
1097
+ // Negative precision arguments don't make sense
1098
+ if p.fmt.prec < 0 {
1099
+ p.fmt.prec = 0
1100
+ p.fmt.precPresent = false
1101
+ }
1102
+ if !p.fmt.precPresent {
1103
+ p.WriteString(badPrecString)
1104
+ }
1105
+ afterIndex = false
1106
+ } else {
1107
+ p.fmt.prec, p.fmt.precPresent, i = parsenum(format, i, end)
1108
+ if !p.fmt.precPresent {
1109
+ p.fmt.prec = 0
1110
+ p.fmt.precPresent = true
1111
+ }
1112
+ }
1113
+ }
1114
+
1115
+ if !afterIndex {
1116
+ i, afterIndex = p.updateArgNumber(format, i)
1117
+ }
1118
+
1119
+ if i >= end {
1120
+ p.WriteString(noVerbString)
1121
+ break
1122
+ }
1123
+
1124
+ verb, w := utf8.DecodeRuneInString(format[i:])
1125
+ i += w
1126
+
1127
+ switch {
1128
+ case verb == '%': // Percent does not absorb operands and ignores f.wid and f.prec.
1129
+ p.WriteByte('%')
1130
+ case !p.goodArgNum:
1131
+ p.badArgNum(verb)
1132
+ case p.argNum >= len(p.args): // No argument left over to print for the current verb.
1133
+ p.missingArg(verb)
1134
+ case verb == 'v':
1135
+ // Go syntax
1136
+ p.fmt.sharpV = p.fmt.sharp
1137
+ p.fmt.sharp = false
1138
+ // Struct-field syntax
1139
+ p.fmt.plusV = p.fmt.plus
1140
+ p.fmt.plus = false
1141
+ fallthrough
1142
+ default:
1143
+ p.printArg(p.args[p.argNum], verb)
1144
+ p.argNum++
1145
+ }
1146
+ }
1147
+
1148
+ // Check for extra arguments, but only if there was at least one ordered
1149
+ // argument. Note that this behavior is necessarily different from fmt:
1150
+ // different variants of messages may opt to drop some or all of the
1151
+ // arguments.
1152
+ if !p.reordered && p.argNum < len(p.args) && p.argNum != 0 {
1153
+ p.fmt.clearflags()
1154
+ p.WriteString(extraString)
1155
+ for i, arg := range p.args[p.argNum:] {
1156
+ if i > 0 {
1157
+ p.WriteString(commaSpaceString)
1158
+ }
1159
+ if arg == nil {
1160
+ p.WriteString(nilAngleString)
1161
+ } else {
1162
+ p.WriteString(reflect.TypeOf(arg).String())
1163
+ p.WriteByte('=')
1164
+ p.printArg(arg, 'v')
1165
+ }
1166
+ }
1167
+ p.WriteByte(')')
1168
+ }
1169
+ }
1170
+
1171
+ func (p *printer) doPrint(a []interface{}) {
1172
+ prevString := false
1173
+ for argNum, arg := range a {
1174
+ isString := arg != nil && reflect.TypeOf(arg).Kind() == reflect.String
1175
+ // Add a space between two non-string arguments.
1176
+ if argNum > 0 && !isString && !prevString {
1177
+ p.WriteByte(' ')
1178
+ }
1179
+ p.printArg(arg, 'v')
1180
+ prevString = isString
1181
+ }
1182
+ }
1183
+
1184
+ // doPrintln is like doPrint but always adds a space between arguments
1185
+ // and a newline after the last argument.
1186
+ func (p *printer) doPrintln(a []interface{}) {
1187
+ for argNum, arg := range a {
1188
+ if argNum > 0 {
1189
+ p.WriteByte(' ')
1190
+ }
1191
+ p.printArg(arg, 'v')
1192
+ }
1193
+ p.WriteByte('\n')
1194
+ }