vendor: remove dep and use vndr

Signed-off-by: Antonio Murdaca <runcom@redhat.com>
This commit is contained in:
Antonio Murdaca 2017-06-06 09:19:04 +02:00
parent 16f44674a4
commit 148e72d81e
No known key found for this signature in database
GPG key ID: B2BEAD150DE936B9
16131 changed files with 73815 additions and 4235138 deletions

View file

@ -1,92 +0,0 @@
// This file was generated by go generate; DO NOT EDIT
package width
// This code is shared between the main code generator and the test code.
import (
"flag"
"log"
"strconv"
"strings"
"golang.org/x/text/internal/gen"
"golang.org/x/text/internal/ucd"
)
var (
outputFile = flag.String("out", "tables.go", "output file")
)
var typeMap = map[string]elem{
"A": tagAmbiguous,
"N": tagNeutral,
"Na": tagNarrow,
"W": tagWide,
"F": tagFullwidth,
"H": tagHalfwidth,
}
// getWidthData calls f for every entry for which it is defined.
//
// f may be called multiple times for the same rune. The last call to f is the
// correct value. f is not called for all runes. The default tag type is
// Neutral.
func getWidthData(f func(r rune, tag elem, alt rune)) {
// Set the default values for Unified Ideographs. In line with Annex 11,
// we encode full ranges instead of the defined runes in Unified_Ideograph.
for _, b := range []struct{ lo, hi rune }{
{0x4E00, 0x9FFF}, // the CJK Unified Ideographs block,
{0x3400, 0x4DBF}, // the CJK Unified Ideographs Externsion A block,
{0xF900, 0xFAFF}, // the CJK Compatibility Ideographs block,
{0x20000, 0x2FFFF}, // the Supplementary Ideographic Plane,
{0x30000, 0x3FFFF}, // the Tertiary Ideographic Plane,
} {
for r := b.lo; r <= b.hi; r++ {
f(r, tagWide, 0)
}
}
inverse := map[rune]rune{}
maps := map[string]bool{
"<wide>": true,
"<narrow>": true,
}
// We cannot reuse package norm's decomposition, as we need an unexpanded
// decomposition. We make use of the opportunity to verify that the
// decomposition type is as expected.
ucd.Parse(gen.OpenUCDFile("UnicodeData.txt"), func(p *ucd.Parser) {
r := p.Rune(0)
s := strings.SplitN(p.String(ucd.DecompMapping), " ", 2)
if !maps[s[0]] {
return
}
x, err := strconv.ParseUint(s[1], 16, 32)
if err != nil {
log.Fatalf("Error parsing rune %q", s[1])
}
if inverse[r] != 0 || inverse[rune(x)] != 0 {
log.Fatalf("Circular dependency in mapping between %U and %U", r, x)
}
inverse[r] = rune(x)
inverse[rune(x)] = r
})
// <rune range>;<type>
ucd.Parse(gen.OpenUCDFile("EastAsianWidth.txt"), func(p *ucd.Parser) {
tag, ok := typeMap[p.String(1)]
if !ok {
log.Fatalf("Unknown width type %q", p.String(1))
}
r := p.Rune(0)
alt, ok := inverse[r]
if tag == tagFullwidth || tag == tagHalfwidth && r != wonSign {
tag |= tagNeedsFold
if !ok {
log.Fatalf("Narrow or wide rune %U has no decomposition", r)
}
}
f(r, tag, alt)
})
}

View file

@ -1,52 +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.
package width_test
import (
"fmt"
"golang.org/x/text/width"
)
func ExampleTransformer_fold() {
s := "abヲ₩○¥"
f := width.Fold.String(s)
fmt.Printf("%U: %s\n", []rune(s), s)
fmt.Printf("%U: %s\n", []rune(f), f)
// Output:
// [U+0061 U+0062 U+FF66 U+FFE6 U+FFEE U+FFE5 U+FF21]: abヲ₩○¥
// [U+0061 U+0062 U+30F2 U+20A9 U+25CB U+00A5 U+0041]: abヲ₩○¥A
}
func ExampleTransformer_widen() {
s := "ab¥ヲ₩○"
w := width.Widen.String(s)
fmt.Printf("%U: %s\n", []rune(s), s)
fmt.Printf("%U: %s\n", []rune(w), w)
// Output:
// [U+0061 U+0062 U+00A5 U+FF66 U+20A9 U+FFEE]: ab¥ヲ₩○
// [U+FF41 U+FF42 U+FFE5 U+30F2 U+FFE6 U+25CB]: ab¥ヲ₩○
}
func ExampleTransformer_narrow() {
s := "abヲ₩○¥"
n := width.Narrow.String(s)
fmt.Printf("%U: %s\n", []rune(s), s)
fmt.Printf("%U: %s\n", []rune(n), n)
// Ambiguous characters with a halfwidth equivalent get mapped as well.
s = "←"
n = width.Narrow.String(s)
fmt.Printf("%U: %s\n", []rune(s), s)
fmt.Printf("%U: %s\n", []rune(n), n)
// Output:
// [U+0061 U+0062 U+30F2 U+FFE6 U+25CB U+FFE5 U+FF21]: abヲ₩○¥
// [U+0061 U+0062 U+FF66 U+20A9 U+FFEE U+00A5 U+0041]: abヲ₩○¥A
// [U+2190]: ←
// [U+FFE9]: ←
}

View file

