Commit 6c0aa2f2 authored by Rob Pike's avatar Rob Pike

unicode/utf8: document return value for decode errors

Also replace archaic definition of rune.

R=golang-dev, bradfitz
CC=golang-dev
https://golang.org/cl/5654048
parent 1bfffb67
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// license that can be found in the LICENSE file. // license that can be found in the LICENSE file.
// Package utf8 implements functions and constants to support text encoded in // Package utf8 implements functions and constants to support text encoded in
// UTF-8. This package calls a Unicode character a rune for brevity. // UTF-8. It includes functions to translate between runes and UTF-8 byte sequences.
package utf8 package utf8
import "unicode" // only needed for a couple of constants import "unicode" // only needed for a couple of constants
...@@ -198,19 +198,21 @@ func FullRuneInString(s string) bool { ...@@ -198,19 +198,21 @@ func FullRuneInString(s string) bool {
} }
// DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes. // DecodeRune unpacks the first UTF-8 encoding in p and returns the rune and its width in bytes.
// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8.
func DecodeRune(p []byte) (r rune, size int) { func DecodeRune(p []byte) (r rune, size int) {
r, size, _ = decodeRuneInternal(p) r, size, _ = decodeRuneInternal(p)
return return
} }
// DecodeRuneInString is like DecodeRune but its input is a string. // DecodeRuneInString is like DecodeRune but its input is a string.
// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8.
func DecodeRuneInString(s string) (r rune, size int) { func DecodeRuneInString(s string) (r rune, size int) {
r, size, _ = decodeRuneInStringInternal(s) r, size, _ = decodeRuneInStringInternal(s)
return return
} }
// DecodeLastRune unpacks the last UTF-8 encoding in p // DecodeLastRune unpacks the last UTF-8 encoding in p and returns the rune and its width in bytes.
// and returns the rune and its width in bytes. // If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8.
func DecodeLastRune(p []byte) (r rune, size int) { func DecodeLastRune(p []byte) (r rune, size int) {
end := len(p) end := len(p)
if end == 0 { if end == 0 {
...@@ -244,6 +246,7 @@ func DecodeLastRune(p []byte) (r rune, size int) { ...@@ -244,6 +246,7 @@ func DecodeLastRune(p []byte) (r rune, size int) {
} }
// DecodeLastRuneInString is like DecodeLastRune but its input is a string. // DecodeLastRuneInString is like DecodeLastRune but its input is a string.
// If the encoding is invalid, it returns (RuneError, 1), an impossible result for correct UTF-8.
func DecodeLastRuneInString(s string) (r rune, size int) { func DecodeLastRuneInString(s string) (r rune, size int) {
end := len(s) end := len(s)
if end == 0 { if end == 0 {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment