fckeuspy-go/vendor/github.com/makiuchi-d/gozxing/qrcode/decoder/mode.go
2025-09-28 21:03:39 +02:00

101 lines
2.4 KiB
Go

package decoder
import (
errors "golang.org/x/xerrors"
)
type Mode struct {
characterCountBitsForVersions []int
bits int
}
var (
Mode_TERMINATOR = NewMode([]int{0, 0, 0}, 0x00) // Not really a mode...
Mode_NUMERIC = NewMode([]int{10, 12, 14}, 0x01)
Mode_ALPHANUMERIC = NewMode([]int{9, 11, 13}, 0x02)
Mode_STRUCTURED_APPEND = NewMode([]int{0, 0, 0}, 0x03) // Not supported
Mode_BYTE = NewMode([]int{8, 16, 16}, 0x04)
Mode_ECI = NewMode([]int{0, 0, 0}, 0x07) // character counts don't apply
Mode_KANJI = NewMode([]int{8, 10, 12}, 0x08)
Mode_FNC1_FIRST_POSITION = NewMode([]int{0, 0, 0}, 0x05)
Mode_FNC1_SECOND_POSITION = NewMode([]int{0, 0, 0}, 0x09)
/** See GBT 18284-2000; "Hanzi" is a transliteration of this mode name. */
Mode_HANZI = NewMode([]int{8, 10, 12}, 0x0D)
)
func NewMode(characterCountBitsForVersions []int, bits int) *Mode {
return &Mode{characterCountBitsForVersions, bits}
}
func ModeForBits(bits int) (*Mode, error) {
switch bits {
case 0x0:
return Mode_TERMINATOR, nil
case 0x1:
return Mode_NUMERIC, nil
case 0x2:
return Mode_ALPHANUMERIC, nil
case 0x3:
return Mode_STRUCTURED_APPEND, nil
case 0x4:
return Mode_BYTE, nil
case 0x5:
return Mode_FNC1_FIRST_POSITION, nil
case 0x7:
return Mode_ECI, nil
case 0x8:
return Mode_KANJI, nil
case 0x9:
return Mode_FNC1_SECOND_POSITION, nil
case 0xD:
// 0xD is defined in GBT 18284-2000, may not be supported in foreign country
return Mode_HANZI, nil
default:
return nil, errors.New("IllegalArgumentException")
}
}
func (this *Mode) GetCharacterCountBits(version *Version) int {
number := version.GetVersionNumber()
var offset int
if number <= 9 {
offset = 0
} else if number <= 26 {
offset = 1
} else {
offset = 2
}
return this.characterCountBitsForVersions[offset]
}
func (this *Mode) GetBits() int {
return this.bits
}
func (this *Mode) String() string {
switch this {
case Mode_TERMINATOR:
return "TERMINATOR"
case Mode_NUMERIC:
return "NUMERIC"
case Mode_ALPHANUMERIC:
return "ALPHANUMERIC"
case Mode_STRUCTURED_APPEND:
return "STRUCTURED_APPEND"
case Mode_BYTE:
return "BYTE"
case Mode_ECI:
return "ECI"
case Mode_KANJI:
return "KANJI"
case Mode_FNC1_FIRST_POSITION:
return "FNC1_FIRST_POSITION"
case Mode_FNC1_SECOND_POSITION:
return "FNC1_SECOND_POSITION"
case Mode_HANZI:
return "HANZI"
default:
return ""
}
}