vendorify
diff --git a/go/vendor/golang.org/x/text/width/gen_common.go b/go/vendor/golang.org/x/text/width/gen_common.go
new file mode 100644
index 0000000..601e752
--- /dev/null
+++ b/go/vendor/golang.org/x/text/width/gen_common.go
@@ -0,0 +1,96 @@
+// 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 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)
+	})
+}