From de27a999aee0a6714f540ad9fde4e404fb1b1cd8 Mon Sep 17 00:00:00 2001 From: smiley Date: Mon, 13 Mar 2023 16:56:50 +0100 Subject: [PATCH] :shower: --- src/Common/BitBuffer.php | 2 ++ src/Common/Mode.php | 2 +- src/Decoder/Decoder.php | 34 ++++++++++++++++----------------- tests/Common/ECICharsetTest.php | 2 +- tests/Data/HanziTest.php | 2 +- tests/Data/QRDataTest.php | 2 +- 6 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/Common/BitBuffer.php b/src/Common/BitBuffer.php index 0a37dc0c5..9d4d1f221 100644 --- a/src/Common/BitBuffer.php +++ b/src/Common/BitBuffer.php @@ -90,6 +90,8 @@ final class BitBuffer{ /** * returns the buffer content + * + * to debug: array_map(fn($v) => sprintf('%08b', $v), $bitBuffer->getBuffer()) */ public function getBuffer():array{ return $this->buffer; diff --git a/src/Common/Mode.php b/src/Common/Mode.php index fd5780429..523d37919 100644 --- a/src/Common/Mode.php +++ b/src/Common/Mode.php @@ -10,7 +10,7 @@ namespace chillerlan\QRCode\Common; -use chillerlan\QRCode\Data\{AlphaNum, Byte, ECI, Hanzi, Kanji, Number}; +use chillerlan\QRCode\Data\{AlphaNum, Byte, Hanzi, Kanji, Number}; use chillerlan\QRCode\QRCodeException; /** diff --git a/src/Decoder/Decoder.php b/src/Decoder/Decoder.php index e8e1b4974..6ffb9318b 100644 --- a/src/Decoder/Decoder.php +++ b/src/Decoder/Decoder.php @@ -105,23 +105,6 @@ final class Decoder{ if($datamode === Mode::TERMINATOR){ break; } - elseif($datamode === Mode::ECI){ - $result .= ECI::decodeSegment($this->bitBuffer, $versionNumber); - } - elseif($datamode === Mode::FNC1_FIRST || $datamode === Mode::FNC1_SECOND){ - // We do little with FNC1 except alter the parsed result a bit according to the spec - $fc1InEffect = true; - } - elseif($datamode === Mode::STRCTURED_APPEND){ - - if($this->bitBuffer->available() < 16){ - throw new QRCodeDecoderException('structured append: not enough bits left'); - } - // sequence number and parity is added later to the result metadata - // Read next 8 bits (symbol sequence #) and 8 bits (parity data), then continue - $symbolSequence = $this->bitBuffer->read(8); - $parityData = $this->bitBuffer->read(8); - } elseif($datamode === Mode::NUMBER){ $result .= Number::decodeSegment($this->bitBuffer, $versionNumber); } @@ -134,6 +117,23 @@ final class Decoder{ elseif($datamode === Mode::KANJI){ $result .= Kanji::decodeSegment($this->bitBuffer, $versionNumber); } + elseif($datamode === Mode::STRCTURED_APPEND){ + + if($this->bitBuffer->available() < 16){ + throw new QRCodeDecoderException('structured append: not enough bits left'); + } + // sequence number and parity is added later to the result metadata + // Read next 8 bits (symbol sequence #) and 8 bits (parity data), then continue + $symbolSequence = $this->bitBuffer->read(8); + $parityData = $this->bitBuffer->read(8); + } + elseif($datamode === Mode::FNC1_FIRST || $datamode === Mode::FNC1_SECOND){ + // We do little with FNC1 except alter the parsed result a bit according to the spec + $fc1InEffect = true; + } + elseif($datamode === Mode::ECI){ + $result .= ECI::decodeSegment($this->bitBuffer, $versionNumber); + } elseif($datamode === Mode::HANZI){ $result .= Hanzi::decodeSegment($this->bitBuffer, $versionNumber); } diff --git a/tests/Common/ECICharsetTest.php b/tests/Common/ECICharsetTest.php index 39cf91d34..56cb027bb 100644 --- a/tests/Common/ECICharsetTest.php +++ b/tests/Common/ECICharsetTest.php @@ -14,7 +14,7 @@ use chillerlan\QRCode\Common\ECICharset; use chillerlan\QRCode\QRCodeException; use PHPUnit\Framework\TestCase; -class ECICharsetTest extends TestCase{ +final class ECICharsetTest extends TestCase{ public static function invalidIdProvider():array{ return [[-1], [1000000]]; diff --git a/tests/Data/HanziTest.php b/tests/Data/HanziTest.php index a6211e546..ed01dde42 100644 --- a/tests/Data/HanziTest.php +++ b/tests/Data/HanziTest.php @@ -17,7 +17,7 @@ use function bin2hex, chr, defined, sprintf; /** * Tests the Hanzi/GB2312 class */ -class HanziTest extends DataInterfaceTestAbstract{ +final class HanziTest extends DataInterfaceTestAbstract{ protected string $FQN = Hanzi::class; protected string $testdata = '无可奈何燃花作香'; diff --git a/tests/Data/QRDataTest.php b/tests/Data/QRDataTest.php index 6736ffea4..6ec582d86 100644 --- a/tests/Data/QRDataTest.php +++ b/tests/Data/QRDataTest.php @@ -21,7 +21,7 @@ use PHPUnit\Framework\TestCase; /** * */ -class QRDataTest extends TestCase{ +final class QRDataTest extends TestCase{ /** * tests setting the BitBuffer object directly