Просмотр исходного кода

:octocat: add subset indicator for Hanzi mode

smiley 2 лет назад
Родитель
Сommit
232c1857f0
2 измененных файлов с 8 добавлено и 2 удалено
  1. 3 1
      src/Data/Hanzi.php
  2. 5 1
      tests/Data/DataInterfaceTestAbstract.php

+ 3 - 1
src/Data/Hanzi.php

@@ -30,7 +30,8 @@ use function chr, implode, is_string, mb_convert_encoding, mb_detect_encoding,
 final class Hanzi extends QRDataModeAbstract{
 
 	// GB2312, GB18030
-	public const ENCODING = 'GB18030';
+	public const ENCODING      = 'GB18030';
+	public const GB2312_SUBSET = 0b0001; // other subsets???
 
 	/**
 	 * @inheritDoc
@@ -115,6 +116,7 @@ final class Hanzi extends QRDataModeAbstract{
 
 		$bitBuffer
 			->put($this::$datamode, 4)
+			->put($this::GB2312_SUBSET, 4)
 			->put($this->getCharCount(), $this::getLengthBits($versionNumber))
 		;
 

+ 5 - 1
tests/Data/DataInterfaceTestAbstract.php

@@ -13,7 +13,7 @@ namespace chillerlan\QRCodeTest\Data;
 use chillerlan\QRCode\Common\{MaskPattern, Version};
 use chillerlan\QRCode\QROptions;
 use PHPUnit\Framework\TestCase;
-use chillerlan\QRCode\Data\{QRCodeDataException, QRData, QRDataModeInterface, QRMatrix};
+use chillerlan\QRCode\Data\{Hanzi, QRCodeDataException, QRData, QRDataModeInterface, QRMatrix};
 use ReflectionClass;
 
 use function str_repeat;
@@ -123,6 +123,10 @@ abstract class DataInterfaceTestAbstract extends TestCase{
 		$bitBuffer = $this->QRData->getBitBuffer();
 		// read the first 4 bits
 		$this::assertTrue($bitBuffer->read(4) === $datamodeInterface->getDataMode());
+		// hanzi mode starts with a subset indicator
+		if($datamodeInterface instanceof Hanzi){
+			$this::assertTrue($bitBuffer->read(4) === Hanzi::GB2312_SUBSET);
+		}
 		// decode the data
 		/** @noinspection PhpUndefinedMethodInspection */
 		$this::assertSame($this->testdata, $this->FQN::decodeSegment($bitBuffer, $options->version));