github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/mahonia/fallback.go (about) 1 package mahonia 2 3 // FallbackDecoder combines a series of Decoders into one. 4 // If the first Decoder returns a status of INVALID_CHAR, the others are tried as well. 5 // 6 // Note: if the text to be decoded ends with a sequence of bytes that is not a valid character in the first charset, 7 // but it could be the beginning of a valid character, the FallbackDecoder will give a status of NO_ROOM instead of 8 // falling back to the other Decoders. 9 func FallbackDecoder(decoders ...Decoder) Decoder { 10 return func(p []byte) (c rune, size int, status Status) { 11 for _, d := range decoders { 12 c, size, status = d(p) 13 if status != INVALID_CHAR { 14 return 15 } 16 } 17 return 0, 1, INVALID_CHAR 18 } 19 }