mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-31 21:28:11 +09:00 
			
		
		
		
	Update to last common x/text (#3994)
This commit is contained in:
		
				
					committed by
					
						 Lunny Xiao
						Lunny Xiao
					
				
			
			
				
	
			
			
			
						parent
						
							000b2d33a9
						
					
				
				
					commit
					edc78b9633
				
			
							
								
								
									
										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() } | ||||
		Reference in New Issue
	
	Block a user