@ -1,461 +0,0 @@
// This file was generated by go generate; DO NOT EDIT
package width
var mapRunes = map[rune]struct {
r rune
e elem
}{
0x20: {0x3000, 0x6000},
0x21: {0xFF01, 0x6000},
0x22: {0xFF02, 0x6000},
0x23: {0xFF03, 0x6000},
0x24: {0xFF04, 0x6000},
0x25: {0xFF05, 0x6000},
0x26: {0xFF06, 0x6000},
0x27: {0xFF07, 0x6000},
0x28: {0xFF08, 0x6000},
0x29: {0xFF09, 0x6000},
0x2A: {0xFF0A, 0x6000},
0x2B: {0xFF0B, 0x6000},
0x2C: {0xFF0C, 0x6000},
0x2D: {0xFF0D, 0x6000},
0x2E: {0xFF0E, 0x6000},
0x2F: {0xFF0F, 0x6000},
0x30: {0xFF10, 0x6000},
0x31: {0xFF11, 0x6000},
0x32: {0xFF12, 0x6000},
0x33: {0xFF13, 0x6000},
0x34: {0xFF14, 0x6000},
0x35: {0xFF15, 0x6000},
0x36: {0xFF16, 0x6000},
0x37: {0xFF17, 0x6000},
0x38: {0xFF18, 0x6000},
0x39: {0xFF19, 0x6000},
0x3A: {0xFF1A, 0x6000},
0x3B: {0xFF1B, 0x6000},
0x3C: {0xFF1C, 0x6000},
0x3D: {0xFF1D, 0x6000},
0x3E: {0xFF1E, 0x6000},
0x3F: {0xFF1F, 0x6000},
0x40: {0xFF20, 0x6000},
0x41: {0xFF21, 0x6000},
0x42: {0xFF22, 0x6000},
0x43: {0xFF23, 0x6000},
0x44: {0xFF24, 0x6000},
0x45: {0xFF25, 0x6000},
0x46: {0xFF26, 0x6000},
0x47: {0xFF27, 0x6000},
0x48: {0xFF28, 0x6000},
0x49: {0xFF29, 0x6000},
0x4A: {0xFF2A, 0x6000},
0x4B: {0xFF2B, 0x6000},
0x4C: {0xFF2C, 0x6000},
0x4D: {0xFF2D, 0x6000},
0x4E: {0xFF2E, 0x6000},
0x4F: {0xFF2F, 0x6000},
0x50: {0xFF30, 0x6000},
0x51: {0xFF31, 0x6000},
0x52: {0xFF32, 0x6000},
0x53: {0xFF33, 0x6000},
0x54: {0xFF34, 0x6000},
0x55: {0xFF35, 0x6000},
0x56: {0xFF36, 0x6000},
0x57: {0xFF37, 0x6000},
0x58: {0xFF38, 0x6000},
0x59: {0xFF39, 0x6000},
0x5A: {0xFF3A, 0x6000},
0x5B: {0xFF3B, 0x6000},
0x5C: {0xFF3C, 0x6000},
0x5D: {0xFF3D, 0x6000},
0x5E: {0xFF3E, 0x6000},
0x5F: {0xFF3F, 0x6000},
0x60: {0xFF40, 0x6000},
0x61: {0xFF41, 0x6000},
0x62: {0xFF42, 0x6000},
0x63: {0xFF43, 0x6000},
0x64: {0xFF44, 0x6000},
0x65: {0xFF45, 0x6000},
0x66: {0xFF46, 0x6000},
0x67: {0xFF47, 0x6000},
0x68: {0xFF48, 0x6000},
0x69: {0xFF49, 0x6000},
0x6A: {0xFF4A, 0x6000},
0x6B: {0xFF4B, 0x6000},
0x6C: {0xFF4C, 0x6000},
0x6D: {0xFF4D, 0x6000},
0x6E: {0xFF4E, 0x6000},
0x6F: {0xFF4F, 0x6000},
0x70: {0xFF50, 0x6000},
0x71: {0xFF51, 0x6000},
0x72: {0xFF52, 0x6000},
0x73: {0xFF53, 0x6000},
0x74: {0xFF54, 0x6000},
0x75: {0xFF55, 0x6000},
0x76: {0xFF56, 0x6000},
0x77: {0xFF57, 0x6000},
0x78: {0xFF58, 0x6000},
0x79: {0xFF59, 0x6000},
0x7A: {0xFF5A, 0x6000},
0x7B: {0xFF5B, 0x6000},
0x7C: {0xFF5C, 0x6000},
0x7D: {0xFF5D, 0x6000},
0x7E: {0xFF5E, 0x6000},
0xA2: {0xFFE0, 0x6000},
0xA3: {0xFFE1, 0x6000},
0xA5: {0xFFE5, 0x6000},
0xA6: {0xFFE4, 0x6000},
0xAC: {0xFFE2, 0x6000},
0xAF: {0xFFE3, 0x6000},
0x20A9: {0xFFE6, 0xA000},
0x2190: {0xFFE9, 0x2000},
0x2191: {0xFFEA, 0x2000},
0x2192: {0xFFEB, 0x2000},
0x2193: {0xFFEC, 0x2000},
0x2502: {0xFFE8, 0x2000},
0x25A0: {0xFFED, 0x2000},
0x25CB: {0xFFEE, 0x2000},
0x2985: {0xFF5F, 0x6000},
0x2986: {0xFF60, 0x6000},
0x3000: {0x20, 0x9000},
0x3001: {0xFF64, 0x4000},
0x3002: {0xFF61, 0x4000},
0x300C: {0xFF62, 0x4000},
0x300D: {0xFF63, 0x4000},
0x3099: {0xFF9E, 0x4000},
0x309A: {0xFF9F, 0x4000},
0x30A1: {0xFF67, 0x4000},
0x30A2: {0xFF71, 0x4000},
0x30A3: {0xFF68, 0x4000},
0x30A4: {0xFF72, 0x4000},
0x30A5: {0xFF69, 0x4000},
0x30A6: {0xFF73, 0x4000},
0x30A7: {0xFF6A, 0x4000},
0x30A8: {0xFF74, 0x4000},
0x30A9: {0xFF6B, 0x4000},
0x30AA: {0xFF75, 0x4000},
0x30AB: {0xFF76, 0x4000},
0x30AD: {0xFF77, 0x4000},
0x30AF: {0xFF78, 0x4000},
0x30B1: {0xFF79, 0x4000},
0x30B3: {0xFF7A, 0x4000},
0x30B5: {0xFF7B, 0x4000},
0x30B7: {0xFF7C, 0x4000},
0x30B9: {0xFF7D, 0x4000},
0x30BB: {0xFF7E, 0x4000},
0x30BD: {0xFF7F, 0x4000},
0x30BF: {0xFF80, 0x4000},
0x30C1: {0xFF81, 0x4000},
0x30C3: {0xFF6F, 0x4000},
0x30C4: {0xFF82, 0x4000},
0x30C6: {0xFF83, 0x4000},
0x30C8: {0xFF84, 0x4000},
0x30CA: {0xFF85, 0x4000},
0x30CB: {0xFF86, 0x4000},
0x30CC: {0xFF87, 0x4000},
0x30CD: {0xFF88, 0x4000},
0x30CE: {0xFF89, 0x4000},
0x30CF: {0xFF8A, 0x4000},
0x30D2: {0xFF8B, 0x4000},
0x30D5: {0xFF8C, 0x4000},
0x30D8: {0xFF8D, 0x4000},
0x30DB: {0xFF8E, 0x4000},
0x30DE: {0xFF8F, 0x4000},
0x30DF: {0xFF90, 0x4000},
0x30E0: {0xFF91, 0x4000},
0x30E1: {0xFF92, 0x4000},
0x30E2: {0xFF93, 0x4000},
0x30E3: {0xFF6C, 0x4000},
0x30E4: {0xFF94, 0x4000},
0x30E5: {0xFF6D, 0x4000},
0x30E6: {0xFF95, 0x4000},
0x30E7: {0xFF6E, 0x4000},
0x30E8: {0xFF96, 0x4000},
0x30E9: {0xFF97, 0x4000},
0x30EA: {0xFF98, 0x4000},
0x30EB: {0xFF99, 0x4000},
0x30EC: {0xFF9A, 0x4000},
0x30ED: {0xFF9B, 0x4000},
0x30EF: {0xFF9C, 0x4000},
0x30F2: {0xFF66, 0x4000},
0x30F3: {0xFF9D, 0x4000},
0x30FB: {0xFF65, 0x4000},
0x30FC: {0xFF70, 0x4000},
0x3131: {0xFFA1, 0x4000},
0x3132: {0xFFA2, 0x4000},
0x3133: {0xFFA3, 0x4000},
0x3134: {0xFFA4, 0x4000},
0x3135: {0xFFA5, 0x4000},
0x3136: {0xFFA6, 0x4000},
0x3137: {0xFFA7, 0x4000},
0x3138: {0xFFA8, 0x4000},
0x3139: {0xFFA9, 0x4000},
0x313A: {0xFFAA, 0x4000},
0x313B: {0xFFAB, 0x4000},
0x313C: {0xFFAC, 0x4000},
0x313D: {0xFFAD, 0x4000},
0x313E: {0xFFAE, 0x4000},
0x313F: {0xFFAF, 0x4000},
0x3140: {0xFFB0, 0x4000},
0x3141: {0xFFB1, 0x4000},
0x3142: {0xFFB2, 0x4000},
0x3143: {0xFFB3, 0x4000},
0x3144: {0xFFB4, 0x4000},
0x3145: {0xFFB5, 0x4000},
0x3146: {0xFFB6, 0x4000},
0x3147: {0xFFB7, 0x4000},
0x3148: {0xFFB8, 0x4000},
0x3149: {0xFFB9, 0x4000},
0x314A: {0xFFBA, 0x4000},
0x314B: {0xFFBB, 0x4000},
0x314C: {0xFFBC, 0x4000},
0x314D: {0xFFBD, 0x4000},
0x314E: {0xFFBE, 0x4000},
0x314F: {0xFFC2, 0x4000},
0x3150: {0xFFC3, 0x4000},
0x3151: {0xFFC4, 0x4000},
0x3152: {0xFFC5, 0x4000},
0x3153: {0xFFC6, 0x4000},
0x3154: {0xFFC7, 0x4000},
0x3155: {0xFFCA, 0x4000},
0x3156: {0xFFCB, 0x4000},
0x3157: {0xFFCC, 0x4000},
0x3158: {0xFFCD, 0x4000},
0x3159: {0xFFCE, 0x4000},
0x315A: {0xFFCF, 0x4000},
0x315B: {0xFFD2, 0x4000},
0x315C: {0xFFD3, 0x4000},
0x315D: {0xFFD4, 0x4000},
0x315E: {0xFFD5, 0x4000},
0x315F: {0xFFD6, 0x4000},
0x3160: {0xFFD7, 0x4000},
0x3161: {0xFFDA, 0x4000},
0x3162: {0xFFDB, 0x4000},
0x3163: {0xFFDC, 0x4000},
0x3164: {0xFFA0, 0x4000},
0xFF01: {0x21, 0x9000},
0xFF02: {0x22, 0x9000},
0xFF03: {0x23, 0x9000},
0xFF04: {0x24, 0x9000},
0xFF05: {0x25, 0x9000},
0xFF06: {0x26, 0x9000},
0xFF07: {0x27, 0x9000},
0xFF08: {0x28, 0x9000},
0xFF09: {0x29, 0x9000},
0xFF0A: {0x2A, 0x9000},
0xFF0B: {0x2B, 0x9000},
0xFF0C: {0x2C, 0x9000},
0xFF0D: {0x2D, 0x9000},
0xFF0E: {0x2E, 0x9000},
0xFF0F: {0x2F, 0x9000},
0xFF10: {0x30, 0x9000},
0xFF11: {0x31, 0x9000},
0xFF12: {0x32, 0x9000},
0xFF13: {0x33, 0x9000},
0xFF14: {0x34, 0x9000},
0xFF15: {0x35, 0x9000},
0xFF16: {0x36, 0x9000},
0xFF17: {0x37, 0x9000},
0xFF18: {0x38, 0x9000},
0xFF19: {0x39, 0x9000},
0xFF1A: {0x3A, 0x9000},
0xFF1B: {0x3B, 0x9000},
0xFF1C: {0x3C, 0x9000},
0xFF1D: {0x3D, 0x9000},
0xFF1E: {0x3E, 0x9000},
0xFF1F: {0x3F, 0x9000},
0xFF20: {0x40, 0x9000},
0xFF21: {0x41, 0x9000},
0xFF22: {0x42, 0x9000},
0xFF23: {0x43, 0x9000},
0xFF24: {0x44, 0x9000},
0xFF25: {0x45, 0x9000},
0xFF26: {0x46, 0x9000},
0xFF27: {0x47, 0x9000},
0xFF28: {0x48, 0x9000},
0xFF29: {0x49, 0x9000},
0xFF2A: {0x4A, 0x9000},
0xFF2B: {0x4B, 0x9000},
0xFF2C: {0x4C, 0x9000},
0xFF2D: {0x4D, 0x9000},
0xFF2E: {0x4E, 0x9000},
0xFF2F: {0x4F, 0x9000},
0xFF30: {0x50, 0x9000},
0xFF31: {0x51, 0x9000},
0xFF32: {0x52, 0x9000},
0xFF33: {0x53, 0x9000},
0xFF34: {0x54, 0x9000},
0xFF35: {0x55, 0x9000},
0xFF36: {0x56, 0x9000},
0xFF37: {0x57, 0x9000},
0xFF38: {0x58, 0x9000},
0xFF39: {0x59, 0x9000},
0xFF3A: {0x5A, 0x9000},
0xFF3B: {0x5B, 0x9000},
0xFF3C: {0x5C, 0x9000},
0xFF3D: {0x5D, 0x9000},
0xFF3E: {0x5E, 0x9000},
0xFF3F: {0x5F, 0x9000},
0xFF40: {0x60, 0x9000},
0xFF41: {0x61, 0x9000},
0xFF42: {0x62, 0x9000},
0xFF43: {0x63, 0x9000},
0xFF44: {0x64, 0x9000},
0xFF45: {0x65, 0x9000},
0xFF46: {0x66, 0x9000},
0xFF47: {0x67, 0x9000},
0xFF48: {0x68, 0x9000},
0xFF49: {0x69, 0x9000},
0xFF4A: {0x6A, 0x9000},
0xFF4B: {0x6B, 0x9000},
0xFF4C: {0x6C, 0x9000},
0xFF4D: {0x6D, 0x9000},
0xFF4E: {0x6E, 0x9000},
0xFF4F: {0x6F, 0x9000},
0xFF50: {0x70, 0x9000},
0xFF51: {0x71, 0x9000},
0xFF52: {0x72, 0x9000},
0xFF53: {0x73, 0x9000},
0xFF54: {0x74, 0x9000},
0xFF55: {0x75, 0x9000},
0xFF56: {0x76, 0x9000},
0xFF57: {0x77, 0x9000},
0xFF58: {0x78, 0x9000},
0xFF59: {0x79, 0x9000},
0xFF5A: {0x7A, 0x9000},
0xFF5B: {0x7B, 0x9000},
0xFF5C: {0x7C, 0x9000},
0xFF5D: {0x7D, 0x9000},
0xFF5E: {0x7E, 0x9000},
0xFF5F: {0x2985, 0x9000},
0xFF60: {0x2986, 0x9000},
0xFF61: {0x3002, 0xB000},
0xFF62: {0x300C, 0xB000},
0xFF63: {0x300D, 0xB000},
0xFF64: {0x3001, 0xB000},
0xFF65: {0x30FB, 0xB000},
0xFF66: {0x30F2, 0xB000},
0xFF67: {0x30A1, 0xB000},
0xFF68: {0x30A3, 0xB000},
0xFF69: {0x30A5, 0xB000},
0xFF6A: {0x30A7, 0xB000},
0xFF6B: {0x30A9, 0xB000},
0xFF6C: {0x30E3, 0xB000},
0xFF6D: {0x30E5, 0xB000},
0xFF6E: {0x30E7, 0xB000},
0xFF6F: {0x30C3, 0xB000},
0xFF70: {0x30FC, 0xB000},
0xFF71: {0x30A2, 0xB000},
0xFF72: {0x30A4, 0xB000},
0xFF73: {0x30A6, 0xB000},
0xFF74: {0x30A8, 0xB000},
0xFF75: {0x30AA, 0xB000},
0xFF76: {0x30AB, 0xB000},
0xFF77: {0x30AD, 0xB000},
0xFF78: {0x30AF, 0xB000},
0xFF79: {0x30B1, 0xB000},
0xFF7A: {0x30B3, 0xB000},
0xFF7B: {0x30B5, 0xB000},
0xFF7C: {0x30B7, 0xB000},
0xFF7D: {0x30B9, 0xB000},
0xFF7E: {0x30BB, 0xB000},
0xFF7F: {0x30BD, 0xB000},
0xFF80: {0x30BF, 0xB000},
0xFF81: {0x30C1, 0xB000},
0xFF82: {0x30C4, 0xB000},
0xFF83: {0x30C6, 0xB000},
0xFF84: {0x30C8, 0xB000},
0xFF85: {0x30CA, 0xB000},
0xFF86: {0x30CB, 0xB000},
0xFF87: {0x30CC, 0xB000},
0xFF88: {0x30CD, 0xB000},
0xFF89: {0x30CE, 0xB000},
0xFF8A: {0x30CF, 0xB000},
0xFF8B: {0x30D2, 0xB000},
0xFF8C: {0x30D5, 0xB000},
0xFF8D: {0x30D8, 0xB000},
0xFF8E: {0x30DB, 0xB000},
0xFF8F: {0x30DE, 0xB000},
0xFF90: {0x30DF, 0xB000},
0xFF91: {0x30E0, 0xB000},
0xFF92: {0x30E1, 0xB000},
0xFF93: {0x30E2, 0xB000},
0xFF94: {0x30E4, 0xB000},
0xFF95: {0x30E6, 0xB000},
0xFF96: {0x30E8, 0xB000},
0xFF97: {0x30E9, 0xB000},
0xFF98: {0x30EA, 0xB000},
0xFF99: {0x30EB, 0xB000},
0xFF9A: {0x30EC, 0xB000},
0xFF9B: {0x30ED, 0xB000},
0xFF9C: {0x30EF, 0xB000},
0xFF9D: {0x30F3, 0xB000},
0xFF9E: {0x3099, 0xB000},
0xFF9F: {0x309A, 0xB000},
0xFFA0: {0x3164, 0xB000},
0xFFA1: {0x3131, 0xB000},
0xFFA2: {0x3132, 0xB000},
0xFFA3: {0x3133, 0xB000},
0xFFA4: {0x3134, 0xB000},
0xFFA5: {0x3135, 0xB000},
0xFFA6: {0x3136, 0xB000},
0xFFA7: {0x3137, 0xB000},
0xFFA8: {0x3138, 0xB000},
0xFFA9: {0x3139, 0xB000},
0xFFAA: {0x313A, 0xB000},
0xFFAB: {0x313B, 0xB000},
0xFFAC: {0x313C, 0xB000},
0xFFAD: {0x313D, 0xB000},
0xFFAE: {0x313E, 0xB000},
0xFFAF: {0x313F, 0xB000},
0xFFB0: {0x3140, 0xB000},
0xFFB1: {0x3141, 0xB000},
0xFFB2: {0x3142, 0xB000},
0xFFB3: {0x3143, 0xB000},
0xFFB4: {0x3144, 0xB000},
0xFFB5: {0x3145, 0xB000},
0xFFB6: {0x3146, 0xB000},
0xFFB7: {0x3147, 0xB000},
0xFFB8: {0x3148, 0xB000},
0xFFB9: {0x3149, 0xB000},
0xFFBA: {0x314A, 0xB000},
0xFFBB: {0x314B, 0xB000},
0xFFBC: {0x314C, 0xB000},
0xFFBD: {0x314D, 0xB000},
0xFFBE: {0x314E, 0xB000},
0xFFC2: {0x314F, 0xB000},
0xFFC3: {0x3150, 0xB000},
0xFFC4: {0x3151, 0xB000},
0xFFC5: {0x3152, 0xB000},
0xFFC6: {0x3153, 0xB000},
0xFFC7: {0x3154, 0xB000},
0xFFCA: {0x3155, 0xB000},
0xFFCB: {0x3156, 0xB000},
0xFFCC: {0x3157, 0xB000},
0xFFCD: {0x3158, 0xB000},
0xFFCE: {0x3159, 0xB000},
0xFFCF: {0x315A, 0xB000},
0xFFD2: {0x315B, 0xB000},
0xFFD3: {0x315C, 0xB000},
0xFFD4: {0x315D, 0xB000},
0xFFD5: {0x315E, 0xB000},
0xFFD6: {0x315F, 0xB000},
0xFFD7: {0x3160, 0xB000},
0xFFDA: {0x3161, 0xB000},
0xFFDB: {0x3162, 0xB000},
0xFFDC: {0x3163, 0xB000},
0xFFE0: {0xA2, 0x9000},
0xFFE1: {0xA3, 0x9000},
0xFFE2: {0xAC, 0x9000},
0xFFE3: {0xAF, 0x9000},
0xFFE4: {0xA6, 0x9000},
0xFFE5: {0xA5, 0x9000},
0xFFE6: {0x20A9, 0x9000},
0xFFE8: {0x2502, 0xB000},
0xFFE9: {0x2190, 0xB000},
0xFFEA: {0x2191, 0xB000},
0xFFEB: {0x2192, 0xB000},
0xFFEC: {0x2193, 0xB000},
0xFFED: {0x25A0, 0xB000},
0xFFEE: {0x25CB, 0xB000},
}

