updated modules
This commit is contained in:
parent
abedcc98d8
commit
249a7ea8a9
712
vendor/golang.org/x/net/html/atom/gen.go
generated
vendored
712
vendor/golang.org/x/net/html/atom/gen.go
generated
vendored
@ -1,712 +0,0 @@
|
|||||||
// Copyright 2012 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
//go:generate go run gen.go
|
|
||||||
//go:generate go run gen.go -test
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"go/format"
|
|
||||||
"io/ioutil"
|
|
||||||
"math/rand"
|
|
||||||
"os"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
// identifier converts s to a Go exported identifier.
|
|
||||||
// It converts "div" to "Div" and "accept-charset" to "AcceptCharset".
|
|
||||||
func identifier(s string) string {
|
|
||||||
b := make([]byte, 0, len(s))
|
|
||||||
cap := true
|
|
||||||
for _, c := range s {
|
|
||||||
if c == '-' {
|
|
||||||
cap = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if cap && 'a' <= c && c <= 'z' {
|
|
||||||
c -= 'a' - 'A'
|
|
||||||
}
|
|
||||||
cap = false
|
|
||||||
b = append(b, byte(c))
|
|
||||||
}
|
|
||||||
return string(b)
|
|
||||||
}
|
|
||||||
|
|
||||||
var test = flag.Bool("test", false, "generate table_test.go")
|
|
||||||
|
|
||||||
func genFile(name string, buf *bytes.Buffer) {
|
|
||||||
b, err := format.Source(buf.Bytes())
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
if err := ioutil.WriteFile(name, b, 0644); err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
flag.Parse()
|
|
||||||
|
|
||||||
var all []string
|
|
||||||
all = append(all, elements...)
|
|
||||||
all = append(all, attributes...)
|
|
||||||
all = append(all, eventHandlers...)
|
|
||||||
all = append(all, extra...)
|
|
||||||
sort.Strings(all)
|
|
||||||
|
|
||||||
// uniq - lists have dups
|
|
||||||
w := 0
|
|
||||||
for _, s := range all {
|
|
||||||
if w == 0 || all[w-1] != s {
|
|
||||||
all[w] = s
|
|
||||||
w++
|
|
||||||
}
|
|
||||||
}
|
|
||||||
all = all[:w]
|
|
||||||
|
|
||||||
if *test {
|
|
||||||
var buf bytes.Buffer
|
|
||||||
fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
|
|
||||||
fmt.Fprintln(&buf, "//go:generate go run gen.go -test\n")
|
|
||||||
fmt.Fprintln(&buf, "package atom\n")
|
|
||||||
fmt.Fprintln(&buf, "var testAtomList = []string{")
|
|
||||||
for _, s := range all {
|
|
||||||
fmt.Fprintf(&buf, "\t%q,\n", s)
|
|
||||||
}
|
|
||||||
fmt.Fprintln(&buf, "}")
|
|
||||||
|
|
||||||
genFile("table_test.go", &buf)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// Find hash that minimizes table size.
|
|
||||||
var best *table
|
|
||||||
for i := 0; i < 1000000; i++ {
|
|
||||||
if best != nil && 1<<(best.k-1) < len(all) {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
h := rand.Uint32()
|
|
||||||
for k := uint(0); k <= 16; k++ {
|
|
||||||
if best != nil && k >= best.k {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
var t table
|
|
||||||
if t.init(h, k, all) {
|
|
||||||
best = &t
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if best == nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "failed to construct string table\n")
|
|
||||||
os.Exit(1)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Lay out strings, using overlaps when possible.
|
|
||||||
layout := append([]string{}, all...)
|
|
||||||
|
|
||||||
// Remove strings that are substrings of other strings
|
|
||||||
for changed := true; changed; {
|
|
||||||
changed = false
|
|
||||||
for i, s := range layout {
|
|
||||||
if s == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for j, t := range layout {
|
|
||||||
if i != j && t != "" && strings.Contains(s, t) {
|
|
||||||
changed = true
|
|
||||||
layout[j] = ""
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Join strings where one suffix matches another prefix.
|
|
||||||
for {
|
|
||||||
// Find best i, j, k such that layout[i][len-k:] == layout[j][:k],
|
|
||||||
// maximizing overlap length k.
|
|
||||||
besti := -1
|
|
||||||
bestj := -1
|
|
||||||
bestk := 0
|
|
||||||
for i, s := range layout {
|
|
||||||
if s == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for j, t := range layout {
|
|
||||||
if i == j {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
for k := bestk + 1; k <= len(s) && k <= len(t); k++ {
|
|
||||||
if s[len(s)-k:] == t[:k] {
|
|
||||||
besti = i
|
|
||||||
bestj = j
|
|
||||||
bestk = k
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if bestk > 0 {
|
|
||||||
layout[besti] += layout[bestj][bestk:]
|
|
||||||
layout[bestj] = ""
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
text := strings.Join(layout, "")
|
|
||||||
|
|
||||||
atom := map[string]uint32{}
|
|
||||||
for _, s := range all {
|
|
||||||
off := strings.Index(text, s)
|
|
||||||
if off < 0 {
|
|
||||||
panic("lost string " + s)
|
|
||||||
}
|
|
||||||
atom[s] = uint32(off<<8 | len(s))
|
|
||||||
}
|
|
||||||
|
|
||||||
var buf bytes.Buffer
|
|
||||||
// Generate the Go code.
|
|
||||||
fmt.Fprintln(&buf, "// Code generated by go generate gen.go; DO NOT EDIT.\n")
|
|
||||||
fmt.Fprintln(&buf, "//go:generate go run gen.go\n")
|
|
||||||
fmt.Fprintln(&buf, "package atom\n\nconst (")
|
|
||||||
|
|
||||||
// compute max len
|
|
||||||
maxLen := 0
|
|
||||||
for _, s := range all {
|
|
||||||
if maxLen < len(s) {
|
|
||||||
maxLen = len(s)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&buf, "\t%s Atom = %#x\n", identifier(s), atom[s])
|
|
||||||
}
|
|
||||||
fmt.Fprintln(&buf, ")\n")
|
|
||||||
|
|
||||||
fmt.Fprintf(&buf, "const hash0 = %#x\n\n", best.h0)
|
|
||||||
fmt.Fprintf(&buf, "const maxAtomLen = %d\n\n", maxLen)
|
|
||||||
|
|
||||||
fmt.Fprintf(&buf, "var table = [1<<%d]Atom{\n", best.k)
|
|
||||||
for i, s := range best.tab {
|
|
||||||
if s == "" {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&buf, "\t%#x: %#x, // %s\n", i, atom[s], s)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&buf, "}\n")
|
|
||||||
datasize := (1 << best.k) * 4
|
|
||||||
|
|
||||||
fmt.Fprintln(&buf, "const atomText =")
|
|
||||||
textsize := len(text)
|
|
||||||
for len(text) > 60 {
|
|
||||||
fmt.Fprintf(&buf, "\t%q +\n", text[:60])
|
|
||||||
text = text[60:]
|
|
||||||
}
|
|
||||||
fmt.Fprintf(&buf, "\t%q\n\n", text)
|
|
||||||
|
|
||||||
genFile("table.go", &buf)
|
|
||||||
|
|
||||||
fmt.Fprintf(os.Stdout, "%d atoms; %d string bytes + %d tables = %d total data\n", len(all), textsize, datasize, textsize+datasize)
|
|
||||||
}
|
|
||||||
|
|
||||||
type byLen []string
|
|
||||||
|
|
||||||
func (x byLen) Less(i, j int) bool { return len(x[i]) > len(x[j]) }
|
|
||||||
func (x byLen) Swap(i, j int) { x[i], x[j] = x[j], x[i] }
|
|
||||||
func (x byLen) Len() int { return len(x) }
|
|
||||||
|
|
||||||
// fnv computes the FNV hash with an arbitrary starting value h.
|
|
||||||
func fnv(h uint32, s string) uint32 {
|
|
||||||
for i := 0; i < len(s); i++ {
|
|
||||||
h ^= uint32(s[i])
|
|
||||||
h *= 16777619
|
|
||||||
}
|
|
||||||
return h
|
|
||||||
}
|
|
||||||
|
|
||||||
// A table represents an attempt at constructing the lookup table.
|
|
||||||
// The lookup table uses cuckoo hashing, meaning that each string
|
|
||||||
// can be found in one of two positions.
|
|
||||||
type table struct {
|
|
||||||
h0 uint32
|
|
||||||
k uint
|
|
||||||
mask uint32
|
|
||||||
tab []string
|
|
||||||
}
|
|
||||||
|
|
||||||
// hash returns the two hashes for s.
|
|
||||||
func (t *table) hash(s string) (h1, h2 uint32) {
|
|
||||||
h := fnv(t.h0, s)
|
|
||||||
h1 = h & t.mask
|
|
||||||
h2 = (h >> 16) & t.mask
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// init initializes the table with the given parameters.
|
|
||||||
// h0 is the initial hash value,
|
|
||||||
// k is the number of bits of hash value to use, and
|
|
||||||
// x is the list of strings to store in the table.
|
|
||||||
// init returns false if the table cannot be constructed.
|
|
||||||
func (t *table) init(h0 uint32, k uint, x []string) bool {
|
|
||||||
t.h0 = h0
|
|
||||||
t.k = k
|
|
||||||
t.tab = make([]string, 1<<k)
|
|
||||||
t.mask = 1<<k - 1
|
|
||||||
for _, s := range x {
|
|
||||||
if !t.insert(s) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// insert inserts s in the table.
|
|
||||||
func (t *table) insert(s string) bool {
|
|
||||||
h1, h2 := t.hash(s)
|
|
||||||
if t.tab[h1] == "" {
|
|
||||||
t.tab[h1] = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if t.tab[h2] == "" {
|
|
||||||
t.tab[h2] = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if t.push(h1, 0) {
|
|
||||||
t.tab[h1] = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
if t.push(h2, 0) {
|
|
||||||
t.tab[h2] = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// push attempts to push aside the entry in slot i.
|
|
||||||
func (t *table) push(i uint32, depth int) bool {
|
|
||||||
if depth > len(t.tab) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
s := t.tab[i]
|
|
||||||
h1, h2 := t.hash(s)
|
|
||||||
j := h1 + h2 - i
|
|
||||||
if t.tab[j] != "" && !t.push(j, depth+1) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
t.tab[j] = s
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
|
|
||||||
// The lists of element names and attribute keys were taken from
|
|
||||||
// https://html.spec.whatwg.org/multipage/indices.html#index
|
|
||||||
// as of the "HTML Living Standard - Last Updated 16 April 2018" version.
|
|
||||||
|
|
||||||
// "command", "keygen" and "menuitem" have been removed from the spec,
|
|
||||||
// but are kept here for backwards compatibility.
|
|
||||||
var elements = []string{
|
|
||||||
"a",
|
|
||||||
"abbr",
|
|
||||||
"address",
|
|
||||||
"area",
|
|
||||||
"article",
|
|
||||||
"aside",
|
|
||||||
"audio",
|
|
||||||
"b",
|
|
||||||
"base",
|
|
||||||
"bdi",
|
|
||||||
"bdo",
|
|
||||||
"blockquote",
|
|
||||||
"body",
|
|
||||||
"br",
|
|
||||||
"button",
|
|
||||||
"canvas",
|
|
||||||
"caption",
|
|
||||||
"cite",
|
|
||||||
"code",
|
|
||||||
"col",
|
|
||||||
"colgroup",
|
|
||||||
"command",
|
|
||||||
"data",
|
|
||||||
"datalist",
|
|
||||||
"dd",
|
|
||||||
"del",
|
|
||||||
"details",
|
|
||||||
"dfn",
|
|
||||||
"dialog",
|
|
||||||
"div",
|
|
||||||
"dl",
|
|
||||||
"dt",
|
|
||||||
"em",
|
|
||||||
"embed",
|
|
||||||
"fieldset",
|
|
||||||
"figcaption",
|
|
||||||
"figure",
|
|
||||||
"footer",
|
|
||||||
"form",
|
|
||||||
"h1",
|
|
||||||
"h2",
|
|
||||||
"h3",
|
|
||||||
"h4",
|
|
||||||
"h5",
|
|
||||||
"h6",
|
|
||||||
"head",
|
|
||||||
"header",
|
|
||||||
"hgroup",
|
|
||||||
"hr",
|
|
||||||
"html",
|
|
||||||
"i",
|
|
||||||
"iframe",
|
|
||||||
"img",
|
|
||||||
"input",
|
|
||||||
"ins",
|
|
||||||
"kbd",
|
|
||||||
"keygen",
|
|
||||||
"label",
|
|
||||||
"legend",
|
|
||||||
"li",
|
|
||||||
"link",
|
|
||||||
"main",
|
|
||||||
"map",
|
|
||||||
"mark",
|
|
||||||
"menu",
|
|
||||||
"menuitem",
|
|
||||||
"meta",
|
|
||||||
"meter",
|
|
||||||
"nav",
|
|
||||||
"noscript",
|
|
||||||
"object",
|
|
||||||
"ol",
|
|
||||||
"optgroup",
|
|
||||||
"option",
|
|
||||||
"output",
|
|
||||||
"p",
|
|
||||||
"param",
|
|
||||||
"picture",
|
|
||||||
"pre",
|
|
||||||
"progress",
|
|
||||||
"q",
|
|
||||||
"rp",
|
|
||||||
"rt",
|
|
||||||
"ruby",
|
|
||||||
"s",
|
|
||||||
"samp",
|
|
||||||
"script",
|
|
||||||
"section",
|
|
||||||
"select",
|
|
||||||
"slot",
|
|
||||||
"small",
|
|
||||||
"source",
|
|
||||||
"span",
|
|
||||||
"strong",
|
|
||||||
"style",
|
|
||||||
"sub",
|
|
||||||
"summary",
|
|
||||||
"sup",
|
|
||||||
"table",
|
|
||||||
"tbody",
|
|
||||||
"td",
|
|
||||||
"template",
|
|
||||||
"textarea",
|
|
||||||
"tfoot",
|
|
||||||
"th",
|
|
||||||
"thead",
|
|
||||||
"time",
|
|
||||||
"title",
|
|
||||||
"tr",
|
|
||||||
"track",
|
|
||||||
"u",
|
|
||||||
"ul",
|
|
||||||
"var",
|
|
||||||
"video",
|
|
||||||
"wbr",
|
|
||||||
}
|
|
||||||
|
|
||||||
// https://html.spec.whatwg.org/multipage/indices.html#attributes-3
|
|
||||||
//
|
|
||||||
// "challenge", "command", "contextmenu", "dropzone", "icon", "keytype", "mediagroup",
|
|
||||||
// "radiogroup", "spellcheck", "scoped", "seamless", "sortable" and "sorted" have been removed from the spec,
|
|
||||||
// but are kept here for backwards compatibility.
|
|
||||||
var attributes = []string{
|
|
||||||
"abbr",
|
|
||||||
"accept",
|
|
||||||
"accept-charset",
|
|
||||||
"accesskey",
|
|
||||||
"action",
|
|
||||||
"allowfullscreen",
|
|
||||||
"allowpaymentrequest",
|
|
||||||
"allowusermedia",
|
|
||||||
"alt",
|
|
||||||
"as",
|
|
||||||
"async",
|
|
||||||
"autocomplete",
|
|
||||||
"autofocus",
|
|
||||||
"autoplay",
|
|
||||||
"challenge",
|
|
||||||
"charset",
|
|
||||||
"checked",
|
|
||||||
"cite",
|
|
||||||
"class",
|
|
||||||
"color",
|
|
||||||
"cols",
|
|
||||||
"colspan",
|
|
||||||
"command",
|
|
||||||
"content",
|
|
||||||
"contenteditable",
|
|
||||||
"contextmenu",
|
|
||||||
"controls",
|
|
||||||
"coords",
|
|
||||||
"crossorigin",
|
|
||||||
"data",
|
|
||||||
"datetime",
|
|
||||||
"default",
|
|
||||||
"defer",
|
|
||||||
"dir",
|
|
||||||
"dirname",
|
|
||||||
"disabled",
|
|
||||||
"download",
|
|
||||||
"draggable",
|
|
||||||
"dropzone",
|
|
||||||
"enctype",
|
|
||||||
"for",
|
|
||||||
"form",
|
|
||||||
"formaction",
|
|
||||||
"formenctype",
|
|
||||||
"formmethod",
|
|
||||||
"formnovalidate",
|
|
||||||
"formtarget",
|
|
||||||
"headers",
|
|
||||||
"height",
|
|
||||||
"hidden",
|
|
||||||
"high",
|
|
||||||
"href",
|
|
||||||
"hreflang",
|
|
||||||
"http-equiv",
|
|
||||||
"icon",
|
|
||||||
"id",
|
|
||||||
"inputmode",
|
|
||||||
"integrity",
|
|
||||||
"is",
|
|
||||||
"ismap",
|
|
||||||
"itemid",
|
|
||||||
"itemprop",
|
|
||||||
"itemref",
|
|
||||||
"itemscope",
|
|
||||||
"itemtype",
|
|
||||||
"keytype",
|
|
||||||
"kind",
|
|
||||||
"label",
|
|
||||||
"lang",
|
|
||||||
"list",
|
|
||||||
"loop",
|
|
||||||
"low",
|
|
||||||
"manifest",
|
|
||||||
"max",
|
|
||||||
"maxlength",
|
|
||||||
"media",
|
|
||||||
"mediagroup",
|
|
||||||
"method",
|
|
||||||
"min",
|
|
||||||
"minlength",
|
|
||||||
"multiple",
|
|
||||||
"muted",
|
|
||||||
"name",
|
|
||||||
"nomodule",
|
|
||||||
"nonce",
|
|
||||||
"novalidate",
|
|
||||||
"open",
|
|
||||||
"optimum",
|
|
||||||
"pattern",
|
|
||||||
"ping",
|
|
||||||
"placeholder",
|
|
||||||
"playsinline",
|
|
||||||
"poster",
|
|
||||||
"preload",
|
|
||||||
"radiogroup",
|
|
||||||
"readonly",
|
|
||||||
"referrerpolicy",
|
|
||||||
"rel",
|
|
||||||
"required",
|
|
||||||
"reversed",
|
|
||||||
"rows",
|
|
||||||
"rowspan",
|
|
||||||
"sandbox",
|
|
||||||
"spellcheck",
|
|
||||||
"scope",
|
|
||||||
"scoped",
|
|
||||||
"seamless",
|
|
||||||
"selected",
|
|
||||||
"shape",
|
|
||||||
"size",
|
|
||||||
"sizes",
|
|
||||||
"sortable",
|
|
||||||
"sorted",
|
|
||||||
"slot",
|
|
||||||
"span",
|
|
||||||
"spellcheck",
|
|
||||||
"src",
|
|
||||||
"srcdoc",
|
|
||||||
"srclang",
|
|
||||||
"srcset",
|
|
||||||
"start",
|
|
||||||
"step",
|
|
||||||
"style",
|
|
||||||
"tabindex",
|
|
||||||
"target",
|
|
||||||
"title",
|
|
||||||
"translate",
|
|
||||||
"type",
|
|
||||||
"typemustmatch",
|
|
||||||
"updateviacache",
|
|
||||||
"usemap",
|
|
||||||
"value",
|
|
||||||
"width",
|
|
||||||
"workertype",
|
|
||||||
"wrap",
|
|
||||||
}
|
|
||||||
|
|
||||||
// "onautocomplete", "onautocompleteerror", "onmousewheel",
|
|
||||||
// "onshow" and "onsort" have been removed from the spec,
|
|
||||||
// but are kept here for backwards compatibility.
|
|
||||||
var eventHandlers = []string{
|
|
||||||
"onabort",
|
|
||||||
"onautocomplete",
|
|
||||||
"onautocompleteerror",
|
|
||||||
"onauxclick",
|
|
||||||
"onafterprint",
|
|
||||||
"onbeforeprint",
|
|
||||||
"onbeforeunload",
|
|
||||||
"onblur",
|
|
||||||
"oncancel",
|
|
||||||
"oncanplay",
|
|
||||||
"oncanplaythrough",
|
|
||||||
"onchange",
|
|
||||||
"onclick",
|
|
||||||
"onclose",
|
|
||||||
"oncontextmenu",
|
|
||||||
"oncopy",
|
|
||||||
"oncuechange",
|
|
||||||
"oncut",
|
|
||||||
"ondblclick",
|
|
||||||
"ondrag",
|
|
||||||
"ondragend",
|
|
||||||
"ondragenter",
|
|
||||||
"ondragexit",
|
|
||||||
"ondragleave",
|
|
||||||
"ondragover",
|
|
||||||
"ondragstart",
|
|
||||||
"ondrop",
|
|
||||||
"ondurationchange",
|
|
||||||
"onemptied",
|
|
||||||
"onended",
|
|
||||||
"onerror",
|
|
||||||
"onfocus",
|
|
||||||
"onhashchange",
|
|
||||||
"oninput",
|
|
||||||
"oninvalid",
|
|
||||||
"onkeydown",
|
|
||||||
"onkeypress",
|
|
||||||
"onkeyup",
|
|
||||||
"onlanguagechange",
|
|
||||||
"onload",
|
|
||||||
"onloadeddata",
|
|
||||||
"onloadedmetadata",
|
|
||||||
"onloadend",
|
|
||||||
"onloadstart",
|
|
||||||
"onmessage",
|
|
||||||
"onmessageerror",
|
|
||||||
"onmousedown",
|
|
||||||
"onmouseenter",
|
|
||||||
"onmouseleave",
|
|
||||||
"onmousemove",
|
|
||||||
"onmouseout",
|
|
||||||
"onmouseover",
|
|
||||||
"onmouseup",
|
|
||||||
"onmousewheel",
|
|
||||||
"onwheel",
|
|
||||||
"onoffline",
|
|
||||||
"ononline",
|
|
||||||
"onpagehide",
|
|
||||||
"onpageshow",
|
|
||||||
"onpaste",
|
|
||||||
"onpause",
|
|
||||||
"onplay",
|
|
||||||
"onplaying",
|
|
||||||
"onpopstate",
|
|
||||||
"onprogress",
|
|
||||||
"onratechange",
|
|
||||||
"onreset",
|
|
||||||
"onresize",
|
|
||||||
"onrejectionhandled",
|
|
||||||
"onscroll",
|
|
||||||
"onsecuritypolicyviolation",
|
|
||||||
"onseeked",
|
|
||||||
"onseeking",
|
|
||||||
"onselect",
|
|
||||||
"onshow",
|
|
||||||
"onsort",
|
|
||||||
"onstalled",
|
|
||||||
"onstorage",
|
|
||||||
"onsubmit",
|
|
||||||
"onsuspend",
|
|
||||||
"ontimeupdate",
|
|
||||||
"ontoggle",
|
|
||||||
"onunhandledrejection",
|
|
||||||
"onunload",
|
|
||||||
"onvolumechange",
|
|
||||||
"onwaiting",
|
|
||||||
}
|
|
||||||
|
|
||||||
// extra are ad-hoc values not covered by any of the lists above.
|
|
||||||
var extra = []string{
|
|
||||||
"acronym",
|
|
||||||
"align",
|
|
||||||
"annotation",
|
|
||||||
"annotation-xml",
|
|
||||||
"applet",
|
|
||||||
"basefont",
|
|
||||||
"bgsound",
|
|
||||||
"big",
|
|
||||||
"blink",
|
|
||||||
"center",
|
|
||||||
"color",
|
|
||||||
"desc",
|
|
||||||
"face",
|
|
||||||
"font",
|
|
||||||
"foreignObject", // HTML is case-insensitive, but SVG-embedded-in-HTML is case-sensitive.
|
|
||||||
"foreignobject",
|
|
||||||
"frame",
|
|
||||||
"frameset",
|
|
||||||
"image",
|
|
||||||
"isindex",
|
|
||||||
"listing",
|
|
||||||
"malignmark",
|
|
||||||
"marquee",
|
|
||||||
"math",
|
|
||||||
"mglyph",
|
|
||||||
"mi",
|
|
||||||
"mn",
|
|
||||||
"mo",
|
|
||||||
"ms",
|
|
||||||
"mtext",
|
|
||||||
"nobr",
|
|
||||||
"noembed",
|
|
||||||
"noframes",
|
|
||||||
"plaintext",
|
|
||||||
"prompt",
|
|
||||||
"public",
|
|
||||||
"rb",
|
|
||||||
"rtc",
|
|
||||||
"spacer",
|
|
||||||
"strike",
|
|
||||||
"svg",
|
|
||||||
"system",
|
|
||||||
"tt",
|
|
||||||
"xmp",
|
|
||||||
}
|
|
556
vendor/golang.org/x/text/encoding/charmap/maketables.go
generated
vendored
556
vendor/golang.org/x/text/encoding/charmap/maketables.go
generated
vendored
@ -1,556 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
"unicode/utf8"
|
|
||||||
|
|
||||||
"golang.org/x/text/encoding"
|
|
||||||
"golang.org/x/text/internal/gen"
|
|
||||||
)
|
|
||||||
|
|
||||||
const ascii = "\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f" +
|
|
||||||
"\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e\x1f" +
|
|
||||||
` !"#$%&'()*+,-./0123456789:;<=>?` +
|
|
||||||
`@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_` +
|
|
||||||
"`abcdefghijklmnopqrstuvwxyz{|}~\u007f"
|
|
||||||
|
|
||||||
var encodings = []struct {
|
|
||||||
name string
|
|
||||||
mib string
|
|
||||||
comment string
|
|
||||||
varName string
|
|
||||||
replacement byte
|
|
||||||
mapping string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
"IBM Code Page 037",
|
|
||||||
"IBM037",
|
|
||||||
"",
|
|
||||||
"CodePage037",
|
|
||||||
0x3f,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM037-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 437",
|
|
||||||
"PC8CodePage437",
|
|
||||||
"",
|
|
||||||
"CodePage437",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM437-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 850",
|
|
||||||
"PC850Multilingual",
|
|
||||||
"",
|
|
||||||
"CodePage850",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM850-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 852",
|
|
||||||
"PCp852",
|
|
||||||
"",
|
|
||||||
"CodePage852",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM852-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 855",
|
|
||||||
"IBM855",
|
|
||||||
"",
|
|
||||||
"CodePage855",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM855-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows Code Page 858", // PC latin1 with Euro
|
|
||||||
"IBM00858",
|
|
||||||
"",
|
|
||||||
"CodePage858",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/windows-858-2000.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 860",
|
|
||||||
"IBM860",
|
|
||||||
"",
|
|
||||||
"CodePage860",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM860-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 862",
|
|
||||||
"PC862LatinHebrew",
|
|
||||||
"",
|
|
||||||
"CodePage862",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM862-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 863",
|
|
||||||
"IBM863",
|
|
||||||
"",
|
|
||||||
"CodePage863",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM863-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 865",
|
|
||||||
"IBM865",
|
|
||||||
"",
|
|
||||||
"CodePage865",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM865-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 866",
|
|
||||||
"IBM866",
|
|
||||||
"",
|
|
||||||
"CodePage866",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-ibm866.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 1047",
|
|
||||||
"IBM1047",
|
|
||||||
"",
|
|
||||||
"CodePage1047",
|
|
||||||
0x3f,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/glibc-IBM1047-2.1.2.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"IBM Code Page 1140",
|
|
||||||
"IBM01140",
|
|
||||||
"",
|
|
||||||
"CodePage1140",
|
|
||||||
0x3f,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/ibm-1140_P100-1997.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-1",
|
|
||||||
"ISOLatin1",
|
|
||||||
"",
|
|
||||||
"ISO8859_1",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/iso-8859_1-1998.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-2",
|
|
||||||
"ISOLatin2",
|
|
||||||
"",
|
|
||||||
"ISO8859_2",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-2.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-3",
|
|
||||||
"ISOLatin3",
|
|
||||||
"",
|
|
||||||
"ISO8859_3",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-3.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-4",
|
|
||||||
"ISOLatin4",
|
|
||||||
"",
|
|
||||||
"ISO8859_4",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-4.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-5",
|
|
||||||
"ISOLatinCyrillic",
|
|
||||||
"",
|
|
||||||
"ISO8859_5",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-5.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-6",
|
|
||||||
"ISOLatinArabic",
|
|
||||||
"",
|
|
||||||
"ISO8859_6,ISO8859_6E,ISO8859_6I",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-6.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-7",
|
|
||||||
"ISOLatinGreek",
|
|
||||||
"",
|
|
||||||
"ISO8859_7",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-7.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-8",
|
|
||||||
"ISOLatinHebrew",
|
|
||||||
"",
|
|
||||||
"ISO8859_8,ISO8859_8E,ISO8859_8I",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-8.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-9",
|
|
||||||
"ISOLatin5",
|
|
||||||
"",
|
|
||||||
"ISO8859_9",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/iso-8859_9-1999.ucm",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-10",
|
|
||||||
"ISOLatin6",
|
|
||||||
"",
|
|
||||||
"ISO8859_10",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-10.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-13",
|
|
||||||
"ISO885913",
|
|
||||||
"",
|
|
||||||
"ISO8859_13",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-13.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-14",
|
|
||||||
"ISO885914",
|
|
||||||
"",
|
|
||||||
"ISO8859_14",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-14.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-15",
|
|
||||||
"ISO885915",
|
|
||||||
"",
|
|
||||||
"ISO8859_15",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-15.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"ISO 8859-16",
|
|
||||||
"ISO885916",
|
|
||||||
"",
|
|
||||||
"ISO8859_16",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-iso-8859-16.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"KOI8-R",
|
|
||||||
"KOI8R",
|
|
||||||
"",
|
|
||||||
"KOI8R",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-koi8-r.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"KOI8-U",
|
|
||||||
"KOI8U",
|
|
||||||
"",
|
|
||||||
"KOI8U",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-koi8-u.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Macintosh",
|
|
||||||
"Macintosh",
|
|
||||||
"",
|
|
||||||
"Macintosh",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-macintosh.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Macintosh Cyrillic",
|
|
||||||
"MacintoshCyrillic",
|
|
||||||
"",
|
|
||||||
"MacintoshCyrillic",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-x-mac-cyrillic.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 874",
|
|
||||||
"Windows874",
|
|
||||||
"",
|
|
||||||
"Windows874",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-874.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1250",
|
|
||||||
"Windows1250",
|
|
||||||
"",
|
|
||||||
"Windows1250",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1250.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1251",
|
|
||||||
"Windows1251",
|
|
||||||
"",
|
|
||||||
"Windows1251",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1251.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1252",
|
|
||||||
"Windows1252",
|
|
||||||
"",
|
|
||||||
"Windows1252",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1252.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1253",
|
|
||||||
"Windows1253",
|
|
||||||
"",
|
|
||||||
"Windows1253",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1253.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1254",
|
|
||||||
"Windows1254",
|
|
||||||
"",
|
|
||||||
"Windows1254",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1254.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1255",
|
|
||||||
"Windows1255",
|
|
||||||
"",
|
|
||||||
"Windows1255",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1255.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1256",
|
|
||||||
"Windows1256",
|
|
||||||
"",
|
|
||||||
"Windows1256",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1256.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1257",
|
|
||||||
"Windows1257",
|
|
||||||
"",
|
|
||||||
"Windows1257",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1257.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"Windows 1258",
|
|
||||||
"Windows1258",
|
|
||||||
"",
|
|
||||||
"Windows1258",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
"http://encoding.spec.whatwg.org/index-windows-1258.txt",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"X-User-Defined",
|
|
||||||
"XUserDefined",
|
|
||||||
"It is defined at http://encoding.spec.whatwg.org/#x-user-defined",
|
|
||||||
"XUserDefined",
|
|
||||||
encoding.ASCIISub,
|
|
||||||
ascii +
|
|
||||||
"\uf780\uf781\uf782\uf783\uf784\uf785\uf786\uf787" +
|
|
||||||
"\uf788\uf789\uf78a\uf78b\uf78c\uf78d\uf78e\uf78f" +
|
|
||||||
"\uf790\uf791\uf792\uf793\uf794\uf795\uf796\uf797" +
|
|
||||||
"\uf798\uf799\uf79a\uf79b\uf79c\uf79d\uf79e\uf79f" +
|
|
||||||
"\uf7a0\uf7a1\uf7a2\uf7a3\uf7a4\uf7a5\uf7a6\uf7a7" +
|
|
||||||
"\uf7a8\uf7a9\uf7aa\uf7ab\uf7ac\uf7ad\uf7ae\uf7af" +
|
|
||||||
"\uf7b0\uf7b1\uf7b2\uf7b3\uf7b4\uf7b5\uf7b6\uf7b7" +
|
|
||||||
"\uf7b8\uf7b9\uf7ba\uf7bb\uf7bc\uf7bd\uf7be\uf7bf" +
|
|
||||||
"\uf7c0\uf7c1\uf7c2\uf7c3\uf7c4\uf7c5\uf7c6\uf7c7" +
|
|
||||||
"\uf7c8\uf7c9\uf7ca\uf7cb\uf7cc\uf7cd\uf7ce\uf7cf" +
|
|
||||||
"\uf7d0\uf7d1\uf7d2\uf7d3\uf7d4\uf7d5\uf7d6\uf7d7" +
|
|
||||||
"\uf7d8\uf7d9\uf7da\uf7db\uf7dc\uf7dd\uf7de\uf7df" +
|
|
||||||
"\uf7e0\uf7e1\uf7e2\uf7e3\uf7e4\uf7e5\uf7e6\uf7e7" +
|
|
||||||
"\uf7e8\uf7e9\uf7ea\uf7eb\uf7ec\uf7ed\uf7ee\uf7ef" +
|
|
||||||
"\uf7f0\uf7f1\uf7f2\uf7f3\uf7f4\uf7f5\uf7f6\uf7f7" +
|
|
||||||
"\uf7f8\uf7f9\uf7fa\uf7fb\uf7fc\uf7fd\uf7fe\uf7ff",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
func getWHATWG(url string) string {
|
|
||||||
res, err := http.Get(url)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("%q: Get: %v", url, err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := make([]rune, 128)
|
|
||||||
for i := range mapping {
|
|
||||||
mapping[i] = '\ufffd'
|
|
||||||
}
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := 0, 0
|
|
||||||
if _, err := fmt.Sscanf(s, "%d\t0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("could not parse %q", s)
|
|
||||||
}
|
|
||||||
if x < 0 || 128 <= x {
|
|
||||||
log.Fatalf("code %d is out of range", x)
|
|
||||||
}
|
|
||||||
if 0x80 <= y && y < 0xa0 {
|
|
||||||
// We diverge from the WHATWG spec by mapping control characters
|
|
||||||
// in the range [0x80, 0xa0) to U+FFFD.
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
mapping[x] = rune(y)
|
|
||||||
}
|
|
||||||
return ascii + string(mapping)
|
|
||||||
}
|
|
||||||
|
|
||||||
func getUCM(url string) string {
|
|
||||||
res, err := http.Get(url)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("%q: Get: %v", url, err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := make([]rune, 256)
|
|
||||||
for i := range mapping {
|
|
||||||
mapping[i] = '\ufffd'
|
|
||||||
}
|
|
||||||
|
|
||||||
charsFound := 0
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
var c byte
|
|
||||||
var r rune
|
|
||||||
if _, err := fmt.Sscanf(s, `<U%x> \x%x |0`, &r, &c); err != nil {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
mapping[c] = r
|
|
||||||
charsFound++
|
|
||||||
}
|
|
||||||
|
|
||||||
if charsFound < 200 {
|
|
||||||
log.Fatalf("%q: only %d characters found (wrong page format?)", url, charsFound)
|
|
||||||
}
|
|
||||||
|
|
||||||
return string(mapping)
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
mibs := map[string]bool{}
|
|
||||||
all := []string{}
|
|
||||||
|
|
||||||
w := gen.NewCodeWriter()
|
|
||||||
defer w.WriteGoFile("tables.go", "charmap")
|
|
||||||
|
|
||||||
printf := func(s string, a ...interface{}) { fmt.Fprintf(w, s, a...) }
|
|
||||||
|
|
||||||
printf("import (\n")
|
|
||||||
printf("\t\"golang.org/x/text/encoding\"\n")
|
|
||||||
printf("\t\"golang.org/x/text/encoding/internal/identifier\"\n")
|
|
||||||
printf(")\n\n")
|
|
||||||
for _, e := range encodings {
|
|
||||||
varNames := strings.Split(e.varName, ",")
|
|
||||||
all = append(all, varNames...)
|
|
||||||
varName := varNames[0]
|
|
||||||
switch {
|
|
||||||
case strings.HasPrefix(e.mapping, "http://encoding.spec.whatwg.org/"):
|
|
||||||
e.mapping = getWHATWG(e.mapping)
|
|
||||||
case strings.HasPrefix(e.mapping, "http://source.icu-project.org/repos/icu/data/trunk/charset/data/ucm/"):
|
|
||||||
e.mapping = getUCM(e.mapping)
|
|
||||||
}
|
|
||||||
|
|
||||||
asciiSuperset, low := strings.HasPrefix(e.mapping, ascii), 0x00
|
|
||||||
if asciiSuperset {
|
|
||||||
low = 0x80
|
|
||||||
}
|
|
||||||
lvn := 1
|
|
||||||
if strings.HasPrefix(varName, "ISO") || strings.HasPrefix(varName, "KOI") {
|
|
||||||
lvn = 3
|
|
||||||
}
|
|
||||||
lowerVarName := strings.ToLower(varName[:lvn]) + varName[lvn:]
|
|
||||||
printf("// %s is the %s encoding.\n", varName, e.name)
|
|
||||||
if e.comment != "" {
|
|
||||||
printf("//\n// %s\n", e.comment)
|
|
||||||
}
|
|
||||||
printf("var %s *Charmap = &%s\n\nvar %s = Charmap{\nname: %q,\n",
|
|
||||||
varName, lowerVarName, lowerVarName, e.name)
|
|
||||||
if mibs[e.mib] {
|
|
||||||
log.Fatalf("MIB type %q declared multiple times.", e.mib)
|
|
||||||
}
|
|
||||||
printf("mib: identifier.%s,\n", e.mib)
|
|
||||||
printf("asciiSuperset: %t,\n", asciiSuperset)
|
|
||||||
printf("low: 0x%02x,\n", low)
|
|
||||||
printf("replacement: 0x%02x,\n", e.replacement)
|
|
||||||
|
|
||||||
printf("decode: [256]utf8Enc{\n")
|
|
||||||
i, backMapping := 0, map[rune]byte{}
|
|
||||||
for _, c := range e.mapping {
|
|
||||||
if _, ok := backMapping[c]; !ok && c != utf8.RuneError {
|
|
||||||
backMapping[c] = byte(i)
|
|
||||||
}
|
|
||||||
var buf [8]byte
|
|
||||||
n := utf8.EncodeRune(buf[:], c)
|
|
||||||
if n > 3 {
|
|
||||||
panic(fmt.Sprintf("rune %q (%U) is too long", c, c))
|
|
||||||
}
|
|
||||||
printf("{%d,[3]byte{0x%02x,0x%02x,0x%02x}},", n, buf[0], buf[1], buf[2])
|
|
||||||
if i%2 == 1 {
|
|
||||||
printf("\n")
|
|
||||||
}
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
printf("},\n")
|
|
||||||
|
|
||||||
printf("encode: [256]uint32{\n")
|
|
||||||
encode := make([]uint32, 0, 256)
|
|
||||||
for c, i := range backMapping {
|
|
||||||
encode = append(encode, uint32(i)<<24|uint32(c))
|
|
||||||
}
|
|
||||||
sort.Sort(byRune(encode))
|
|
||||||
for len(encode) < cap(encode) {
|
|
||||||
encode = append(encode, encode[len(encode)-1])
|
|
||||||
}
|
|
||||||
for i, enc := range encode {
|
|
||||||
printf("0x%08x,", enc)
|
|
||||||
if i%8 == 7 {
|
|
||||||
printf("\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("},\n}\n")
|
|
||||||
|
|
||||||
// Add an estimate of the size of a single Charmap{} struct value, which
|
|
||||||
// includes two 256 elem arrays of 4 bytes and some extra fields, which
|
|
||||||
// align to 3 uint64s on 64-bit architectures.
|
|
||||||
w.Size += 2*4*256 + 3*8
|
|
||||||
}
|
|
||||||
// TODO: add proper line breaking.
|
|
||||||
printf("var listAll = []encoding.Encoding{\n%s,\n}\n\n", strings.Join(all, ",\n"))
|
|
||||||
}
|
|
||||||
|
|
||||||
type byRune []uint32
|
|
||||||
|
|
||||||
func (b byRune) Len() int { return len(b) }
|
|
||||||
func (b byRune) Less(i, j int) bool { return b[i]&0xffffff < b[j]&0xffffff }
|
|
||||||
func (b byRune) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
173
vendor/golang.org/x/text/encoding/htmlindex/gen.go
generated
vendored
173
vendor/golang.org/x/text/encoding/htmlindex/gen.go
generated
vendored
@ -1,173 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"golang.org/x/text/internal/gen"
|
|
||||||
)
|
|
||||||
|
|
||||||
type group struct {
|
|
||||||
Encodings []struct {
|
|
||||||
Labels []string
|
|
||||||
Name string
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
gen.Init()
|
|
||||||
|
|
||||||
r := gen.Open("https://encoding.spec.whatwg.org", "whatwg", "encodings.json")
|
|
||||||
var groups []group
|
|
||||||
if err := json.NewDecoder(r).Decode(&groups); err != nil {
|
|
||||||
log.Fatalf("Error reading encodings.json: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
w := &bytes.Buffer{}
|
|
||||||
fmt.Fprintln(w, "type htmlEncoding byte")
|
|
||||||
fmt.Fprintln(w, "const (")
|
|
||||||
for i, g := range groups {
|
|
||||||
for _, e := range g.Encodings {
|
|
||||||
key := strings.ToLower(e.Name)
|
|
||||||
name := consts[key]
|
|
||||||
if name == "" {
|
|
||||||
log.Fatalf("No const defined for %s.", key)
|
|
||||||
}
|
|
||||||
if i == 0 {
|
|
||||||
fmt.Fprintf(w, "%s htmlEncoding = iota\n", name)
|
|
||||||
} else {
|
|
||||||
fmt.Fprintf(w, "%s\n", name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, "numEncodings")
|
|
||||||
fmt.Fprint(w, ")\n\n")
|
|
||||||
|
|
||||||
fmt.Fprintln(w, "var canonical = [numEncodings]string{")
|
|
||||||
for _, g := range groups {
|
|
||||||
for _, e := range g.Encodings {
|
|
||||||
fmt.Fprintf(w, "%q,\n", strings.ToLower(e.Name))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Fprint(w, "}\n\n")
|
|
||||||
|
|
||||||
fmt.Fprintln(w, "var nameMap = map[string]htmlEncoding{")
|
|
||||||
for _, g := range groups {
|
|
||||||
for _, e := range g.Encodings {
|
|
||||||
for _, l := range e.Labels {
|
|
||||||
key := strings.ToLower(e.Name)
|
|
||||||
name := consts[key]
|
|
||||||
fmt.Fprintf(w, "%q: %s,\n", l, name)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Fprint(w, "}\n\n")
|
|
||||||
|
|
||||||
var tags []string
|
|
||||||
fmt.Fprintln(w, "var localeMap = []htmlEncoding{")
|
|
||||||
for _, loc := range locales {
|
|
||||||
tags = append(tags, loc.tag)
|
|
||||||
fmt.Fprintf(w, "%s, // %s \n", consts[loc.name], loc.tag)
|
|
||||||
}
|
|
||||||
fmt.Fprint(w, "}\n\n")
|
|
||||||
|
|
||||||
fmt.Fprintf(w, "const locales = %q\n", strings.Join(tags, " "))
|
|
||||||
|
|
||||||
gen.WriteGoFile("tables.go", "htmlindex", w.Bytes())
|
|
||||||
}
|
|
||||||
|
|
||||||
// consts maps canonical encoding name to internal constant.
|
|
||||||
var consts = map[string]string{
|
|
||||||
"utf-8": "utf8",
|
|
||||||
"ibm866": "ibm866",
|
|
||||||
"iso-8859-2": "iso8859_2",
|
|
||||||
"iso-8859-3": "iso8859_3",
|
|
||||||
"iso-8859-4": "iso8859_4",
|
|
||||||
"iso-8859-5": "iso8859_5",
|
|
||||||
"iso-8859-6": "iso8859_6",
|
|
||||||
"iso-8859-7": "iso8859_7",
|
|
||||||
"iso-8859-8": "iso8859_8",
|
|
||||||
"iso-8859-8-i": "iso8859_8I",
|
|
||||||
"iso-8859-10": "iso8859_10",
|
|
||||||
"iso-8859-13": "iso8859_13",
|
|
||||||
"iso-8859-14": "iso8859_14",
|
|
||||||
"iso-8859-15": "iso8859_15",
|
|
||||||
"iso-8859-16": "iso8859_16",
|
|
||||||
"koi8-r": "koi8r",
|
|
||||||
"koi8-u": "koi8u",
|
|
||||||
"macintosh": "macintosh",
|
|
||||||
"windows-874": "windows874",
|
|
||||||
"windows-1250": "windows1250",
|
|
||||||
"windows-1251": "windows1251",
|
|
||||||
"windows-1252": "windows1252",
|
|
||||||
"windows-1253": "windows1253",
|
|
||||||
"windows-1254": "windows1254",
|
|
||||||
"windows-1255": "windows1255",
|
|
||||||
"windows-1256": "windows1256",
|
|
||||||
"windows-1257": "windows1257",
|
|
||||||
"windows-1258": "windows1258",
|
|
||||||
"x-mac-cyrillic": "macintoshCyrillic",
|
|
||||||
"gbk": "gbk",
|
|
||||||
"gb18030": "gb18030",
|
|
||||||
// "hz-gb-2312": "hzgb2312", // Was removed from WhatWG
|
|
||||||
"big5": "big5",
|
|
||||||
"euc-jp": "eucjp",
|
|
||||||
"iso-2022-jp": "iso2022jp",
|
|
||||||
"shift_jis": "shiftJIS",
|
|
||||||
"euc-kr": "euckr",
|
|
||||||
"replacement": "replacement",
|
|
||||||
"utf-16be": "utf16be",
|
|
||||||
"utf-16le": "utf16le",
|
|
||||||
"x-user-defined": "xUserDefined",
|
|
||||||
}
|
|
||||||
|
|
||||||
// locales is taken from
|
|
||||||
// https://html.spec.whatwg.org/multipage/syntax.html#encoding-sniffing-algorithm.
|
|
||||||
var locales = []struct{ tag, name string }{
|
|
||||||
// The default value. Explicitly state latin to benefit from the exact
|
|
||||||
// script option, while still making 1252 the default encoding for languages
|
|
||||||
// written in Latin script.
|
|
||||||
{"und_Latn", "windows-1252"},
|
|
||||||
{"ar", "windows-1256"},
|
|
||||||
{"ba", "windows-1251"},
|
|
||||||
{"be", "windows-1251"},
|
|
||||||
{"bg", "windows-1251"},
|
|
||||||
{"cs", "windows-1250"},
|
|
||||||
{"el", "iso-8859-7"},
|
|
||||||
{"et", "windows-1257"},
|
|
||||||
{"fa", "windows-1256"},
|
|
||||||
{"he", "windows-1255"},
|
|
||||||
{"hr", "windows-1250"},
|
|
||||||
{"hu", "iso-8859-2"},
|
|
||||||
{"ja", "shift_jis"},
|
|
||||||
{"kk", "windows-1251"},
|
|
||||||
{"ko", "euc-kr"},
|
|
||||||
{"ku", "windows-1254"},
|
|
||||||
{"ky", "windows-1251"},
|
|
||||||
{"lt", "windows-1257"},
|
|
||||||
{"lv", "windows-1257"},
|
|
||||||
{"mk", "windows-1251"},
|
|
||||||
{"pl", "iso-8859-2"},
|
|
||||||
{"ru", "windows-1251"},
|
|
||||||
{"sah", "windows-1251"},
|
|
||||||
{"sk", "windows-1250"},
|
|
||||||
{"sl", "iso-8859-2"},
|
|
||||||
{"sr", "windows-1251"},
|
|
||||||
{"tg", "windows-1251"},
|
|
||||||
{"th", "windows-874"},
|
|
||||||
{"tr", "windows-1254"},
|
|
||||||
{"tt", "windows-1251"},
|
|
||||||
{"uk", "windows-1251"},
|
|
||||||
{"vi", "windows-1258"},
|
|
||||||
{"zh-hans", "gb18030"},
|
|
||||||
{"zh-hant", "big5"},
|
|
||||||
}
|
|
137
vendor/golang.org/x/text/encoding/internal/identifier/gen.go
generated
vendored
137
vendor/golang.org/x/text/encoding/internal/identifier/gen.go
generated
vendored
@ -1,137 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"encoding/xml"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"log"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"golang.org/x/text/internal/gen"
|
|
||||||
)
|
|
||||||
|
|
||||||
type registry struct {
|
|
||||||
XMLName xml.Name `xml:"registry"`
|
|
||||||
Updated string `xml:"updated"`
|
|
||||||
Registry []struct {
|
|
||||||
ID string `xml:"id,attr"`
|
|
||||||
Record []struct {
|
|
||||||
Name string `xml:"name"`
|
|
||||||
Xref []struct {
|
|
||||||
Type string `xml:"type,attr"`
|
|
||||||
Data string `xml:"data,attr"`
|
|
||||||
} `xml:"xref"`
|
|
||||||
Desc struct {
|
|
||||||
Data string `xml:",innerxml"`
|
|
||||||
// Any []struct {
|
|
||||||
// Data string `xml:",chardata"`
|
|
||||||
// } `xml:",any"`
|
|
||||||
// Data string `xml:",chardata"`
|
|
||||||
} `xml:"description,"`
|
|
||||||
MIB string `xml:"value"`
|
|
||||||
Alias []string `xml:"alias"`
|
|
||||||
MIME string `xml:"preferred_alias"`
|
|
||||||
} `xml:"record"`
|
|
||||||
} `xml:"registry"`
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
r := gen.OpenIANAFile("assignments/character-sets/character-sets.xml")
|
|
||||||
reg := ®istry{}
|
|
||||||
if err := xml.NewDecoder(r).Decode(®); err != nil && err != io.EOF {
|
|
||||||
log.Fatalf("Error decoding charset registry: %v", err)
|
|
||||||
}
|
|
||||||
if len(reg.Registry) == 0 || reg.Registry[0].ID != "character-sets-1" {
|
|
||||||
log.Fatalf("Unexpected ID %s", reg.Registry[0].ID)
|
|
||||||
}
|
|
||||||
|
|
||||||
w := &bytes.Buffer{}
|
|
||||||
fmt.Fprintf(w, "const (\n")
|
|
||||||
for _, rec := range reg.Registry[0].Record {
|
|
||||||
constName := ""
|
|
||||||
for _, a := range rec.Alias {
|
|
||||||
if strings.HasPrefix(a, "cs") && strings.IndexByte(a, '-') == -1 {
|
|
||||||
// Some of the constant definitions have comments in them. Strip those.
|
|
||||||
constName = strings.Title(strings.SplitN(a[2:], "\n", 2)[0])
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if constName == "" {
|
|
||||||
switch rec.MIB {
|
|
||||||
case "2085":
|
|
||||||
constName = "HZGB2312" // Not listed as alias for some reason.
|
|
||||||
default:
|
|
||||||
log.Fatalf("No cs alias defined for %s.", rec.MIB)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if rec.MIME != "" {
|
|
||||||
rec.MIME = fmt.Sprintf(" (MIME: %s)", rec.MIME)
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "// %s is the MIB identifier with IANA name %s%s.\n//\n", constName, rec.Name, rec.MIME)
|
|
||||||
if len(rec.Desc.Data) > 0 {
|
|
||||||
fmt.Fprint(w, "// ")
|
|
||||||
d := xml.NewDecoder(strings.NewReader(rec.Desc.Data))
|
|
||||||
inElem := true
|
|
||||||
attr := ""
|
|
||||||
for {
|
|
||||||
t, err := d.Token()
|
|
||||||
if err != nil {
|
|
||||||
if err != io.EOF {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
switch x := t.(type) {
|
|
||||||
case xml.CharData:
|
|
||||||
attr = "" // Don't need attribute info.
|
|
||||||
a := bytes.Split([]byte(x), []byte("\n"))
|
|
||||||
for i, b := range a {
|
|
||||||
if b = bytes.TrimSpace(b); len(b) != 0 {
|
|
||||||
if !inElem && i > 0 {
|
|
||||||
fmt.Fprint(w, "\n// ")
|
|
||||||
}
|
|
||||||
inElem = false
|
|
||||||
fmt.Fprintf(w, "%s ", string(b))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case xml.StartElement:
|
|
||||||
if x.Name.Local == "xref" {
|
|
||||||
inElem = true
|
|
||||||
use := false
|
|
||||||
for _, a := range x.Attr {
|
|
||||||
if a.Name.Local == "type" {
|
|
||||||
use = use || a.Value != "person"
|
|
||||||
}
|
|
||||||
if a.Name.Local == "data" && use {
|
|
||||||
attr = a.Value + " "
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
case xml.EndElement:
|
|
||||||
inElem = false
|
|
||||||
fmt.Fprint(w, attr)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Fprint(w, "\n")
|
|
||||||
}
|
|
||||||
for _, x := range rec.Xref {
|
|
||||||
switch x.Type {
|
|
||||||
case "rfc":
|
|
||||||
fmt.Fprintf(w, "// Reference: %s\n", strings.ToUpper(x.Data))
|
|
||||||
case "uri":
|
|
||||||
fmt.Fprintf(w, "// Reference: %s\n", x.Data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Fprintf(w, "%s MIB = %s\n", constName, rec.MIB)
|
|
||||||
fmt.Fprintln(w)
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, ")")
|
|
||||||
|
|
||||||
gen.WriteGoFile("mib.go", "identifier", w.Bytes())
|
|
||||||
}
|
|
161
vendor/golang.org/x/text/encoding/japanese/maketables.go
generated
vendored
161
vendor/golang.org/x/text/encoding/japanese/maketables.go
generated
vendored
@ -1,161 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This program generates tables.go:
|
|
||||||
// go run maketables.go | gofmt > tables.go
|
|
||||||
|
|
||||||
// TODO: Emoji extensions?
|
|
||||||
// http://www.unicode.org/faq/emoji_dingbats.html
|
|
||||||
// http://www.unicode.org/Public/UNIDATA/EmojiSources.txt
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
type entry struct {
|
|
||||||
jisCode, table int
|
|
||||||
}
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
|
|
||||||
fmt.Printf("// Package japanese provides Japanese encodings such as EUC-JP and Shift JIS.\n")
|
|
||||||
fmt.Printf(`package japanese // import "golang.org/x/text/encoding/japanese"` + "\n\n")
|
|
||||||
|
|
||||||
reverse := [65536]entry{}
|
|
||||||
for i := range reverse {
|
|
||||||
reverse[i].table = -1
|
|
||||||
}
|
|
||||||
|
|
||||||
tables := []struct {
|
|
||||||
url string
|
|
||||||
name string
|
|
||||||
}{
|
|
||||||
{"http://encoding.spec.whatwg.org/index-jis0208.txt", "0208"},
|
|
||||||
{"http://encoding.spec.whatwg.org/index-jis0212.txt", "0212"},
|
|
||||||
}
|
|
||||||
for i, table := range tables {
|
|
||||||
res, err := http.Get(table.url)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("%q: Get: %v", table.url, err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := [65536]uint16{}
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := 0, uint16(0)
|
|
||||||
if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("%q: could not parse %q", table.url, s)
|
|
||||||
}
|
|
||||||
if x < 0 || 120*94 <= x {
|
|
||||||
log.Fatalf("%q: JIS code %d is out of range", table.url, x)
|
|
||||||
}
|
|
||||||
mapping[x] = y
|
|
||||||
if reverse[y].table == -1 {
|
|
||||||
reverse[y] = entry{jisCode: x, table: i}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
log.Fatalf("%q: scanner error: %v", table.url, err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("// jis%sDecode is the decoding table from JIS %s code to Unicode.\n// It is defined at %s\n",
|
|
||||||
table.name, table.name, table.url)
|
|
||||||
fmt.Printf("var jis%sDecode = [...]uint16{\n", table.name)
|
|
||||||
for i, m := range mapping {
|
|
||||||
if m != 0 {
|
|
||||||
fmt.Printf("\t%d: 0x%04X,\n", i, m)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
// Any run of at least separation continuous zero entries in the reverse map will
|
|
||||||
// be a separate encode table.
|
|
||||||
const separation = 1024
|
|
||||||
|
|
||||||
intervals := []interval(nil)
|
|
||||||
low, high := -1, -1
|
|
||||||
for i, v := range reverse {
|
|
||||||
if v.table == -1 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if low < 0 {
|
|
||||||
low = i
|
|
||||||
} else if i-high >= separation {
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
low = i
|
|
||||||
}
|
|
||||||
high = i + 1
|
|
||||||
}
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
sort.Sort(byDecreasingLength(intervals))
|
|
||||||
|
|
||||||
fmt.Printf("const (\n")
|
|
||||||
fmt.Printf("\tjis0208 = 1\n")
|
|
||||||
fmt.Printf("\tjis0212 = 2\n")
|
|
||||||
fmt.Printf("\tcodeMask = 0x7f\n")
|
|
||||||
fmt.Printf("\tcodeShift = 7\n")
|
|
||||||
fmt.Printf("\ttableShift = 14\n")
|
|
||||||
fmt.Printf(")\n\n")
|
|
||||||
|
|
||||||
fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
|
|
||||||
fmt.Printf("// encodeX are the encoding tables from Unicode to JIS code,\n")
|
|
||||||
fmt.Printf("// sorted by decreasing length.\n")
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
|
|
||||||
}
|
|
||||||
fmt.Printf("//\n")
|
|
||||||
fmt.Printf("// The high two bits of the value record whether the JIS code comes from the\n")
|
|
||||||
fmt.Printf("// JIS0208 table (high bits == 1) or the JIS0212 table (high bits == 2).\n")
|
|
||||||
fmt.Printf("// The low 14 bits are two 7-bit unsigned integers j1 and j2 that form the\n")
|
|
||||||
fmt.Printf("// JIS code (94*j1 + j2) within that table.\n")
|
|
||||||
fmt.Printf("\n")
|
|
||||||
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
|
|
||||||
fmt.Printf("var encode%d = [...]uint16{\n", i)
|
|
||||||
for j := v.low; j < v.high; j++ {
|
|
||||||
x := reverse[j]
|
|
||||||
if x.table == -1 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Printf("\t%d - %d: jis%s<<14 | 0x%02X<<7 | 0x%02X,\n",
|
|
||||||
j, v.low, tables[x.table].name, x.jisCode/94, x.jisCode%94)
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// interval is a half-open interval [low, high).
|
|
||||||
type interval struct {
|
|
||||||
low, high int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i interval) len() int { return i.high - i.low }
|
|
||||||
|
|
||||||
// byDecreasingLength sorts intervals by decreasing length.
|
|
||||||
type byDecreasingLength []interval
|
|
||||||
|
|
||||||
func (b byDecreasingLength) Len() int { return len(b) }
|
|
||||||
func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
|
|
||||||
func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
143
vendor/golang.org/x/text/encoding/korean/maketables.go
generated
vendored
143
vendor/golang.org/x/text/encoding/korean/maketables.go
generated
vendored
@ -1,143 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This program generates tables.go:
|
|
||||||
// go run maketables.go | gofmt > tables.go
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
|
|
||||||
fmt.Printf("// Package korean provides Korean encodings such as EUC-KR.\n")
|
|
||||||
fmt.Printf(`package korean // import "golang.org/x/text/encoding/korean"` + "\n\n")
|
|
||||||
|
|
||||||
res, err := http.Get("http://encoding.spec.whatwg.org/index-euc-kr.txt")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Get: %v", err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := [65536]uint16{}
|
|
||||||
reverse := [65536]uint16{}
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := uint16(0), uint16(0)
|
|
||||||
if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("could not parse %q", s)
|
|
||||||
}
|
|
||||||
if x < 0 || 178*(0xc7-0x81)+(0xfe-0xc7)*94+(0xff-0xa1) <= x {
|
|
||||||
log.Fatalf("EUC-KR code %d is out of range", x)
|
|
||||||
}
|
|
||||||
mapping[x] = y
|
|
||||||
if reverse[y] == 0 {
|
|
||||||
c0, c1 := uint16(0), uint16(0)
|
|
||||||
if x < 178*(0xc7-0x81) {
|
|
||||||
c0 = uint16(x/178) + 0x81
|
|
||||||
c1 = uint16(x % 178)
|
|
||||||
switch {
|
|
||||||
case c1 < 1*26:
|
|
||||||
c1 += 0x41
|
|
||||||
case c1 < 2*26:
|
|
||||||
c1 += 0x47
|
|
||||||
default:
|
|
||||||
c1 += 0x4d
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
x -= 178 * (0xc7 - 0x81)
|
|
||||||
c0 = uint16(x/94) + 0xc7
|
|
||||||
c1 = uint16(x%94) + 0xa1
|
|
||||||
}
|
|
||||||
reverse[y] = c0<<8 | c1
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
log.Fatalf("scanner error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("// decode is the decoding table from EUC-KR code to Unicode.\n")
|
|
||||||
fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-euc-kr.txt\n")
|
|
||||||
fmt.Printf("var decode = [...]uint16{\n")
|
|
||||||
for i, v := range mapping {
|
|
||||||
if v != 0 {
|
|
||||||
fmt.Printf("\t%d: 0x%04X,\n", i, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
|
|
||||||
// Any run of at least separation continuous zero entries in the reverse map will
|
|
||||||
// be a separate encode table.
|
|
||||||
const separation = 1024
|
|
||||||
|
|
||||||
intervals := []interval(nil)
|
|
||||||
low, high := -1, -1
|
|
||||||
for i, v := range reverse {
|
|
||||||
if v == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if low < 0 {
|
|
||||||
low = i
|
|
||||||
} else if i-high >= separation {
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
low = i
|
|
||||||
}
|
|
||||||
high = i + 1
|
|
||||||
}
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
sort.Sort(byDecreasingLength(intervals))
|
|
||||||
|
|
||||||
fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
|
|
||||||
fmt.Printf("// encodeX are the encoding tables from Unicode to EUC-KR code,\n")
|
|
||||||
fmt.Printf("// sorted by decreasing length.\n")
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
|
|
||||||
}
|
|
||||||
fmt.Printf("\n")
|
|
||||||
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
|
|
||||||
fmt.Printf("var encode%d = [...]uint16{\n", i)
|
|
||||||
for j := v.low; j < v.high; j++ {
|
|
||||||
x := reverse[j]
|
|
||||||
if x == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// interval is a half-open interval [low, high).
|
|
||||||
type interval struct {
|
|
||||||
low, high int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i interval) len() int { return i.high - i.low }
|
|
||||||
|
|
||||||
// byDecreasingLength sorts intervals by decreasing length.
|
|
||||||
type byDecreasingLength []interval
|
|
||||||
|
|
||||||
func (b byDecreasingLength) Len() int { return len(b) }
|
|
||||||
func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
|
|
||||||
func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
161
vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go
generated
vendored
161
vendor/golang.org/x/text/encoding/simplifiedchinese/maketables.go
generated
vendored
@ -1,161 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This program generates tables.go:
|
|
||||||
// go run maketables.go | gofmt > tables.go
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
|
|
||||||
fmt.Printf("// Package simplifiedchinese provides Simplified Chinese encodings such as GBK.\n")
|
|
||||||
fmt.Printf(`package simplifiedchinese // import "golang.org/x/text/encoding/simplifiedchinese"` + "\n\n")
|
|
||||||
|
|
||||||
printGB18030()
|
|
||||||
printGBK()
|
|
||||||
}
|
|
||||||
|
|
||||||
func printGB18030() {
|
|
||||||
res, err := http.Get("http://encoding.spec.whatwg.org/index-gb18030.txt")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Get: %v", err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
fmt.Printf("// gb18030 is the table from http://encoding.spec.whatwg.org/index-gb18030.txt\n")
|
|
||||||
fmt.Printf("var gb18030 = [...][2]uint16{\n")
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := uint32(0), uint32(0)
|
|
||||||
if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("could not parse %q", s)
|
|
||||||
}
|
|
||||||
if x < 0x10000 && y < 0x10000 {
|
|
||||||
fmt.Printf("\t{0x%04x, 0x%04x},\n", x, y)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
func printGBK() {
|
|
||||||
res, err := http.Get("http://encoding.spec.whatwg.org/index-gbk.txt")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Get: %v", err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := [65536]uint16{}
|
|
||||||
reverse := [65536]uint16{}
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := uint16(0), uint16(0)
|
|
||||||
if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("could not parse %q", s)
|
|
||||||
}
|
|
||||||
if x < 0 || 126*190 <= x {
|
|
||||||
log.Fatalf("GBK code %d is out of range", x)
|
|
||||||
}
|
|
||||||
mapping[x] = y
|
|
||||||
if reverse[y] == 0 {
|
|
||||||
c0, c1 := x/190, x%190
|
|
||||||
if c1 >= 0x3f {
|
|
||||||
c1++
|
|
||||||
}
|
|
||||||
reverse[y] = (0x81+c0)<<8 | (0x40 + c1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
log.Fatalf("scanner error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("// decode is the decoding table from GBK code to Unicode.\n")
|
|
||||||
fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-gbk.txt\n")
|
|
||||||
fmt.Printf("var decode = [...]uint16{\n")
|
|
||||||
for i, v := range mapping {
|
|
||||||
if v != 0 {
|
|
||||||
fmt.Printf("\t%d: 0x%04X,\n", i, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
|
|
||||||
// Any run of at least separation continuous zero entries in the reverse map will
|
|
||||||
// be a separate encode table.
|
|
||||||
const separation = 1024
|
|
||||||
|
|
||||||
intervals := []interval(nil)
|
|
||||||
low, high := -1, -1
|
|
||||||
for i, v := range reverse {
|
|
||||||
if v == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if low < 0 {
|
|
||||||
low = i
|
|
||||||
} else if i-high >= separation {
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
low = i
|
|
||||||
}
|
|
||||||
high = i + 1
|
|
||||||
}
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
sort.Sort(byDecreasingLength(intervals))
|
|
||||||
|
|
||||||
fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
|
|
||||||
fmt.Printf("// encodeX are the encoding tables from Unicode to GBK code,\n")
|
|
||||||
fmt.Printf("// sorted by decreasing length.\n")
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("// encode%d: %5d entries for runes in [%5d, %5d).\n", i, v.len(), v.low, v.high)
|
|
||||||
}
|
|
||||||
fmt.Printf("\n")
|
|
||||||
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
|
|
||||||
fmt.Printf("var encode%d = [...]uint16{\n", i)
|
|
||||||
for j := v.low; j < v.high; j++ {
|
|
||||||
x := reverse[j]
|
|
||||||
if x == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// interval is a half-open interval [low, high).
|
|
||||||
type interval struct {
|
|
||||||
low, high int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i interval) len() int { return i.high - i.low }
|
|
||||||
|
|
||||||
// byDecreasingLength sorts intervals by decreasing length.
|
|
||||||
type byDecreasingLength []interval
|
|
||||||
|
|
||||||
func (b byDecreasingLength) Len() int { return len(b) }
|
|
||||||
func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
|
|
||||||
func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
140
vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go
generated
vendored
140
vendor/golang.org/x/text/encoding/traditionalchinese/maketables.go
generated
vendored
@ -1,140 +0,0 @@
|
|||||||
// Copyright 2013 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This program generates tables.go:
|
|
||||||
// go run maketables.go | gofmt > tables.go
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"fmt"
|
|
||||||
"log"
|
|
||||||
"net/http"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
fmt.Printf("// generated by go run maketables.go; DO NOT EDIT\n\n")
|
|
||||||
fmt.Printf("// Package traditionalchinese provides Traditional Chinese encodings such as Big5.\n")
|
|
||||||
fmt.Printf(`package traditionalchinese // import "golang.org/x/text/encoding/traditionalchinese"` + "\n\n")
|
|
||||||
|
|
||||||
res, err := http.Get("http://encoding.spec.whatwg.org/index-big5.txt")
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Get: %v", err)
|
|
||||||
}
|
|
||||||
defer res.Body.Close()
|
|
||||||
|
|
||||||
mapping := [65536]uint32{}
|
|
||||||
reverse := [65536 * 4]uint16{}
|
|
||||||
|
|
||||||
scanner := bufio.NewScanner(res.Body)
|
|
||||||
for scanner.Scan() {
|
|
||||||
s := strings.TrimSpace(scanner.Text())
|
|
||||||
if s == "" || s[0] == '#' {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
x, y := uint16(0), uint32(0)
|
|
||||||
if _, err := fmt.Sscanf(s, "%d 0x%x", &x, &y); err != nil {
|
|
||||||
log.Fatalf("could not parse %q", s)
|
|
||||||
}
|
|
||||||
if x < 0 || 126*157 <= x {
|
|
||||||
log.Fatalf("Big5 code %d is out of range", x)
|
|
||||||
}
|
|
||||||
mapping[x] = y
|
|
||||||
|
|
||||||
// The WHATWG spec http://encoding.spec.whatwg.org/#indexes says that
|
|
||||||
// "The index pointer for code point in index is the first pointer
|
|
||||||
// corresponding to code point in index", which would normally mean
|
|
||||||
// that the code below should be guarded by "if reverse[y] == 0", but
|
|
||||||
// last instead of first seems to match the behavior of
|
|
||||||
// "iconv -f UTF-8 -t BIG5". For example, U+8005 者 occurs twice in
|
|
||||||
// http://encoding.spec.whatwg.org/index-big5.txt, as index 2148
|
|
||||||
// (encoded as "\x8e\xcd") and index 6543 (encoded as "\xaa\xcc")
|
|
||||||
// and "echo 者 | iconv -f UTF-8 -t BIG5 | xxd" gives "\xaa\xcc".
|
|
||||||
c0, c1 := x/157, x%157
|
|
||||||
if c1 < 0x3f {
|
|
||||||
c1 += 0x40
|
|
||||||
} else {
|
|
||||||
c1 += 0x62
|
|
||||||
}
|
|
||||||
reverse[y] = (0x81+c0)<<8 | c1
|
|
||||||
}
|
|
||||||
if err := scanner.Err(); err != nil {
|
|
||||||
log.Fatalf("scanner error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("// decode is the decoding table from Big5 code to Unicode.\n")
|
|
||||||
fmt.Printf("// It is defined at http://encoding.spec.whatwg.org/index-big5.txt\n")
|
|
||||||
fmt.Printf("var decode = [...]uint32{\n")
|
|
||||||
for i, v := range mapping {
|
|
||||||
if v != 0 {
|
|
||||||
fmt.Printf("\t%d: 0x%08X,\n", i, v)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
|
|
||||||
// Any run of at least separation continuous zero entries in the reverse map will
|
|
||||||
// be a separate encode table.
|
|
||||||
const separation = 1024
|
|
||||||
|
|
||||||
intervals := []interval(nil)
|
|
||||||
low, high := -1, -1
|
|
||||||
for i, v := range reverse {
|
|
||||||
if v == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
if low < 0 {
|
|
||||||
low = i
|
|
||||||
} else if i-high >= separation {
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
low = i
|
|
||||||
}
|
|
||||||
high = i + 1
|
|
||||||
}
|
|
||||||
if high >= 0 {
|
|
||||||
intervals = append(intervals, interval{low, high})
|
|
||||||
}
|
|
||||||
sort.Sort(byDecreasingLength(intervals))
|
|
||||||
|
|
||||||
fmt.Printf("const numEncodeTables = %d\n\n", len(intervals))
|
|
||||||
fmt.Printf("// encodeX are the encoding tables from Unicode to Big5 code,\n")
|
|
||||||
fmt.Printf("// sorted by decreasing length.\n")
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("// encode%d: %5d entries for runes in [%6d, %6d).\n", i, v.len(), v.low, v.high)
|
|
||||||
}
|
|
||||||
fmt.Printf("\n")
|
|
||||||
|
|
||||||
for i, v := range intervals {
|
|
||||||
fmt.Printf("const encode%dLow, encode%dHigh = %d, %d\n\n", i, i, v.low, v.high)
|
|
||||||
fmt.Printf("var encode%d = [...]uint16{\n", i)
|
|
||||||
for j := v.low; j < v.high; j++ {
|
|
||||||
x := reverse[j]
|
|
||||||
if x == 0 {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Printf("\t%d-%d: 0x%04X,\n", j, v.low, x)
|
|
||||||
}
|
|
||||||
fmt.Printf("}\n\n")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// interval is a half-open interval [low, high).
|
|
||||||
type interval struct {
|
|
||||||
low, high int
|
|
||||||
}
|
|
||||||
|
|
||||||
func (i interval) len() int { return i.high - i.low }
|
|
||||||
|
|
||||||
// byDecreasingLength sorts intervals by decreasing length.
|
|
||||||
type byDecreasingLength []interval
|
|
||||||
|
|
||||||
func (b byDecreasingLength) Len() int { return len(b) }
|
|
||||||
func (b byDecreasingLength) Less(i, j int) bool { return b[i].len() > b[j].len() }
|
|
||||||
func (b byDecreasingLength) Swap(i, j int) { b[i], b[j] = b[j], b[i] }
|
|
1712
vendor/golang.org/x/text/language/gen.go
generated
vendored
1712
vendor/golang.org/x/text/language/gen.go
generated
vendored
File diff suppressed because it is too large
Load Diff
20
vendor/golang.org/x/text/language/gen_common.go
generated
vendored
20
vendor/golang.org/x/text/language/gen_common.go
generated
vendored
@ -1,20 +0,0 @@
|
|||||||
// Copyright 2014 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This file contains code common to the maketables.go and the package code.
|
|
||||||
|
|
||||||
// langAliasType is the type of an alias in langAliasMap.
|
|
||||||
type langAliasType int8
|
|
||||||
|
|
||||||
const (
|
|
||||||
langDeprecated langAliasType = iota
|
|
||||||
langMacro
|
|
||||||
langLegacy
|
|
||||||
|
|
||||||
langAliasTypeUnknown langAliasType = -1
|
|
||||||
)
|
|
162
vendor/golang.org/x/text/language/gen_index.go
generated
vendored
162
vendor/golang.org/x/text/language/gen_index.go
generated
vendored
@ -1,162 +0,0 @@
|
|||||||
// Copyright 2015 The Go Authors. All rights reserved.
|
|
||||||
// Use of this source code is governed by a BSD-style
|
|
||||||
// license that can be found in the LICENSE file.
|
|
||||||
|
|
||||||
// +build ignore
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
// This file generates derivative tables based on the language package itself.
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"flag"
|
|
||||||
"fmt"
|
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
|
||||||
"reflect"
|
|
||||||
"sort"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"golang.org/x/text/internal/gen"
|
|
||||||
"golang.org/x/text/language"
|
|
||||||
"golang.org/x/text/unicode/cldr"
|
|
||||||
)
|
|
||||||
|
|
||||||
var (
|
|
||||||
test = flag.Bool("test", false,
|
|
||||||
"test existing tables; can be used to compare web data with package data.")
|
|
||||||
|
|
||||||
draft = flag.String("draft",
|
|
||||||
"contributed",
|
|
||||||
`Minimal draft requirements (approved, contributed, provisional, unconfirmed).`)
|
|
||||||
)
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
gen.Init()
|
|
||||||
|
|
||||||
// Read the CLDR zip file.
|
|
||||||
r := gen.OpenCLDRCoreZip()
|
|
||||||
defer r.Close()
|
|
||||||
|
|
||||||
d := &cldr.Decoder{}
|
|
||||||
data, err := d.DecodeZip(r)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("DecodeZip: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
w := gen.NewCodeWriter()
|
|
||||||
defer func() {
|
|
||||||
buf := &bytes.Buffer{}
|
|
||||||
|
|
||||||
if _, err = w.WriteGo(buf, "language", ""); err != nil {
|
|
||||||
log.Fatalf("Error formatting file index.go: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
// Since we're generating a table for our own package we need to rewrite
|
|
||||||
// doing the equivalent of go fmt -r 'language.b -> b'. Using
|
|
||||||
// bytes.Replace will do.
|
|
||||||
out := bytes.Replace(buf.Bytes(), []byte("language."), nil, -1)
|
|
||||||
if err := ioutil.WriteFile("index.go", out, 0600); err != nil {
|
|
||||||
log.Fatalf("Could not create file index.go: %v", err)
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
m := map[language.Tag]bool{}
|
|
||||||
for _, lang := range data.Locales() {
|
|
||||||
// We include all locales unconditionally to be consistent with en_US.
|
|
||||||
// We want en_US, even though it has no data associated with it.
|
|
||||||
|
|
||||||
// TODO: put any of the languages for which no data exists at the end
|
|
||||||
// of the index. This allows all components based on ICU to use that
|
|
||||||
// as the cutoff point.
|
|
||||||
// if x := data.RawLDML(lang); false ||
|
|
||||||
// x.LocaleDisplayNames != nil ||
|
|
||||||
// x.Characters != nil ||
|
|
||||||
// x.Delimiters != nil ||
|
|
||||||
// x.Measurement != nil ||
|
|
||||||
// x.Dates != nil ||
|
|
||||||
// x.Numbers != nil ||
|
|
||||||
// x.Units != nil ||
|
|
||||||
// x.ListPatterns != nil ||
|
|
||||||
// x.Collations != nil ||
|
|
||||||
// x.Segmentations != nil ||
|
|
||||||
// x.Rbnf != nil ||
|
|
||||||
// x.Annotations != nil ||
|
|
||||||
// x.Metadata != nil {
|
|
||||||
|
|
||||||
// TODO: support POSIX natively, albeit non-standard.
|
|
||||||
tag := language.Make(strings.Replace(lang, "_POSIX", "-u-va-posix", 1))
|
|
||||||
m[tag] = true
|
|
||||||
// }
|
|
||||||
}
|
|
||||||
// Include locales for plural rules, which uses a different structure.
|
|
||||||
for _, plurals := range data.Supplemental().Plurals {
|
|
||||||
for _, rules := range plurals.PluralRules {
|
|
||||||
for _, lang := range strings.Split(rules.Locales, " ") {
|
|
||||||
m[language.Make(lang)] = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var core, special []language.Tag
|
|
||||||
|
|
||||||
for t := range m {
|
|
||||||
if x := t.Extensions(); len(x) != 0 && fmt.Sprint(x) != "[u-va-posix]" {
|
|
||||||
log.Fatalf("Unexpected extension %v in %v", x, t)
|
|
||||||
}
|
|
||||||
if len(t.Variants()) == 0 && len(t.Extensions()) == 0 {
|
|
||||||
core = append(core, t)
|
|
||||||
} else {
|
|
||||||
special = append(special, t)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
w.WriteComment(`
|
|
||||||
NumCompactTags is the number of common tags. The maximum tag is
|
|
||||||
NumCompactTags-1.`)
|
|
||||||
w.WriteConst("NumCompactTags", len(core)+len(special))
|
|
||||||
|
|
||||||
sort.Sort(byAlpha(special))
|
|
||||||
w.WriteVar("specialTags", special)
|
|
||||||
|
|
||||||
// TODO: order by frequency?
|
|
||||||
sort.Sort(byAlpha(core))
|
|
||||||
|
|
||||||
// Size computations are just an estimate.
|
|
||||||
w.Size += int(reflect.TypeOf(map[uint32]uint16{}).Size())
|
|
||||||
w.Size += len(core) * 6 // size of uint32 and uint16
|
|
||||||
|
|
||||||
fmt.Fprintln(w)
|
|
||||||
fmt.Fprintln(w, "var coreTags = map[uint32]uint16{")
|
|
||||||
fmt.Fprintln(w, "0x0: 0, // und")
|
|
||||||
i := len(special) + 1 // Und and special tags already written.
|
|
||||||
for _, t := range core {
|
|
||||||
if t == language.Und {
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
fmt.Fprint(w.Hash, t, i)
|
|
||||||
b, s, r := t.Raw()
|
|
||||||
fmt.Fprintf(w, "0x%s%s%s: %d, // %s\n",
|
|
||||||
getIndex(b, 3), // 3 is enough as it is guaranteed to be a compact number
|
|
||||||
getIndex(s, 2),
|
|
||||||
getIndex(r, 3),
|
|
||||||
i, t)
|
|
||||||
i++
|
|
||||||
}
|
|
||||||
fmt.Fprintln(w, "}")
|
|
||||||
}
|
|
||||||
|
|
||||||
// getIndex prints the subtag type and extracts its index of size nibble.
|
|
||||||
// If the index is less than n nibbles, the result is prefixed with 0s.
|
|
||||||
func getIndex(x interface{}, n int) string {
|
|
||||||
s := fmt.Sprintf("%#v", x) // s is of form Type{typeID: 0x00}
|
|
||||||
s = s[strings.Index(s, "0x")+2 : len(s)-1]
|
|
||||||
return strings.Repeat("0", n-len(s)) + s
|
|
||||||
}
|
|
||||||
|
|
||||||
type byAlpha []language.Tag
|
|
||||||
|
|
||||||
func (a byAlpha) Len() int { return len(a) }
|
|
||||||
func (a byAlpha) Swap(i, j int) { a[i], a[j] = a[j], a[i] }
|
|
||||||
func (a byAlpha) Less(i, j int) bool { return a[i].String() < a[j].String() }
|
|
14
vendor/modules.txt
vendored
14
vendor/modules.txt
vendored
@ -4,28 +4,28 @@ github.com/antchfx/xmlquery
|
|||||||
github.com/antchfx/xpath
|
github.com/antchfx/xpath
|
||||||
# github.com/influxdata/influxdb1-client v0.0.0-20190402204710-8ff2fc3824fc
|
# github.com/influxdata/influxdb1-client v0.0.0-20190402204710-8ff2fc3824fc
|
||||||
github.com/influxdata/influxdb1-client
|
github.com/influxdata/influxdb1-client
|
||||||
github.com/influxdata/influxdb1-client/v2
|
|
||||||
github.com/influxdata/influxdb1-client/models
|
github.com/influxdata/influxdb1-client/models
|
||||||
github.com/influxdata/influxdb1-client/pkg/escape
|
github.com/influxdata/influxdb1-client/pkg/escape
|
||||||
|
github.com/influxdata/influxdb1-client/v2
|
||||||
# golang.org/x/net v0.0.0-20190607181551-461777fb6f67
|
# golang.org/x/net v0.0.0-20190607181551-461777fb6f67
|
||||||
golang.org/x/net/html/charset
|
|
||||||
golang.org/x/net/html
|
golang.org/x/net/html
|
||||||
golang.org/x/net/html/atom
|
golang.org/x/net/html/atom
|
||||||
|
golang.org/x/net/html/charset
|
||||||
# golang.org/x/text v0.3.0
|
# golang.org/x/text v0.3.0
|
||||||
golang.org/x/text/encoding
|
golang.org/x/text/encoding
|
||||||
golang.org/x/text/encoding/charmap
|
golang.org/x/text/encoding/charmap
|
||||||
golang.org/x/text/encoding/htmlindex
|
golang.org/x/text/encoding/htmlindex
|
||||||
golang.org/x/text/transform
|
|
||||||
golang.org/x/text/encoding/internal/identifier
|
|
||||||
golang.org/x/text/encoding/internal
|
golang.org/x/text/encoding/internal
|
||||||
|
golang.org/x/text/encoding/internal/identifier
|
||||||
golang.org/x/text/encoding/japanese
|
golang.org/x/text/encoding/japanese
|
||||||
golang.org/x/text/encoding/korean
|
golang.org/x/text/encoding/korean
|
||||||
golang.org/x/text/encoding/simplifiedchinese
|
golang.org/x/text/encoding/simplifiedchinese
|
||||||
golang.org/x/text/encoding/traditionalchinese
|
golang.org/x/text/encoding/traditionalchinese
|
||||||
golang.org/x/text/encoding/unicode
|
golang.org/x/text/encoding/unicode
|
||||||
golang.org/x/text/language
|
|
||||||
golang.org/x/text/internal/utf8internal
|
|
||||||
golang.org/x/text/runes
|
|
||||||
golang.org/x/text/internal/tag
|
golang.org/x/text/internal/tag
|
||||||
|
golang.org/x/text/internal/utf8internal
|
||||||
|
golang.org/x/text/language
|
||||||
|
golang.org/x/text/runes
|
||||||
|
golang.org/x/text/transform
|
||||||
# gopkg.in/ini.v1 v1.42.0
|
# gopkg.in/ini.v1 v1.42.0
|
||||||
gopkg.in/ini.v1
|
gopkg.in/ini.v1
|
||||||
|
Loading…
Reference in New Issue
Block a user