| // 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"}, |
| } |