BitArray.php
11 months ago
BitMatrix.php
11 months ago
BitUtils.php
11 months ago
CharacterSetEci.php
11 months ago
EcBlock.php
11 months ago
EcBlocks.php
11 months ago
ErrorCorrectionLevel.php
11 months ago
FormatInformation.php
11 months ago
Mode.php
11 months ago
ReedSolomonCodec.php
11 months ago
Version.php
11 months ago
Mode.php
72 lines
| 1 | <?php |
| 2 | |
| 3 | declare (strict_types=1); |
| 4 | namespace WP2FA_Vendor\BaconQrCode\Common; |
| 5 | |
| 6 | use WP2FA_Vendor\DASPRiD\Enum\AbstractEnum; |
| 7 | /** |
| 8 | * Enum representing various modes in which data can be encoded to bits. |
| 9 | * |
| 10 | * @method static self TERMINATOR() |
| 11 | * @method static self NUMERIC() |
| 12 | * @method static self ALPHANUMERIC() |
| 13 | * @method static self STRUCTURED_APPEND() |
| 14 | * @method static self BYTE() |
| 15 | * @method static self ECI() |
| 16 | * @method static self KANJI() |
| 17 | * @method static self FNC1_FIRST_POSITION() |
| 18 | * @method static self FNC1_SECOND_POSITION() |
| 19 | * @method static self HANZI() |
| 20 | */ |
| 21 | final class Mode extends AbstractEnum |
| 22 | { |
| 23 | protected const TERMINATOR = [[0, 0, 0], 0x0]; |
| 24 | protected const NUMERIC = [[10, 12, 14], 0x1]; |
| 25 | protected const ALPHANUMERIC = [[9, 11, 13], 0x2]; |
| 26 | protected const STRUCTURED_APPEND = [[0, 0, 0], 0x3]; |
| 27 | protected const BYTE = [[8, 16, 16], 0x4]; |
| 28 | protected const ECI = [[0, 0, 0], 0x7]; |
| 29 | protected const KANJI = [[8, 10, 12], 0x8]; |
| 30 | protected const FNC1_FIRST_POSITION = [[0, 0, 0], 0x5]; |
| 31 | protected const FNC1_SECOND_POSITION = [[0, 0, 0], 0x9]; |
| 32 | protected const HANZI = [[8, 10, 12], 0xd]; |
| 33 | /** |
| 34 | * @var int[] |
| 35 | */ |
| 36 | private $characterCountBitsForVersions; |
| 37 | /** |
| 38 | * @var int |
| 39 | */ |
| 40 | private $bits; |
| 41 | /** |
| 42 | * @param int[] $characterCountBitsForVersions |
| 43 | */ |
| 44 | protected function __construct(array $characterCountBitsForVersions, int $bits) |
| 45 | { |
| 46 | $this->characterCountBitsForVersions = $characterCountBitsForVersions; |
| 47 | $this->bits = $bits; |
| 48 | } |
| 49 | /** |
| 50 | * Returns the number of bits used in a specific QR code version. |
| 51 | */ |
| 52 | public function getCharacterCountBits(Version $version) : int |
| 53 | { |
| 54 | $number = $version->getVersionNumber(); |
| 55 | if ($number <= 9) { |
| 56 | $offset = 0; |
| 57 | } elseif ($number <= 26) { |
| 58 | $offset = 1; |
| 59 | } else { |
| 60 | $offset = 2; |
| 61 | } |
| 62 | return $this->characterCountBitsForVersions[$offset]; |
| 63 | } |
| 64 | /** |
| 65 | * Returns the four bits used to encode this mode. |
| 66 | */ |
| 67 | public function getBits() : int |
| 68 | { |
| 69 | return $this->bits; |
| 70 | } |
| 71 | } |
| 72 |