mirror of
https://codeberg.org/forgejo/forgejo.git
synced 2024-12-04 10:30:19 -05:00
20 lines
691 B
Go
20 lines
691 B
Go
|
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
|
||
|
}
|
||
|
}
|