diff options
author | 无闻 <u@gogs.io> | 2014-12-22 05:30:49 -0500 |
---|---|---|
committer | 无闻 <u@gogs.io> | 2014-12-22 05:30:49 -0500 |
commit | e193005c66e3c61593efd2d44005efbca0fab33a (patch) | |
tree | b5e51343456338eeea89d09bb24d93e7142f5d99 /modules/mahonia/convert_string.go | |
parent | ebbe6177a91e9eb6b4001342728ff099cafd5d65 (diff) | |
parent | fff8109567f8296f81954dbf6280eb3049bb3db8 (diff) |
Merge pull request #773 from phsmit/golang_x_text_encoding
Golang x text encoding
Diffstat (limited to 'modules/mahonia/convert_string.go')
-rw-r--r-- | modules/mahonia/convert_string.go | 135 |
1 files changed, 0 insertions, 135 deletions
diff --git a/modules/mahonia/convert_string.go b/modules/mahonia/convert_string.go deleted file mode 100644 index 1624b888..00000000 --- a/modules/mahonia/convert_string.go +++ /dev/null @@ -1,135 +0,0 @@ -package mahonia - -import ( - "unicode/utf8" -) - -// ConvertString converts a string from UTF-8 to e's encoding. -func (e Encoder) ConvertString(s string) string { - dest := make([]byte, len(s)+10) - destPos := 0 - - for _, rune := range s { - retry: - size, status := e(dest[destPos:], rune) - - if status == NO_ROOM { - newDest := make([]byte, len(dest)*2) - copy(newDest, dest) - dest = newDest - goto retry - } - - if status == STATE_ONLY { - destPos += size - goto retry - } - - destPos += size - } - - return string(dest[:destPos]) -} - -// ConvertString converts a string from d's encoding to UTF-8. -func (d Decoder) ConvertString(s string) string { - bytes := []byte(s) - runes := make([]rune, len(s)) - destPos := 0 - - for len(bytes) > 0 { - c, size, status := d(bytes) - - if status == STATE_ONLY { - bytes = bytes[size:] - continue - } - - if status == NO_ROOM { - c = 0xfffd - size = len(bytes) - status = INVALID_CHAR - } - - bytes = bytes[size:] - runes[destPos] = c - destPos++ - } - - return string(runes[:destPos]) -} - -// ConvertStringOK converts a string from UTF-8 to e's encoding. It also -// returns a boolean indicating whether every character was converted -// successfully. -func (e Encoder) ConvertStringOK(s string) (result string, ok bool) { - dest := make([]byte, len(s)+10) - destPos := 0 - ok = true - - for i, r := range s { - // The following test is copied from utf8.ValidString. - if r == utf8.RuneError && ok { - _, size := utf8.DecodeRuneInString(s[i:]) - if size == 1 { - ok = false - } - } - - retry: - size, status := e(dest[destPos:], r) - - switch status { - case NO_ROOM: - newDest := make([]byte, len(dest)*2) - copy(newDest, dest) - dest = newDest - goto retry - - case STATE_ONLY: - destPos += size - goto retry - - case INVALID_CHAR: - ok = false - } - - destPos += size - } - - return string(dest[:destPos]), ok -} - -// ConvertStringOK converts a string from d's encoding to UTF-8. -// It also returns a boolean indicating whether every character was converted -// successfully. -func (d Decoder) ConvertStringOK(s string) (result string, ok bool) { - bytes := []byte(s) - runes := make([]rune, len(s)) - destPos := 0 - ok = true - - for len(bytes) > 0 { - c, size, status := d(bytes) - - switch status { - case STATE_ONLY: - bytes = bytes[size:] - continue - - case NO_ROOM: - c = 0xfffd - size = len(bytes) - ok = false - - case INVALID_CHAR: - ok = false - } - - bytes = bytes[size:] - runes[destPos] = c - destPos++ - } - - return string(runes[:destPos]), ok -} |