aboutsummaryrefslogtreecommitdiff
path: root/vendor/github.com/mattn/go-runewidth
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/mattn/go-runewidth')
-rw-r--r--vendor/github.com/mattn/go-runewidth/.travis.yml16
-rw-r--r--vendor/github.com/mattn/go-runewidth/LICENSE21
-rw-r--r--vendor/github.com/mattn/go-runewidth/README.md27
-rw-r--r--vendor/github.com/mattn/go-runewidth/go.test.sh12
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth.go257
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_appengine.go8
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_js.go9
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_posix.go82
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_table.go437
-rw-r--r--vendor/github.com/mattn/go-runewidth/runewidth_windows.go28
10 files changed, 897 insertions, 0 deletions
diff --git a/vendor/github.com/mattn/go-runewidth/.travis.yml b/vendor/github.com/mattn/go-runewidth/.travis.yml
new file mode 100644
index 0000000..6a21813
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/.travis.yml
@@ -0,0 +1,16 @@
1language: go
2sudo: false
3go:
4 - 1.13.x
5 - tip
6
7before_install:
8 - go get -t -v ./...
9
10script:
11 - go generate
12 - git diff --cached --exit-code
13 - ./go.test.sh
14
15after_success:
16 - bash <(curl -s https://codecov.io/bash)
diff --git a/vendor/github.com/mattn/go-runewidth/LICENSE b/vendor/github.com/mattn/go-runewidth/LICENSE
new file mode 100644
index 0000000..91b5cef
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/LICENSE
@@ -0,0 +1,21 @@
1The MIT License (MIT)
2
3Copyright (c) 2016 Yasuhiro Matsumoto
4
5Permission is hereby granted, free of charge, to any person obtaining a copy
6of this software and associated documentation files (the "Software"), to deal
7in the Software without restriction, including without limitation the rights
8to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9copies of the Software, and to permit persons to whom the Software is
10furnished to do so, subject to the following conditions:
11
12The above copyright notice and this permission notice shall be included in all
13copies or substantial portions of the Software.
14
15THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21SOFTWARE.
diff --git a/vendor/github.com/mattn/go-runewidth/README.md b/vendor/github.com/mattn/go-runewidth/README.md
new file mode 100644
index 0000000..aa56ab9
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/README.md
@@ -0,0 +1,27 @@
1go-runewidth
2============
3
4[![Build Status](https://travis-ci.org/mattn/go-runewidth.png?branch=master)](https://travis-ci.org/mattn/go-runewidth)
5[![Codecov](https://codecov.io/gh/mattn/go-runewidth/branch/master/graph/badge.svg)](https://codecov.io/gh/mattn/go-runewidth)
6[![GoDoc](https://godoc.org/github.com/mattn/go-runewidth?status.svg)](http://godoc.org/github.com/mattn/go-runewidth)
7[![Go Report Card](https://goreportcard.com/badge/github.com/mattn/go-runewidth)](https://goreportcard.com/report/github.com/mattn/go-runewidth)
8
9Provides functions to get fixed width of the character or string.
10
11Usage
12-----
13
14```go
15runewidth.StringWidth("つのだ☆HIRO") == 12
16```
17
18
19Author
20------
21
22Yasuhiro Matsumoto
23
24License
25-------
26
27under the MIT License: http://mattn.mit-license.org/2013
diff --git a/vendor/github.com/mattn/go-runewidth/go.test.sh b/vendor/github.com/mattn/go-runewidth/go.test.sh
new file mode 100644
index 0000000..012162b
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/go.test.sh
@@ -0,0 +1,12 @@
1#!/usr/bin/env bash
2
3set -e
4echo "" > coverage.txt
5
6for d in $(go list ./... | grep -v vendor); do
7 go test -race -coverprofile=profile.out -covermode=atomic "$d"
8 if [ -f profile.out ]; then
9 cat profile.out >> coverage.txt
10 rm profile.out
11 fi
12done
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth.go b/vendor/github.com/mattn/go-runewidth/runewidth.go
new file mode 100644
index 0000000..19f8e04
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth.go
@@ -0,0 +1,257 @@
1package runewidth
2
3import (
4 "os"
5)
6
7//go:generate go run script/generate.go
8
9var (
10 // EastAsianWidth will be set true if the current locale is CJK
11 EastAsianWidth bool
12
13 // ZeroWidthJoiner is flag to set to use UTR#51 ZWJ
14 ZeroWidthJoiner bool
15
16 // DefaultCondition is a condition in current locale
17 DefaultCondition = &Condition{}
18)
19
20func init() {
21 handleEnv()
22}
23
24func handleEnv() {
25 env := os.Getenv("RUNEWIDTH_EASTASIAN")
26 if env == "" {
27 EastAsianWidth = IsEastAsian()
28 } else {
29 EastAsianWidth = env == "1"
30 }
31 // update DefaultCondition
32 DefaultCondition.EastAsianWidth = EastAsianWidth
33 DefaultCondition.ZeroWidthJoiner = ZeroWidthJoiner
34}
35
36type interval struct {
37 first rune
38 last rune
39}
40
41type table []interval
42
43func inTables(r rune, ts ...table) bool {
44 for _, t := range ts {
45 if inTable(r, t) {
46 return true
47 }
48 }
49 return false
50}
51
52func inTable(r rune, t table) bool {
53 if r < t[0].first {
54 return false
55 }
56
57 bot := 0
58 top := len(t) - 1
59 for top >= bot {
60 mid := (bot + top) >> 1
61
62 switch {
63 case t[mid].last < r:
64 bot = mid + 1
65 case t[mid].first > r:
66 top = mid - 1
67 default:
68 return true
69 }
70 }
71
72 return false
73}
74
75var private = table{
76 {0x00E000, 0x00F8FF}, {0x0F0000, 0x0FFFFD}, {0x100000, 0x10FFFD},
77}
78
79var nonprint = table{
80 {0x0000, 0x001F}, {0x007F, 0x009F}, {0x00AD, 0x00AD},
81 {0x070F, 0x070F}, {0x180B, 0x180E}, {0x200B, 0x200F},
82 {0x2028, 0x202E}, {0x206A, 0x206F}, {0xD800, 0xDFFF},
83 {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFB}, {0xFFFE, 0xFFFF},
84}
85
86// Condition have flag EastAsianWidth whether the current locale is CJK or not.
87type Condition struct {
88 EastAsianWidth bool
89 ZeroWidthJoiner bool
90}
91
92// NewCondition return new instance of Condition which is current locale.
93func NewCondition() *Condition {
94 return &Condition{
95 EastAsianWidth: EastAsianWidth,
96 ZeroWidthJoiner: ZeroWidthJoiner,
97 }
98}
99
100// RuneWidth returns the number of cells in r.
101// See http://www.unicode.org/reports/tr11/
102func (c *Condition) RuneWidth(r rune) int {
103 switch {
104 case r < 0 || r > 0x10FFFF || inTables(r, nonprint, combining, notassigned):
105 return 0
106 case (c.EastAsianWidth && IsAmbiguousWidth(r)) || inTables(r, doublewidth):
107 return 2
108 default:
109 return 1
110 }
111}
112
113func (c *Condition) stringWidth(s string) (width int) {
114 for _, r := range []rune(s) {
115 width += c.RuneWidth(r)
116 }
117 return width
118}
119
120func (c *Condition) stringWidthZeroJoiner(s string) (width int) {
121 r1, r2 := rune(0), rune(0)
122 for _, r := range []rune(s) {
123 if r == 0xFE0E || r == 0xFE0F {
124 continue
125 }
126 w := c.RuneWidth(r)
127 if r2 == 0x200D && inTables(r, emoji) && inTables(r1, emoji) {
128 if width < w {
129 width = w
130 }
131 } else {
132 width += w
133 }
134 r1, r2 = r2, r
135 }
136 return width
137}
138
139// StringWidth return width as you can see
140func (c *Condition) StringWidth(s string) (width int) {
141 if c.ZeroWidthJoiner {
142 return c.stringWidthZeroJoiner(s)
143 }
144 return c.stringWidth(s)
145}
146
147// Truncate return string truncated with w cells
148func (c *Condition) Truncate(s string, w int, tail string) string {
149 if c.StringWidth(s) <= w {
150 return s
151 }
152 r := []rune(s)
153 tw := c.StringWidth(tail)
154 w -= tw
155 width := 0
156 i := 0
157 for ; i < len(r); i++ {
158 cw := c.RuneWidth(r[i])
159 if width+cw > w {
160 break
161 }
162 width += cw
163 }
164 return string(r[0:i]) + tail
165}
166
167// Wrap return string wrapped with w cells
168func (c *Condition) Wrap(s string, w int) string {
169 width := 0
170 out := ""
171 for _, r := range []rune(s) {
172 cw := RuneWidth(r)
173 if r == '\n' {
174 out += string(r)
175 width = 0
176 continue
177 } else if width+cw > w {
178 out += "\n"
179 width = 0
180 out += string(r)
181 width += cw
182 continue
183 }
184 out += string(r)
185 width += cw
186 }
187 return out
188}
189
190// FillLeft return string filled in left by spaces in w cells
191func (c *Condition) FillLeft(s string, w int) string {
192 width := c.StringWidth(s)
193 count := w - width
194 if count > 0 {
195 b := make([]byte, count)
196 for i := range b {
197 b[i] = ' '
198 }
199 return string(b) + s
200 }
201 return s
202}
203
204// FillRight return string filled in left by spaces in w cells
205func (c *Condition) FillRight(s string, w int) string {
206 width := c.StringWidth(s)
207 count := w - width
208 if count > 0 {
209 b := make([]byte, count)
210 for i := range b {
211 b[i] = ' '
212 }
213 return s + string(b)
214 }
215 return s
216}
217
218// RuneWidth returns the number of cells in r.
219// See http://www.unicode.org/reports/tr11/
220func RuneWidth(r rune) int {
221 return DefaultCondition.RuneWidth(r)
222}
223
224// IsAmbiguousWidth returns whether is ambiguous width or not.
225func IsAmbiguousWidth(r rune) bool {
226 return inTables(r, private, ambiguous)
227}
228
229// IsNeutralWidth returns whether is neutral width or not.
230func IsNeutralWidth(r rune) bool {
231 return inTable(r, neutral)
232}
233
234// StringWidth return width as you can see
235func StringWidth(s string) (width int) {
236 return DefaultCondition.StringWidth(s)
237}
238
239// Truncate return string truncated with w cells
240func Truncate(s string, w int, tail string) string {
241 return DefaultCondition.Truncate(s, w, tail)
242}
243
244// Wrap return string wrapped with w cells
245func Wrap(s string, w int) string {
246 return DefaultCondition.Wrap(s, w)
247}
248
249// FillLeft return string filled in left by spaces in w cells
250func FillLeft(s string, w int) string {
251 return DefaultCondition.FillLeft(s, w)
252}
253
254// FillRight return string filled in left by spaces in w cells
255func FillRight(s string, w int) string {
256 return DefaultCondition.FillRight(s, w)
257}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
new file mode 100644
index 0000000..7d99f6e
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_appengine.go
@@ -0,0 +1,8 @@
1// +build appengine
2
3package runewidth
4
5// IsEastAsian return true if the current locale is CJK
6func IsEastAsian() bool {
7 return false
8}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_js.go b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
new file mode 100644
index 0000000..c5fdf40
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_js.go
@@ -0,0 +1,9 @@
1// +build js
2// +build !appengine
3
4package runewidth
5
6func IsEastAsian() bool {
7 // TODO: Implement this for the web. Detect east asian in a compatible way, and return true.
8 return false
9}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_posix.go b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
new file mode 100644
index 0000000..480ad74
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_posix.go
@@ -0,0 +1,82 @@
1// +build !windows
2// +build !js
3// +build !appengine
4
5package runewidth
6
7import (
8 "os"
9 "regexp"
10 "strings"
11)
12
13var reLoc = regexp.MustCompile(`^[a-z][a-z][a-z]?(?:_[A-Z][A-Z])?\.(.+)`)
14
15var mblenTable = map[string]int{
16 "utf-8": 6,
17 "utf8": 6,
18 "jis": 8,
19 "eucjp": 3,
20 "euckr": 2,
21 "euccn": 2,
22 "sjis": 2,
23 "cp932": 2,
24 "cp51932": 2,
25 "cp936": 2,
26 "cp949": 2,
27 "cp950": 2,
28 "big5": 2,
29 "gbk": 2,
30 "gb2312": 2,
31}
32
33func isEastAsian(locale string) bool {
34 charset := strings.ToLower(locale)
35 r := reLoc.FindStringSubmatch(locale)
36 if len(r) == 2 {
37 charset = strings.ToLower(r[1])
38 }
39
40 if strings.HasSuffix(charset, "@cjk_narrow") {
41 return false
42 }
43
44 for pos, b := range []byte(charset) {
45 if b == '@' {
46 charset = charset[:pos]
47 break
48 }
49 }
50 max := 1
51 if m, ok := mblenTable[charset]; ok {
52 max = m
53 }
54 if max > 1 && (charset[0] != 'u' ||
55 strings.HasPrefix(locale, "ja") ||
56 strings.HasPrefix(locale, "ko") ||
57 strings.HasPrefix(locale, "zh")) {
58 return true
59 }
60 return false
61}
62
63// IsEastAsian return true if the current locale is CJK
64func IsEastAsian() bool {
65 locale := os.Getenv("LC_ALL")
66 if locale == "" {
67 locale = os.Getenv("LC_CTYPE")
68 }
69 if locale == "" {
70 locale = os.Getenv("LANG")
71 }
72
73 // ignore C locale
74 if locale == "POSIX" || locale == "C" {
75 return false
76 }
77 if len(locale) > 1 && locale[0] == 'C' && (locale[1] == '.' || locale[1] == '-') {
78 return false
79 }
80
81 return isEastAsian(locale)
82}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_table.go b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
new file mode 100644
index 0000000..b27d77d
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_table.go
@@ -0,0 +1,437 @@
1// Code generated by script/generate.go. DO NOT EDIT.
2
3package runewidth
4
5var combining = table{
6 {0x0300, 0x036F}, {0x0483, 0x0489}, {0x07EB, 0x07F3},
7 {0x0C00, 0x0C00}, {0x0C04, 0x0C04}, {0x0D00, 0x0D01},
8 {0x135D, 0x135F}, {0x1A7F, 0x1A7F}, {0x1AB0, 0x1AC0},
9 {0x1B6B, 0x1B73}, {0x1DC0, 0x1DF9}, {0x1DFB, 0x1DFF},
10 {0x20D0, 0x20F0}, {0x2CEF, 0x2CF1}, {0x2DE0, 0x2DFF},
11 {0x3099, 0x309A}, {0xA66F, 0xA672}, {0xA674, 0xA67D},
12 {0xA69E, 0xA69F}, {0xA6F0, 0xA6F1}, {0xA8E0, 0xA8F1},
13 {0xFE20, 0xFE2F}, {0x101FD, 0x101FD}, {0x10376, 0x1037A},
14 {0x10EAB, 0x10EAC}, {0x10F46, 0x10F50}, {0x11300, 0x11301},
15 {0x1133B, 0x1133C}, {0x11366, 0x1136C}, {0x11370, 0x11374},
16 {0x16AF0, 0x16AF4}, {0x1D165, 0x1D169}, {0x1D16D, 0x1D172},
17 {0x1D17B, 0x1D182}, {0x1D185, 0x1D18B}, {0x1D1AA, 0x1D1AD},
18 {0x1D242, 0x1D244}, {0x1E000, 0x1E006}, {0x1E008, 0x1E018},
19 {0x1E01B, 0x1E021}, {0x1E023, 0x1E024}, {0x1E026, 0x1E02A},
20 {0x1E8D0, 0x1E8D6},
21}
22
23var doublewidth = table{
24 {0x1100, 0x115F}, {0x231A, 0x231B}, {0x2329, 0x232A},
25 {0x23E9, 0x23EC}, {0x23F0, 0x23F0}, {0x23F3, 0x23F3},
26 {0x25FD, 0x25FE}, {0x2614, 0x2615}, {0x2648, 0x2653},
27 {0x267F, 0x267F}, {0x2693, 0x2693}, {0x26A1, 0x26A1},
28 {0x26AA, 0x26AB}, {0x26BD, 0x26BE}, {0x26C4, 0x26C5},
29 {0x26CE, 0x26CE}, {0x26D4, 0x26D4}, {0x26EA, 0x26EA},
30 {0x26F2, 0x26F3}, {0x26F5, 0x26F5}, {0x26FA, 0x26FA},
31 {0x26FD, 0x26FD}, {0x2705, 0x2705}, {0x270A, 0x270B},
32 {0x2728, 0x2728}, {0x274C, 0x274C}, {0x274E, 0x274E},
33 {0x2753, 0x2755}, {0x2757, 0x2757}, {0x2795, 0x2797},
34 {0x27B0, 0x27B0}, {0x27BF, 0x27BF}, {0x2B1B, 0x2B1C},
35 {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x2E80, 0x2E99},
36 {0x2E9B, 0x2EF3}, {0x2F00, 0x2FD5}, {0x2FF0, 0x2FFB},
37 {0x3000, 0x303E}, {0x3041, 0x3096}, {0x3099, 0x30FF},
38 {0x3105, 0x312F}, {0x3131, 0x318E}, {0x3190, 0x31E3},
39 {0x31F0, 0x321E}, {0x3220, 0x3247}, {0x3250, 0x4DBF},
40 {0x4E00, 0xA48C}, {0xA490, 0xA4C6}, {0xA960, 0xA97C},
41 {0xAC00, 0xD7A3}, {0xF900, 0xFAFF}, {0xFE10, 0xFE19},
42 {0xFE30, 0xFE52}, {0xFE54, 0xFE66}, {0xFE68, 0xFE6B},
43 {0xFF01, 0xFF60}, {0xFFE0, 0xFFE6}, {0x16FE0, 0x16FE4},
44 {0x16FF0, 0x16FF1}, {0x17000, 0x187F7}, {0x18800, 0x18CD5},
45 {0x18D00, 0x18D08}, {0x1B000, 0x1B11E}, {0x1B150, 0x1B152},
46 {0x1B164, 0x1B167}, {0x1B170, 0x1B2FB}, {0x1F004, 0x1F004},
47 {0x1F0CF, 0x1F0CF}, {0x1F18E, 0x1F18E}, {0x1F191, 0x1F19A},
48 {0x1F200, 0x1F202}, {0x1F210, 0x1F23B}, {0x1F240, 0x1F248},
49 {0x1F250, 0x1F251}, {0x1F260, 0x1F265}, {0x1F300, 0x1F320},
50 {0x1F32D, 0x1F335}, {0x1F337, 0x1F37C}, {0x1F37E, 0x1F393},
51 {0x1F3A0, 0x1F3CA}, {0x1F3CF, 0x1F3D3}, {0x1F3E0, 0x1F3F0},
52 {0x1F3F4, 0x1F3F4}, {0x1F3F8, 0x1F43E}, {0x1F440, 0x1F440},
53 {0x1F442, 0x1F4FC}, {0x1F4FF, 0x1F53D}, {0x1F54B, 0x1F54E},
54 {0x1F550, 0x1F567}, {0x1F57A, 0x1F57A}, {0x1F595, 0x1F596},
55 {0x1F5A4, 0x1F5A4}, {0x1F5FB, 0x1F64F}, {0x1F680, 0x1F6C5},
56 {0x1F6CC, 0x1F6CC}, {0x1F6D0, 0x1F6D2}, {0x1F6D5, 0x1F6D7},
57 {0x1F6EB, 0x1F6EC}, {0x1F6F4, 0x1F6FC}, {0x1F7E0, 0x1F7EB},
58 {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1F978},
59 {0x1F97A, 0x1F9CB}, {0x1F9CD, 0x1F9FF}, {0x1FA70, 0x1FA74},
60 {0x1FA78, 0x1FA7A}, {0x1FA80, 0x1FA86}, {0x1FA90, 0x1FAA8},
61 {0x1FAB0, 0x1FAB6}, {0x1FAC0, 0x1FAC2}, {0x1FAD0, 0x1FAD6},
62 {0x20000, 0x2FFFD}, {0x30000, 0x3FFFD},
63}
64
65var ambiguous = table{
66 {0x00A1, 0x00A1}, {0x00A4, 0x00A4}, {0x00A7, 0x00A8},
67 {0x00AA, 0x00AA}, {0x00AD, 0x00AE}, {0x00B0, 0x00B4},
68 {0x00B6, 0x00BA}, {0x00BC, 0x00BF}, {0x00C6, 0x00C6},
69 {0x00D0, 0x00D0}, {0x00D7, 0x00D8}, {0x00DE, 0x00E1},
70 {0x00E6, 0x00E6}, {0x00E8, 0x00EA}, {0x00EC, 0x00ED},
71 {0x00F0, 0x00F0}, {0x00F2, 0x00F3}, {0x00F7, 0x00FA},
72 {0x00FC, 0x00FC}, {0x00FE, 0x00FE}, {0x0101, 0x0101},
73 {0x0111, 0x0111}, {0x0113, 0x0113}, {0x011B, 0x011B},
74 {0x0126, 0x0127}, {0x012B, 0x012B}, {0x0131, 0x0133},
75 {0x0138, 0x0138}, {0x013F, 0x0142}, {0x0144, 0x0144},
76 {0x0148, 0x014B}, {0x014D, 0x014D}, {0x0152, 0x0153},
77 {0x0166, 0x0167}, {0x016B, 0x016B}, {0x01CE, 0x01CE},
78 {0x01D0, 0x01D0}, {0x01D2, 0x01D2}, {0x01D4, 0x01D4},
79 {0x01D6, 0x01D6}, {0x01D8, 0x01D8}, {0x01DA, 0x01DA},
80 {0x01DC, 0x01DC}, {0x0251, 0x0251}, {0x0261, 0x0261},
81 {0x02C4, 0x02C4}, {0x02C7, 0x02C7}, {0x02C9, 0x02CB},
82 {0x02CD, 0x02CD}, {0x02D0, 0x02D0}, {0x02D8, 0x02DB},
83 {0x02DD, 0x02DD}, {0x02DF, 0x02DF}, {0x0300, 0x036F},
84 {0x0391, 0x03A1}, {0x03A3, 0x03A9}, {0x03B1, 0x03C1},
85 {0x03C3, 0x03C9}, {0x0401, 0x0401}, {0x0410, 0x044F},
86 {0x0451, 0x0451}, {0x2010, 0x2010}, {0x2013, 0x2016},
87 {0x2018, 0x2019}, {0x201C, 0x201D}, {0x2020, 0x2022},
88 {0x2024, 0x2027}, {0x2030, 0x2030}, {0x2032, 0x2033},
89 {0x2035, 0x2035}, {0x203B, 0x203B}, {0x203E, 0x203E},
90 {0x2074, 0x2074}, {0x207F, 0x207F}, {0x2081, 0x2084},
91 {0x20AC, 0x20AC}, {0x2103, 0x2103}, {0x2105, 0x2105},
92 {0x2109, 0x2109}, {0x2113, 0x2113}, {0x2116, 0x2116},
93 {0x2121, 0x2122}, {0x2126, 0x2126}, {0x212B, 0x212B},
94 {0x2153, 0x2154}, {0x215B, 0x215E}, {0x2160, 0x216B},
95 {0x2170, 0x2179}, {0x2189, 0x2189}, {0x2190, 0x2199},
96 {0x21B8, 0x21B9}, {0x21D2, 0x21D2}, {0x21D4, 0x21D4},
97 {0x21E7, 0x21E7}, {0x2200, 0x2200}, {0x2202, 0x2203},
98 {0x2207, 0x2208}, {0x220B, 0x220B}, {0x220F, 0x220F},
99 {0x2211, 0x2211}, {0x2215, 0x2215}, {0x221A, 0x221A},
100 {0x221D, 0x2220}, {0x2223, 0x2223}, {0x2225, 0x2225},
101 {0x2227, 0x222C}, {0x222E, 0x222E}, {0x2234, 0x2237},
102 {0x223C, 0x223D}, {0x2248, 0x2248}, {0x224C, 0x224C},
103 {0x2252, 0x2252}, {0x2260, 0x2261}, {0x2264, 0x2267},
104 {0x226A, 0x226B}, {0x226E, 0x226F}, {0x2282, 0x2283},
105 {0x2286, 0x2287}, {0x2295, 0x2295}, {0x2299, 0x2299},
106 {0x22A5, 0x22A5}, {0x22BF, 0x22BF}, {0x2312, 0x2312},
107 {0x2460, 0x24E9}, {0x24EB, 0x254B}, {0x2550, 0x2573},
108 {0x2580, 0x258F}, {0x2592, 0x2595}, {0x25A0, 0x25A1},
109 {0x25A3, 0x25A9}, {0x25B2, 0x25B3}, {0x25B6, 0x25B7},
110 {0x25BC, 0x25BD}, {0x25C0, 0x25C1}, {0x25C6, 0x25C8},
111 {0x25CB, 0x25CB}, {0x25CE, 0x25D1}, {0x25E2, 0x25E5},
112 {0x25EF, 0x25EF}, {0x2605, 0x2606}, {0x2609, 0x2609},
113 {0x260E, 0x260F}, {0x261C, 0x261C}, {0x261E, 0x261E},
114 {0x2640, 0x2640}, {0x2642, 0x2642}, {0x2660, 0x2661},
115 {0x2663, 0x2665}, {0x2667, 0x266A}, {0x266C, 0x266D},
116 {0x266F, 0x266F}, {0x269E, 0x269F}, {0x26BF, 0x26BF},
117 {0x26C6, 0x26CD}, {0x26CF, 0x26D3}, {0x26D5, 0x26E1},
118 {0x26E3, 0x26E3}, {0x26E8, 0x26E9}, {0x26EB, 0x26F1},
119 {0x26F4, 0x26F4}, {0x26F6, 0x26F9}, {0x26FB, 0x26FC},
120 {0x26FE, 0x26FF}, {0x273D, 0x273D}, {0x2776, 0x277F},
121 {0x2B56, 0x2B59}, {0x3248, 0x324F}, {0xE000, 0xF8FF},
122 {0xFE00, 0xFE0F}, {0xFFFD, 0xFFFD}, {0x1F100, 0x1F10A},
123 {0x1F110, 0x1F12D}, {0x1F130, 0x1F169}, {0x1F170, 0x1F18D},
124 {0x1F18F, 0x1F190}, {0x1F19B, 0x1F1AC}, {0xE0100, 0xE01EF},
125 {0xF0000, 0xFFFFD}, {0x100000, 0x10FFFD},
126}
127var notassigned = table{
128 {0x27E6, 0x27ED}, {0x2985, 0x2986},
129}
130
131var neutral = table{
132 {0x0000, 0x001F}, {0x007F, 0x00A0}, {0x00A9, 0x00A9},
133 {0x00AB, 0x00AB}, {0x00B5, 0x00B5}, {0x00BB, 0x00BB},
134 {0x00C0, 0x00C5}, {0x00C7, 0x00CF}, {0x00D1, 0x00D6},
135 {0x00D9, 0x00DD}, {0x00E2, 0x00E5}, {0x00E7, 0x00E7},
136 {0x00EB, 0x00EB}, {0x00EE, 0x00EF}, {0x00F1, 0x00F1},
137 {0x00F4, 0x00F6}, {0x00FB, 0x00FB}, {0x00FD, 0x00FD},
138 {0x00FF, 0x0100}, {0x0102, 0x0110}, {0x0112, 0x0112},
139 {0x0114, 0x011A}, {0x011C, 0x0125}, {0x0128, 0x012A},
140 {0x012C, 0x0130}, {0x0134, 0x0137}, {0x0139, 0x013E},
141 {0x0143, 0x0143}, {0x0145, 0x0147}, {0x014C, 0x014C},
142 {0x014E, 0x0151}, {0x0154, 0x0165}, {0x0168, 0x016A},
143 {0x016C, 0x01CD}, {0x01CF, 0x01CF}, {0x01D1, 0x01D1},
144 {0x01D3, 0x01D3}, {0x01D5, 0x01D5}, {0x01D7, 0x01D7},
145 {0x01D9, 0x01D9}, {0x01DB, 0x01DB}, {0x01DD, 0x0250},
146 {0x0252, 0x0260}, {0x0262, 0x02C3}, {0x02C5, 0x02C6},
147 {0x02C8, 0x02C8}, {0x02CC, 0x02CC}, {0x02CE, 0x02CF},
148 {0x02D1, 0x02D7}, {0x02DC, 0x02DC}, {0x02DE, 0x02DE},
149 {0x02E0, 0x02FF}, {0x0370, 0x0377}, {0x037A, 0x037F},
150 {0x0384, 0x038A}, {0x038C, 0x038C}, {0x038E, 0x0390},
151 {0x03AA, 0x03B0}, {0x03C2, 0x03C2}, {0x03CA, 0x0400},
152 {0x0402, 0x040F}, {0x0450, 0x0450}, {0x0452, 0x052F},
153 {0x0531, 0x0556}, {0x0559, 0x058A}, {0x058D, 0x058F},
154 {0x0591, 0x05C7}, {0x05D0, 0x05EA}, {0x05EF, 0x05F4},
155 {0x0600, 0x061C}, {0x061E, 0x070D}, {0x070F, 0x074A},
156 {0x074D, 0x07B1}, {0x07C0, 0x07FA}, {0x07FD, 0x082D},
157 {0x0830, 0x083E}, {0x0840, 0x085B}, {0x085E, 0x085E},
158 {0x0860, 0x086A}, {0x08A0, 0x08B4}, {0x08B6, 0x08C7},
159 {0x08D3, 0x0983}, {0x0985, 0x098C}, {0x098F, 0x0990},
160 {0x0993, 0x09A8}, {0x09AA, 0x09B0}, {0x09B2, 0x09B2},
161 {0x09B6, 0x09B9}, {0x09BC, 0x09C4}, {0x09C7, 0x09C8},
162 {0x09CB, 0x09CE}, {0x09D7, 0x09D7}, {0x09DC, 0x09DD},
163 {0x09DF, 0x09E3}, {0x09E6, 0x09FE}, {0x0A01, 0x0A03},
164 {0x0A05, 0x0A0A}, {0x0A0F, 0x0A10}, {0x0A13, 0x0A28},
165 {0x0A2A, 0x0A30}, {0x0A32, 0x0A33}, {0x0A35, 0x0A36},
166 {0x0A38, 0x0A39}, {0x0A3C, 0x0A3C}, {0x0A3E, 0x0A42},
167 {0x0A47, 0x0A48}, {0x0A4B, 0x0A4D}, {0x0A51, 0x0A51},
168 {0x0A59, 0x0A5C}, {0x0A5E, 0x0A5E}, {0x0A66, 0x0A76},
169 {0x0A81, 0x0A83}, {0x0A85, 0x0A8D}, {0x0A8F, 0x0A91},
170 {0x0A93, 0x0AA8}, {0x0AAA, 0x0AB0}, {0x0AB2, 0x0AB3},
171 {0x0AB5, 0x0AB9}, {0x0ABC, 0x0AC5}, {0x0AC7, 0x0AC9},
172 {0x0ACB, 0x0ACD}, {0x0AD0, 0x0AD0}, {0x0AE0, 0x0AE3},
173 {0x0AE6, 0x0AF1}, {0x0AF9, 0x0AFF}, {0x0B01, 0x0B03},
174 {0x0B05, 0x0B0C}, {0x0B0F, 0x0B10}, {0x0B13, 0x0B28},
175 {0x0B2A, 0x0B30}, {0x0B32, 0x0B33}, {0x0B35, 0x0B39},
176 {0x0B3C, 0x0B44}, {0x0B47, 0x0B48}, {0x0B4B, 0x0B4D},
177 {0x0B55, 0x0B57}, {0x0B5C, 0x0B5D}, {0x0B5F, 0x0B63},
178 {0x0B66, 0x0B77}, {0x0B82, 0x0B83}, {0x0B85, 0x0B8A},
179 {0x0B8E, 0x0B90}, {0x0B92, 0x0B95}, {0x0B99, 0x0B9A},
180 {0x0B9C, 0x0B9C}, {0x0B9E, 0x0B9F}, {0x0BA3, 0x0BA4},
181 {0x0BA8, 0x0BAA}, {0x0BAE, 0x0BB9}, {0x0BBE, 0x0BC2},
182 {0x0BC6, 0x0BC8}, {0x0BCA, 0x0BCD}, {0x0BD0, 0x0BD0},
183 {0x0BD7, 0x0BD7}, {0x0BE6, 0x0BFA}, {0x0C00, 0x0C0C},
184 {0x0C0E, 0x0C10}, {0x0C12, 0x0C28}, {0x0C2A, 0x0C39},
185 {0x0C3D, 0x0C44}, {0x0C46, 0x0C48}, {0x0C4A, 0x0C4D},
186 {0x0C55, 0x0C56}, {0x0C58, 0x0C5A}, {0x0C60, 0x0C63},
187 {0x0C66, 0x0C6F}, {0x0C77, 0x0C8C}, {0x0C8E, 0x0C90},
188 {0x0C92, 0x0CA8}, {0x0CAA, 0x0CB3}, {0x0CB5, 0x0CB9},
189 {0x0CBC, 0x0CC4}, {0x0CC6, 0x0CC8}, {0x0CCA, 0x0CCD},
190 {0x0CD5, 0x0CD6}, {0x0CDE, 0x0CDE}, {0x0CE0, 0x0CE3},
191 {0x0CE6, 0x0CEF}, {0x0CF1, 0x0CF2}, {0x0D00, 0x0D0C},
192 {0x0D0E, 0x0D10}, {0x0D12, 0x0D44}, {0x0D46, 0x0D48},
193 {0x0D4A, 0x0D4F}, {0x0D54, 0x0D63}, {0x0D66, 0x0D7F},
194 {0x0D81, 0x0D83}, {0x0D85, 0x0D96}, {0x0D9A, 0x0DB1},
195 {0x0DB3, 0x0DBB}, {0x0DBD, 0x0DBD}, {0x0DC0, 0x0DC6},
196 {0x0DCA, 0x0DCA}, {0x0DCF, 0x0DD4}, {0x0DD6, 0x0DD6},
197 {0x0DD8, 0x0DDF}, {0x0DE6, 0x0DEF}, {0x0DF2, 0x0DF4},
198 {0x0E01, 0x0E3A}, {0x0E3F, 0x0E5B}, {0x0E81, 0x0E82},
199 {0x0E84, 0x0E84}, {0x0E86, 0x0E8A}, {0x0E8C, 0x0EA3},
200 {0x0EA5, 0x0EA5}, {0x0EA7, 0x0EBD}, {0x0EC0, 0x0EC4},
201 {0x0EC6, 0x0EC6}, {0x0EC8, 0x0ECD}, {0x0ED0, 0x0ED9},
202 {0x0EDC, 0x0EDF}, {0x0F00, 0x0F47}, {0x0F49, 0x0F6C},
203 {0x0F71, 0x0F97}, {0x0F99, 0x0FBC}, {0x0FBE, 0x0FCC},
204 {0x0FCE, 0x0FDA}, {0x1000, 0x10C5}, {0x10C7, 0x10C7},
205 {0x10CD, 0x10CD}, {0x10D0, 0x10FF}, {0x1160, 0x1248},
206 {0x124A, 0x124D}, {0x1250, 0x1256}, {0x1258, 0x1258},
207 {0x125A, 0x125D}, {0x1260, 0x1288}, {0x128A, 0x128D},
208 {0x1290, 0x12B0}, {0x12B2, 0x12B5}, {0x12B8, 0x12BE},
209 {0x12C0, 0x12C0}, {0x12C2, 0x12C5}, {0x12C8, 0x12D6},
210 {0x12D8, 0x1310}, {0x1312, 0x1315}, {0x1318, 0x135A},
211 {0x135D, 0x137C}, {0x1380, 0x1399}, {0x13A0, 0x13F5},
212 {0x13F8, 0x13FD}, {0x1400, 0x169C}, {0x16A0, 0x16F8},
213 {0x1700, 0x170C}, {0x170E, 0x1714}, {0x1720, 0x1736},
214 {0x1740, 0x1753}, {0x1760, 0x176C}, {0x176E, 0x1770},
215 {0x1772, 0x1773}, {0x1780, 0x17DD}, {0x17E0, 0x17E9},
216 {0x17F0, 0x17F9}, {0x1800, 0x180E}, {0x1810, 0x1819},
217 {0x1820, 0x1878}, {0x1880, 0x18AA}, {0x18B0, 0x18F5},
218 {0x1900, 0x191E}, {0x1920, 0x192B}, {0x1930, 0x193B},
219 {0x1940, 0x1940}, {0x1944, 0x196D}, {0x1970, 0x1974},
220 {0x1980, 0x19AB}, {0x19B0, 0x19C9}, {0x19D0, 0x19DA},
221 {0x19DE, 0x1A1B}, {0x1A1E, 0x1A5E}, {0x1A60, 0x1A7C},
222 {0x1A7F, 0x1A89}, {0x1A90, 0x1A99}, {0x1AA0, 0x1AAD},
223 {0x1AB0, 0x1AC0}, {0x1B00, 0x1B4B}, {0x1B50, 0x1B7C},
224 {0x1B80, 0x1BF3}, {0x1BFC, 0x1C37}, {0x1C3B, 0x1C49},
225 {0x1C4D, 0x1C88}, {0x1C90, 0x1CBA}, {0x1CBD, 0x1CC7},
226 {0x1CD0, 0x1CFA}, {0x1D00, 0x1DF9}, {0x1DFB, 0x1F15},
227 {0x1F18, 0x1F1D}, {0x1F20, 0x1F45}, {0x1F48, 0x1F4D},
228 {0x1F50, 0x1F57}, {0x1F59, 0x1F59}, {0x1F5B, 0x1F5B},
229 {0x1F5D, 0x1F5D}, {0x1F5F, 0x1F7D}, {0x1F80, 0x1FB4},
230 {0x1FB6, 0x1FC4}, {0x1FC6, 0x1FD3}, {0x1FD6, 0x1FDB},
231 {0x1FDD, 0x1FEF}, {0x1FF2, 0x1FF4}, {0x1FF6, 0x1FFE},
232 {0x2000, 0x200F}, {0x2011, 0x2012}, {0x2017, 0x2017},
233 {0x201A, 0x201B}, {0x201E, 0x201F}, {0x2023, 0x2023},
234 {0x2028, 0x202F}, {0x2031, 0x2031}, {0x2034, 0x2034},
235 {0x2036, 0x203A}, {0x203C, 0x203D}, {0x203F, 0x2064},
236 {0x2066, 0x2071}, {0x2075, 0x207E}, {0x2080, 0x2080},
237 {0x2085, 0x208E}, {0x2090, 0x209C}, {0x20A0, 0x20A8},
238 {0x20AA, 0x20AB}, {0x20AD, 0x20BF}, {0x20D0, 0x20F0},
239 {0x2100, 0x2102}, {0x2104, 0x2104}, {0x2106, 0x2108},
240 {0x210A, 0x2112}, {0x2114, 0x2115}, {0x2117, 0x2120},
241 {0x2123, 0x2125}, {0x2127, 0x212A}, {0x212C, 0x2152},
242 {0x2155, 0x215A}, {0x215F, 0x215F}, {0x216C, 0x216F},
243 {0x217A, 0x2188}, {0x218A, 0x218B}, {0x219A, 0x21B7},
244 {0x21BA, 0x21D1}, {0x21D3, 0x21D3}, {0x21D5, 0x21E6},
245 {0x21E8, 0x21FF}, {0x2201, 0x2201}, {0x2204, 0x2206},
246 {0x2209, 0x220A}, {0x220C, 0x220E}, {0x2210, 0x2210},
247 {0x2212, 0x2214}, {0x2216, 0x2219}, {0x221B, 0x221C},
248 {0x2221, 0x2222}, {0x2224, 0x2224}, {0x2226, 0x2226},
249 {0x222D, 0x222D}, {0x222F, 0x2233}, {0x2238, 0x223B},
250 {0x223E, 0x2247}, {0x2249, 0x224B}, {0x224D, 0x2251},
251 {0x2253, 0x225F}, {0x2262, 0x2263}, {0x2268, 0x2269},
252 {0x226C, 0x226D}, {0x2270, 0x2281}, {0x2284, 0x2285},
253 {0x2288, 0x2294}, {0x2296, 0x2298}, {0x229A, 0x22A4},
254 {0x22A6, 0x22BE}, {0x22C0, 0x2311}, {0x2313, 0x2319},
255 {0x231C, 0x2328}, {0x232B, 0x23E8}, {0x23ED, 0x23EF},
256 {0x23F1, 0x23F2}, {0x23F4, 0x2426}, {0x2440, 0x244A},
257 {0x24EA, 0x24EA}, {0x254C, 0x254F}, {0x2574, 0x257F},
258 {0x2590, 0x2591}, {0x2596, 0x259F}, {0x25A2, 0x25A2},
259 {0x25AA, 0x25B1}, {0x25B4, 0x25B5}, {0x25B8, 0x25BB},
260 {0x25BE, 0x25BF}, {0x25C2, 0x25C5}, {0x25C9, 0x25CA},
261 {0x25CC, 0x25CD}, {0x25D2, 0x25E1}, {0x25E6, 0x25EE},
262 {0x25F0, 0x25FC}, {0x25FF, 0x2604}, {0x2607, 0x2608},
263 {0x260A, 0x260D}, {0x2610, 0x2613}, {0x2616, 0x261B},
264 {0x261D, 0x261D}, {0x261F, 0x263F}, {0x2641, 0x2641},
265 {0x2643, 0x2647}, {0x2654, 0x265F}, {0x2662, 0x2662},
266 {0x2666, 0x2666}, {0x266B, 0x266B}, {0x266E, 0x266E},
267 {0x2670, 0x267E}, {0x2680, 0x2692}, {0x2694, 0x269D},
268 {0x26A0, 0x26A0}, {0x26A2, 0x26A9}, {0x26AC, 0x26BC},
269 {0x26C0, 0x26C3}, {0x26E2, 0x26E2}, {0x26E4, 0x26E7},
270 {0x2700, 0x2704}, {0x2706, 0x2709}, {0x270C, 0x2727},
271 {0x2729, 0x273C}, {0x273E, 0x274B}, {0x274D, 0x274D},
272 {0x274F, 0x2752}, {0x2756, 0x2756}, {0x2758, 0x2775},
273 {0x2780, 0x2794}, {0x2798, 0x27AF}, {0x27B1, 0x27BE},
274 {0x27C0, 0x27E5}, {0x27EE, 0x2984}, {0x2987, 0x2B1A},
275 {0x2B1D, 0x2B4F}, {0x2B51, 0x2B54}, {0x2B5A, 0x2B73},
276 {0x2B76, 0x2B95}, {0x2B97, 0x2C2E}, {0x2C30, 0x2C5E},
277 {0x2C60, 0x2CF3}, {0x2CF9, 0x2D25}, {0x2D27, 0x2D27},
278 {0x2D2D, 0x2D2D}, {0x2D30, 0x2D67}, {0x2D6F, 0x2D70},
279 {0x2D7F, 0x2D96}, {0x2DA0, 0x2DA6}, {0x2DA8, 0x2DAE},
280 {0x2DB0, 0x2DB6}, {0x2DB8, 0x2DBE}, {0x2DC0, 0x2DC6},
281 {0x2DC8, 0x2DCE}, {0x2DD0, 0x2DD6}, {0x2DD8, 0x2DDE},
282 {0x2DE0, 0x2E52}, {0x303F, 0x303F}, {0x4DC0, 0x4DFF},
283 {0xA4D0, 0xA62B}, {0xA640, 0xA6F7}, {0xA700, 0xA7BF},
284 {0xA7C2, 0xA7CA}, {0xA7F5, 0xA82C}, {0xA830, 0xA839},
285 {0xA840, 0xA877}, {0xA880, 0xA8C5}, {0xA8CE, 0xA8D9},
286 {0xA8E0, 0xA953}, {0xA95F, 0xA95F}, {0xA980, 0xA9CD},
287 {0xA9CF, 0xA9D9}, {0xA9DE, 0xA9FE}, {0xAA00, 0xAA36},
288 {0xAA40, 0xAA4D}, {0xAA50, 0xAA59}, {0xAA5C, 0xAAC2},
289 {0xAADB, 0xAAF6}, {0xAB01, 0xAB06}, {0xAB09, 0xAB0E},
290 {0xAB11, 0xAB16}, {0xAB20, 0xAB26}, {0xAB28, 0xAB2E},
291 {0xAB30, 0xAB6B}, {0xAB70, 0xABED}, {0xABF0, 0xABF9},
292 {0xD7B0, 0xD7C6}, {0xD7CB, 0xD7FB}, {0xD800, 0xDFFF},
293 {0xFB00, 0xFB06}, {0xFB13, 0xFB17}, {0xFB1D, 0xFB36},
294 {0xFB38, 0xFB3C}, {0xFB3E, 0xFB3E}, {0xFB40, 0xFB41},
295 {0xFB43, 0xFB44}, {0xFB46, 0xFBC1}, {0xFBD3, 0xFD3F},
296 {0xFD50, 0xFD8F}, {0xFD92, 0xFDC7}, {0xFDF0, 0xFDFD},
297 {0xFE20, 0xFE2F}, {0xFE70, 0xFE74}, {0xFE76, 0xFEFC},
298 {0xFEFF, 0xFEFF}, {0xFFF9, 0xFFFC}, {0x10000, 0x1000B},
299 {0x1000D, 0x10026}, {0x10028, 0x1003A}, {0x1003C, 0x1003D},
300 {0x1003F, 0x1004D}, {0x10050, 0x1005D}, {0x10080, 0x100FA},
301 {0x10100, 0x10102}, {0x10107, 0x10133}, {0x10137, 0x1018E},
302 {0x10190, 0x1019C}, {0x101A0, 0x101A0}, {0x101D0, 0x101FD},
303 {0x10280, 0x1029C}, {0x102A0, 0x102D0}, {0x102E0, 0x102FB},
304 {0x10300, 0x10323}, {0x1032D, 0x1034A}, {0x10350, 0x1037A},
305 {0x10380, 0x1039D}, {0x1039F, 0x103C3}, {0x103C8, 0x103D5},
306 {0x10400, 0x1049D}, {0x104A0, 0x104A9}, {0x104B0, 0x104D3},
307 {0x104D8, 0x104FB}, {0x10500, 0x10527}, {0x10530, 0x10563},
308 {0x1056F, 0x1056F}, {0x10600, 0x10736}, {0x10740, 0x10755},
309 {0x10760, 0x10767}, {0x10800, 0x10805}, {0x10808, 0x10808},
310 {0x1080A, 0x10835}, {0x10837, 0x10838}, {0x1083C, 0x1083C},
311 {0x1083F, 0x10855}, {0x10857, 0x1089E}, {0x108A7, 0x108AF},
312 {0x108E0, 0x108F2}, {0x108F4, 0x108F5}, {0x108FB, 0x1091B},
313 {0x1091F, 0x10939}, {0x1093F, 0x1093F}, {0x10980, 0x109B7},
314 {0x109BC, 0x109CF}, {0x109D2, 0x10A03}, {0x10A05, 0x10A06},
315 {0x10A0C, 0x10A13}, {0x10A15, 0x10A17}, {0x10A19, 0x10A35},
316 {0x10A38, 0x10A3A}, {0x10A3F, 0x10A48}, {0x10A50, 0x10A58},
317 {0x10A60, 0x10A9F}, {0x10AC0, 0x10AE6}, {0x10AEB, 0x10AF6},
318 {0x10B00, 0x10B35}, {0x10B39, 0x10B55}, {0x10B58, 0x10B72},
319 {0x10B78, 0x10B91}, {0x10B99, 0x10B9C}, {0x10BA9, 0x10BAF},
320 {0x10C00, 0x10C48}, {0x10C80, 0x10CB2}, {0x10CC0, 0x10CF2},
321 {0x10CFA, 0x10D27}, {0x10D30, 0x10D39}, {0x10E60, 0x10E7E},
322 {0x10E80, 0x10EA9}, {0x10EAB, 0x10EAD}, {0x10EB0, 0x10EB1},
323 {0x10F00, 0x10F27}, {0x10F30, 0x10F59}, {0x10FB0, 0x10FCB},
324 {0x10FE0, 0x10FF6}, {0x11000, 0x1104D}, {0x11052, 0x1106F},
325 {0x1107F, 0x110C1}, {0x110CD, 0x110CD}, {0x110D0, 0x110E8},
326 {0x110F0, 0x110F9}, {0x11100, 0x11134}, {0x11136, 0x11147},
327 {0x11150, 0x11176}, {0x11180, 0x111DF}, {0x111E1, 0x111F4},
328 {0x11200, 0x11211}, {0x11213, 0x1123E}, {0x11280, 0x11286},
329 {0x11288, 0x11288}, {0x1128A, 0x1128D}, {0x1128F, 0x1129D},
330 {0x1129F, 0x112A9}, {0x112B0, 0x112EA}, {0x112F0, 0x112F9},
331 {0x11300, 0x11303}, {0x11305, 0x1130C}, {0x1130F, 0x11310},
332 {0x11313, 0x11328}, {0x1132A, 0x11330}, {0x11332, 0x11333},
333 {0x11335, 0x11339}, {0x1133B, 0x11344}, {0x11347, 0x11348},
334 {0x1134B, 0x1134D}, {0x11350, 0x11350}, {0x11357, 0x11357},
335 {0x1135D, 0x11363}, {0x11366, 0x1136C}, {0x11370, 0x11374},
336 {0x11400, 0x1145B}, {0x1145D, 0x11461}, {0x11480, 0x114C7},
337 {0x114D0, 0x114D9}, {0x11580, 0x115B5}, {0x115B8, 0x115DD},
338 {0x11600, 0x11644}, {0x11650, 0x11659}, {0x11660, 0x1166C},
339 {0x11680, 0x116B8}, {0x116C0, 0x116C9}, {0x11700, 0x1171A},
340 {0x1171D, 0x1172B}, {0x11730, 0x1173F}, {0x11800, 0x1183B},
341 {0x118A0, 0x118F2}, {0x118FF, 0x11906}, {0x11909, 0x11909},
342 {0x1190C, 0x11913}, {0x11915, 0x11916}, {0x11918, 0x11935},
343 {0x11937, 0x11938}, {0x1193B, 0x11946}, {0x11950, 0x11959},
344 {0x119A0, 0x119A7}, {0x119AA, 0x119D7}, {0x119DA, 0x119E4},
345 {0x11A00, 0x11A47}, {0x11A50, 0x11AA2}, {0x11AC0, 0x11AF8},
346 {0x11C00, 0x11C08}, {0x11C0A, 0x11C36}, {0x11C38, 0x11C45},
347 {0x11C50, 0x11C6C}, {0x11C70, 0x11C8F}, {0x11C92, 0x11CA7},
348 {0x11CA9, 0x11CB6}, {0x11D00, 0x11D06}, {0x11D08, 0x11D09},
349 {0x11D0B, 0x11D36}, {0x11D3A, 0x11D3A}, {0x11D3C, 0x11D3D},
350 {0x11D3F, 0x11D47}, {0x11D50, 0x11D59}, {0x11D60, 0x11D65},
351 {0x11D67, 0x11D68}, {0x11D6A, 0x11D8E}, {0x11D90, 0x11D91},
352 {0x11D93, 0x11D98}, {0x11DA0, 0x11DA9}, {0x11EE0, 0x11EF8},
353 {0x11FB0, 0x11FB0}, {0x11FC0, 0x11FF1}, {0x11FFF, 0x12399},
354 {0x12400, 0x1246E}, {0x12470, 0x12474}, {0x12480, 0x12543},
355 {0x13000, 0x1342E}, {0x13430, 0x13438}, {0x14400, 0x14646},
356 {0x16800, 0x16A38}, {0x16A40, 0x16A5E}, {0x16A60, 0x16A69},
357 {0x16A6E, 0x16A6F}, {0x16AD0, 0x16AED}, {0x16AF0, 0x16AF5},
358 {0x16B00, 0x16B45}, {0x16B50, 0x16B59}, {0x16B5B, 0x16B61},
359 {0x16B63, 0x16B77}, {0x16B7D, 0x16B8F}, {0x16E40, 0x16E9A},
360 {0x16F00, 0x16F4A}, {0x16F4F, 0x16F87}, {0x16F8F, 0x16F9F},
361 {0x1BC00, 0x1BC6A}, {0x1BC70, 0x1BC7C}, {0x1BC80, 0x1BC88},
362 {0x1BC90, 0x1BC99}, {0x1BC9C, 0x1BCA3}, {0x1D000, 0x1D0F5},
363 {0x1D100, 0x1D126}, {0x1D129, 0x1D1E8}, {0x1D200, 0x1D245},
364 {0x1D2E0, 0x1D2F3}, {0x1D300, 0x1D356}, {0x1D360, 0x1D378},
365 {0x1D400, 0x1D454}, {0x1D456, 0x1D49C}, {0x1D49E, 0x1D49F},
366 {0x1D4A2, 0x1D4A2}, {0x1D4A5, 0x1D4A6}, {0x1D4A9, 0x1D4AC},
367 {0x1D4AE, 0x1D4B9}, {0x1D4BB, 0x1D4BB}, {0x1D4BD, 0x1D4C3},
368 {0x1D4C5, 0x1D505}, {0x1D507, 0x1D50A}, {0x1D50D, 0x1D514},
369 {0x1D516, 0x1D51C}, {0x1D51E, 0x1D539}, {0x1D53B, 0x1D53E},
370 {0x1D540, 0x1D544}, {0x1D546, 0x1D546}, {0x1D54A, 0x1D550},
371 {0x1D552, 0x1D6A5}, {0x1D6A8, 0x1D7CB}, {0x1D7CE, 0x1DA8B},
372 {0x1DA9B, 0x1DA9F}, {0x1DAA1, 0x1DAAF}, {0x1E000, 0x1E006},
373 {0x1E008, 0x1E018}, {0x1E01B, 0x1E021}, {0x1E023, 0x1E024},
374 {0x1E026, 0x1E02A}, {0x1E100, 0x1E12C}, {0x1E130, 0x1E13D},
375 {0x1E140, 0x1E149}, {0x1E14E, 0x1E14F}, {0x1E2C0, 0x1E2F9},
376 {0x1E2FF, 0x1E2FF}, {0x1E800, 0x1E8C4}, {0x1E8C7, 0x1E8D6},
377 {0x1E900, 0x1E94B}, {0x1E950, 0x1E959}, {0x1E95E, 0x1E95F},
378 {0x1EC71, 0x1ECB4}, {0x1ED01, 0x1ED3D}, {0x1EE00, 0x1EE03},
379 {0x1EE05, 0x1EE1F}, {0x1EE21, 0x1EE22}, {0x1EE24, 0x1EE24},
380 {0x1EE27, 0x1EE27}, {0x1EE29, 0x1EE32}, {0x1EE34, 0x1EE37},
381 {0x1EE39, 0x1EE39}, {0x1EE3B, 0x1EE3B}, {0x1EE42, 0x1EE42},
382 {0x1EE47, 0x1EE47}, {0x1EE49, 0x1EE49}, {0x1EE4B, 0x1EE4B},
383 {0x1EE4D, 0x1EE4F}, {0x1EE51, 0x1EE52}, {0x1EE54, 0x1EE54},
384 {0x1EE57, 0x1EE57}, {0x1EE59, 0x1EE59}, {0x1EE5B, 0x1EE5B},
385 {0x1EE5D, 0x1EE5D}, {0x1EE5F, 0x1EE5F}, {0x1EE61, 0x1EE62},
386 {0x1EE64, 0x1EE64}, {0x1EE67, 0x1EE6A}, {0x1EE6C, 0x1EE72},
387 {0x1EE74, 0x1EE77}, {0x1EE79, 0x1EE7C}, {0x1EE7E, 0x1EE7E},
388 {0x1EE80, 0x1EE89}, {0x1EE8B, 0x1EE9B}, {0x1EEA1, 0x1EEA3},
389 {0x1EEA5, 0x1EEA9}, {0x1EEAB, 0x1EEBB}, {0x1EEF0, 0x1EEF1},
390 {0x1F000, 0x1F003}, {0x1F005, 0x1F02B}, {0x1F030, 0x1F093},
391 {0x1F0A0, 0x1F0AE}, {0x1F0B1, 0x1F0BF}, {0x1F0C1, 0x1F0CE},
392 {0x1F0D1, 0x1F0F5}, {0x1F10B, 0x1F10F}, {0x1F12E, 0x1F12F},
393 {0x1F16A, 0x1F16F}, {0x1F1AD, 0x1F1AD}, {0x1F1E6, 0x1F1FF},
394 {0x1F321, 0x1F32C}, {0x1F336, 0x1F336}, {0x1F37D, 0x1F37D},
395 {0x1F394, 0x1F39F}, {0x1F3CB, 0x1F3CE}, {0x1F3D4, 0x1F3DF},
396 {0x1F3F1, 0x1F3F3}, {0x1F3F5, 0x1F3F7}, {0x1F43F, 0x1F43F},
397 {0x1F441, 0x1F441}, {0x1F4FD, 0x1F4FE}, {0x1F53E, 0x1F54A},
398 {0x1F54F, 0x1F54F}, {0x1F568, 0x1F579}, {0x1F57B, 0x1F594},
399 {0x1F597, 0x1F5A3}, {0x1F5A5, 0x1F5FA}, {0x1F650, 0x1F67F},
400 {0x1F6C6, 0x1F6CB}, {0x1F6CD, 0x1F6CF}, {0x1F6D3, 0x1F6D4},
401 {0x1F6E0, 0x1F6EA}, {0x1F6F0, 0x1F6F3}, {0x1F700, 0x1F773},
402 {0x1F780, 0x1F7D8}, {0x1F800, 0x1F80B}, {0x1F810, 0x1F847},
403 {0x1F850, 0x1F859}, {0x1F860, 0x1F887}, {0x1F890, 0x1F8AD},
404 {0x1F8B0, 0x1F8B1}, {0x1F900, 0x1F90B}, {0x1F93B, 0x1F93B},
405 {0x1F946, 0x1F946}, {0x1FA00, 0x1FA53}, {0x1FA60, 0x1FA6D},
406 {0x1FB00, 0x1FB92}, {0x1FB94, 0x1FBCA}, {0x1FBF0, 0x1FBF9},
407 {0xE0001, 0xE0001}, {0xE0020, 0xE007F},
408}
409
410var emoji = table{
411 {0x203C, 0x203C}, {0x2049, 0x2049}, {0x2122, 0x2122},
412 {0x2139, 0x2139}, {0x2194, 0x2199}, {0x21A9, 0x21AA},
413 {0x231A, 0x231B}, {0x2328, 0x2328}, {0x2388, 0x2388},
414 {0x23CF, 0x23CF}, {0x23E9, 0x23F3}, {0x23F8, 0x23FA},
415 {0x24C2, 0x24C2}, {0x25AA, 0x25AB}, {0x25B6, 0x25B6},
416 {0x25C0, 0x25C0}, {0x25FB, 0x25FE}, {0x2600, 0x2605},
417 {0x2607, 0x2612}, {0x2614, 0x2685}, {0x2690, 0x2705},
418 {0x2708, 0x2712}, {0x2714, 0x2714}, {0x2716, 0x2716},
419 {0x271D, 0x271D}, {0x2721, 0x2721}, {0x2728, 0x2728},
420 {0x2733, 0x2734}, {0x2744, 0x2744}, {0x2747, 0x2747},
421 {0x274C, 0x274C}, {0x274E, 0x274E}, {0x2753, 0x2755},
422 {0x2757, 0x2757}, {0x2763, 0x2767}, {0x2795, 0x2797},
423 {0x27A1, 0x27A1}, {0x27B0, 0x27B0}, {0x27BF, 0x27BF},
424 {0x2934, 0x2935}, {0x2B05, 0x2B07}, {0x2B1B, 0x2B1C},
425 {0x2B50, 0x2B50}, {0x2B55, 0x2B55}, {0x3030, 0x3030},
426 {0x303D, 0x303D}, {0x3297, 0x3297}, {0x3299, 0x3299},
427 {0x1F000, 0x1F0FF}, {0x1F10D, 0x1F10F}, {0x1F12F, 0x1F12F},
428 {0x1F16C, 0x1F171}, {0x1F17E, 0x1F17F}, {0x1F18E, 0x1F18E},
429 {0x1F191, 0x1F19A}, {0x1F1AD, 0x1F1E5}, {0x1F201, 0x1F20F},
430 {0x1F21A, 0x1F21A}, {0x1F22F, 0x1F22F}, {0x1F232, 0x1F23A},
431 {0x1F23C, 0x1F23F}, {0x1F249, 0x1F3FA}, {0x1F400, 0x1F53D},
432 {0x1F546, 0x1F64F}, {0x1F680, 0x1F6FF}, {0x1F774, 0x1F77F},
433 {0x1F7D5, 0x1F7FF}, {0x1F80C, 0x1F80F}, {0x1F848, 0x1F84F},
434 {0x1F85A, 0x1F85F}, {0x1F888, 0x1F88F}, {0x1F8AE, 0x1F8FF},
435 {0x1F90C, 0x1F93A}, {0x1F93C, 0x1F945}, {0x1F947, 0x1FAFF},
436 {0x1FC00, 0x1FFFD},
437}
diff --git a/vendor/github.com/mattn/go-runewidth/runewidth_windows.go b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
new file mode 100644
index 0000000..d6a6177
--- /dev/null
+++ b/vendor/github.com/mattn/go-runewidth/runewidth_windows.go
@@ -0,0 +1,28 @@
1// +build windows
2// +build !appengine
3
4package runewidth
5
6import (
7 "syscall"
8)
9
10var (
11 kernel32 = syscall.NewLazyDLL("kernel32")
12 procGetConsoleOutputCP = kernel32.NewProc("GetConsoleOutputCP")
13)
14
15// IsEastAsian return true if the current locale is CJK
16func IsEastAsian() bool {
17 r1, _, _ := procGetConsoleOutputCP.Call()
18 if r1 == 0 {
19 return false
20 }
21
22 switch int(r1) {
23 case 932, 51932, 936, 949, 950:
24 return true
25 }
26
27 return false
28}