View file

@ -1,59 +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.
package width
import (
"testing"
"golang.org/x/text/internal/testtext"
)
const (
loSurrogate = 0xD800
hiSurrogate = 0xDFFF
)
func TestTables(t *testing.T) {
testtext.SkipIfNotLong(t)
runes := map[rune]Kind{}
getWidthData(func(r rune, tag elem, _ rune) {
runes[r] = tag.kind()
})
for r := rune(0); r < 0x10FFFF; r++ {
if loSurrogate <= r && r <= hiSurrogate {
continue
}
p := LookupRune(r)
if got, want := p.Kind(), runes[r]; got != want {
t.Errorf("Kind of %U was %s; want %s.", r, got, want)
}
want, mapped := foldRune(r)
if got := p.Folded(); (got == 0) == mapped || got != 0 && got != want {
t.Errorf("Folded(%U) = %U; want %U", r, got, want)
}
want, mapped = widenRune(r)
if got := p.Wide(); (got == 0) == mapped || got != 0 && got != want {
t.Errorf("Wide(%U) = %U; want %U", r, got, want)
}
want, mapped = narrowRune(r)
if got := p.Narrow(); (got == 0) == mapped || got != 0 && got != want {
t.Errorf("Narrow(%U) = %U; want %U", r, got, want)
}
}
}
// TestAmbiguous verifies that that ambiguous runes with a mapping always map to
// a halfwidth rune.
func TestAmbiguous(t *testing.T) {
for r, m := range mapRunes {
if m.e != tagAmbiguous {
continue
}
if k := mapRunes[m.r].e.kind(); k != EastAsianHalfwidth {
t.Errorf("Rune %U is ambiguous and maps to a rune of type %v", r, k)
}
}
}

