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,1706 @@
1
+ // Copyright 2013 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
+ // +build ignore
6
+
7
+ // Language tag table generator.
8
+ // Data read from the web.
9
+
10
+ package main
11
+
12
+ import (
13
+ "bufio"
14
+ "flag"
15
+ "fmt"
16
+ "io"
17
+ "io/ioutil"
18
+ "log"
19
+ "math"
20
+ "reflect"
21
+ "regexp"
22
+ "sort"
23
+ "strconv"
24
+ "strings"
25
+
26
+ "golang.org/x/text/internal/gen"
27
+ "golang.org/x/text/internal/tag"
28
+ "golang.org/x/text/unicode/cldr"
29
+ )
30
+
31
+ var (
32
+ test = flag.Bool("test",
33
+ false,
34
+ "test existing tables; can be used to compare web data with package data.")
35
+ outputFile = flag.String("output",
36
+ "tables.go",
37
+ "output file for generated tables")
38
+ )
39
+
40
+ var comment = []string{
41
+ `
42
+ lang holds an alphabetically sorted list of ISO-639 language identifiers.
43
+ All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
44
+ For 2-byte language identifiers, the two successive bytes have the following meaning:
45
+ - if the first letter of the 2- and 3-letter ISO codes are the same:
46
+ the second and third letter of the 3-letter ISO code.
47
+ - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
48
+ For 3-byte language identifiers the 4th byte is 0.`,
49
+ `
50
+ langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
51
+ in lookup tables. The language ids for these language codes are derived directly
52
+ from the letters and are not consecutive.`,
53
+ `
54
+ altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
55
+ to 2-letter language codes that cannot be derived using the method described above.
56
+ Each 3-letter code is followed by its 1-byte langID.`,
57
+ `
58
+ altLangIndex is used to convert indexes in altLangISO3 to langIDs.`,
59
+ `
60
+ langAliasMap maps langIDs to their suggested replacements.`,
61
+ `
62
+ script is an alphabetically sorted list of ISO 15924 codes. The index
63
+ of the script in the string, divided by 4, is the internal scriptID.`,
64
+ `
65
+ isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
66
+ for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
67
+ the UN.M49 codes used for groups.)`,
68
+ `
69
+ regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
70
+ Each 2-letter codes is followed by two bytes with the following meaning:
71
+ - [A-Z}{2}: the first letter of the 2-letter code plus these two
72
+ letters form the 3-letter ISO code.
73
+ - 0, n: index into altRegionISO3.`,
74
+ `
75
+ regionTypes defines the status of a region for various standards.`,
76
+ `
77
+ m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
78
+ codes indicating collections of regions.`,
79
+ `
80
+ m49Index gives indexes into fromM49 based on the three most significant bits
81
+ of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
82
+ fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
83
+ for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
84
+ The region code is stored in the 9 lsb of the indexed value.`,
85
+ `
86
+ fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.`,
87
+ `
88
+ altRegionISO3 holds a list of 3-letter region codes that cannot be
89
+ mapped to 2-letter codes using the default algorithm. This is a short list.`,
90
+ `
91
+ altRegionIDs holds a list of regionIDs the positions of which match those
92
+ of the 3-letter ISO codes in altRegionISO3.`,
93
+ `
94
+ variantNumSpecialized is the number of specialized variants in variants.`,
95
+ `
96
+ suppressScript is an index from langID to the dominant script for that language,
97
+ if it exists. If a script is given, it should be suppressed from the language tag.`,
98
+ `
99
+ likelyLang is a lookup table, indexed by langID, for the most likely
100
+ scripts and regions given incomplete information. If more entries exist for a
101
+ given language, region and script are the index and size respectively
102
+ of the list in likelyLangList.`,
103
+ `
104
+ likelyLangList holds lists info associated with likelyLang.`,
105
+ `
106
+ likelyRegion is a lookup table, indexed by regionID, for the most likely
107
+ languages and scripts given incomplete information. If more entries exist
108
+ for a given regionID, lang and script are the index and size respectively
109
+ of the list in likelyRegionList.
110
+ TODO: exclude containers and user-definable regions from the list.`,
111
+ `
112
+ likelyRegionList holds lists info associated with likelyRegion.`,
113
+ `
114
+ likelyScript is a lookup table, indexed by scriptID, for the most likely
115
+ languages and regions given a script.`,
116
+ `
117
+ matchLang holds pairs of langIDs of base languages that are typically
118
+ mutually intelligible. Each pair is associated with a confidence and
119
+ whether the intelligibility goes one or both ways.`,
120
+ `
121
+ matchScript holds pairs of scriptIDs where readers of one script
122
+ can typically also read the other. Each is associated with a confidence.`,
123
+ `
124
+ nRegionGroups is the number of region groups.`,
125
+ `
126
+ regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
127
+ where each set holds all groupings that are directly connected in a region
128
+ containment graph.`,
129
+ `
130
+ regionInclusionBits is an array of bit vectors where every vector represents
131
+ a set of region groupings. These sets are used to compute the distance
132
+ between two regions for the purpose of language matching.`,
133
+ `
134
+ regionInclusionNext marks, for each entry in regionInclusionBits, the set of
135
+ all groups that are reachable from the groups set in the respective entry.`,
136
+ }
137
+
138
+ // TODO: consider changing some of these structures to tries. This can reduce
139
+ // memory, but may increase the need for memory allocations. This could be
140
+ // mitigated if we can piggyback on language tags for common cases.
141
+
142
+ func failOnError(e error) {
143
+ if e != nil {
144
+ log.Panic(e)
145
+ }
146
+ }
147
+
148
+ type setType int
149
+
150
+ const (
151
+ Indexed setType = 1 + iota // all elements must be of same size
152
+ Linear
153
+ )
154
+
155
+ type stringSet struct {
156
+ s []string
157
+ sorted, frozen bool
158
+
159
+ // We often need to update values after the creation of an index is completed.
160
+ // We include a convenience map for keeping track of this.
161
+ update map[string]string
162
+ typ setType // used for checking.
163
+ }
164
+
165
+ func (ss *stringSet) clone() stringSet {
166
+ c := *ss
167
+ c.s = append([]string(nil), c.s...)
168
+ return c
169
+ }
170
+
171
+ func (ss *stringSet) setType(t setType) {
172
+ if ss.typ != t && ss.typ != 0 {
173
+ log.Panicf("type %d cannot be assigned as it was already %d", t, ss.typ)
174
+ }
175
+ }
176
+
177
+ // parse parses a whitespace-separated string and initializes ss with its
178
+ // components.
179
+ func (ss *stringSet) parse(s string) {
180
+ scan := bufio.NewScanner(strings.NewReader(s))
181
+ scan.Split(bufio.ScanWords)
182
+ for scan.Scan() {
183
+ ss.add(scan.Text())
184
+ }
185
+ }
186
+
187
+ func (ss *stringSet) assertChangeable() {
188
+ if ss.frozen {
189
+ log.Panic("attempt to modify a frozen stringSet")
190
+ }
191
+ }
192
+
193
+ func (ss *stringSet) add(s string) {
194
+ ss.assertChangeable()
195
+ ss.s = append(ss.s, s)
196
+ ss.sorted = ss.frozen
197
+ }
198
+
199
+ func (ss *stringSet) freeze() {
200
+ ss.compact()
201
+ ss.frozen = true
202
+ }
203
+
204
+ func (ss *stringSet) compact() {
205
+ if ss.sorted {
206
+ return
207
+ }
208
+ a := ss.s
209
+ sort.Strings(a)
210
+ k := 0
211
+ for i := 1; i < len(a); i++ {
212
+ if a[k] != a[i] {
213
+ a[k+1] = a[i]
214
+ k++
215
+ }
216
+ }
217
+ ss.s = a[:k+1]
218
+ ss.sorted = ss.frozen
219
+ }
220
+
221
+ type funcSorter struct {
222
+ fn func(a, b string) bool
223
+ sort.StringSlice
224
+ }
225
+
226
+ func (s funcSorter) Less(i, j int) bool {
227
+ return s.fn(s.StringSlice[i], s.StringSlice[j])
228
+ }
229
+
230
+ func (ss *stringSet) sortFunc(f func(a, b string) bool) {
231
+ ss.compact()
232
+ sort.Sort(funcSorter{f, sort.StringSlice(ss.s)})
233
+ }
234
+
235
+ func (ss *stringSet) remove(s string) {
236
+ ss.assertChangeable()
237
+ if i, ok := ss.find(s); ok {
238
+ copy(ss.s[i:], ss.s[i+1:])
239
+ ss.s = ss.s[:len(ss.s)-1]
240
+ }
241
+ }
242
+
243
+ func (ss *stringSet) replace(ol, nu string) {
244
+ ss.s[ss.index(ol)] = nu
245
+ ss.sorted = ss.frozen
246
+ }
247
+
248
+ func (ss *stringSet) index(s string) int {
249
+ ss.setType(Indexed)
250
+ i, ok := ss.find(s)
251
+ if !ok {
252
+ if i < len(ss.s) {
253
+ log.Panicf("find: item %q is not in list. Closest match is %q.", s, ss.s[i])
254
+ }
255
+ log.Panicf("find: item %q is not in list", s)
256
+
257
+ }
258
+ return i
259
+ }
260
+
261
+ func (ss *stringSet) find(s string) (int, bool) {
262
+ ss.compact()
263
+ i := sort.SearchStrings(ss.s, s)
264
+ return i, i != len(ss.s) && ss.s[i] == s
265
+ }
266
+
267
+ func (ss *stringSet) slice() []string {
268
+ ss.compact()
269
+ return ss.s
270
+ }
271
+
272
+ func (ss *stringSet) updateLater(v, key string) {
273
+ if ss.update == nil {
274
+ ss.update = map[string]string{}
275
+ }
276
+ ss.update[v] = key
277
+ }
278
+
279
+ // join joins the string and ensures that all entries are of the same length.
280
+ func (ss *stringSet) join() string {
281
+ ss.setType(Indexed)
282
+ n := len(ss.s[0])
283
+ for _, s := range ss.s {
284
+ if len(s) != n {
285
+ log.Panicf("join: not all entries are of the same length: %q", s)
286
+ }
287
+ }
288
+ ss.s = append(ss.s, strings.Repeat("\xff", n))
289
+ return strings.Join(ss.s, "")
290
+ }
291
+
292
+ // ianaEntry holds information for an entry in the IANA Language Subtag Repository.
293
+ // All types use the same entry.
294
+ // See http://tools.ietf.org/html/bcp47#section-5.1 for a description of the various
295
+ // fields.
296
+ type ianaEntry struct {
297
+ typ string
298
+ description []string
299
+ scope string
300
+ added string
301
+ preferred string
302
+ deprecated string
303
+ suppressScript string
304
+ macro string
305
+ prefix []string
306
+ }
307
+
308
+ type builder struct {
309
+ w *gen.CodeWriter
310
+ hw io.Writer // MultiWriter for w and w.Hash
311
+ data *cldr.CLDR
312
+ supp *cldr.SupplementalData
313
+
314
+ // indices
315
+ locale stringSet // common locales
316
+ lang stringSet // canonical language ids (2 or 3 letter ISO codes) with data
317
+ langNoIndex stringSet // 3-letter ISO codes with no associated data
318
+ script stringSet // 4-letter ISO codes
319
+ region stringSet // 2-letter ISO or 3-digit UN M49 codes
320
+ variant stringSet // 4-8-alphanumeric variant code.
321
+
322
+ // Region codes that are groups with their corresponding group IDs.
323
+ groups map[int]index
324
+
325
+ // langInfo
326
+ registry map[string]*ianaEntry
327
+ }
328
+
329
+ type index uint
330
+
331
+ func newBuilder(w *gen.CodeWriter) *builder {
332
+ r := gen.OpenCLDRCoreZip()
333
+ defer r.Close()
334
+ d := &cldr.Decoder{}
335
+ data, err := d.DecodeZip(r)
336
+ failOnError(err)
337
+ b := builder{
338
+ w: w,
339
+ hw: io.MultiWriter(w, w.Hash),
340
+ data: data,
341
+ supp: data.Supplemental(),
342
+ }
343
+ b.parseRegistry()
344
+ return &b
345
+ }
346
+
347
+ func (b *builder) parseRegistry() {
348
+ r := gen.OpenIANAFile("assignments/language-subtag-registry")
349
+ defer r.Close()
350
+ b.registry = make(map[string]*ianaEntry)
351
+
352
+ scan := bufio.NewScanner(r)
353
+ scan.Split(bufio.ScanWords)
354
+ var record *ianaEntry
355
+ for more := scan.Scan(); more; {
356
+ key := scan.Text()
357
+ more = scan.Scan()
358
+ value := scan.Text()
359
+ switch key {
360
+ case "Type:":
361
+ record = &ianaEntry{typ: value}
362
+ case "Subtag:", "Tag:":
363
+ if s := strings.SplitN(value, "..", 2); len(s) > 1 {
364
+ for a := s[0]; a <= s[1]; a = inc(a) {
365
+ b.addToRegistry(a, record)
366
+ }
367
+ } else {
368
+ b.addToRegistry(value, record)
369
+ }
370
+ case "Suppress-Script:":
371
+ record.suppressScript = value
372
+ case "Added:":
373
+ record.added = value
374
+ case "Deprecated:":
375
+ record.deprecated = value
376
+ case "Macrolanguage:":
377
+ record.macro = value
378
+ case "Preferred-Value:":
379
+ record.preferred = value
380
+ case "Prefix:":
381
+ record.prefix = append(record.prefix, value)
382
+ case "Scope:":
383
+ record.scope = value
384
+ case "Description:":
385
+ buf := []byte(value)
386
+ for more = scan.Scan(); more; more = scan.Scan() {
387
+ b := scan.Bytes()
388
+ if b[0] == '%' || b[len(b)-1] == ':' {
389
+ break
390
+ }
391
+ buf = append(buf, ' ')
392
+ buf = append(buf, b...)
393
+ }
394
+ record.description = append(record.description, string(buf))
395
+ continue
396
+ default:
397
+ continue
398
+ }
399
+ more = scan.Scan()
400
+ }
401
+ if scan.Err() != nil {
402
+ log.Panic(scan.Err())
403
+ }
404
+ }
405
+
406
+ func (b *builder) addToRegistry(key string, entry *ianaEntry) {
407
+ if info, ok := b.registry[key]; ok {
408
+ if info.typ != "language" || entry.typ != "extlang" {
409
+ log.Fatalf("parseRegistry: tag %q already exists", key)
410
+ }
411
+ } else {
412
+ b.registry[key] = entry
413
+ }
414
+ }
415
+
416
+ var commentIndex = make(map[string]string)
417
+
418
+ func init() {
419
+ for _, s := range comment {
420
+ key := strings.TrimSpace(strings.SplitN(s, " ", 2)[0])
421
+ commentIndex[key] = s
422
+ }
423
+ }
424
+
425
+ func (b *builder) comment(name string) {
426
+ if s := commentIndex[name]; len(s) > 0 {
427
+ b.w.WriteComment(s)
428
+ } else {
429
+ fmt.Fprintln(b.w)
430
+ }
431
+ }
432
+
433
+ func (b *builder) pf(f string, x ...interface{}) {
434
+ fmt.Fprintf(b.hw, f, x...)
435
+ fmt.Fprint(b.hw, "\n")
436
+ }
437
+
438
+ func (b *builder) p(x ...interface{}) {
439
+ fmt.Fprintln(b.hw, x...)
440
+ }
441
+
442
+ func (b *builder) addSize(s int) {
443
+ b.w.Size += s
444
+ b.pf("// Size: %d bytes", s)
445
+ }
446
+
447
+ func (b *builder) writeConst(name string, x interface{}) {
448
+ b.comment(name)
449
+ b.w.WriteConst(name, x)
450
+ }
451
+
452
+ // writeConsts computes f(v) for all v in values and writes the results
453
+ // as constants named _v to a single constant block.
454
+ func (b *builder) writeConsts(f func(string) int, values ...string) {
455
+ b.pf("const (")
456
+ for _, v := range values {
457
+ b.pf("\t_%s = %v", v, f(v))
458
+ }
459
+ b.pf(")")
460
+ }
461
+
462
+ // writeType writes the type of the given value, which must be a struct.
463
+ func (b *builder) writeType(value interface{}) {
464
+ b.comment(reflect.TypeOf(value).Name())
465
+ b.w.WriteType(value)
466
+ }
467
+
468
+ func (b *builder) writeSlice(name string, ss interface{}) {
469
+ b.writeSliceAddSize(name, 0, ss)
470
+ }
471
+
472
+ func (b *builder) writeSliceAddSize(name string, extraSize int, ss interface{}) {
473
+ b.comment(name)
474
+ b.w.Size += extraSize
475
+ v := reflect.ValueOf(ss)
476
+ t := v.Type().Elem()
477
+ b.pf("// Size: %d bytes, %d elements", v.Len()*int(t.Size())+extraSize, v.Len())
478
+
479
+ fmt.Fprintf(b.w, "var %s = ", name)
480
+ b.w.WriteArray(ss)
481
+ b.p()
482
+ }
483
+
484
+ type fromTo struct {
485
+ from, to uint16
486
+ }
487
+
488
+ func (b *builder) writeSortedMap(name string, ss *stringSet, index func(s string) uint16) {
489
+ ss.sortFunc(func(a, b string) bool {
490
+ return index(a) < index(b)
491
+ })
492
+ m := []fromTo{}
493
+ for _, s := range ss.s {
494
+ m = append(m, fromTo{index(s), index(ss.update[s])})
495
+ }
496
+ b.writeSlice(name, m)
497
+ }
498
+
499
+ const base = 'z' - 'a' + 1
500
+
501
+ func strToInt(s string) uint {
502
+ v := uint(0)
503
+ for i := 0; i < len(s); i++ {
504
+ v *= base
505
+ v += uint(s[i] - 'a')
506
+ }
507
+ return v
508
+ }
509
+
510
+ // converts the given integer to the original ASCII string passed to strToInt.
511
+ // len(s) must match the number of characters obtained.
512
+ func intToStr(v uint, s []byte) {
513
+ for i := len(s) - 1; i >= 0; i-- {
514
+ s[i] = byte(v%base) + 'a'
515
+ v /= base
516
+ }
517
+ }
518
+
519
+ func (b *builder) writeBitVector(name string, ss []string) {
520
+ vec := make([]uint8, int(math.Ceil(math.Pow(base, float64(len(ss[0])))/8)))
521
+ for _, s := range ss {
522
+ v := strToInt(s)
523
+ vec[v/8] |= 1 << (v % 8)
524
+ }
525
+ b.writeSlice(name, vec)
526
+ }
527
+
528
+ // TODO: convert this type into a list or two-stage trie.
529
+ func (b *builder) writeMapFunc(name string, m map[string]string, f func(string) uint16) {
530
+ b.comment(name)
531
+ v := reflect.ValueOf(m)
532
+ sz := v.Len() * (2 + int(v.Type().Key().Size()))
533
+ for _, k := range m {
534
+ sz += len(k)
535
+ }
536
+ b.addSize(sz)
537
+ keys := []string{}
538
+ b.pf(`var %s = map[string]uint16{`, name)
539
+ for k := range m {
540
+ keys = append(keys, k)
541
+ }
542
+ sort.Strings(keys)
543
+ for _, k := range keys {
544
+ b.pf("\t%q: %v,", k, f(m[k]))
545
+ }
546
+ b.p("}")
547
+ }
548
+
549
+ func (b *builder) writeMap(name string, m interface{}) {
550
+ b.comment(name)
551
+ v := reflect.ValueOf(m)
552
+ sz := v.Len() * (2 + int(v.Type().Key().Size()) + int(v.Type().Elem().Size()))
553
+ b.addSize(sz)
554
+ f := strings.FieldsFunc(fmt.Sprintf("%#v", m), func(r rune) bool {
555
+ return strings.IndexRune("{}, ", r) != -1
556
+ })
557
+ sort.Strings(f[1:])
558
+ b.pf(`var %s = %s{`, name, f[0])
559
+ for _, kv := range f[1:] {
560
+ b.pf("\t%s,", kv)
561
+ }
562
+ b.p("}")
563
+ }
564
+
565
+ func (b *builder) langIndex(s string) uint16 {
566
+ if s == "und" {
567
+ return 0
568
+ }
569
+ if i, ok := b.lang.find(s); ok {
570
+ return uint16(i)
571
+ }
572
+ return uint16(strToInt(s)) + uint16(len(b.lang.s))
573
+ }
574
+
575
+ // inc advances the string to its lexicographical successor.
576
+ func inc(s string) string {
577
+ const maxTagLength = 4
578
+ var buf [maxTagLength]byte
579
+ intToStr(strToInt(strings.ToLower(s))+1, buf[:len(s)])
580
+ for i := 0; i < len(s); i++ {
581
+ if s[i] <= 'Z' {
582
+ buf[i] -= 'a' - 'A'
583
+ }
584
+ }
585
+ return string(buf[:len(s)])
586
+ }
587
+
588
+ func (b *builder) parseIndices() {
589
+ meta := b.supp.Metadata
590
+
591
+ for k, v := range b.registry {
592
+ var ss *stringSet
593
+ switch v.typ {
594
+ case "language":
595
+ if len(k) == 2 || v.suppressScript != "" || v.scope == "special" {
596
+ b.lang.add(k)
597
+ continue
598
+ } else {
599
+ ss = &b.langNoIndex
600
+ }
601
+ case "region":
602
+ ss = &b.region
603
+ case "script":
604
+ ss = &b.script
605
+ case "variant":
606
+ ss = &b.variant
607
+ default:
608
+ continue
609
+ }
610
+ ss.add(k)
611
+ }
612
+ // Include any language for which there is data.
613
+ for _, lang := range b.data.Locales() {
614
+ if x := b.data.RawLDML(lang); false ||
615
+ x.LocaleDisplayNames != nil ||
616
+ x.Characters != nil ||
617
+ x.Delimiters != nil ||
618
+ x.Measurement != nil ||
619
+ x.Dates != nil ||
620
+ x.Numbers != nil ||
621
+ x.Units != nil ||
622
+ x.ListPatterns != nil ||
623
+ x.Collations != nil ||
624
+ x.Segmentations != nil ||
625
+ x.Rbnf != nil ||
626
+ x.Annotations != nil ||
627
+ x.Metadata != nil {
628
+
629
+ from := strings.Split(lang, "_")
630
+ if lang := from[0]; lang != "root" {
631
+ b.lang.add(lang)
632
+ }
633
+ }
634
+ }
635
+ // Include locales for plural rules, which uses a different structure.
636
+ for _, plurals := range b.data.Supplemental().Plurals {
637
+ for _, rules := range plurals.PluralRules {
638
+ for _, lang := range strings.Split(rules.Locales, " ") {
639
+ if lang = strings.Split(lang, "_")[0]; lang != "root" {
640
+ b.lang.add(lang)
641
+ }
642
+ }
643
+ }
644
+ }
645
+ // Include languages in likely subtags.
646
+ for _, m := range b.supp.LikelySubtags.LikelySubtag {
647
+ from := strings.Split(m.From, "_")
648
+ b.lang.add(from[0])
649
+ }
650
+ // Include ISO-639 alpha-3 bibliographic entries.
651
+ for _, a := range meta.Alias.LanguageAlias {
652
+ if a.Reason == "bibliographic" {
653
+ b.langNoIndex.add(a.Type)
654
+ }
655
+ }
656
+ // Include regions in territoryAlias (not all are in the IANA registry!)
657
+ for _, reg := range b.supp.Metadata.Alias.TerritoryAlias {
658
+ if len(reg.Type) == 2 {
659
+ b.region.add(reg.Type)
660
+ }
661
+ }
662
+
663
+ for _, s := range b.lang.s {
664
+ if len(s) == 3 {
665
+ b.langNoIndex.remove(s)
666
+ }
667
+ }
668
+ b.writeConst("numLanguages", len(b.lang.slice())+len(b.langNoIndex.slice()))
669
+ b.writeConst("numScripts", len(b.script.slice()))
670
+ b.writeConst("numRegions", len(b.region.slice()))
671
+
672
+ // Add dummy codes at the start of each list to represent "unspecified".
673
+ b.lang.add("---")
674
+ b.script.add("----")
675
+ b.region.add("---")
676
+
677
+ // common locales
678
+ b.locale.parse(meta.DefaultContent.Locales)
679
+ }
680
+
681
+ // TODO: region inclusion data will probably not be use used in future matchers.
682
+
683
+ func (b *builder) computeRegionGroups() {
684
+ b.groups = make(map[int]index)
685
+
686
+ // Create group indices.
687
+ for i := 1; b.region.s[i][0] < 'A'; i++ { // Base M49 indices on regionID.
688
+ b.groups[i] = index(len(b.groups))
689
+ }
690
+ for _, g := range b.supp.TerritoryContainment.Group {
691
+ // Skip UN and EURO zone as they are flattening the containment
692
+ // relationship.
693
+ if g.Type == "EZ" || g.Type == "UN" {
694
+ continue
695
+ }
696
+ group := b.region.index(g.Type)
697
+ if _, ok := b.groups[group]; !ok {
698
+ b.groups[group] = index(len(b.groups))
699
+ }
700
+ }
701
+ if len(b.groups) > 64 {
702
+ log.Fatalf("only 64 groups supported, found %d", len(b.groups))
703
+ }
704
+ b.writeConst("nRegionGroups", len(b.groups))
705
+ }
706
+
707
+ var langConsts = []string{
708
+ "af", "am", "ar", "az", "bg", "bn", "ca", "cs", "da", "de", "el", "en", "es",
709
+ "et", "fa", "fi", "fil", "fr", "gu", "he", "hi", "hr", "hu", "hy", "id", "is",
710
+ "it", "ja", "ka", "kk", "km", "kn", "ko", "ky", "lo", "lt", "lv", "mk", "ml",
711
+ "mn", "mo", "mr", "ms", "mul", "my", "nb", "ne", "nl", "no", "pa", "pl", "pt",
712
+ "ro", "ru", "sh", "si", "sk", "sl", "sq", "sr", "sv", "sw", "ta", "te", "th",
713
+ "tl", "tn", "tr", "uk", "ur", "uz", "vi", "zh", "zu",
714
+
715
+ // constants for grandfathered tags (if not already defined)
716
+ "jbo", "ami", "bnn", "hak", "tlh", "lb", "nv", "pwn", "tao", "tay", "tsu",
717
+ "nn", "sfb", "vgt", "sgg", "cmn", "nan", "hsn",
718
+ }
719
+
720
+ // writeLanguage generates all tables needed for language canonicalization.
721
+ func (b *builder) writeLanguage() {
722
+ meta := b.supp.Metadata
723
+
724
+ b.writeConst("nonCanonicalUnd", b.lang.index("und"))
725
+ b.writeConsts(func(s string) int { return int(b.langIndex(s)) }, langConsts...)
726
+ b.writeConst("langPrivateStart", b.langIndex("qaa"))
727
+ b.writeConst("langPrivateEnd", b.langIndex("qtz"))
728
+
729
+ // Get language codes that need to be mapped (overlong 3-letter codes,
730
+ // deprecated 2-letter codes, legacy and grandfathered tags.)
731
+ langAliasMap := stringSet{}
732
+ aliasTypeMap := map[string]langAliasType{}
733
+
734
+ // altLangISO3 get the alternative ISO3 names that need to be mapped.
735
+ altLangISO3 := stringSet{}
736
+ // Add dummy start to avoid the use of index 0.
737
+ altLangISO3.add("---")
738
+ altLangISO3.updateLater("---", "aa")
739
+
740
+ lang := b.lang.clone()
741
+ for _, a := range meta.Alias.LanguageAlias {
742
+ if a.Replacement == "" {
743
+ a.Replacement = "und"
744
+ }
745
+ // TODO: support mapping to tags
746
+ repl := strings.SplitN(a.Replacement, "_", 2)[0]
747
+ if a.Reason == "overlong" {
748
+ if len(a.Replacement) == 2 && len(a.Type) == 3 {
749
+ lang.updateLater(a.Replacement, a.Type)
750
+ }
751
+ } else if len(a.Type) <= 3 {
752
+ switch a.Reason {
753
+ case "macrolanguage":
754
+ aliasTypeMap[a.Type] = langMacro
755
+ case "deprecated":
756
+ // handled elsewhere
757
+ continue
758
+ case "bibliographic", "legacy":
759
+ if a.Type == "no" {
760
+ continue
761
+ }
762
+ aliasTypeMap[a.Type] = langLegacy
763
+ default:
764
+ log.Fatalf("new %s alias: %s", a.Reason, a.Type)
765
+ }
766
+ langAliasMap.add(a.Type)
767
+ langAliasMap.updateLater(a.Type, repl)
768
+ }
769
+ }
770
+ // Manually add the mapping of "nb" (Norwegian) to its macro language.
771
+ // This can be removed if CLDR adopts this change.
772
+ langAliasMap.add("nb")
773
+ langAliasMap.updateLater("nb", "no")
774
+ aliasTypeMap["nb"] = langMacro
775
+
776
+ for k, v := range b.registry {
777
+ // Also add deprecated values for 3-letter ISO codes, which CLDR omits.
778
+ if v.typ == "language" && v.deprecated != "" && v.preferred != "" {
779
+ langAliasMap.add(k)
780
+ langAliasMap.updateLater(k, v.preferred)
781
+ aliasTypeMap[k] = langDeprecated
782
+ }
783
+ }
784
+ // Fix CLDR mappings.
785
+ lang.updateLater("tl", "tgl")
786
+ lang.updateLater("sh", "hbs")
787
+ lang.updateLater("mo", "mol")
788
+ lang.updateLater("no", "nor")
789
+ lang.updateLater("tw", "twi")
790
+ lang.updateLater("nb", "nob")
791
+ lang.updateLater("ak", "aka")
792
+ lang.updateLater("bh", "bih")
793
+
794
+ // Ensure that each 2-letter code is matched with a 3-letter code.
795
+ for _, v := range lang.s[1:] {
796
+ s, ok := lang.update[v]
797
+ if !ok {
798
+ if s, ok = lang.update[langAliasMap.update[v]]; !ok {
799
+ continue
800
+ }
801
+ lang.update[v] = s
802
+ }
803
+ if v[0] != s[0] {
804
+ altLangISO3.add(s)
805
+ altLangISO3.updateLater(s, v)
806
+ }
807
+ }
808
+
809
+ // Complete canonicalized language tags.
810
+ lang.freeze()
811
+ for i, v := range lang.s {
812
+ // We can avoid these manual entries by using the IANA registry directly.
813
+ // Seems easier to update the list manually, as changes are rare.
814
+ // The panic in this loop will trigger if we miss an entry.
815
+ add := ""
816
+ if s, ok := lang.update[v]; ok {
817
+ if s[0] == v[0] {
818
+ add = s[1:]
819
+ } else {
820
+ add = string([]byte{0, byte(altLangISO3.index(s))})
821
+ }
822
+ } else if len(v) == 3 {
823
+ add = "\x00"
824
+ } else {
825
+ log.Panicf("no data for long form of %q", v)
826
+ }
827
+ lang.s[i] += add
828
+ }
829
+ b.writeConst("lang", tag.Index(lang.join()))
830
+
831
+ b.writeConst("langNoIndexOffset", len(b.lang.s))
832
+
833
+ // space of all valid 3-letter language identifiers.
834
+ b.writeBitVector("langNoIndex", b.langNoIndex.slice())
835
+
836
+ altLangIndex := []uint16{}
837
+ for i, s := range altLangISO3.slice() {
838
+ altLangISO3.s[i] += string([]byte{byte(len(altLangIndex))})
839
+ if i > 0 {
840
+ idx := b.lang.index(altLangISO3.update[s])
841
+ altLangIndex = append(altLangIndex, uint16(idx))
842
+ }
843
+ }
844
+ b.writeConst("altLangISO3", tag.Index(altLangISO3.join()))
845
+ b.writeSlice("altLangIndex", altLangIndex)
846
+
847
+ b.writeSortedMap("langAliasMap", &langAliasMap, b.langIndex)
848
+ types := make([]langAliasType, len(langAliasMap.s))
849
+ for i, s := range langAliasMap.s {
850
+ types[i] = aliasTypeMap[s]
851
+ }
852
+ b.writeSlice("langAliasTypes", types)
853
+ }
854
+
855
+ var scriptConsts = []string{
856
+ "Latn", "Hani", "Hans", "Hant", "Qaaa", "Qaai", "Qabx", "Zinh", "Zyyy",
857
+ "Zzzz",
858
+ }
859
+
860
+ func (b *builder) writeScript() {
861
+ b.writeConsts(b.script.index, scriptConsts...)
862
+ b.writeConst("script", tag.Index(b.script.join()))
863
+
864
+ supp := make([]uint8, len(b.lang.slice()))
865
+ for i, v := range b.lang.slice()[1:] {
866
+ if sc := b.registry[v].suppressScript; sc != "" {
867
+ supp[i+1] = uint8(b.script.index(sc))
868
+ }
869
+ }
870
+ b.writeSlice("suppressScript", supp)
871
+
872
+ // There is only one deprecated script in CLDR. This value is hard-coded.
873
+ // We check here if the code must be updated.
874
+ for _, a := range b.supp.Metadata.Alias.ScriptAlias {
875
+ if a.Type != "Qaai" {
876
+ log.Panicf("unexpected deprecated stript %q", a.Type)
877
+ }
878
+ }
879
+ }
880
+
881
+ func parseM49(s string) int16 {
882
+ if len(s) == 0 {
883
+ return 0
884
+ }
885
+ v, err := strconv.ParseUint(s, 10, 10)
886
+ failOnError(err)
887
+ return int16(v)
888
+ }
889
+
890
+ var regionConsts = []string{
891
+ "001", "419", "BR", "CA", "ES", "GB", "MD", "PT", "UK", "US",
892
+ "ZZ", "XA", "XC", "XK", // Unofficial tag for Kosovo.
893
+ }
894
+
895
+ func (b *builder) writeRegion() {
896
+ b.writeConsts(b.region.index, regionConsts...)
897
+
898
+ isoOffset := b.region.index("AA")
899
+ m49map := make([]int16, len(b.region.slice()))
900
+ fromM49map := make(map[int16]int)
901
+ altRegionISO3 := ""
902
+ altRegionIDs := []uint16{}
903
+
904
+ b.writeConst("isoRegionOffset", isoOffset)
905
+
906
+ // 2-letter region lookup and mapping to numeric codes.
907
+ regionISO := b.region.clone()
908
+ regionISO.s = regionISO.s[isoOffset:]
909
+ regionISO.sorted = false
910
+
911
+ regionTypes := make([]byte, len(b.region.s))
912
+
913
+ // Is the region valid BCP 47?
914
+ for s, e := range b.registry {
915
+ if len(s) == 2 && s == strings.ToUpper(s) {
916
+ i := b.region.index(s)
917
+ for _, d := range e.description {
918
+ if strings.Contains(d, "Private use") {
919
+ regionTypes[i] = iso3166UserAssigned
920
+ }
921
+ }
922
+ regionTypes[i] |= bcp47Region
923
+ }
924
+ }
925
+
926
+ // Is the region a valid ccTLD?
927
+ r := gen.OpenIANAFile("domains/root/db")
928
+ defer r.Close()
929
+
930
+ buf, err := ioutil.ReadAll(r)
931
+ failOnError(err)
932
+ re := regexp.MustCompile(`"/domains/root/db/([a-z]{2}).html"`)
933
+ for _, m := range re.FindAllSubmatch(buf, -1) {
934
+ i := b.region.index(strings.ToUpper(string(m[1])))
935
+ regionTypes[i] |= ccTLD
936
+ }
937
+
938
+ b.writeSlice("regionTypes", regionTypes)
939
+
940
+ iso3Set := make(map[string]int)
941
+ update := func(iso2, iso3 string) {
942
+ i := regionISO.index(iso2)
943
+ if j, ok := iso3Set[iso3]; !ok && iso3[0] == iso2[0] {
944
+ regionISO.s[i] += iso3[1:]
945
+ iso3Set[iso3] = -1
946
+ } else {
947
+ if ok && j >= 0 {
948
+ regionISO.s[i] += string([]byte{0, byte(j)})
949
+ } else {
950
+ iso3Set[iso3] = len(altRegionISO3)
951
+ regionISO.s[i] += string([]byte{0, byte(len(altRegionISO3))})
952
+ altRegionISO3 += iso3
953
+ altRegionIDs = append(altRegionIDs, uint16(isoOffset+i))
954
+ }
955
+ }
956
+ }
957
+ for _, tc := range b.supp.CodeMappings.TerritoryCodes {
958
+ i := regionISO.index(tc.Type) + isoOffset
959
+ if d := m49map[i]; d != 0 {
960
+ log.Panicf("%s found as a duplicate UN.M49 code of %03d", tc.Numeric, d)
961
+ }
962
+ m49 := parseM49(tc.Numeric)
963
+ m49map[i] = m49
964
+ if r := fromM49map[m49]; r == 0 {
965
+ fromM49map[m49] = i
966
+ } else if r != i {
967
+ dep := b.registry[regionISO.s[r-isoOffset]].deprecated
968
+ if t := b.registry[tc.Type]; t != nil && dep != "" && (t.deprecated == "" || t.deprecated > dep) {
969
+ fromM49map[m49] = i
970
+ }
971
+ }
972
+ }
973
+ for _, ta := range b.supp.Metadata.Alias.TerritoryAlias {
974
+ if len(ta.Type) == 3 && ta.Type[0] <= '9' && len(ta.Replacement) == 2 {
975
+ from := parseM49(ta.Type)
976
+ if r := fromM49map[from]; r == 0 {
977
+ fromM49map[from] = regionISO.index(ta.Replacement) + isoOffset
978
+ }
979
+ }
980
+ }
981
+ for _, tc := range b.supp.CodeMappings.TerritoryCodes {
982
+ if len(tc.Alpha3) == 3 {
983
+ update(tc.Type, tc.Alpha3)
984
+ }
985
+ }
986
+ // This entries are not included in territoryCodes. Mostly 3-letter variants
987
+ // of deleted codes and an entry for QU.
988
+ for _, m := range []struct{ iso2, iso3 string }{
989
+ {"CT", "CTE"},
990
+ {"DY", "DHY"},
991
+ {"HV", "HVO"},
992
+ {"JT", "JTN"},
993
+ {"MI", "MID"},
994
+ {"NH", "NHB"},
995
+ {"NQ", "ATN"},
996
+ {"PC", "PCI"},
997
+ {"PU", "PUS"},
998
+ {"PZ", "PCZ"},
999
+ {"RH", "RHO"},
1000
+ {"VD", "VDR"},
1001
+ {"WK", "WAK"},
1002
+ // These three-letter codes are used for others as well.
1003
+ {"FQ", "ATF"},
1004
+ } {
1005
+ update(m.iso2, m.iso3)
1006
+ }
1007
+ for i, s := range regionISO.s {
1008
+ if len(s) != 4 {
1009
+ regionISO.s[i] = s + " "
1010
+ }
1011
+ }
1012
+ b.writeConst("regionISO", tag.Index(regionISO.join()))
1013
+ b.writeConst("altRegionISO3", altRegionISO3)
1014
+ b.writeSlice("altRegionIDs", altRegionIDs)
1015
+
1016
+ // Create list of deprecated regions.
1017
+ // TODO: consider inserting SF -> FI. Not included by CLDR, but is the only
1018
+ // Transitionally-reserved mapping not included.
1019
+ regionOldMap := stringSet{}
1020
+ // Include regions in territoryAlias (not all are in the IANA registry!)
1021
+ for _, reg := range b.supp.Metadata.Alias.TerritoryAlias {
1022
+ if len(reg.Type) == 2 && reg.Reason == "deprecated" && len(reg.Replacement) == 2 {
1023
+ regionOldMap.add(reg.Type)
1024
+ regionOldMap.updateLater(reg.Type, reg.Replacement)
1025
+ i, _ := regionISO.find(reg.Type)
1026
+ j, _ := regionISO.find(reg.Replacement)
1027
+ if k := m49map[i+isoOffset]; k == 0 {
1028
+ m49map[i+isoOffset] = m49map[j+isoOffset]
1029
+ }
1030
+ }
1031
+ }
1032
+ b.writeSortedMap("regionOldMap", &regionOldMap, func(s string) uint16 {
1033
+ return uint16(b.region.index(s))
1034
+ })
1035
+ // 3-digit region lookup, groupings.
1036
+ for i := 1; i < isoOffset; i++ {
1037
+ m := parseM49(b.region.s[i])
1038
+ m49map[i] = m
1039
+ fromM49map[m] = i
1040
+ }
1041
+ b.writeSlice("m49", m49map)
1042
+
1043
+ const (
1044
+ searchBits = 7
1045
+ regionBits = 9
1046
+ )
1047
+ if len(m49map) >= 1<<regionBits {
1048
+ log.Fatalf("Maximum number of regions exceeded: %d > %d", len(m49map), 1<<regionBits)
1049
+ }
1050
+ m49Index := [9]int16{}
1051
+ fromM49 := []uint16{}
1052
+ m49 := []int{}
1053
+ for k, _ := range fromM49map {
1054
+ m49 = append(m49, int(k))
1055
+ }
1056
+ sort.Ints(m49)
1057
+ for _, k := range m49[1:] {
1058
+ val := (k & (1<<searchBits - 1)) << regionBits
1059
+ fromM49 = append(fromM49, uint16(val|fromM49map[int16(k)]))
1060
+ m49Index[1:][k>>searchBits] = int16(len(fromM49))
1061
+ }
1062
+ b.writeSlice("m49Index", m49Index)
1063
+ b.writeSlice("fromM49", fromM49)
1064
+ }
1065
+
1066
+ const (
1067
+ // TODO: put these lists in regionTypes as user data? Could be used for
1068
+ // various optimizations and refinements and could be exposed in the API.
1069
+ iso3166Except = "AC CP DG EA EU FX IC SU TA UK"
1070
+ iso3166Trans = "AN BU CS NT TP YU ZR" // SF is not in our set of Regions.
1071
+ // DY and RH are actually not deleted, but indeterminately reserved.
1072
+ iso3166DelCLDR = "CT DD DY FQ HV JT MI NH NQ PC PU PZ RH VD WK YD"
1073
+ )
1074
+
1075
+ const (
1076
+ iso3166UserAssigned = 1 << iota
1077
+ ccTLD
1078
+ bcp47Region
1079
+ )
1080
+
1081
+ func find(list []string, s string) int {
1082
+ for i, t := range list {
1083
+ if t == s {
1084
+ return i
1085
+ }
1086
+ }
1087
+ return -1
1088
+ }
1089
+
1090
+ // writeVariants generates per-variant information and creates a map from variant
1091
+ // name to index value. We assign index values such that sorting multiple
1092
+ // variants by index value will result in the correct order.
1093
+ // There are two types of variants: specialized and general. Specialized variants
1094
+ // are only applicable to certain language or language-script pairs. Generalized
1095
+ // variants apply to any language. Generalized variants always sort after
1096
+ // specialized variants. We will therefore always assign a higher index value
1097
+ // to a generalized variant than any other variant. Generalized variants are
1098
+ // sorted alphabetically among themselves.
1099
+ // Specialized variants may also sort after other specialized variants. Such
1100
+ // variants will be ordered after any of the variants they may follow.
1101
+ // We assume that if a variant x is followed by a variant y, then for any prefix
1102
+ // p of x, p-x is a prefix of y. This allows us to order tags based on the
1103
+ // maximum of the length of any of its prefixes.
1104
+ // TODO: it is possible to define a set of Prefix values on variants such that
1105
+ // a total order cannot be defined to the point that this algorithm breaks.
1106
+ // In other words, we cannot guarantee the same order of variants for the
1107
+ // future using the same algorithm or for non-compliant combinations of
1108
+ // variants. For this reason, consider using simple alphabetic sorting
1109
+ // of variants and ignore Prefix restrictions altogether.
1110
+ func (b *builder) writeVariant() {
1111
+ generalized := stringSet{}
1112
+ specialized := stringSet{}
1113
+ specializedExtend := stringSet{}
1114
+ // Collate the variants by type and check assumptions.
1115
+ for _, v := range b.variant.slice() {
1116
+ e := b.registry[v]
1117
+ if len(e.prefix) == 0 {
1118
+ generalized.add(v)
1119
+ continue
1120
+ }
1121
+ c := strings.Split(e.prefix[0], "-")
1122
+ hasScriptOrRegion := false
1123
+ if len(c) > 1 {
1124
+ _, hasScriptOrRegion = b.script.find(c[1])
1125
+ if !hasScriptOrRegion {
1126
+ _, hasScriptOrRegion = b.region.find(c[1])
1127
+
1128
+ }
1129
+ }
1130
+ if len(c) == 1 || len(c) == 2 && hasScriptOrRegion {
1131
+ // Variant is preceded by a language.
1132
+ specialized.add(v)
1133
+ continue
1134
+ }
1135
+ // Variant is preceded by another variant.
1136
+ specializedExtend.add(v)
1137
+ prefix := c[0] + "-"
1138
+ if hasScriptOrRegion {
1139
+ prefix += c[1]
1140
+ }
1141
+ for _, p := range e.prefix {
1142
+ // Verify that the prefix minus the last element is a prefix of the
1143
+ // predecessor element.
1144
+ i := strings.LastIndex(p, "-")
1145
+ pred := b.registry[p[i+1:]]
1146
+ if find(pred.prefix, p[:i]) < 0 {
1147
+ log.Fatalf("prefix %q for variant %q not consistent with predecessor spec", p, v)
1148
+ }
1149
+ // The sorting used below does not work in the general case. It works
1150
+ // if we assume that variants that may be followed by others only have
1151
+ // prefixes of the same length. Verify this.
1152
+ count := strings.Count(p[:i], "-")
1153
+ for _, q := range pred.prefix {
1154
+ if c := strings.Count(q, "-"); c != count {
1155
+ log.Fatalf("variant %q preceding %q has a prefix %q of size %d; want %d", p[i+1:], v, q, c, count)
1156
+ }
1157
+ }
1158
+ if !strings.HasPrefix(p, prefix) {
1159
+ log.Fatalf("prefix %q of variant %q should start with %q", p, v, prefix)
1160
+ }
1161
+ }
1162
+ }
1163
+
1164
+ // Sort extended variants.
1165
+ a := specializedExtend.s
1166
+ less := func(v, w string) bool {
1167
+ // Sort by the maximum number of elements.
1168
+ maxCount := func(s string) (max int) {
1169
+ for _, p := range b.registry[s].prefix {
1170
+ if c := strings.Count(p, "-"); c > max {
1171
+ max = c
1172
+ }
1173
+ }
1174
+ return
1175
+ }
1176
+ if cv, cw := maxCount(v), maxCount(w); cv != cw {
1177
+ return cv < cw
1178
+ }
1179
+ // Sort by name as tie breaker.
1180
+ return v < w
1181
+ }
1182
+ sort.Sort(funcSorter{less, sort.StringSlice(a)})
1183
+ specializedExtend.frozen = true
1184
+
1185
+ // Create index from variant name to index.
1186
+ variantIndex := make(map[string]uint8)
1187
+ add := func(s []string) {
1188
+ for _, v := range s {
1189
+ variantIndex[v] = uint8(len(variantIndex))
1190
+ }
1191
+ }
1192
+ add(specialized.slice())
1193
+ add(specializedExtend.s)
1194
+ numSpecialized := len(variantIndex)
1195
+ add(generalized.slice())
1196
+ if n := len(variantIndex); n > 255 {
1197
+ log.Fatalf("maximum number of variants exceeded: was %d; want <= 255", n)
1198
+ }
1199
+ b.writeMap("variantIndex", variantIndex)
1200
+ b.writeConst("variantNumSpecialized", numSpecialized)
1201
+ }
1202
+
1203
+ func (b *builder) writeLanguageInfo() {
1204
+ }
1205
+
1206
+ // writeLikelyData writes tables that are used both for finding parent relations and for
1207
+ // language matching. Each entry contains additional bits to indicate the status of the
1208
+ // data to know when it cannot be used for parent relations.
1209
+ func (b *builder) writeLikelyData() {
1210
+ const (
1211
+ isList = 1 << iota
1212
+ scriptInFrom
1213
+ regionInFrom
1214
+ )
1215
+ type ( // generated types
1216
+ likelyScriptRegion struct {
1217
+ region uint16
1218
+ script uint8
1219
+ flags uint8
1220
+ }
1221
+ likelyLangScript struct {
1222
+ lang uint16
1223
+ script uint8
1224
+ flags uint8
1225
+ }
1226
+ likelyLangRegion struct {
1227
+ lang uint16
1228
+ region uint16
1229
+ }
1230
+ // likelyTag is used for getting likely tags for group regions, where
1231
+ // the likely region might be a region contained in the group.
1232
+ likelyTag struct {
1233
+ lang uint16
1234
+ region uint16
1235
+ script uint8
1236
+ }
1237
+ )
1238
+ var ( // generated variables
1239
+ likelyRegionGroup = make([]likelyTag, len(b.groups))
1240
+ likelyLang = make([]likelyScriptRegion, len(b.lang.s))
1241
+ likelyRegion = make([]likelyLangScript, len(b.region.s))
1242
+ likelyScript = make([]likelyLangRegion, len(b.script.s))
1243
+ likelyLangList = []likelyScriptRegion{}
1244
+ likelyRegionList = []likelyLangScript{}
1245
+ )
1246
+ type fromTo struct {
1247
+ from, to []string
1248
+ }
1249
+ langToOther := map[int][]fromTo{}
1250
+ regionToOther := map[int][]fromTo{}
1251
+ for _, m := range b.supp.LikelySubtags.LikelySubtag {
1252
+ from := strings.Split(m.From, "_")
1253
+ to := strings.Split(m.To, "_")
1254
+ if len(to) != 3 {
1255
+ log.Fatalf("invalid number of subtags in %q: found %d, want 3", m.To, len(to))
1256
+ }
1257
+ if len(from) > 3 {
1258
+ log.Fatalf("invalid number of subtags: found %d, want 1-3", len(from))
1259
+ }
1260
+ if from[0] != to[0] && from[0] != "und" {
1261
+ log.Fatalf("unexpected language change in expansion: %s -> %s", from, to)
1262
+ }
1263
+ if len(from) == 3 {
1264
+ if from[2] != to[2] {
1265
+ log.Fatalf("unexpected region change in expansion: %s -> %s", from, to)
1266
+ }
1267
+ if from[0] != "und" {
1268
+ log.Fatalf("unexpected fully specified from tag: %s -> %s", from, to)
1269
+ }
1270
+ }
1271
+ if len(from) == 1 || from[0] != "und" {
1272
+ id := 0
1273
+ if from[0] != "und" {
1274
+ id = b.lang.index(from[0])
1275
+ }
1276
+ langToOther[id] = append(langToOther[id], fromTo{from, to})
1277
+ } else if len(from) == 2 && len(from[1]) == 4 {
1278
+ sid := b.script.index(from[1])
1279
+ likelyScript[sid].lang = uint16(b.langIndex(to[0]))
1280
+ likelyScript[sid].region = uint16(b.region.index(to[2]))
1281
+ } else {
1282
+ r := b.region.index(from[len(from)-1])
1283
+ if id, ok := b.groups[r]; ok {
1284
+ if from[0] != "und" {
1285
+ log.Fatalf("region changed unexpectedly: %s -> %s", from, to)
1286
+ }
1287
+ likelyRegionGroup[id].lang = uint16(b.langIndex(to[0]))
1288
+ likelyRegionGroup[id].script = uint8(b.script.index(to[1]))
1289
+ likelyRegionGroup[id].region = uint16(b.region.index(to[2]))
1290
+ } else {
1291
+ regionToOther[r] = append(regionToOther[r], fromTo{from, to})
1292
+ }
1293
+ }
1294
+ }
1295
+ b.writeType(likelyLangRegion{})
1296
+ b.writeSlice("likelyScript", likelyScript)
1297
+
1298
+ for id := range b.lang.s {
1299
+ list := langToOther[id]
1300
+ if len(list) == 1 {
1301
+ likelyLang[id].region = uint16(b.region.index(list[0].to[2]))
1302
+ likelyLang[id].script = uint8(b.script.index(list[0].to[1]))
1303
+ } else if len(list) > 1 {
1304
+ likelyLang[id].flags = isList
1305
+ likelyLang[id].region = uint16(len(likelyLangList))
1306
+ likelyLang[id].script = uint8(len(list))
1307
+ for _, x := range list {
1308
+ flags := uint8(0)
1309
+ if len(x.from) > 1 {
1310
+ if x.from[1] == x.to[2] {
1311
+ flags = regionInFrom
1312
+ } else {
1313
+ flags = scriptInFrom
1314
+ }
1315
+ }
1316
+ likelyLangList = append(likelyLangList, likelyScriptRegion{
1317
+ region: uint16(b.region.index(x.to[2])),
1318
+ script: uint8(b.script.index(x.to[1])),
1319
+ flags: flags,
1320
+ })
1321
+ }
1322
+ }
1323
+ }
1324
+ // TODO: merge suppressScript data with this table.
1325
+ b.writeType(likelyScriptRegion{})
1326
+ b.writeSlice("likelyLang", likelyLang)
1327
+ b.writeSlice("likelyLangList", likelyLangList)
1328
+
1329
+ for id := range b.region.s {
1330
+ list := regionToOther[id]
1331
+ if len(list) == 1 {
1332
+ likelyRegion[id].lang = uint16(b.langIndex(list[0].to[0]))
1333
+ likelyRegion[id].script = uint8(b.script.index(list[0].to[1]))
1334
+ if len(list[0].from) > 2 {
1335
+ likelyRegion[id].flags = scriptInFrom
1336
+ }
1337
+ } else if len(list) > 1 {
1338
+ likelyRegion[id].flags = isList
1339
+ likelyRegion[id].lang = uint16(len(likelyRegionList))
1340
+ likelyRegion[id].script = uint8(len(list))
1341
+ for i, x := range list {
1342
+ if len(x.from) == 2 && i != 0 || i > 0 && len(x.from) != 3 {
1343
+ log.Fatalf("unspecified script must be first in list: %v at %d", x.from, i)
1344
+ }
1345
+ x := likelyLangScript{
1346
+ lang: uint16(b.langIndex(x.to[0])),
1347
+ script: uint8(b.script.index(x.to[1])),
1348
+ }
1349
+ if len(list[0].from) > 2 {
1350
+ x.flags = scriptInFrom
1351
+ }
1352
+ likelyRegionList = append(likelyRegionList, x)
1353
+ }
1354
+ }
1355
+ }
1356
+ b.writeType(likelyLangScript{})
1357
+ b.writeSlice("likelyRegion", likelyRegion)
1358
+ b.writeSlice("likelyRegionList", likelyRegionList)
1359
+
1360
+ b.writeType(likelyTag{})
1361
+ b.writeSlice("likelyRegionGroup", likelyRegionGroup)
1362
+ }
1363
+
1364
+ type mutualIntelligibility struct {
1365
+ want, have uint16
1366
+ distance uint8
1367
+ oneway bool
1368
+ }
1369
+
1370
+ type scriptIntelligibility struct {
1371
+ wantLang, haveLang uint16
1372
+ wantScript, haveScript uint8
1373
+ distance uint8
1374
+ // Always oneway
1375
+ }
1376
+
1377
+ type regionIntelligibility struct {
1378
+ lang uint16 // compact language id
1379
+ script uint8 // 0 means any
1380
+ group uint8 // 0 means any; if bit 7 is set it means inverse
1381
+ distance uint8
1382
+ // Always twoway.
1383
+ }
1384
+
1385
+ // writeMatchData writes tables with languages and scripts for which there is
1386
+ // mutual intelligibility. The data is based on CLDR's languageMatching data.
1387
+ // Note that we use a different algorithm than the one defined by CLDR and that
1388
+ // we slightly modify the data. For example, we convert scores to confidence levels.
1389
+ // We also drop all region-related data as we use a different algorithm to
1390
+ // determine region equivalence.
1391
+ func (b *builder) writeMatchData() {
1392
+ lm := b.supp.LanguageMatching.LanguageMatches
1393
+ cldr.MakeSlice(&lm).SelectAnyOf("type", "written_new")
1394
+
1395
+ regionHierarchy := map[string][]string{}
1396
+ for _, g := range b.supp.TerritoryContainment.Group {
1397
+ regions := strings.Split(g.Contains, " ")
1398
+ regionHierarchy[g.Type] = append(regionHierarchy[g.Type], regions...)
1399
+ }
1400
+ regionToGroups := make([]uint8, len(b.region.s))
1401
+
1402
+ idToIndex := map[string]uint8{}
1403
+ for i, mv := range lm[0].MatchVariable {
1404
+ if i > 6 {
1405
+ log.Fatalf("Too many groups: %d", i)
1406
+ }
1407
+ idToIndex[mv.Id] = uint8(i + 1)
1408
+ // TODO: also handle '-'
1409
+ for _, r := range strings.Split(mv.Value, "+") {
1410
+ todo := []string{r}
1411
+ for k := 0; k < len(todo); k++ {
1412
+ r := todo[k]
1413
+ regionToGroups[b.region.index(r)] |= 1 << uint8(i)
1414
+ todo = append(todo, regionHierarchy[r]...)
1415
+ }
1416
+ }
1417
+ }
1418
+ b.writeSlice("regionToGroups", regionToGroups)
1419
+
1420
+ // maps language id to in- and out-of-group region.
1421
+ paradigmLocales := [][3]uint16{}
1422
+ locales := strings.Split(lm[0].ParadigmLocales[0].Locales, " ")
1423
+ for i := 0; i < len(locales); i += 2 {
1424
+ x := [3]uint16{}
1425
+ for j := 0; j < 2; j++ {
1426
+ pc := strings.SplitN(locales[i+j], "-", 2)
1427
+ x[0] = b.langIndex(pc[0])
1428
+ if len(pc) == 2 {
1429
+ x[1+j] = uint16(b.region.index(pc[1]))
1430
+ }
1431
+ }
1432
+ paradigmLocales = append(paradigmLocales, x)
1433
+ }
1434
+ b.writeSlice("paradigmLocales", paradigmLocales)
1435
+
1436
+ b.writeType(mutualIntelligibility{})
1437
+ b.writeType(scriptIntelligibility{})
1438
+ b.writeType(regionIntelligibility{})
1439
+
1440
+ matchLang := []mutualIntelligibility{}
1441
+ matchScript := []scriptIntelligibility{}
1442
+ matchRegion := []regionIntelligibility{}
1443
+ // Convert the languageMatch entries in lists keyed by desired language.
1444
+ for _, m := range lm[0].LanguageMatch {
1445
+ // Different versions of CLDR use different separators.
1446
+ desired := strings.Replace(m.Desired, "-", "_", -1)
1447
+ supported := strings.Replace(m.Supported, "-", "_", -1)
1448
+ d := strings.Split(desired, "_")
1449
+ s := strings.Split(supported, "_")
1450
+ if len(d) != len(s) {
1451
+ log.Fatalf("not supported: desired=%q; supported=%q", desired, supported)
1452
+ continue
1453
+ }
1454
+ distance, _ := strconv.ParseInt(m.Distance, 10, 8)
1455
+ switch len(d) {
1456
+ case 2:
1457
+ if desired == supported && desired == "*_*" {
1458
+ continue
1459
+ }
1460
+ // language-script pair.
1461
+ matchScript = append(matchScript, scriptIntelligibility{
1462
+ wantLang: uint16(b.langIndex(d[0])),
1463
+ haveLang: uint16(b.langIndex(s[0])),
1464
+ wantScript: uint8(b.script.index(d[1])),
1465
+ haveScript: uint8(b.script.index(s[1])),
1466
+ distance: uint8(distance),
1467
+ })
1468
+ if m.Oneway != "true" {
1469
+ matchScript = append(matchScript, scriptIntelligibility{
1470
+ wantLang: uint16(b.langIndex(s[0])),
1471
+ haveLang: uint16(b.langIndex(d[0])),
1472
+ wantScript: uint8(b.script.index(s[1])),
1473
+ haveScript: uint8(b.script.index(d[1])),
1474
+ distance: uint8(distance),
1475
+ })
1476
+ }
1477
+ case 1:
1478
+ if desired == supported && desired == "*" {
1479
+ continue
1480
+ }
1481
+ if distance == 1 {
1482
+ // nb == no is already handled by macro mapping. Check there
1483
+ // really is only this case.
1484
+ if d[0] != "no" || s[0] != "nb" {
1485
+ log.Fatalf("unhandled equivalence %s == %s", s[0], d[0])
1486
+ }
1487
+ continue
1488
+ }
1489
+ // TODO: consider dropping oneway field and just doubling the entry.
1490
+ matchLang = append(matchLang, mutualIntelligibility{
1491
+ want: uint16(b.langIndex(d[0])),
1492
+ have: uint16(b.langIndex(s[0])),
1493
+ distance: uint8(distance),
1494
+ oneway: m.Oneway == "true",
1495
+ })
1496
+ case 3:
1497
+ if desired == supported && desired == "*_*_*" {
1498
+ continue
1499
+ }
1500
+ if desired != supported { // (Weird but correct.)
1501
+ log.Fatalf("not supported: desired=%q; supported=%q", desired, supported)
1502
+ continue
1503
+ }
1504
+ ri := regionIntelligibility{
1505
+ lang: b.langIndex(d[0]),
1506
+ distance: uint8(distance),
1507
+ }
1508
+ if d[1] != "*" {
1509
+ ri.script = uint8(b.script.index(d[1]))
1510
+ }
1511
+ switch {
1512
+ case d[2] == "*":
1513
+ ri.group = 0x80 // not contained in anything
1514
+ case strings.HasPrefix(d[2], "$!"):
1515
+ ri.group = 0x80
1516
+ d[2] = "$" + d[2][len("$!"):]
1517
+ fallthrough
1518
+ case strings.HasPrefix(d[2], "$"):
1519
+ ri.group |= idToIndex[d[2]]
1520
+ }
1521
+ matchRegion = append(matchRegion, ri)
1522
+ default:
1523
+ log.Fatalf("not supported: desired=%q; supported=%q", desired, supported)
1524
+ }
1525
+ }
1526
+ sort.SliceStable(matchLang, func(i, j int) bool {
1527
+ return matchLang[i].distance < matchLang[j].distance
1528
+ })
1529
+ b.writeSlice("matchLang", matchLang)
1530
+
1531
+ sort.SliceStable(matchScript, func(i, j int) bool {
1532
+ return matchScript[i].distance < matchScript[j].distance
1533
+ })
1534
+ b.writeSlice("matchScript", matchScript)
1535
+
1536
+ sort.SliceStable(matchRegion, func(i, j int) bool {
1537
+ return matchRegion[i].distance < matchRegion[j].distance
1538
+ })
1539
+ b.writeSlice("matchRegion", matchRegion)
1540
+ }
1541
+
1542
+ func (b *builder) writeRegionInclusionData() {
1543
+ var (
1544
+ // mm holds for each group the set of groups with a distance of 1.
1545
+ mm = make(map[int][]index)
1546
+
1547
+ // containment holds for each group the transitive closure of
1548
+ // containment of other groups.
1549
+ containment = make(map[index][]index)
1550
+ )
1551
+ for _, g := range b.supp.TerritoryContainment.Group {
1552
+ // Skip UN and EURO zone as they are flattening the containment
1553
+ // relationship.
1554
+ if g.Type == "EZ" || g.Type == "UN" {
1555
+ continue
1556
+ }
1557
+ group := b.region.index(g.Type)
1558
+ groupIdx := b.groups[group]
1559
+ for _, mem := range strings.Split(g.Contains, " ") {
1560
+ r := b.region.index(mem)
1561
+ mm[r] = append(mm[r], groupIdx)
1562
+ if g, ok := b.groups[r]; ok {
1563
+ mm[group] = append(mm[group], g)
1564
+ containment[groupIdx] = append(containment[groupIdx], g)
1565
+ }
1566
+ }
1567
+ }
1568
+
1569
+ regionContainment := make([]uint64, len(b.groups))
1570
+ for _, g := range b.groups {
1571
+ l := containment[g]
1572
+
1573
+ // Compute the transitive closure of containment.
1574
+ for i := 0; i < len(l); i++ {
1575
+ l = append(l, containment[l[i]]...)
1576
+ }
1577
+
1578
+ // Compute the bitmask.
1579
+ regionContainment[g] = 1 << g
1580
+ for _, v := range l {
1581
+ regionContainment[g] |= 1 << v
1582
+ }
1583
+ }
1584
+ b.writeSlice("regionContainment", regionContainment)
1585
+
1586
+ regionInclusion := make([]uint8, len(b.region.s))
1587
+ bvs := make(map[uint64]index)
1588
+ // Make the first bitvector positions correspond with the groups.
1589
+ for r, i := range b.groups {
1590
+ bv := uint64(1 << i)
1591
+ for _, g := range mm[r] {
1592
+ bv |= 1 << g
1593
+ }
1594
+ bvs[bv] = i
1595
+ regionInclusion[r] = uint8(bvs[bv])
1596
+ }
1597
+ for r := 1; r < len(b.region.s); r++ {
1598
+ if _, ok := b.groups[r]; !ok {
1599
+ bv := uint64(0)
1600
+ for _, g := range mm[r] {
1601
+ bv |= 1 << g
1602
+ }
1603
+ if bv == 0 {
1604
+ // Pick the world for unspecified regions.
1605
+ bv = 1 << b.groups[b.region.index("001")]
1606
+ }
1607
+ if _, ok := bvs[bv]; !ok {
1608
+ bvs[bv] = index(len(bvs))
1609
+ }
1610
+ regionInclusion[r] = uint8(bvs[bv])
1611
+ }
1612
+ }
1613
+ b.writeSlice("regionInclusion", regionInclusion)
1614
+ regionInclusionBits := make([]uint64, len(bvs))
1615
+ for k, v := range bvs {
1616
+ regionInclusionBits[v] = uint64(k)
1617
+ }
1618
+ // Add bit vectors for increasingly large distances until a fixed point is reached.
1619
+ regionInclusionNext := []uint8{}
1620
+ for i := 0; i < len(regionInclusionBits); i++ {
1621
+ bits := regionInclusionBits[i]
1622
+ next := bits
1623
+ for i := uint(0); i < uint(len(b.groups)); i++ {
1624
+ if bits&(1<<i) != 0 {
1625
+ next |= regionInclusionBits[i]
1626
+ }
1627
+ }
1628
+ if _, ok := bvs[next]; !ok {
1629
+ bvs[next] = index(len(bvs))
1630
+ regionInclusionBits = append(regionInclusionBits, next)
1631
+ }
1632
+ regionInclusionNext = append(regionInclusionNext, uint8(bvs[next]))
1633
+ }
1634
+ b.writeSlice("regionInclusionBits", regionInclusionBits)
1635
+ b.writeSlice("regionInclusionNext", regionInclusionNext)
1636
+ }
1637
+
1638
+ type parentRel struct {
1639
+ lang uint16
1640
+ script uint8
1641
+ maxScript uint8
1642
+ toRegion uint16
1643
+ fromRegion []uint16
1644
+ }
1645
+
1646
+ func (b *builder) writeParents() {
1647
+ b.writeType(parentRel{})
1648
+
1649
+ parents := []parentRel{}
1650
+
1651
+ // Construct parent overrides.
1652
+ n := 0
1653
+ for _, p := range b.data.Supplemental().ParentLocales.ParentLocale {
1654
+ // Skipping non-standard scripts to root is implemented using addTags.
1655
+ if p.Parent == "root" {
1656
+ continue
1657
+ }
1658
+
1659
+ sub := strings.Split(p.Parent, "_")
1660
+ parent := parentRel{lang: b.langIndex(sub[0])}
1661
+ if len(sub) == 2 {
1662
+ // TODO: check that all undefined scripts are indeed Latn in these
1663
+ // cases.
1664
+ parent.maxScript = uint8(b.script.index("Latn"))
1665
+ parent.toRegion = uint16(b.region.index(sub[1]))
1666
+ } else {
1667
+ parent.script = uint8(b.script.index(sub[1]))
1668
+ parent.maxScript = parent.script
1669
+ parent.toRegion = uint16(b.region.index(sub[2]))
1670
+ }
1671
+ for _, c := range strings.Split(p.Locales, " ") {
1672
+ region := b.region.index(c[strings.LastIndex(c, "_")+1:])
1673
+ parent.fromRegion = append(parent.fromRegion, uint16(region))
1674
+ }
1675
+ parents = append(parents, parent)
1676
+ n += len(parent.fromRegion)
1677
+ }
1678
+ b.writeSliceAddSize("parents", n*2, parents)
1679
+ }
1680
+
1681
+ func main() {
1682
+ gen.Init()
1683
+
1684
+ gen.Repackage("gen_common.go", "common.go", "language")
1685
+
1686
+ w := gen.NewCodeWriter()
1687
+ defer w.WriteGoFile("tables.go", "language")
1688
+
1689
+ fmt.Fprintln(w, `import "golang.org/x/text/internal/tag"`)
1690
+
1691
+ b := newBuilder(w)
1692
+ gen.WriteCLDRVersion(w)
1693
+
1694
+ b.parseIndices()
1695
+ b.writeType(fromTo{})
1696
+ b.writeLanguage()
1697
+ b.writeScript()
1698
+ b.writeRegion()
1699
+ b.writeVariant()
1700
+ // TODO: b.writeLocale()
1701
+ b.computeRegionGroups()
1702
+ b.writeLikelyData()
1703
+ b.writeMatchData()
1704
+ b.writeRegionInclusionData()
1705
+ b.writeParents()
1706
+ }