This commit is contained in:
smiley
2023-03-13 16:56:50 +01:00
parent 05eaf4eca0
commit de27a999ae
6 changed files with 23 additions and 21 deletions
+2
View File
@@ -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;
+1 -1
View File
@@ -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;
/**
+17 -17
View File
@@ -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);
}
+1 -1
View File
@@ -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]];
+1 -1
View File
@@ -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 = '无可奈何燃花作香';
+1 -1
View File
@@ -21,7 +21,7 @@ use PHPUnit\Framework\TestCase;
/**
*
*/
class QRDataTest extends TestCase{
final class QRDataTest extends TestCase{
/**
* tests setting the BitBuffer object directly