View file

@ -1,701 +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.
package width
import (
"bytes"
"strings"
"testing"
"golang.org/x/text/internal/testtext"
"golang.org/x/text/transform"
)
func foldRune(r rune) (folded rune, ok bool) {
alt, ok := mapRunes[r]
if ok && alt.e&tagNeedsFold != 0 {
return alt.r, true
}
return r, false
}
func widenRune(r rune) (wide rune, ok bool) {
alt, ok := mapRunes[r]
if k := alt.e.kind(); k == EastAsianHalfwidth || k == EastAsianNarrow {
return alt.r, true
}
return r, false
}
func narrowRune(r rune) (narrow rune, ok bool) {
alt, ok := mapRunes[r]
if k := alt.e.kind(); k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous {
return alt.r, true
}
return r, false
}
func TestFoldSingleRunes(t *testing.T) {
for r := rune(0); r < 0x1FFFF; r++ {
if loSurrogate <= r && r <= hiSurrogate {
continue
}
x, _ := foldRune(r)
want := string(x)
got := Fold.String(string(r))
if got != want {
t.Errorf("Fold().String(%U) = %+q; want %+q", r, got, want)
}
}
}
type transformTest struct {
desc string
src string
nBuf int
nDst int
atEOF bool
dst string
nSrc int
err error
nSpan int
errSpan error
}
func (tc *transformTest) doTest(t *testing.T, tr Transformer) {
testtext.Run(t, tc.desc, func(t *testing.T) {
b := make([]byte, tc.nBuf)
nDst, nSrc, err := tr.Transform(b, []byte(tc.src), tc.atEOF)
if got := string(b[:nDst]); got != tc.dst[:nDst] {
t.Errorf("dst was %+q; want %+q", got, tc.dst)
}
if nDst != tc.nDst {
t.Errorf("nDst was %d; want %d", nDst, tc.nDst)
}
if nSrc != tc.nSrc {
t.Errorf("nSrc was %d; want %d", nSrc, tc.nSrc)
}
if err != tc.err {
t.Errorf("error was %v; want %v", err, tc.err)
}
if got := tr.String(tc.src); got != tc.dst {
t.Errorf("String(%q) = %q; want %q", tc.src, got, tc.dst)
}
n, err := tr.Span([]byte(tc.src), tc.atEOF)
if n != tc.nSpan || err != tc.errSpan {
t.Errorf("Span: got %d, %v; want %d, %v", n, err, tc.nSpan, tc.errSpan)
}
})
}
func TestFold(t *testing.T) {
for _, tc := range []transformTest{{
desc: "empty",
src: "",
nBuf: 10,
dst: "",
nDst: 0,
nSrc: 0,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: nil,
}, {
desc: "short source 1",
src: "a\xc2",
nBuf: 10,
dst: "a\xc2",
nDst: 1,
nSrc: 1,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 1,
errSpan: transform.ErrShortSrc,
}, {
desc: "short source 2",
src: "a\xe0\x80",
nBuf: 10,
dst: "a\xe0\x80",
nDst: 1,
nSrc: 1,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 1,
errSpan: transform.ErrShortSrc,
}, {
desc: "incomplete but terminated source 1",
src: "a\xc2",
nBuf: 10,
dst: "a\xc2",
nDst: 2,
nSrc: 2,
atEOF: true,
err: nil,
nSpan: 2,
errSpan: nil,
}, {
desc: "incomplete but terminated source 2",
src: "a\xe0\x80",
nBuf: 10,
dst: "a\xe0\x80",
nDst: 3,
nSrc: 3,
atEOF: true,
err: nil,
nSpan: 3,
errSpan: nil,
}, {
desc: "exact fit dst",
src: "a\uff01",
nBuf: 2,
dst: "a!",
nDst: 2,
nSrc: 4,
atEOF: false,
err: nil,
nSpan: 1,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "exact fit dst and src ascii",
src: "ab",
nBuf: 2,
dst: "ab",
nDst: 2,
nSrc: 2,
atEOF: true,
err: nil,
nSpan: 2,
errSpan: nil,
}, {
desc: "empty dst",
src: "\u0300",
nBuf: 0,
dst: "\u0300",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 2,
errSpan: nil,
}, {
desc: "empty dst ascii",
src: "a",
nBuf: 0,
dst: "a",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 1,
errSpan: nil,
}, {
desc: "short dst 1",
src: "a\uffe0", // ¢
nBuf: 2,
dst: "a\u00a2", // ¢
nDst: 1,
nSrc: 1,
atEOF: false,
err: transform.ErrShortDst,
nSpan: 1,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short dst 2",
src: "不夠",
nBuf: 3,
dst: "不夠",
nDst: 3,
nSrc: 3,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 6,
errSpan: nil,
}, {
desc: "short dst fast path",
src: "fast",
nDst: 3,
dst: "fast",
nBuf: 3,
nSrc: 3,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 4,
errSpan: nil,
}, {
desc: "short dst larger buffer",
src: "\uff21" + strings.Repeat("0", 127) + "B",
nBuf: 128,
dst: "A" + strings.Repeat("0", 127) + "B",
nDst: 128,
nSrc: 130,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "fast path alternation",
src: "fast路徑fast路徑",
nBuf: 20,
dst: "fast路徑fast路徑",
nDst: 20,
nSrc: 20,
atEOF: true,
err: nil,
nSpan: 20,
errSpan: nil,
}} {
tc.doTest(t, Fold)
}
}
func TestWidenSingleRunes(t *testing.T) {
for r := rune(0); r < 0x1FFFF; r++ {
if loSurrogate <= r && r <= hiSurrogate {
continue
}
alt, _ := widenRune(r)
want := string(alt)
got := Widen.String(string(r))
if got != want {
t.Errorf("Widen().String(%U) = %+q; want %+q", r, got, want)
}
}
}
func TestWiden(t *testing.T) {
for _, tc := range []transformTest{{
desc: "empty",
src: "",
nBuf: 10,
dst: "",
nDst: 0,
nSrc: 0,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: nil,
}, {
desc: "short source 1",
src: "a\xc2",
nBuf: 10,
dst: "\xc2",
nDst: 3,
nSrc: 1,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short source 2",
src: "a\xe0\x80",
nBuf: 10,
dst: "\xe0\x80",
nDst: 3,
nSrc: 1,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "incomplete but terminated source 1",
src: "a\xc2",
nBuf: 10,
dst: "\xc2",
nDst: 4,
nSrc: 2,
atEOF: true,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "incomplete but terminated source 2",
src: "a\xe0\x80",
nBuf: 10,
dst: "\xe0\x80",
nDst: 5,
nSrc: 3,
atEOF: true,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short source 1 some span",
src: "\xc2",
nBuf: 10,
dst: "\xc2",
nDst: 3,
nSrc: 3,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 3,
errSpan: transform.ErrShortSrc,
}, {
desc: "short source 2 some span",
src: "\xe0\x80",
nBuf: 10,
dst: "\xe0\x80",
nDst: 3,
nSrc: 3,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 3,
errSpan: transform.ErrShortSrc,
}, {
desc: "incomplete but terminated source 1 some span",
src: "\xc2",
nBuf: 10,
dst: "\xc2",
nDst: 4,
nSrc: 4,
atEOF: true,
err: nil,
nSpan: 4,
errSpan: nil,
}, {
desc: "incomplete but terminated source 2 some span",
src: "\xe0\x80",
nBuf: 10,
dst: "\xe0\x80",
nDst: 5,
nSrc: 5,
atEOF: true,
err: nil,
nSpan: 5,
errSpan: nil,
}, {
desc: "exact fit dst",
src: "a!",
nBuf: 6,
dst: "\uff01",
nDst: 6,
nSrc: 2,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "empty dst",
src: "\u0300",
nBuf: 0,
dst: "\u0300",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 2,
errSpan: nil,
}, {
desc: "empty dst ascii",
src: "a",
nBuf: 0,
dst: "",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short dst 1",
src: "a\uffe0",
nBuf: 4,
dst: "\uffe0",
nDst: 3,
nSrc: 1,
atEOF: false,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short dst 2",
src: "不夠",
nBuf: 3,
dst: "不夠",
nDst: 3,
nSrc: 3,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 6,
errSpan: nil,
}, {
desc: "short dst ascii",
src: "ascii",
nBuf: 3,
dst: "", // U+ff41, ...
nDst: 3,
nSrc: 1,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "ambiguous",
src: "\uffe9",
nBuf: 4,
dst: "\u2190",
nDst: 3,
nSrc: 3,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}} {
tc.doTest(t, Widen)
}
}
func TestNarrowSingleRunes(t *testing.T) {
for r := rune(0); r < 0x1FFFF; r++ {
if loSurrogate <= r && r <= hiSurrogate {
continue
}
alt, _ := narrowRune(r)
want := string(alt)
got := Narrow.String(string(r))
if got != want {
t.Errorf("Narrow().String(%U) = %+q; want %+q", r, got, want)
}
}
}
func TestNarrow(t *testing.T) {
for _, tc := range []transformTest{{
desc: "empty",
src: "",
nBuf: 10,
dst: "",
nDst: 0,
nSrc: 0,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: nil,
}, {
desc: "short source 1",
src: "a\xc2",
nBuf: 10,
dst: "a\xc2",
nDst: 1,
nSrc: 1,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 1,
errSpan: transform.ErrShortSrc,
}, {
desc: "short source 2",
src: "\xe0\x80",
nBuf: 10,
dst: "a\xe0\x80",
nDst: 1,
nSrc: 3,
atEOF: false,
err: transform.ErrShortSrc,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "incomplete but terminated source 1",
src: "\xc2",
nBuf: 10,
dst: "a\xc2",
nDst: 2,
nSrc: 4,
atEOF: true,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "incomplete but terminated source 2",
src: "\xe0\x80",
nBuf: 10,
dst: "a\xe0\x80",
nDst: 3,
nSrc: 5,
atEOF: true,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "exact fit dst",
src: "\uff01",
nBuf: 2,
dst: "a!",
nDst: 2,
nSrc: 6,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "exact fit dst some span",
src: "a\uff01",
nBuf: 2,
dst: "a!",
nDst: 2,
nSrc: 4,
atEOF: false,
err: nil,
nSpan: 1,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "empty dst",
src: "\u0300",
nBuf: 0,
dst: "\u0300",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 2,
errSpan: nil,
}, {
desc: "empty dst ascii",
src: "a",
nBuf: 0,
dst: "a",
nDst: 0,
nSrc: 0,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 1,
errSpan: nil,
}, {
desc: "short dst 1",
src: "\uffe0", // ¢
nBuf: 2,
dst: "a\u00a2", // ¢
nDst: 1,
nSrc: 3,
atEOF: false,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short dst 2",
src: "不夠",
nBuf: 3,
dst: "不夠",
nDst: 3,
nSrc: 3,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 6,
errSpan: nil,
}, {
// Create a narrow variant of ambiguous runes, if they exist.
desc: "ambiguous",
src: "\u2190",
nBuf: 4,
dst: "\uffe9",
nDst: 3,
nSrc: 3,
atEOF: false,
err: nil,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "short dst fast path",
src: "fast",
nBuf: 3,
dst: "fast",
nDst: 3,
nSrc: 3,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 4,
errSpan: nil,
}, {
desc: "short dst larger buffer",
src: "\uff21" + strings.Repeat("0", 127) + "B",
nBuf: 128,
dst: "A" + strings.Repeat("0", 127) + "B",
nDst: 128,
nSrc: 130,
atEOF: true,
err: transform.ErrShortDst,
nSpan: 0,
errSpan: transform.ErrEndOfSpan,
}, {
desc: "fast path alternation",
src: "fast路徑fast路徑",
nBuf: 20,
dst: "fast路徑fast路徑",
nDst: 20,
nSrc: 20,
atEOF: true,
err: nil,
nSpan: 20,
errSpan: nil,
}} {
tc.doTest(t, Narrow)
}
}
func bench(b *testing.B, t Transformer, s string) {
dst := make([]byte, 1024)
src := []byte(s)
b.SetBytes(int64(len(src)))
b.ResetTimer()
for i := 0; i < b.N; i++ {
t.Transform(dst, src, true)
}
}
func changingRunes(f func(r rune) (rune, bool)) string {
buf := &bytes.Buffer{}
for r := rune(0); r <= 0xFFFF; r++ {
if _, ok := foldRune(r); ok {
buf.WriteRune(r)
}
}
return buf.String()
}
func BenchmarkFoldASCII(b *testing.B) {
bench(b, Fold, testtext.ASCII)
}
func BenchmarkFoldCJK(b *testing.B) {
bench(b, Fold, testtext.CJK)
}
func BenchmarkFoldNonCanonical(b *testing.B) {
bench(b, Fold, changingRunes(foldRune))
}
func BenchmarkFoldOther(b *testing.B) {
bench(b, Fold, testtext.TwoByteUTF8+testtext.ThreeByteUTF8)
}
func BenchmarkWideASCII(b *testing.B) {
bench(b, Widen, testtext.ASCII)
}
func BenchmarkWideCJK(b *testing.B) {
bench(b, Widen, testtext.CJK)
}
func BenchmarkWideNonCanonical(b *testing.B) {
bench(b, Widen, changingRunes(widenRune))
}
func BenchmarkWideOther(b *testing.B) {
bench(b, Widen, testtext.TwoByteUTF8+testtext.ThreeByteUTF8)
}
func BenchmarkNarrowASCII(b *testing.B) {
bench(b, Narrow, testtext.ASCII)
}
func BenchmarkNarrowCJK(b *testing.B) {
bench(b, Narrow, testtext.CJK)
}
func BenchmarkNarrowNonCanonical(b *testing.B) {
bench(b, Narrow, changingRunes(narrowRune))
}
func BenchmarkNarrowOther(b *testing.B) {
bench(b, Narrow, testtext.TwoByteUTF8+testtext.ThreeByteUTF8)
}