mirror of
				https://gitea.com/gitea/tea.git
				synced 2025-10-31 17:25:27 +01:00 
			
		
		
		
	Use Survey For Interactions With User (#186)
fixes Use Survey For Interactions With User Add Vendor "github.com/AlecAivazis/survey/v2" Co-authored-by: Norwin Roosen <git@nroo.de> Co-authored-by: 6543 <6543@obermui.de> Reviewed-on: https://gitea.com/gitea/tea/pulls/186 Reviewed-by: techknowlogick <techknowlogick@gitea.io> Reviewed-by: Norwin <noerw@noreply.gitea.io>
This commit is contained in:
		
							
								
								
									
										28
									
								
								vendor/golang.org/x/text/width/kind_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								vendor/golang.org/x/text/width/kind_string.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,28 @@ | ||||
| // Code generated by "stringer -type=Kind"; DO NOT EDIT. | ||||
|  | ||||
| package width | ||||
|  | ||||
| import "strconv" | ||||
|  | ||||
| func _() { | ||||
| 	// An "invalid array index" compiler error signifies that the constant values have changed. | ||||
| 	// Re-run the stringer command to generate them again. | ||||
| 	var x [1]struct{} | ||||
| 	_ = x[Neutral-0] | ||||
| 	_ = x[EastAsianAmbiguous-1] | ||||
| 	_ = x[EastAsianWide-2] | ||||
| 	_ = x[EastAsianNarrow-3] | ||||
| 	_ = x[EastAsianFullwidth-4] | ||||
| 	_ = x[EastAsianHalfwidth-5] | ||||
| } | ||||
|  | ||||
| const _Kind_name = "NeutralEastAsianAmbiguousEastAsianWideEastAsianNarrowEastAsianFullwidthEastAsianHalfwidth" | ||||
|  | ||||
| var _Kind_index = [...]uint8{0, 7, 25, 38, 53, 71, 89} | ||||
|  | ||||
| func (i Kind) String() string { | ||||
| 	if i < 0 || i >= Kind(len(_Kind_index)-1) { | ||||
| 		return "Kind(" + strconv.FormatInt(int64(i), 10) + ")" | ||||
| 	} | ||||
| 	return _Kind_name[_Kind_index[i]:_Kind_index[i+1]] | ||||
| } | ||||
							
								
								
									
										1318
									
								
								vendor/golang.org/x/text/width/tables10.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1318
									
								
								vendor/golang.org/x/text/width/tables10.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1330
									
								
								vendor/golang.org/x/text/width/tables11.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1330
									
								
								vendor/golang.org/x/text/width/tables11.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										1286
									
								
								vendor/golang.org/x/text/width/tables9.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1286
									
								
								vendor/golang.org/x/text/width/tables9.0.0.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										239
									
								
								vendor/golang.org/x/text/width/transform.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										239
									
								
								vendor/golang.org/x/text/width/transform.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,239 @@ | ||||
| // 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 ( | ||||
| 	"unicode/utf8" | ||||
|  | ||||
| 	"golang.org/x/text/transform" | ||||
| ) | ||||
|  | ||||
| type foldTransform struct { | ||||
| 	transform.NopResetter | ||||
| } | ||||
|  | ||||
| func (foldTransform) Span(src []byte, atEOF bool) (n int, err error) { | ||||
| 	for n < len(src) { | ||||
| 		if src[n] < utf8.RuneSelf { | ||||
| 			// ASCII fast path. | ||||
| 			for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		v, size := trie.lookup(src[n:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				err = transform.ErrShortSrc | ||||
| 			} else { | ||||
| 				n = len(src) | ||||
| 			} | ||||
| 			break | ||||
| 		} | ||||
| 		if elem(v)&tagNeedsFold != 0 { | ||||
| 			err = transform.ErrEndOfSpan | ||||
| 			break | ||||
| 		} | ||||
| 		n += size | ||||
| 	} | ||||
| 	return n, err | ||||
| } | ||||
|  | ||||
| func (foldTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { | ||||
| 	for nSrc < len(src) { | ||||
| 		if src[nSrc] < utf8.RuneSelf { | ||||
| 			// ASCII fast path. | ||||
| 			start, end := nSrc, len(src) | ||||
| 			if d := len(dst) - nDst; d < end-start { | ||||
| 				end = nSrc + d | ||||
| 			} | ||||
| 			for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { | ||||
| 			} | ||||
| 			n := copy(dst[nDst:], src[start:nSrc]) | ||||
| 			if nDst += n; nDst == len(dst) { | ||||
| 				nSrc = start + n | ||||
| 				if nSrc == len(src) { | ||||
| 					return nDst, nSrc, nil | ||||
| 				} | ||||
| 				if src[nSrc] < utf8.RuneSelf { | ||||
| 					return nDst, nSrc, transform.ErrShortDst | ||||
| 				} | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		v, size := trie.lookup(src[nSrc:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				return nDst, nSrc, transform.ErrShortSrc | ||||
| 			} | ||||
| 			size = 1 // gobble 1 byte | ||||
| 		} | ||||
| 		if elem(v)&tagNeedsFold == 0 { | ||||
| 			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			nDst += size | ||||
| 		} else { | ||||
| 			data := inverseData[byte(v)] | ||||
| 			if len(dst)-nDst < int(data[0]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			i := 1 | ||||
| 			for end := int(data[0]); i < end; i++ { | ||||
| 				dst[nDst] = data[i] | ||||
| 				nDst++ | ||||
| 			} | ||||
| 			dst[nDst] = data[i] ^ src[nSrc+size-1] | ||||
| 			nDst++ | ||||
| 		} | ||||
| 		nSrc += size | ||||
| 	} | ||||
| 	return nDst, nSrc, nil | ||||
| } | ||||
|  | ||||
| type narrowTransform struct { | ||||
| 	transform.NopResetter | ||||
| } | ||||
|  | ||||
| func (narrowTransform) Span(src []byte, atEOF bool) (n int, err error) { | ||||
| 	for n < len(src) { | ||||
| 		if src[n] < utf8.RuneSelf { | ||||
| 			// ASCII fast path. | ||||
| 			for n++; n < len(src) && src[n] < utf8.RuneSelf; n++ { | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		v, size := trie.lookup(src[n:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				err = transform.ErrShortSrc | ||||
| 			} else { | ||||
| 				n = len(src) | ||||
| 			} | ||||
| 			break | ||||
| 		} | ||||
| 		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { | ||||
| 		} else { | ||||
| 			err = transform.ErrEndOfSpan | ||||
| 			break | ||||
| 		} | ||||
| 		n += size | ||||
| 	} | ||||
| 	return n, err | ||||
| } | ||||
|  | ||||
| func (narrowTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { | ||||
| 	for nSrc < len(src) { | ||||
| 		if src[nSrc] < utf8.RuneSelf { | ||||
| 			// ASCII fast path. | ||||
| 			start, end := nSrc, len(src) | ||||
| 			if d := len(dst) - nDst; d < end-start { | ||||
| 				end = nSrc + d | ||||
| 			} | ||||
| 			for nSrc++; nSrc < end && src[nSrc] < utf8.RuneSelf; nSrc++ { | ||||
| 			} | ||||
| 			n := copy(dst[nDst:], src[start:nSrc]) | ||||
| 			if nDst += n; nDst == len(dst) { | ||||
| 				nSrc = start + n | ||||
| 				if nSrc == len(src) { | ||||
| 					return nDst, nSrc, nil | ||||
| 				} | ||||
| 				if src[nSrc] < utf8.RuneSelf { | ||||
| 					return nDst, nSrc, transform.ErrShortDst | ||||
| 				} | ||||
| 			} | ||||
| 			continue | ||||
| 		} | ||||
| 		v, size := trie.lookup(src[nSrc:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				return nDst, nSrc, transform.ErrShortSrc | ||||
| 			} | ||||
| 			size = 1 // gobble 1 byte | ||||
| 		} | ||||
| 		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianFullwidth && k != EastAsianWide && k != EastAsianAmbiguous { | ||||
| 			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			nDst += size | ||||
| 		} else { | ||||
| 			data := inverseData[byte(v)] | ||||
| 			if len(dst)-nDst < int(data[0]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			i := 1 | ||||
| 			for end := int(data[0]); i < end; i++ { | ||||
| 				dst[nDst] = data[i] | ||||
| 				nDst++ | ||||
| 			} | ||||
| 			dst[nDst] = data[i] ^ src[nSrc+size-1] | ||||
| 			nDst++ | ||||
| 		} | ||||
| 		nSrc += size | ||||
| 	} | ||||
| 	return nDst, nSrc, nil | ||||
| } | ||||
|  | ||||
| type wideTransform struct { | ||||
| 	transform.NopResetter | ||||
| } | ||||
|  | ||||
| func (wideTransform) Span(src []byte, atEOF bool) (n int, err error) { | ||||
| 	for n < len(src) { | ||||
| 		// TODO: Consider ASCII fast path. Special-casing ASCII handling can | ||||
| 		// reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably | ||||
| 		// not enough to warrant the extra code and complexity. | ||||
| 		v, size := trie.lookup(src[n:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				err = transform.ErrShortSrc | ||||
| 			} else { | ||||
| 				n = len(src) | ||||
| 			} | ||||
| 			break | ||||
| 		} | ||||
| 		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { | ||||
| 		} else { | ||||
| 			err = transform.ErrEndOfSpan | ||||
| 			break | ||||
| 		} | ||||
| 		n += size | ||||
| 	} | ||||
| 	return n, err | ||||
| } | ||||
|  | ||||
| func (wideTransform) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { | ||||
| 	for nSrc < len(src) { | ||||
| 		// TODO: Consider ASCII fast path. Special-casing ASCII handling can | ||||
| 		// reduce the ns/op of BenchmarkWideASCII by about 30%. This is probably | ||||
| 		// not enough to warrant the extra code and complexity. | ||||
| 		v, size := trie.lookup(src[nSrc:]) | ||||
| 		if size == 0 { // incomplete UTF-8 encoding | ||||
| 			if !atEOF { | ||||
| 				return nDst, nSrc, transform.ErrShortSrc | ||||
| 			} | ||||
| 			size = 1 // gobble 1 byte | ||||
| 		} | ||||
| 		if k := elem(v).kind(); byte(v) == 0 || k != EastAsianHalfwidth && k != EastAsianNarrow { | ||||
| 			if size != copy(dst[nDst:], src[nSrc:nSrc+size]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			nDst += size | ||||
| 		} else { | ||||
| 			data := inverseData[byte(v)] | ||||
| 			if len(dst)-nDst < int(data[0]) { | ||||
| 				return nDst, nSrc, transform.ErrShortDst | ||||
| 			} | ||||
| 			i := 1 | ||||
| 			for end := int(data[0]); i < end; i++ { | ||||
| 				dst[nDst] = data[i] | ||||
| 				nDst++ | ||||
| 			} | ||||
| 			dst[nDst] = data[i] ^ src[nSrc+size-1] | ||||
| 			nDst++ | ||||
| 		} | ||||
| 		nSrc += size | ||||
| 	} | ||||
| 	return nDst, nSrc, nil | ||||
| } | ||||
							
								
								
									
										30
									
								
								vendor/golang.org/x/text/width/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								vendor/golang.org/x/text/width/trieval.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,30 @@ | ||||
| // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. | ||||
|  | ||||
| package width | ||||
|  | ||||
| // elem is an entry of the width trie. The high byte is used to encode the type | ||||
| // of the rune. The low byte is used to store the index to a mapping entry in | ||||
| // the inverseData array. | ||||
| type elem uint16 | ||||
|  | ||||
| const ( | ||||
| 	tagNeutral elem = iota << typeShift | ||||
| 	tagAmbiguous | ||||
| 	tagWide | ||||
| 	tagNarrow | ||||
| 	tagFullwidth | ||||
| 	tagHalfwidth | ||||
| ) | ||||
|  | ||||
| const ( | ||||
| 	numTypeBits = 3 | ||||
| 	typeShift   = 16 - numTypeBits | ||||
|  | ||||
| 	// tagNeedsFold is true for all fullwidth and halfwidth runes except for | ||||
| 	// the Won sign U+20A9. | ||||
| 	tagNeedsFold = 0x1000 | ||||
|  | ||||
| 	// The Korean Won sign is halfwidth, but SHOULD NOT be mapped to a wide | ||||
| 	// variant. | ||||
| 	wonSign rune = 0x20A9 | ||||
| ) | ||||
							
								
								
									
										206
									
								
								vendor/golang.org/x/text/width/width.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										206
									
								
								vendor/golang.org/x/text/width/width.go
									
									
									
										generated
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,206 @@ | ||||
| // 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. | ||||
|  | ||||
| //go:generate stringer -type=Kind | ||||
| //go:generate go run gen.go gen_common.go gen_trieval.go | ||||
|  | ||||
| // Package width provides functionality for handling different widths in text. | ||||
| // | ||||
| // Wide characters behave like ideographs; they tend to allow line breaks after | ||||
| // each character and remain upright in vertical text layout. Narrow characters | ||||
| // are kept together in words or runs that are rotated sideways in vertical text | ||||
| // layout. | ||||
| // | ||||
| // For more information, see https://unicode.org/reports/tr11/. | ||||
| package width // import "golang.org/x/text/width" | ||||
|  | ||||
| import ( | ||||
| 	"unicode/utf8" | ||||
|  | ||||
| 	"golang.org/x/text/transform" | ||||
| ) | ||||
|  | ||||
| // TODO | ||||
| // 1) Reduce table size by compressing blocks. | ||||
| // 2) API proposition for computing display length | ||||
| //    (approximation, fixed pitch only). | ||||
| // 3) Implement display length. | ||||
|  | ||||
| // Kind indicates the type of width property as defined in https://unicode.org/reports/tr11/. | ||||
| type Kind int | ||||
|  | ||||
| const ( | ||||
| 	// Neutral characters do not occur in legacy East Asian character sets. | ||||
| 	Neutral Kind = iota | ||||
|  | ||||
| 	// EastAsianAmbiguous characters that can be sometimes wide and sometimes | ||||
| 	// narrow and require additional information not contained in the character | ||||
| 	// code to further resolve their width. | ||||
| 	EastAsianAmbiguous | ||||
|  | ||||
| 	// EastAsianWide characters are wide in its usual form. They occur only in | ||||
| 	// the context of East Asian typography. These runes may have explicit | ||||
| 	// halfwidth counterparts. | ||||
| 	EastAsianWide | ||||
|  | ||||
| 	// EastAsianNarrow characters are narrow in its usual form. They often have | ||||
| 	// fullwidth counterparts. | ||||
| 	EastAsianNarrow | ||||
|  | ||||
| 	// Note: there exist Narrow runes that do not have fullwidth or wide | ||||
| 	// counterparts, despite what the definition says (e.g. U+27E6). | ||||
|  | ||||
| 	// EastAsianFullwidth characters have a compatibility decompositions of type | ||||
| 	// wide that map to a narrow counterpart. | ||||
| 	EastAsianFullwidth | ||||
|  | ||||
| 	// EastAsianHalfwidth characters have a compatibility decomposition of type | ||||
| 	// narrow that map to a wide or ambiguous counterpart, plus U+20A9 ₩ WON | ||||
| 	// SIGN. | ||||
| 	EastAsianHalfwidth | ||||
|  | ||||
| 	// Note: there exist runes that have a halfwidth counterparts but that are | ||||
| 	// classified as Ambiguous, rather than wide (e.g. U+2190). | ||||
| ) | ||||
|  | ||||
| // TODO: the generated tries need to return size 1 for invalid runes for the | ||||
| // width to be computed correctly (each byte should render width 1) | ||||
|  | ||||
| var trie = newWidthTrie(0) | ||||
|  | ||||
| // Lookup reports the Properties of the first rune in b and the number of bytes | ||||
| // of its UTF-8 encoding. | ||||
| func Lookup(b []byte) (p Properties, size int) { | ||||
| 	v, sz := trie.lookup(b) | ||||
| 	return Properties{elem(v), b[sz-1]}, sz | ||||
| } | ||||
|  | ||||
| // LookupString reports the Properties of the first rune in s and the number of | ||||
| // bytes of its UTF-8 encoding. | ||||
| func LookupString(s string) (p Properties, size int) { | ||||
| 	v, sz := trie.lookupString(s) | ||||
| 	return Properties{elem(v), s[sz-1]}, sz | ||||
| } | ||||
|  | ||||
| // LookupRune reports the Properties of rune r. | ||||
| func LookupRune(r rune) Properties { | ||||
| 	var buf [4]byte | ||||
| 	n := utf8.EncodeRune(buf[:], r) | ||||
| 	v, _ := trie.lookup(buf[:n]) | ||||
| 	last := byte(r) | ||||
| 	if r >= utf8.RuneSelf { | ||||
| 		last = 0x80 + byte(r&0x3f) | ||||
| 	} | ||||
| 	return Properties{elem(v), last} | ||||
| } | ||||
|  | ||||
| // Properties provides access to width properties of a rune. | ||||
| type Properties struct { | ||||
| 	elem elem | ||||
| 	last byte | ||||
| } | ||||
|  | ||||
| func (e elem) kind() Kind { | ||||
| 	return Kind(e >> typeShift) | ||||
| } | ||||
|  | ||||
| // Kind returns the Kind of a rune as defined in Unicode TR #11. | ||||
| // See https://unicode.org/reports/tr11/ for more details. | ||||
| func (p Properties) Kind() Kind { | ||||
| 	return p.elem.kind() | ||||
| } | ||||
|  | ||||
| // Folded returns the folded variant of a rune or 0 if the rune is canonical. | ||||
| func (p Properties) Folded() rune { | ||||
| 	if p.elem&tagNeedsFold != 0 { | ||||
| 		buf := inverseData[byte(p.elem)] | ||||
| 		buf[buf[0]] ^= p.last | ||||
| 		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) | ||||
| 		return r | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // Narrow returns the narrow variant of a rune or 0 if the rune is already | ||||
| // narrow or doesn't have a narrow variant. | ||||
| func (p Properties) Narrow() rune { | ||||
| 	if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianFullwidth || k == EastAsianWide || k == EastAsianAmbiguous) { | ||||
| 		buf := inverseData[byte(p.elem)] | ||||
| 		buf[buf[0]] ^= p.last | ||||
| 		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) | ||||
| 		return r | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // Wide returns the wide variant of a rune or 0 if the rune is already | ||||
| // wide or doesn't have a wide variant. | ||||
| func (p Properties) Wide() rune { | ||||
| 	if k := p.elem.kind(); byte(p.elem) != 0 && (k == EastAsianHalfwidth || k == EastAsianNarrow) { | ||||
| 		buf := inverseData[byte(p.elem)] | ||||
| 		buf[buf[0]] ^= p.last | ||||
| 		r, _ := utf8.DecodeRune(buf[1 : 1+buf[0]]) | ||||
| 		return r | ||||
| 	} | ||||
| 	return 0 | ||||
| } | ||||
|  | ||||
| // TODO for Properties: | ||||
| // - Add Fullwidth/Halfwidth or Inverted methods for computing variants | ||||
| // mapping. | ||||
| // - Add width information (including information on non-spacing runes). | ||||
|  | ||||
| // Transformer implements the transform.Transformer interface. | ||||
| type Transformer struct { | ||||
| 	t transform.SpanningTransformer | ||||
| } | ||||
|  | ||||
| // Reset implements the transform.Transformer interface. | ||||
| func (t Transformer) Reset() { t.t.Reset() } | ||||
|  | ||||
| // Transform implements the transform.Transformer interface. | ||||
| func (t Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) { | ||||
| 	return t.t.Transform(dst, src, atEOF) | ||||
| } | ||||
|  | ||||
| // Span implements the transform.SpanningTransformer interface. | ||||
| func (t Transformer) Span(src []byte, atEOF bool) (n int, err error) { | ||||
| 	return t.t.Span(src, atEOF) | ||||
| } | ||||
|  | ||||
| // Bytes returns a new byte slice with the result of applying t to b. | ||||
| func (t Transformer) Bytes(b []byte) []byte { | ||||
| 	b, _, _ = transform.Bytes(t, b) | ||||
| 	return b | ||||
| } | ||||
|  | ||||
| // String returns a string with the result of applying t to s. | ||||
| func (t Transformer) String(s string) string { | ||||
| 	s, _, _ = transform.String(t, s) | ||||
| 	return s | ||||
| } | ||||
|  | ||||
| var ( | ||||
| 	// Fold is a transform that maps all runes to their canonical width. | ||||
| 	// | ||||
| 	// Note that the NFKC and NFKD transforms in golang.org/x/text/unicode/norm | ||||
| 	// provide a more generic folding mechanism. | ||||
| 	Fold Transformer = Transformer{foldTransform{}} | ||||
|  | ||||
| 	// Widen is a transform that maps runes to their wide variant, if | ||||
| 	// available. | ||||
| 	Widen Transformer = Transformer{wideTransform{}} | ||||
|  | ||||
| 	// Narrow is a transform that maps runes to their narrow variant, if | ||||
| 	// available. | ||||
| 	Narrow Transformer = Transformer{narrowTransform{}} | ||||
| ) | ||||
|  | ||||
| // TODO: Consider the following options: | ||||
| // - Treat Ambiguous runes that have a halfwidth counterpart as wide, or some | ||||
| //   generalized variant of this. | ||||
| // - Consider a wide Won character to be the default width (or some generalized | ||||
| //   variant of this). | ||||
| // - Filter the set of characters that gets converted (the preferred approach is | ||||
| //   to allow applying filters to transforms). | ||||
		Reference in New Issue
	
	Block a user
	 6543
					6543