You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

20 lines
691 B

10 years ago
package mahonia
// FallbackDecoder combines a series of Decoders into one.
// If the first Decoder returns a status of INVALID_CHAR, the others are tried as well.
//
// Note: if the text to be decoded ends with a sequence of bytes that is not a valid character in the first charset,
// but it could be the beginning of a valid character, the FallbackDecoder will give a status of NO_ROOM instead of
// falling back to the other Decoders.
func FallbackDecoder(decoders ...Decoder) Decoder {
return func(p []byte) (c rune, size int, status Status) {
for _, d := range decoders {
c, size, status = d(p)
if status != INVALID_CHAR {
return
}
}
return 0, 1, INVALID_CHAR
}
}