diff --git a/README.md b/README.md index a9b7443..58ca2d4 100644 --- a/README.md +++ b/README.md @@ -83,4 +83,4 @@ CONTENIDO 4.8.16 CL * 13 Bug Report FEUser-Plugins valide_to and valide_from saving wrong t ... * 9 Enhancement Check all translations (i18n) * 8 Bug Report adapt genericdb from 4.8.17 CL -* 5 Bug Report Buttontranslations missing or wrong \ No newline at end of file +* 5 Bug Report Buttontranslations missing or wrong diff --git a/composer.json b/composer.json index bf55408..28fb480 100644 --- a/composer.json +++ b/composer.json @@ -12,7 +12,7 @@ "vendor-dir": "conlite/external" }, "require": { - "endroid/qr-code": "4.2.*", + "endroid/qr-code": "1.9.*", "phpmailer/phpmailer": "v5.2.*" }, "autoload": { diff --git a/composer.lock b/composer.lock index dca4982..232cd10 100644 --- a/composer.lock +++ b/composer.lock @@ -4,142 +4,38 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies", "This file is @generated automatically" ], - "content-hash": "48fd8001d143baf1abc5be3ae05467fd", + "content-hash": "e89f8a75b1a9d3be271cdb0aafea0cfa", "packages": [ - { - "name": "bacon/bacon-qr-code", - "version": "2.0.4", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0.3", - "ext-iconv": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "type": "library", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "support": { - "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.4" - }, - "time": "2021-06-18T13:26:35+00:00" - }, - { - "name": "dasprid/enum", - "version": "1.0.3", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "type": "library", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" - }, - "time": "2020-10-02T16:03:48+00:00" - }, { "name": "endroid/qr-code", - "version": "4.2.2", + "version": "1.9.3", "source": { "type": "git", "url": "https://github.com/endroid/qr-code.git", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78" + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code/zipball/53bfce79da95bf082484301fecbc1d77a3907f78", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/c9644bec2a9cc9318e98d1437de3c628dcd1ef93", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "php": "^7.3||^8.0" + "ext-gd": "*", + "php": ">=5.4", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "endroid/quality": "dev-master", - "ext-gd": "*", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" - }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" + "phpunit/phpunit": "^4.0|^5.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0" }, "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } }, "autoload": { @@ -154,29 +50,25 @@ "authors": [ { "name": "Jeroen van den Enden", - "email": "info@endroid.nl" + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" } ], "description": "Endroid QR Code", - "homepage": "https://github.com/endroid/qr-code", + "homepage": "https://github.com/endroid/QrCode", "keywords": [ + "bundle", "code", "endroid", - "php", "qr", - "qrcode" + "qrcode", + "symfony" ], "support": { "issues": "https://github.com/endroid/qr-code/issues", - "source": "https://github.com/endroid/qr-code/tree/4.2.2" + "source": "https://github.com/endroid/qr-code/tree/1.9.3" }, - "funding": [ - { - "url": "https://github.com/endroid", - "type": "github" - } - ], - "time": "2021-08-16T22:08:35+00:00" + "time": "2017-04-08T09:13:59+00:00" }, { "name": "phpmailer/phpmailer", @@ -272,6 +164,72 @@ } ], "time": "2020-03-19T14:29:37+00:00" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.47", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "type": "library", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "time": "2020-10-24T10:57:07+00:00" } ], "packages-dev": [], @@ -282,5 +240,5 @@ "prefer-lowest": false, "platform": [], "platform-dev": [], - "plugin-api-version": "2.1.0" + "plugin-api-version": "2.3.0" } diff --git a/conlite/external/autoload.php b/conlite/external/autoload.php index d912bfb..955af5a 100644 --- a/conlite/external/autoload.php +++ b/conlite/external/autoload.php @@ -2,6 +2,11 @@ // autoload.php @generated by Composer +if (PHP_VERSION_ID < 50600) { + echo 'Composer 2.3.0 dropped support for autoloading on PHP <5.6 and you are running '.PHP_VERSION.', please upgrade PHP or use Composer 2.2 LTS via "composer self-update --2.2". Aborting.'.PHP_EOL; + exit(1); +} + require_once __DIR__ . '/composer/autoload_real.php'; return ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb::getLoader(); diff --git a/conlite/external/bacon/bacon-qr-code/CHANGELOG.md b/conlite/external/bacon/bacon-qr-code/CHANGELOG.md deleted file mode 100644 index 619cb35..0000000 --- a/conlite/external/bacon/bacon-qr-code/CHANGELOG.md +++ /dev/null @@ -1,51 +0,0 @@ -# Changelog - -All notable changes to this project will be documented in this file, in reverse chronological order by release. - -## 2.0.2 - 2020-07-30 - -### Changed - -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Upgrade phpunit. -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Allow tests in vendor bundles for Debian packaging. -- [#71](https://github.com/Bacon/BaconQrCode/issues/71) Update TravisCI config file. - -## 2.0.1 - 2020-07-14 - -### Fixed - -- [#69](https://github.com/Bacon/BaconQrCode/pull/69) SimpleCircleEye Class not working properly. - -## 2.0.0 - 2018-04-25 - -### Added - -- [#25](https://github.com/Bacon/BaconQrCode/pull/25) allows for setting a more compact text output - -- CHANGELOG.md added (how meta) - -- Allows more complex shapes for modules - -- Allows setting a gradient for the foreground - -- Allows transparent backgrounds and alpha channel on all colors - -### Changed - -- Minimum PHP version changed to 7.1 - -- Imagick renderer now allows setting different output formats - -- New optimized SVG renderer - -### Deprecated - -- Nothing. - -### Removed - -- Legacy ZF module support removed - -### Fixed - -- Non-release files are excluded from composer packages diff --git a/conlite/external/bacon/bacon-qr-code/LICENSE b/conlite/external/bacon/bacon-qr-code/LICENSE deleted file mode 100644 index d45a356..0000000 --- a/conlite/external/bacon/bacon-qr-code/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017, Ben Scholzen 'DASPRiD' -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/conlite/external/bacon/bacon-qr-code/README.md b/conlite/external/bacon/bacon-qr-code/README.md deleted file mode 100644 index ba006c1..0000000 --- a/conlite/external/bacon/bacon-qr-code/README.md +++ /dev/null @@ -1,39 +0,0 @@ -# QR Code generator - -[![Build Status](https://api.travis-ci.org/Bacon/BaconQrCode.png?branch=master)](http://travis-ci.org/Bacon/BaconQrCode) -[![Coverage Status](https://coveralls.io/repos/github/Bacon/BaconQrCode/badge.svg?branch=master)](https://coveralls.io/github/Bacon/BaconQrCode?branch=master) -[![Latest Stable Version](https://poser.pugx.org/bacon/bacon-qr-code/v/stable)](https://packagist.org/packages/bacon/bacon-qr-code) -[![Total Downloads](https://poser.pugx.org/bacon/bacon-qr-code/downloads)](https://packagist.org/packages/bacon/bacon-qr-code) -[![License](https://poser.pugx.org/bacon/bacon-qr-code/license)](https://packagist.org/packages/bacon/bacon-qr-code) - - -## Introduction -BaconQrCode is a port of QR code portion of the ZXing library. It currently -only features the encoder part, but could later receive the decoder part as -well. - -As the Reed Solomon codec implementation of the ZXing library performs quite -slow in PHP, it was exchanged with the implementation by Phil Karn. - - -## Example usage -```php -use BaconQrCode\Renderer\ImageRenderer; -use BaconQrCode\Renderer\Image\ImagickImageBackEnd; -use BaconQrCode\Renderer\RendererStyle\RendererStyle; -use BaconQrCode\Writer; - -$renderer = new ImageRenderer( - new RendererStyle(400), - new ImagickImageBackEnd() -); -$writer = new Writer($renderer); -$writer->writeFile('Hello World!', 'qrcode.png'); -``` - -## Available image renderer back ends -BaconQrCode comes with multiple back ends for rendering images. Currently included are the following: - -- `ImagickImageBackEnd`: renders raster images using the Imagick library -- `SvgImageBackEnd`: renders SVG files using XMLWriter -- `EpsImageBackEnd`: renders EPS files diff --git a/conlite/external/bacon/bacon-qr-code/composer.json b/conlite/external/bacon/bacon-qr-code/composer.json deleted file mode 100644 index b240199..0000000 --- a/conlite/external/bacon/bacon-qr-code/composer.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "bacon/bacon-qr-code", - "description": "BaconQrCode is a QR code generator for PHP.", - "license" : "BSD-2-Clause", - "homepage": "https://github.com/Bacon/BaconQrCode", - "require": { - "php": "^7.1 || ^8.0", - "ext-iconv": "*", - "dasprid/enum": "^1.0.3" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4", - "phly/keep-a-changelog": "^1.4" - } -} diff --git a/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist b/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist deleted file mode 100644 index 4d2f9cf..0000000 --- a/conlite/external/bacon/bacon-qr-code/phpunit.xml.dist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./test - - - - - - src - - - diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php deleted file mode 100644 index 158384f..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitArray.php +++ /dev/null @@ -1,372 +0,0 @@ - - */ - private $bits; - - /** - * Size of the bit array in bits. - * - * @var int - */ - private $size; - - /** - * Creates a new bit array with a given size. - */ - public function __construct(int $size = 0) - { - $this->size = $size; - $this->bits = SplFixedArray::fromArray(array_fill(0, ($this->size + 31) >> 3, 0)); - } - - /** - * Gets the size in bits. - */ - public function getSize() : int - { - return $this->size; - } - - /** - * Gets the size in bytes. - */ - public function getSizeInBytes() : int - { - return ($this->size + 7) >> 3; - } - - /** - * Ensures that the array has a minimum capacity. - */ - public function ensureCapacity(int $size) : void - { - if ($size > count($this->bits) << 5) { - $this->bits->setSize(($size + 31) >> 5); - } - } - - /** - * Gets a specific bit. - */ - public function get(int $i) : bool - { - return 0 !== ($this->bits[$i >> 5] & (1 << ($i & 0x1f))); - } - - /** - * Sets a specific bit. - */ - public function set(int $i) : void - { - $this->bits[$i >> 5] = $this->bits[$i >> 5] | 1 << ($i & 0x1f); - } - - /** - * Flips a specific bit. - */ - public function flip(int $i) : void - { - $this->bits[$i >> 5] ^= 1 << ($i & 0x1f); - } - - /** - * Gets the next set bit position from a given position. - */ - public function getNextSet(int $from) : int - { - if ($from >= $this->size) { - return $this->size; - } - - $bitsOffset = $from >> 5; - $currentBits = $this->bits[$bitsOffset]; - $bitsLength = count($this->bits); - $currentBits &= ~((1 << ($from & 0x1f)) - 1); - - while (0 === $currentBits) { - if (++$bitsOffset === $bitsLength) { - return $this->size; - } - - $currentBits = $this->bits[$bitsOffset]; - } - - $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); - return $result > $this->size ? $this->size : $result; - } - - /** - * Gets the next unset bit position from a given position. - */ - public function getNextUnset(int $from) : int - { - if ($from >= $this->size) { - return $this->size; - } - - $bitsOffset = $from >> 5; - $currentBits = ~$this->bits[$bitsOffset]; - $bitsLength = count($this->bits); - $currentBits &= ~((1 << ($from & 0x1f)) - 1); - - while (0 === $currentBits) { - if (++$bitsOffset === $bitsLength) { - return $this->size; - } - - $currentBits = ~$this->bits[$bitsOffset]; - } - - $result = ($bitsOffset << 5) + BitUtils::numberOfTrailingZeros($currentBits); - return $result > $this->size ? $this->size : $result; - } - - /** - * Sets a bulk of bits. - */ - public function setBulk(int $i, int $newBits) : void - { - $this->bits[$i >> 5] = $newBits; - } - - /** - * Sets a range of bits. - * - * @throws InvalidArgumentException if end is smaller than start - */ - public function setRange(int $start, int $end) : void - { - if ($end < $start) { - throw new InvalidArgumentException('End must be greater or equal to start'); - } - - if ($end === $start) { - return; - } - - --$end; - - $firstInt = $start >> 5; - $lastInt = $end >> 5; - - for ($i = $firstInt; $i <= $lastInt; ++$i) { - $firstBit = $i > $firstInt ? 0 : $start & 0x1f; - $lastBit = $i < $lastInt ? 31 : $end & 0x1f; - - if (0 === $firstBit && 31 === $lastBit) { - $mask = 0x7fffffff; - } else { - $mask = 0; - - for ($j = $firstBit; $j < $lastBit; ++$j) { - $mask |= 1 << $j; - } - } - - $this->bits[$i] = $this->bits[$i] | $mask; - } - } - - /** - * Clears the bit array, unsetting every bit. - */ - public function clear() : void - { - $bitsLength = count($this->bits); - - for ($i = 0; $i < $bitsLength; ++$i) { - $this->bits[$i] = 0; - } - } - - /** - * Checks if a range of bits is set or not set. - - * @throws InvalidArgumentException if end is smaller than start - */ - public function isRange(int $start, int $end, bool $value) : bool - { - if ($end < $start) { - throw new InvalidArgumentException('End must be greater or equal to start'); - } - - if ($end === $start) { - return true; - } - - --$end; - - $firstInt = $start >> 5; - $lastInt = $end >> 5; - - for ($i = $firstInt; $i <= $lastInt; ++$i) { - $firstBit = $i > $firstInt ? 0 : $start & 0x1f; - $lastBit = $i < $lastInt ? 31 : $end & 0x1f; - - if (0 === $firstBit && 31 === $lastBit) { - $mask = 0x7fffffff; - } else { - $mask = 0; - - for ($j = $firstBit; $j <= $lastBit; ++$j) { - $mask |= 1 << $j; - } - } - - if (($this->bits[$i] & $mask) !== ($value ? $mask : 0)) { - return false; - } - } - - return true; - } - - /** - * Appends a bit to the array. - */ - public function appendBit(bool $bit) : void - { - $this->ensureCapacity($this->size + 1); - - if ($bit) { - $this->bits[$this->size >> 5] = $this->bits[$this->size >> 5] | (1 << ($this->size & 0x1f)); - } - - ++$this->size; - } - - /** - * Appends a number of bits (up to 32) to the array. - - * @throws InvalidArgumentException if num bits is not between 0 and 32 - */ - public function appendBits(int $value, int $numBits) : void - { - if ($numBits < 0 || $numBits > 32) { - throw new InvalidArgumentException('Num bits must be between 0 and 32'); - } - - $this->ensureCapacity($this->size + $numBits); - - for ($numBitsLeft = $numBits; $numBitsLeft > 0; $numBitsLeft--) { - $this->appendBit((($value >> ($numBitsLeft - 1)) & 0x01) === 1); - } - } - - /** - * Appends another bit array to this array. - */ - public function appendBitArray(self $other) : void - { - $otherSize = $other->getSize(); - $this->ensureCapacity($this->size + $other->getSize()); - - for ($i = 0; $i < $otherSize; ++$i) { - $this->appendBit($other->get($i)); - } - } - - /** - * Makes an exclusive-or comparision on the current bit array. - * - * @throws InvalidArgumentException if sizes don't match - */ - public function xorBits(self $other) : void - { - $bitsLength = count($this->bits); - $otherBits = $other->getBitArray(); - - if ($bitsLength !== count($otherBits)) { - throw new InvalidArgumentException('Sizes don\'t match'); - } - - for ($i = 0; $i < $bitsLength; ++$i) { - $this->bits[$i] = $this->bits[$i] ^ $otherBits[$i]; - } - } - - /** - * Converts the bit array to a byte array. - * - * @return SplFixedArray - */ - public function toBytes(int $bitOffset, int $numBytes) : SplFixedArray - { - $bytes = new SplFixedArray($numBytes); - - for ($i = 0; $i < $numBytes; ++$i) { - $byte = 0; - - for ($j = 0; $j < 8; ++$j) { - if ($this->get($bitOffset)) { - $byte |= 1 << (7 - $j); - } - - ++$bitOffset; - } - - $bytes[$i] = $byte; - } - - return $bytes; - } - - /** - * Gets the internal bit array. - * - * @return SplFixedArray - */ - public function getBitArray() : SplFixedArray - { - return $this->bits; - } - - /** - * Reverses the array. - */ - public function reverse() : void - { - $newBits = new SplFixedArray(count($this->bits)); - - for ($i = 0; $i < $this->size; ++$i) { - if ($this->get($this->size - $i - 1)) { - $newBits[$i >> 5] = $newBits[$i >> 5] | (1 << ($i & 0x1f)); - } - } - - $this->bits = $newBits; - } - - /** - * Returns a string representation of the bit array. - */ - public function __toString() : string - { - $result = ''; - - for ($i = 0; $i < $this->size; ++$i) { - if (0 === ($i & 0x07)) { - $result .= ' '; - } - - $result .= $this->get($i) ? 'X' : '.'; - } - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php deleted file mode 100644 index 10bf8fe..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitMatrix.php +++ /dev/null @@ -1,313 +0,0 @@ - - */ - private $bits; - - /** - * @throws InvalidArgumentException if a dimension is smaller than zero - */ - public function __construct(int $width, int $height = null) - { - if (null === $height) { - $height = $width; - } - - if ($width < 1 || $height < 1) { - throw new InvalidArgumentException('Both dimensions must be greater than zero'); - } - - $this->width = $width; - $this->height = $height; - $this->rowSize = ($width + 31) >> 5; - $this->bits = SplFixedArray::fromArray(array_fill(0, $this->rowSize * $height, 0)); - } - - /** - * Gets the requested bit, where true means black. - */ - public function get(int $x, int $y) : bool - { - $offset = $y * $this->rowSize + ($x >> 5); - return 0 !== (BitUtils::unsignedRightShift($this->bits[$offset], ($x & 0x1f)) & 1); - } - - /** - * Sets the given bit to true. - */ - public function set(int $x, int $y) : void - { - $offset = $y * $this->rowSize + ($x >> 5); - $this->bits[$offset] = $this->bits[$offset] | (1 << ($x & 0x1f)); - } - - /** - * Flips the given bit. - */ - public function flip(int $x, int $y) : void - { - $offset = $y * $this->rowSize + ($x >> 5); - $this->bits[$offset] = $this->bits[$offset] ^ (1 << ($x & 0x1f)); - } - - /** - * Clears all bits (set to false). - */ - public function clear() : void - { - $max = count($this->bits); - - for ($i = 0; $i < $max; ++$i) { - $this->bits[$i] = 0; - } - } - - /** - * Sets a square region of the bit matrix to true. - * - * @throws InvalidArgumentException if left or top are negative - * @throws InvalidArgumentException if width or height are smaller than 1 - * @throws InvalidArgumentException if region does not fit into the matix - */ - public function setRegion(int $left, int $top, int $width, int $height) : void - { - if ($top < 0 || $left < 0) { - throw new InvalidArgumentException('Left and top must be non-negative'); - } - - if ($height < 1 || $width < 1) { - throw new InvalidArgumentException('Width and height must be at least 1'); - } - - $right = $left + $width; - $bottom = $top + $height; - - if ($bottom > $this->height || $right > $this->width) { - throw new InvalidArgumentException('The region must fit inside the matrix'); - } - - for ($y = $top; $y < $bottom; ++$y) { - $offset = $y * $this->rowSize; - - for ($x = $left; $x < $right; ++$x) { - $index = $offset + ($x >> 5); - $this->bits[$index] = $this->bits[$index] | (1 << ($x & 0x1f)); - } - } - } - - /** - * A fast method to retrieve one row of data from the matrix as a BitArray. - */ - public function getRow(int $y, BitArray $row = null) : BitArray - { - if (null === $row || $row->getSize() < $this->width) { - $row = new BitArray($this->width); - } - - $offset = $y * $this->rowSize; - - for ($x = 0; $x < $this->rowSize; ++$x) { - $row->setBulk($x << 5, $this->bits[$offset + $x]); - } - - return $row; - } - - /** - * Sets a row of data from a BitArray. - */ - public function setRow(int $y, BitArray $row) : void - { - $bits = $row->getBitArray(); - - for ($i = 0; $i < $this->rowSize; ++$i) { - $this->bits[$y * $this->rowSize + $i] = $bits[$i]; - } - } - - /** - * This is useful in detecting the enclosing rectangle of a 'pure' barcode. - * - * @return int[]|null - */ - public function getEnclosingRectangle() : ?array - { - $left = $this->width; - $top = $this->height; - $right = -1; - $bottom = -1; - - for ($y = 0; $y < $this->height; ++$y) { - for ($x32 = 0; $x32 < $this->rowSize; ++$x32) { - $bits = $this->bits[$y * $this->rowSize + $x32]; - - if (0 !== $bits) { - if ($y < $top) { - $top = $y; - } - - if ($y > $bottom) { - $bottom = $y; - } - - if ($x32 * 32 < $left) { - $bit = 0; - - while (($bits << (31 - $bit)) === 0) { - $bit++; - } - - if (($x32 * 32 + $bit) < $left) { - $left = $x32 * 32 + $bit; - } - } - } - - if ($x32 * 32 + 31 > $right) { - $bit = 31; - - while (0 === BitUtils::unsignedRightShift($bits, $bit)) { - --$bit; - } - - if (($x32 * 32 + $bit) > $right) { - $right = $x32 * 32 + $bit; - } - } - } - } - - $width = $right - $left; - $height = $bottom - $top; - - if ($width < 0 || $height < 0) { - return null; - } - - return [$left, $top, $width, $height]; - } - - /** - * Gets the most top left set bit. - * - * This is useful in detecting a corner of a 'pure' barcode. - * - * @return int[]|null - */ - public function getTopLeftOnBit() : ?array - { - $bitsOffset = 0; - - while ($bitsOffset < count($this->bits) && 0 === $this->bits[$bitsOffset]) { - ++$bitsOffset; - } - - if (count($this->bits) === $bitsOffset) { - return null; - } - - $x = intdiv($bitsOffset, $this->rowSize); - $y = ($bitsOffset % $this->rowSize) << 5; - - $bits = $this->bits[$bitsOffset]; - $bit = 0; - - while (0 === ($bits << (31 - $bit))) { - ++$bit; - } - - $x += $bit; - - return [$x, $y]; - } - - /** - * Gets the most bottom right set bit. - * - * This is useful in detecting a corner of a 'pure' barcode. - * - * @return int[]|null - */ - public function getBottomRightOnBit() : ?array - { - $bitsOffset = count($this->bits) - 1; - - while ($bitsOffset >= 0 && 0 === $this->bits[$bitsOffset]) { - --$bitsOffset; - } - - if ($bitsOffset < 0) { - return null; - } - - $x = intdiv($bitsOffset, $this->rowSize); - $y = ($bitsOffset % $this->rowSize) << 5; - - $bits = $this->bits[$bitsOffset]; - $bit = 0; - - while (0 === BitUtils::unsignedRightShift($bits, $bit)) { - --$bit; - } - - $x += $bit; - - return [$x, $y]; - } - - /** - * Gets the width of the matrix, - */ - public function getWidth() : int - { - return $this->width; - } - - /** - * Gets the height of the matrix. - */ - public function getHeight() : int - { - return $this->height; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php b/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php deleted file mode 100644 index 0c575b4..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/BitUtils.php +++ /dev/null @@ -1,41 +0,0 @@ ->>" in other - * languages. - */ - public static function unsignedRightShift(int $a, int $b) : int - { - return ( - $a >= 0 - ? $a >> $b - : (($a & 0x7fffffff) >> $b) | (0x40000000 >> ($b - 1)) - ); - } - - /** - * Gets the number of trailing zeros. - */ - public static function numberOfTrailingZeros(int $i) : int - { - $lastPos = strrpos(str_pad(decbin($i), 32, '0', STR_PAD_LEFT), '1'); - return $lastPos === false ? 32 : 31 - $lastPos; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php b/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php deleted file mode 100644 index 6dfff17..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/CharacterSetEci.php +++ /dev/null @@ -1,180 +0,0 @@ -|null - */ - private static $valueToEci; - - /** - * @var array|null - */ - private static $nameToEci; - - public function __construct(array $values, string ...$otherEncodingNames) - { - $this->values = $values; - $this->otherEncodingNames = $otherEncodingNames; - } - - /** - * Returns the primary value. - */ - public function getValue() : int - { - return $this->values[0]; - } - - /** - * Gets character set ECI by value. - * - * Returns the representing ECI of a given value, or null if it is legal but unsupported. - * - * @throws InvalidArgumentException if value is not between 0 and 900 - */ - public static function getCharacterSetEciByValue(int $value) : ?self - { - if ($value < 0 || $value >= 900) { - throw new InvalidArgumentException('Value must be between 0 and 900'); - } - - $valueToEci = self::valueToEci(); - - if (! array_key_exists($value, $valueToEci)) { - return null; - } - - return $valueToEci[$value]; - } - - /** - * Returns character set ECI by name. - * - * Returns the representing ECI of a given name, or null if it is legal but unsupported - */ - public static function getCharacterSetEciByName(string $name) : ?self - { - $nameToEci = self::nameToEci(); - $name = strtolower($name); - - if (! array_key_exists($name, $nameToEci)) { - return null; - } - - return $nameToEci[$name]; - } - - private static function valueToEci() : array - { - if (null !== self::$valueToEci) { - return self::$valueToEci; - } - - self::$valueToEci = []; - - foreach (self::values() as $eci) { - foreach ($eci->values as $value) { - self::$valueToEci[$value] = $eci; - } - } - - return self::$valueToEci; - } - - private static function nameToEci() : array - { - if (null !== self::$nameToEci) { - return self::$nameToEci; - } - - self::$nameToEci = []; - - foreach (self::values() as $eci) { - self::$nameToEci[strtolower($eci->name())] = $eci; - - foreach ($eci->otherEncodingNames as $name) { - self::$nameToEci[strtolower($name)] = $eci; - } - } - - return self::$nameToEci; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php b/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php deleted file mode 100644 index a9a1d07..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlock.php +++ /dev/null @@ -1,49 +0,0 @@ -count = $count; - $this->dataCodewords = $dataCodewords; - } - - /** - * Returns how many times the block is used. - */ - public function getCount() : int - { - return $this->count; - } - - /** - * Returns the number of data codewords. - */ - public function getDataCodewords() : int - { - return $this->dataCodewords; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php b/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php deleted file mode 100644 index 172b5f2..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/EcBlocks.php +++ /dev/null @@ -1,74 +0,0 @@ -ecCodewordsPerBlock = $ecCodewordsPerBlock; - $this->ecBlocks = $ecBlocks; - } - - /** - * Returns the number of EC codewords per block. - */ - public function getEcCodewordsPerBlock() : int - { - return $this->ecCodewordsPerBlock; - } - - /** - * Returns the total number of EC block appearances. - */ - public function getNumBlocks() : int - { - $total = 0; - - foreach ($this->ecBlocks as $ecBlock) { - $total += $ecBlock->getCount(); - } - - return $total; - } - - /** - * Returns the total count of EC codewords. - */ - public function getTotalEcCodewords() : int - { - return $this->ecCodewordsPerBlock * $this->getNumBlocks(); - } - - /** - * Returns the EC blocks included in this collection. - * - * @return EcBlock[] - */ - public function getEcBlocks() : array - { - return $this->ecBlocks; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php b/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php deleted file mode 100644 index 9bbf440..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/ErrorCorrectionLevel.php +++ /dev/null @@ -1,63 +0,0 @@ -bits = $bits; - } - - /** - * @throws OutOfBoundsException if number of bits is invalid - */ - public static function forBits(int $bits) : self - { - switch ($bits) { - case 0: - return self::M(); - - case 1: - return self::L(); - - case 2: - return self::H(); - - case 3: - return self::Q(); - } - - throw new OutOfBoundsException('Invalid number of bits'); - } - - /** - * Returns the two bits used to encode this error correction level. - */ - public function getBits() : int - { - return $this->bits; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php b/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php deleted file mode 100644 index 53e3541..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/FormatInformation.php +++ /dev/null @@ -1,203 +0,0 @@ -ecLevel = ErrorCorrectionLevel::forBits(($formatInfo >> 3) & 0x3); - $this->dataMask = $formatInfo & 0x7; - } - - /** - * Checks how many bits are different between two integers. - */ - public static function numBitsDiffering(int $a, int $b) : int - { - $a ^= $b; - - return ( - self::BITS_SET_IN_HALF_BYTE[$a & 0xf] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 4) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 8) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 12) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 16) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 20) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 24) & 0xf)] - + self::BITS_SET_IN_HALF_BYTE[(BitUtils::unsignedRightShift($a, 28) & 0xf)] - ); - } - - /** - * Decodes format information. - */ - public static function decodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self - { - $formatInfo = self::doDecodeFormatInformation($maskedFormatInfo1, $maskedFormatInfo2); - - if (null !== $formatInfo) { - return $formatInfo; - } - - // Should return null, but, some QR codes apparently do not mask this info. Try again by actually masking the - // pattern first. - return self::doDecodeFormatInformation( - $maskedFormatInfo1 ^ self::FORMAT_INFO_MASK_QR, - $maskedFormatInfo2 ^ self::FORMAT_INFO_MASK_QR - ); - } - - /** - * Internal method for decoding format information. - */ - private static function doDecodeFormatInformation(int $maskedFormatInfo1, int $maskedFormatInfo2) : ?self - { - $bestDifference = PHP_INT_MAX; - $bestFormatInfo = 0; - - foreach (self::FORMAT_INFO_DECODE_LOOKUP as $decodeInfo) { - $targetInfo = $decodeInfo[0]; - - if ($targetInfo === $maskedFormatInfo1 || $targetInfo === $maskedFormatInfo2) { - // Found an exact match - return new self($decodeInfo[1]); - } - - $bitsDifference = self::numBitsDiffering($maskedFormatInfo1, $targetInfo); - - if ($bitsDifference < $bestDifference) { - $bestFormatInfo = $decodeInfo[1]; - $bestDifference = $bitsDifference; - } - - if ($maskedFormatInfo1 !== $maskedFormatInfo2) { - // Also try the other option - $bitsDifference = self::numBitsDiffering($maskedFormatInfo2, $targetInfo); - - if ($bitsDifference < $bestDifference) { - $bestFormatInfo = $decodeInfo[1]; - $bestDifference = $bitsDifference; - } - } - } - - // Hamming distance of the 32 masked codes is 7, by construction, so <= 3 bits differing means we found a match. - if ($bestDifference <= 3) { - return new self($bestFormatInfo); - } - - return null; - } - - /** - * Returns the error correction level. - */ - public function getErrorCorrectionLevel() : ErrorCorrectionLevel - { - return $this->ecLevel; - } - - /** - * Returns the data mask. - */ - public function getDataMask() : int - { - return $this->dataMask; - } - - /** - * Hashes the code of the EC level. - */ - public function hashCode() : int - { - return ($this->ecLevel->getBits() << 3) | $this->dataMask; - } - - /** - * Verifies if this instance equals another one. - */ - public function equals(self $other) : bool - { - return ( - $this->ecLevel === $other->ecLevel - && $this->dataMask === $other->dataMask - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php b/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php deleted file mode 100644 index 51e6c9a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/Mode.php +++ /dev/null @@ -1,76 +0,0 @@ -characterCountBitsForVersions = $characterCountBitsForVersions; - $this->bits = $bits; - } - - /** - * Returns the number of bits used in a specific QR code version. - */ - public function getCharacterCountBits(Version $version) : int - { - $number = $version->getVersionNumber(); - - if ($number <= 9) { - $offset = 0; - } elseif ($number <= 26) { - $offset = 1; - } else { - $offset = 2; - } - - return $this->characterCountBitsForVersions[$offset]; - } - - /** - * Returns the four bits used to encode this mode. - */ - public function getBits() : int - { - return $this->bits; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php b/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php deleted file mode 100644 index a5aad0b..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/ReedSolomonCodec.php +++ /dev/null @@ -1,468 +0,0 @@ - 8) { - throw new InvalidArgumentException('Symbol size must be between 0 and 8'); - } - - if ($firstRoot < 0 || $firstRoot >= (1 << $symbolSize)) { - throw new InvalidArgumentException('First root must be between 0 and ' . (1 << $symbolSize)); - } - - if ($numRoots < 0 || $numRoots >= (1 << $symbolSize)) { - throw new InvalidArgumentException('Num roots must be between 0 and ' . (1 << $symbolSize)); - } - - if ($padding < 0 || $padding >= ((1 << $symbolSize) - 1 - $numRoots)) { - throw new InvalidArgumentException( - 'Padding must be between 0 and ' . ((1 << $symbolSize) - 1 - $numRoots) - ); - } - - $this->symbolSize = $symbolSize; - $this->blockSize = (1 << $symbolSize) - 1; - $this->padding = $padding; - $this->alphaTo = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); - $this->indexOf = SplFixedArray::fromArray(array_fill(0, $this->blockSize + 1, 0), false); - - // Generate galous field lookup table - $this->indexOf[0] = $this->blockSize; - $this->alphaTo[$this->blockSize] = 0; - - $sr = 1; - - for ($i = 0; $i < $this->blockSize; ++$i) { - $this->indexOf[$sr] = $i; - $this->alphaTo[$i] = $sr; - - $sr <<= 1; - - if ($sr & (1 << $symbolSize)) { - $sr ^= $gfPoly; - } - - $sr &= $this->blockSize; - } - - if (1 !== $sr) { - throw new RuntimeException('Field generator polynomial is not primitive'); - } - - // Form RS code generator polynomial from its roots - $this->generatorPoly = SplFixedArray::fromArray(array_fill(0, $numRoots + 1, 0), false); - $this->firstRoot = $firstRoot; - $this->primitive = $primitive; - $this->numRoots = $numRoots; - - // Find prim-th root of 1, used in decoding - for ($iPrimitive = 1; ($iPrimitive % $primitive) !== 0; $iPrimitive += $this->blockSize) { - } - - $this->iPrimitive = intdiv($iPrimitive, $primitive); - - $this->generatorPoly[0] = 1; - - for ($i = 0, $root = $firstRoot * $primitive; $i < $numRoots; ++$i, $root += $primitive) { - $this->generatorPoly[$i + 1] = 1; - - for ($j = $i; $j > 0; $j--) { - if ($this->generatorPoly[$j] !== 0) { - $this->generatorPoly[$j] = $this->generatorPoly[$j - 1] ^ $this->alphaTo[ - $this->modNn($this->indexOf[$this->generatorPoly[$j]] + $root) - ]; - } else { - $this->generatorPoly[$j] = $this->generatorPoly[$j - 1]; - } - } - - $this->generatorPoly[$j] = $this->alphaTo[$this->modNn($this->indexOf[$this->generatorPoly[0]] + $root)]; - } - - // Convert generator poly to index form for quicker encoding - for ($i = 0; $i <= $numRoots; ++$i) { - $this->generatorPoly[$i] = $this->indexOf[$this->generatorPoly[$i]]; - } - } - - /** - * Encodes data and writes result back into parity array. - */ - public function encode(SplFixedArray $data, SplFixedArray $parity) : void - { - for ($i = 0; $i < $this->numRoots; ++$i) { - $parity[$i] = 0; - } - - $iterations = $this->blockSize - $this->numRoots - $this->padding; - - for ($i = 0; $i < $iterations; ++$i) { - $feedback = $this->indexOf[$data[$i] ^ $parity[0]]; - - if ($feedback !== $this->blockSize) { - // Feedback term is non-zero - $feedback = $this->modNn($this->blockSize - $this->generatorPoly[$this->numRoots] + $feedback); - - for ($j = 1; $j < $this->numRoots; ++$j) { - $parity[$j] = $parity[$j] ^ $this->alphaTo[ - $this->modNn($feedback + $this->generatorPoly[$this->numRoots - $j]) - ]; - } - } - - for ($j = 0; $j < $this->numRoots - 1; ++$j) { - $parity[$j] = $parity[$j + 1]; - } - - if ($feedback !== $this->blockSize) { - $parity[$this->numRoots - 1] = $this->alphaTo[$this->modNn($feedback + $this->generatorPoly[0])]; - } else { - $parity[$this->numRoots - 1] = 0; - } - } - } - - /** - * Decodes received data. - */ - public function decode(SplFixedArray $data, SplFixedArray $erasures = null) : ?int - { - // This speeds up the initialization a bit. - $numRootsPlusOne = SplFixedArray::fromArray(array_fill(0, $this->numRoots + 1, 0), false); - $numRoots = SplFixedArray::fromArray(array_fill(0, $this->numRoots, 0), false); - - $lambda = clone $numRootsPlusOne; - $b = clone $numRootsPlusOne; - $t = clone $numRootsPlusOne; - $omega = clone $numRootsPlusOne; - $root = clone $numRoots; - $loc = clone $numRoots; - - $numErasures = (null !== $erasures ? count($erasures) : 0); - - // Form the Syndromes; i.e., evaluate data(x) at roots of g(x) - $syndromes = SplFixedArray::fromArray(array_fill(0, $this->numRoots, $data[0]), false); - - for ($i = 1; $i < $this->blockSize - $this->padding; ++$i) { - for ($j = 0; $j < $this->numRoots; ++$j) { - if ($syndromes[$j] === 0) { - $syndromes[$j] = $data[$i]; - } else { - $syndromes[$j] = $data[$i] ^ $this->alphaTo[ - $this->modNn($this->indexOf[$syndromes[$j]] + ($this->firstRoot + $j) * $this->primitive) - ]; - } - } - } - - // Convert syndromes to index form, checking for nonzero conditions - $syndromeError = 0; - - for ($i = 0; $i < $this->numRoots; ++$i) { - $syndromeError |= $syndromes[$i]; - $syndromes[$i] = $this->indexOf[$syndromes[$i]]; - } - - if (! $syndromeError) { - // If syndrome is zero, data[] is a codeword and there are no errors to correct, so return data[] - // unmodified. - return 0; - } - - $lambda[0] = 1; - - if ($numErasures > 0) { - // Init lambda to be the erasure locator polynomial - $lambda[1] = $this->alphaTo[$this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[0]))]; - - for ($i = 1; $i < $numErasures; ++$i) { - $u = $this->modNn($this->primitive * ($this->blockSize - 1 - $erasures[$i])); - - for ($j = $i + 1; $j > 0; --$j) { - $tmp = $this->indexOf[$lambda[$j - 1]]; - - if ($tmp !== $this->blockSize) { - $lambda[$j] = $lambda[$j] ^ $this->alphaTo[$this->modNn($u + $tmp)]; - } - } - } - } - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $b[$i] = $this->indexOf[$lambda[$i]]; - } - - // Begin Berlekamp-Massey algorithm to determine error+erasure locator polynomial - $r = $numErasures; - $el = $numErasures; - - while (++$r <= $this->numRoots) { - // Compute discrepancy at the r-th step in poly form - $discrepancyR = 0; - - for ($i = 0; $i < $r; ++$i) { - if ($lambda[$i] !== 0 && $syndromes[$r - $i - 1] !== $this->blockSize) { - $discrepancyR ^= $this->alphaTo[ - $this->modNn($this->indexOf[$lambda[$i]] + $syndromes[$r - $i - 1]) - ]; - } - } - - $discrepancyR = $this->indexOf[$discrepancyR]; - - if ($discrepancyR === $this->blockSize) { - $tmp = $b->toArray(); - array_unshift($tmp, $this->blockSize); - array_pop($tmp); - $b = SplFixedArray::fromArray($tmp, false); - continue; - } - - $t[0] = $lambda[0]; - - for ($i = 0; $i < $this->numRoots; ++$i) { - if ($b[$i] !== $this->blockSize) { - $t[$i + 1] = $lambda[$i + 1] ^ $this->alphaTo[$this->modNn($discrepancyR + $b[$i])]; - } else { - $t[$i + 1] = $lambda[$i + 1]; - } - } - - if (2 * $el <= $r + $numErasures - 1) { - $el = $r + $numErasures - $el; - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $b[$i] = ( - $lambda[$i] === 0 - ? $this->blockSize - : $this->modNn($this->indexOf[$lambda[$i]] - $discrepancyR + $this->blockSize) - ); - } - } else { - $tmp = $b->toArray(); - array_unshift($tmp, $this->blockSize); - array_pop($tmp); - $b = SplFixedArray::fromArray($tmp, false); - } - - $lambda = clone $t; - } - - // Convert lambda to index form and compute deg(lambda(x)) - $degLambda = 0; - - for ($i = 0; $i <= $this->numRoots; ++$i) { - $lambda[$i] = $this->indexOf[$lambda[$i]]; - - if ($lambda[$i] !== $this->blockSize) { - $degLambda = $i; - } - } - - // Find roots of the error+erasure locator polynomial by Chien search. - $reg = clone $lambda; - $reg[0] = 0; - $count = 0; - $i = 1; - - for ($k = $this->iPrimitive - 1; $i <= $this->blockSize; ++$i, $k = $this->modNn($k + $this->iPrimitive)) { - $q = 1; - - for ($j = $degLambda; $j > 0; $j--) { - if ($reg[$j] !== $this->blockSize) { - $reg[$j] = $this->modNn($reg[$j] + $j); - $q ^= $this->alphaTo[$reg[$j]]; - } - } - - if ($q !== 0) { - // Not a root - continue; - } - - // Store root (index-form) and error location number - $root[$count] = $i; - $loc[$count] = $k; - - if (++$count === $degLambda) { - break; - } - } - - if ($degLambda !== $count) { - // deg(lambda) unequal to number of roots: uncorrectable error detected - return null; - } - - // Compute err+eras evaluate poly omega(x) = s(x)*lambda(x) (modulo x**numRoots). In index form. Also find - // deg(omega). - $degOmega = $degLambda - 1; - - for ($i = 0; $i <= $degOmega; ++$i) { - $tmp = 0; - - for ($j = $i; $j >= 0; --$j) { - if ($syndromes[$i - $j] !== $this->blockSize && $lambda[$j] !== $this->blockSize) { - $tmp ^= $this->alphaTo[$this->modNn($syndromes[$i - $j] + $lambda[$j])]; - } - } - - $omega[$i] = $this->indexOf[$tmp]; - } - - // Compute error values in poly-form. num1 = omega(inv(X(l))), num2 = inv(X(l))**(firstRoot-1) and - // den = lambda_pr(inv(X(l))) all in poly form. - for ($j = $count - 1; $j >= 0; --$j) { - $num1 = 0; - - for ($i = $degOmega; $i >= 0; $i--) { - if ($omega[$i] !== $this->blockSize) { - $num1 ^= $this->alphaTo[$this->modNn($omega[$i] + $i * $root[$j])]; - } - } - - $num2 = $this->alphaTo[$this->modNn($root[$j] * ($this->firstRoot - 1) + $this->blockSize)]; - $den = 0; - - // lambda[i+1] for i even is the formal derivativelambda_pr of lambda[i] - for ($i = min($degLambda, $this->numRoots - 1) & ~1; $i >= 0; $i -= 2) { - if ($lambda[$i + 1] !== $this->blockSize) { - $den ^= $this->alphaTo[$this->modNn($lambda[$i + 1] + $i * $root[$j])]; - } - } - - // Apply error to data - if ($num1 !== 0 && $loc[$j] >= $this->padding) { - $data[$loc[$j] - $this->padding] = $data[$loc[$j] - $this->padding] ^ ( - $this->alphaTo[ - $this->modNn( - $this->indexOf[$num1] + $this->indexOf[$num2] + $this->blockSize - $this->indexOf[$den] - ) - ] - ); - } - } - - if (null !== $erasures) { - if (count($erasures) < $count) { - $erasures->setSize($count); - } - - for ($i = 0; $i < $count; $i++) { - $erasures[$i] = $loc[$i]; - } - } - - return $count; - } - - /** - * Computes $x % GF_SIZE, where GF_SIZE is 2**GF_BITS - 1, without a slow divide. - */ - private function modNn(int $x) : int - { - while ($x >= $this->blockSize) { - $x -= $this->blockSize; - $x = ($x >> $this->symbolSize) + ($x & $this->blockSize); - } - - return $x; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Common/Version.php b/conlite/external/bacon/bacon-qr-code/src/Common/Version.php deleted file mode 100644 index 917d048..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Common/Version.php +++ /dev/null @@ -1,596 +0,0 @@ -|null - */ - private static $versions; - - /** - * @param int[] $alignmentPatternCenters - */ - private function __construct( - int $versionNumber, - array $alignmentPatternCenters, - EcBlocks ...$ecBlocks - ) { - $this->versionNumber = $versionNumber; - $this->alignmentPatternCenters = $alignmentPatternCenters; - $this->ecBlocks = $ecBlocks; - - $totalCodewords = 0; - $ecCodewords = $ecBlocks[0]->getEcCodewordsPerBlock(); - - foreach ($ecBlocks[0]->getEcBlocks() as $ecBlock) { - $totalCodewords += $ecBlock->getCount() * ($ecBlock->getDataCodewords() + $ecCodewords); - } - - $this->totalCodewords = $totalCodewords; - } - - /** - * Returns the version number. - */ - public function getVersionNumber() : int - { - return $this->versionNumber; - } - - /** - * Returns the alignment pattern centers. - * - * @return int[] - */ - public function getAlignmentPatternCenters() : array - { - return $this->alignmentPatternCenters; - } - - /** - * Returns the total number of codewords. - */ - public function getTotalCodewords() : int - { - return $this->totalCodewords; - } - - /** - * Calculates the dimension for the current version. - */ - public function getDimensionForVersion() : int - { - return 17 + 4 * $this->versionNumber; - } - - /** - * Returns the number of EC blocks for a specific EC level. - */ - public function getEcBlocksForLevel(ErrorCorrectionLevel $ecLevel) : EcBlocks - { - return $this->ecBlocks[$ecLevel->ordinal()]; - } - - /** - * Gets a provisional version number for a specific dimension. - * - * @throws InvalidArgumentException if dimension is not 1 mod 4 - */ - public static function getProvisionalVersionForDimension(int $dimension) : self - { - if (1 !== $dimension % 4) { - throw new InvalidArgumentException('Dimension is not 1 mod 4'); - } - - return self::getVersionForNumber(intdiv($dimension - 17, 4)); - } - - /** - * Gets a version instance for a specific version number. - * - * @throws InvalidArgumentException if version number is out of range - */ - public static function getVersionForNumber(int $versionNumber) : self - { - if ($versionNumber < 1 || $versionNumber > 40) { - throw new InvalidArgumentException('Version number must be between 1 and 40'); - } - - return self::versions()[$versionNumber - 1]; - } - - /** - * Decodes version information from an integer and returns the version. - */ - public static function decodeVersionInformation(int $versionBits) : ?self - { - $bestDifference = PHP_INT_MAX; - $bestVersion = 0; - - foreach (self::VERSION_DECODE_INFO as $i => $targetVersion) { - if ($targetVersion === $versionBits) { - return self::getVersionForNumber($i + 7); - } - - $bitsDifference = FormatInformation::numBitsDiffering($versionBits, $targetVersion); - - if ($bitsDifference < $bestDifference) { - $bestVersion = $i + 7; - $bestDifference = $bitsDifference; - } - } - - if ($bestDifference <= 3) { - return self::getVersionForNumber($bestVersion); - } - - return null; - } - - /** - * Builds the function pattern for the current version. - */ - public function buildFunctionPattern() : BitMatrix - { - $dimension = $this->getDimensionForVersion(); - $bitMatrix = new BitMatrix($dimension); - - // Top left finder pattern + separator + format - $bitMatrix->setRegion(0, 0, 9, 9); - // Top right finder pattern + separator + format - $bitMatrix->setRegion($dimension - 8, 0, 8, 9); - // Bottom left finder pattern + separator + format - $bitMatrix->setRegion(0, $dimension - 8, 9, 8); - - // Alignment patterns - $max = count($this->alignmentPatternCenters); - - for ($x = 0; $x < $max; ++$x) { - $i = $this->alignmentPatternCenters[$x] - 2; - - for ($y = 0; $y < $max; ++$y) { - if (($x === 0 && ($y === 0 || $y === $max - 1)) || ($x === $max - 1 && $y === 0)) { - // No alignment patterns near the three finder paterns - continue; - } - - $bitMatrix->setRegion($this->alignmentPatternCenters[$y] - 2, $i, 5, 5); - } - } - - // Vertical timing pattern - $bitMatrix->setRegion(6, 9, 1, $dimension - 17); - // Horizontal timing pattern - $bitMatrix->setRegion(9, 6, $dimension - 17, 1); - - if ($this->versionNumber > 6) { - // Version info, top right - $bitMatrix->setRegion($dimension - 11, 0, 3, 6); - // Version info, bottom left - $bitMatrix->setRegion(0, $dimension - 11, 6, 3); - } - - return $bitMatrix; - } - - /** - * Returns a string representation for the version. - */ - public function __toString() : string - { - return (string) $this->versionNumber; - } - - /** - * Build and cache a specific version. - * - * See ISO 18004:2006 6.5.1 Table 9. - * - * @return array - */ - private static function versions() : array - { - if (null !== self::$versions) { - return self::$versions; - } - - return self::$versions = [ - new self( - 1, - [], - new EcBlocks(7, new EcBlock(1, 19)), - new EcBlocks(10, new EcBlock(1, 16)), - new EcBlocks(13, new EcBlock(1, 13)), - new EcBlocks(17, new EcBlock(1, 9)) - ), - new self( - 2, - [6, 18], - new EcBlocks(10, new EcBlock(1, 34)), - new EcBlocks(16, new EcBlock(1, 28)), - new EcBlocks(22, new EcBlock(1, 22)), - new EcBlocks(28, new EcBlock(1, 16)) - ), - new self( - 3, - [6, 22], - new EcBlocks(15, new EcBlock(1, 55)), - new EcBlocks(26, new EcBlock(1, 44)), - new EcBlocks(18, new EcBlock(2, 17)), - new EcBlocks(22, new EcBlock(2, 13)) - ), - new self( - 4, - [6, 26], - new EcBlocks(20, new EcBlock(1, 80)), - new EcBlocks(18, new EcBlock(2, 32)), - new EcBlocks(26, new EcBlock(3, 24)), - new EcBlocks(16, new EcBlock(4, 9)) - ), - new self( - 5, - [6, 30], - new EcBlocks(26, new EcBlock(1, 108)), - new EcBlocks(24, new EcBlock(2, 43)), - new EcBlocks(18, new EcBlock(2, 15), new EcBlock(2, 16)), - new EcBlocks(22, new EcBlock(2, 11), new EcBlock(2, 12)) - ), - new self( - 6, - [6, 34], - new EcBlocks(18, new EcBlock(2, 68)), - new EcBlocks(16, new EcBlock(4, 27)), - new EcBlocks(24, new EcBlock(4, 19)), - new EcBlocks(28, new EcBlock(4, 15)) - ), - new self( - 7, - [6, 22, 38], - new EcBlocks(20, new EcBlock(2, 78)), - new EcBlocks(18, new EcBlock(4, 31)), - new EcBlocks(18, new EcBlock(2, 14), new EcBlock(4, 15)), - new EcBlocks(26, new EcBlock(4, 13), new EcBlock(1, 14)) - ), - new self( - 8, - [6, 24, 42], - new EcBlocks(24, new EcBlock(2, 97)), - new EcBlocks(22, new EcBlock(2, 38), new EcBlock(2, 39)), - new EcBlocks(22, new EcBlock(4, 18), new EcBlock(2, 19)), - new EcBlocks(26, new EcBlock(4, 14), new EcBlock(2, 15)) - ), - new self( - 9, - [6, 26, 46], - new EcBlocks(30, new EcBlock(2, 116)), - new EcBlocks(22, new EcBlock(3, 36), new EcBlock(2, 37)), - new EcBlocks(20, new EcBlock(4, 16), new EcBlock(4, 17)), - new EcBlocks(24, new EcBlock(4, 12), new EcBlock(4, 13)) - ), - new self( - 10, - [6, 28, 50], - new EcBlocks(18, new EcBlock(2, 68), new EcBlock(2, 69)), - new EcBlocks(26, new EcBlock(4, 43), new EcBlock(1, 44)), - new EcBlocks(24, new EcBlock(6, 19), new EcBlock(2, 20)), - new EcBlocks(28, new EcBlock(6, 15), new EcBlock(2, 16)) - ), - new self( - 11, - [6, 30, 54], - new EcBlocks(20, new EcBlock(4, 81)), - new EcBlocks(30, new EcBlock(1, 50), new EcBlock(4, 51)), - new EcBlocks(28, new EcBlock(4, 22), new EcBlock(4, 23)), - new EcBlocks(24, new EcBlock(3, 12), new EcBlock(8, 13)) - ), - new self( - 12, - [6, 32, 58], - new EcBlocks(24, new EcBlock(2, 92), new EcBlock(2, 93)), - new EcBlocks(22, new EcBlock(6, 36), new EcBlock(2, 37)), - new EcBlocks(26, new EcBlock(4, 20), new EcBlock(6, 21)), - new EcBlocks(28, new EcBlock(7, 14), new EcBlock(4, 15)) - ), - new self( - 13, - [6, 34, 62], - new EcBlocks(26, new EcBlock(4, 107)), - new EcBlocks(22, new EcBlock(8, 37), new EcBlock(1, 38)), - new EcBlocks(24, new EcBlock(8, 20), new EcBlock(4, 21)), - new EcBlocks(22, new EcBlock(12, 11), new EcBlock(4, 12)) - ), - new self( - 14, - [6, 26, 46, 66], - new EcBlocks(30, new EcBlock(3, 115), new EcBlock(1, 116)), - new EcBlocks(24, new EcBlock(4, 40), new EcBlock(5, 41)), - new EcBlocks(20, new EcBlock(11, 16), new EcBlock(5, 17)), - new EcBlocks(24, new EcBlock(11, 12), new EcBlock(5, 13)) - ), - new self( - 15, - [6, 26, 48, 70], - new EcBlocks(22, new EcBlock(5, 87), new EcBlock(1, 88)), - new EcBlocks(24, new EcBlock(5, 41), new EcBlock(5, 42)), - new EcBlocks(30, new EcBlock(5, 24), new EcBlock(7, 25)), - new EcBlocks(24, new EcBlock(11, 12), new EcBlock(7, 13)) - ), - new self( - 16, - [6, 26, 50, 74], - new EcBlocks(24, new EcBlock(5, 98), new EcBlock(1, 99)), - new EcBlocks(28, new EcBlock(7, 45), new EcBlock(3, 46)), - new EcBlocks(24, new EcBlock(15, 19), new EcBlock(2, 20)), - new EcBlocks(30, new EcBlock(3, 15), new EcBlock(13, 16)) - ), - new self( - 17, - [6, 30, 54, 78], - new EcBlocks(28, new EcBlock(1, 107), new EcBlock(5, 108)), - new EcBlocks(28, new EcBlock(10, 46), new EcBlock(1, 47)), - new EcBlocks(28, new EcBlock(1, 22), new EcBlock(15, 23)), - new EcBlocks(28, new EcBlock(2, 14), new EcBlock(17, 15)) - ), - new self( - 18, - [6, 30, 56, 82], - new EcBlocks(30, new EcBlock(5, 120), new EcBlock(1, 121)), - new EcBlocks(26, new EcBlock(9, 43), new EcBlock(4, 44)), - new EcBlocks(28, new EcBlock(17, 22), new EcBlock(1, 23)), - new EcBlocks(28, new EcBlock(2, 14), new EcBlock(19, 15)) - ), - new self( - 19, - [6, 30, 58, 86], - new EcBlocks(28, new EcBlock(3, 113), new EcBlock(4, 114)), - new EcBlocks(26, new EcBlock(3, 44), new EcBlock(11, 45)), - new EcBlocks(26, new EcBlock(17, 21), new EcBlock(4, 22)), - new EcBlocks(26, new EcBlock(9, 13), new EcBlock(16, 14)) - ), - new self( - 20, - [6, 34, 62, 90], - new EcBlocks(28, new EcBlock(3, 107), new EcBlock(5, 108)), - new EcBlocks(26, new EcBlock(3, 41), new EcBlock(13, 42)), - new EcBlocks(30, new EcBlock(15, 24), new EcBlock(5, 25)), - new EcBlocks(28, new EcBlock(15, 15), new EcBlock(10, 16)) - ), - new self( - 21, - [6, 28, 50, 72, 94], - new EcBlocks(28, new EcBlock(4, 116), new EcBlock(4, 117)), - new EcBlocks(26, new EcBlock(17, 42)), - new EcBlocks(28, new EcBlock(17, 22), new EcBlock(6, 23)), - new EcBlocks(30, new EcBlock(19, 16), new EcBlock(6, 17)) - ), - new self( - 22, - [6, 26, 50, 74, 98], - new EcBlocks(28, new EcBlock(2, 111), new EcBlock(7, 112)), - new EcBlocks(28, new EcBlock(17, 46)), - new EcBlocks(30, new EcBlock(7, 24), new EcBlock(16, 25)), - new EcBlocks(24, new EcBlock(34, 13)) - ), - new self( - 23, - [6, 30, 54, 78, 102], - new EcBlocks(30, new EcBlock(4, 121), new EcBlock(5, 122)), - new EcBlocks(28, new EcBlock(4, 47), new EcBlock(14, 48)), - new EcBlocks(30, new EcBlock(11, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(16, 15), new EcBlock(14, 16)) - ), - new self( - 24, - [6, 28, 54, 80, 106], - new EcBlocks(30, new EcBlock(6, 117), new EcBlock(4, 118)), - new EcBlocks(28, new EcBlock(6, 45), new EcBlock(14, 46)), - new EcBlocks(30, new EcBlock(11, 24), new EcBlock(16, 25)), - new EcBlocks(30, new EcBlock(30, 16), new EcBlock(2, 17)) - ), - new self( - 25, - [6, 32, 58, 84, 110], - new EcBlocks(26, new EcBlock(8, 106), new EcBlock(4, 107)), - new EcBlocks(28, new EcBlock(8, 47), new EcBlock(13, 48)), - new EcBlocks(30, new EcBlock(7, 24), new EcBlock(22, 25)), - new EcBlocks(30, new EcBlock(22, 15), new EcBlock(13, 16)) - ), - new self( - 26, - [6, 30, 58, 86, 114], - new EcBlocks(28, new EcBlock(10, 114), new EcBlock(2, 115)), - new EcBlocks(28, new EcBlock(19, 46), new EcBlock(4, 47)), - new EcBlocks(28, new EcBlock(28, 22), new EcBlock(6, 23)), - new EcBlocks(30, new EcBlock(33, 16), new EcBlock(4, 17)) - ), - new self( - 27, - [6, 34, 62, 90, 118], - new EcBlocks(30, new EcBlock(8, 122), new EcBlock(4, 123)), - new EcBlocks(28, new EcBlock(22, 45), new EcBlock(3, 46)), - new EcBlocks(30, new EcBlock(8, 23), new EcBlock(26, 24)), - new EcBlocks(30, new EcBlock(12, 15), new EcBlock(28, 16)) - ), - new self( - 28, - [6, 26, 50, 74, 98, 122], - new EcBlocks(30, new EcBlock(3, 117), new EcBlock(10, 118)), - new EcBlocks(28, new EcBlock(3, 45), new EcBlock(23, 46)), - new EcBlocks(30, new EcBlock(4, 24), new EcBlock(31, 25)), - new EcBlocks(30, new EcBlock(11, 15), new EcBlock(31, 16)) - ), - new self( - 29, - [6, 30, 54, 78, 102, 126], - new EcBlocks(30, new EcBlock(7, 116), new EcBlock(7, 117)), - new EcBlocks(28, new EcBlock(21, 45), new EcBlock(7, 46)), - new EcBlocks(30, new EcBlock(1, 23), new EcBlock(37, 24)), - new EcBlocks(30, new EcBlock(19, 15), new EcBlock(26, 16)) - ), - new self( - 30, - [6, 26, 52, 78, 104, 130], - new EcBlocks(30, new EcBlock(5, 115), new EcBlock(10, 116)), - new EcBlocks(28, new EcBlock(19, 47), new EcBlock(10, 48)), - new EcBlocks(30, new EcBlock(15, 24), new EcBlock(25, 25)), - new EcBlocks(30, new EcBlock(23, 15), new EcBlock(25, 16)) - ), - new self( - 31, - [6, 30, 56, 82, 108, 134], - new EcBlocks(30, new EcBlock(13, 115), new EcBlock(3, 116)), - new EcBlocks(28, new EcBlock(2, 46), new EcBlock(29, 47)), - new EcBlocks(30, new EcBlock(42, 24), new EcBlock(1, 25)), - new EcBlocks(30, new EcBlock(23, 15), new EcBlock(28, 16)) - ), - new self( - 32, - [6, 34, 60, 86, 112, 138], - new EcBlocks(30, new EcBlock(17, 115)), - new EcBlocks(28, new EcBlock(10, 46), new EcBlock(23, 47)), - new EcBlocks(30, new EcBlock(10, 24), new EcBlock(35, 25)), - new EcBlocks(30, new EcBlock(19, 15), new EcBlock(35, 16)) - ), - new self( - 33, - [6, 30, 58, 86, 114, 142], - new EcBlocks(30, new EcBlock(17, 115), new EcBlock(1, 116)), - new EcBlocks(28, new EcBlock(14, 46), new EcBlock(21, 47)), - new EcBlocks(30, new EcBlock(29, 24), new EcBlock(19, 25)), - new EcBlocks(30, new EcBlock(11, 15), new EcBlock(46, 16)) - ), - new self( - 34, - [6, 34, 62, 90, 118, 146], - new EcBlocks(30, new EcBlock(13, 115), new EcBlock(6, 116)), - new EcBlocks(28, new EcBlock(14, 46), new EcBlock(23, 47)), - new EcBlocks(30, new EcBlock(44, 24), new EcBlock(7, 25)), - new EcBlocks(30, new EcBlock(59, 16), new EcBlock(1, 17)) - ), - new self( - 35, - [6, 30, 54, 78, 102, 126, 150], - new EcBlocks(30, new EcBlock(12, 121), new EcBlock(7, 122)), - new EcBlocks(28, new EcBlock(12, 47), new EcBlock(26, 48)), - new EcBlocks(30, new EcBlock(39, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(22, 15), new EcBlock(41, 16)) - ), - new self( - 36, - [6, 24, 50, 76, 102, 128, 154], - new EcBlocks(30, new EcBlock(6, 121), new EcBlock(14, 122)), - new EcBlocks(28, new EcBlock(6, 47), new EcBlock(34, 48)), - new EcBlocks(30, new EcBlock(46, 24), new EcBlock(10, 25)), - new EcBlocks(30, new EcBlock(2, 15), new EcBlock(64, 16)) - ), - new self( - 37, - [6, 28, 54, 80, 106, 132, 158], - new EcBlocks(30, new EcBlock(17, 122), new EcBlock(4, 123)), - new EcBlocks(28, new EcBlock(29, 46), new EcBlock(14, 47)), - new EcBlocks(30, new EcBlock(49, 24), new EcBlock(10, 25)), - new EcBlocks(30, new EcBlock(24, 15), new EcBlock(46, 16)) - ), - new self( - 38, - [6, 32, 58, 84, 110, 136, 162], - new EcBlocks(30, new EcBlock(4, 122), new EcBlock(18, 123)), - new EcBlocks(28, new EcBlock(13, 46), new EcBlock(32, 47)), - new EcBlocks(30, new EcBlock(48, 24), new EcBlock(14, 25)), - new EcBlocks(30, new EcBlock(42, 15), new EcBlock(32, 16)) - ), - new self( - 39, - [6, 26, 54, 82, 110, 138, 166], - new EcBlocks(30, new EcBlock(20, 117), new EcBlock(4, 118)), - new EcBlocks(28, new EcBlock(40, 47), new EcBlock(7, 48)), - new EcBlocks(30, new EcBlock(43, 24), new EcBlock(22, 25)), - new EcBlocks(30, new EcBlock(10, 15), new EcBlock(67, 16)) - ), - new self( - 40, - [6, 30, 58, 86, 114, 142, 170], - new EcBlocks(30, new EcBlock(19, 118), new EcBlock(6, 119)), - new EcBlocks(28, new EcBlock(18, 47), new EcBlock(31, 48)), - new EcBlocks(30, new EcBlock(34, 24), new EcBlock(34, 25)), - new EcBlocks(30, new EcBlock(20, 15), new EcBlock(61, 16)) - ), - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php deleted file mode 100644 index be54afa..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/BlockPair.php +++ /dev/null @@ -1,58 +0,0 @@ - - */ - private $dataBytes; - - /** - * Error correction bytes in the block. - * - * @var SplFixedArray - */ - private $errorCorrectionBytes; - - /** - * Creates a new block pair. - * - * @param SplFixedArray $data - * @param SplFixedArray $errorCorrection - */ - public function __construct(SplFixedArray $data, SplFixedArray $errorCorrection) - { - $this->dataBytes = $data; - $this->errorCorrectionBytes = $errorCorrection; - } - - /** - * Gets the data bytes. - * - * @return SplFixedArray - */ - public function getDataBytes() : SplFixedArray - { - return $this->dataBytes; - } - - /** - * Gets the error correction bytes. - * - * @return SplFixedArray - */ - public function getErrorCorrectionBytes() : SplFixedArray - { - return $this->errorCorrectionBytes; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php deleted file mode 100644 index b58cc0a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/ByteMatrix.php +++ /dev/null @@ -1,150 +0,0 @@ -> - */ - private $bytes; - - /** - * Width of the matrix. - * - * @var int - */ - private $width; - - /** - * Height of the matrix. - * - * @var int - */ - private $height; - - public function __construct(int $width, int $height) - { - $this->height = $height; - $this->width = $width; - $this->bytes = new SplFixedArray($height); - - for ($y = 0; $y < $height; ++$y) { - $this->bytes[$y] = SplFixedArray::fromArray(array_fill(0, $width, 0)); - } - } - - /** - * Gets the width of the matrix. - */ - public function getWidth() : int - { - return $this->width; - } - - /** - * Gets the height of the matrix. - */ - public function getHeight() : int - { - return $this->height; - } - - /** - * Gets the internal representation of the matrix. - * - * @return SplFixedArray> - */ - public function getArray() : SplFixedArray - { - return $this->bytes; - } - - /** - * @return Traversable - */ - public function getBytes() : Traversable - { - foreach ($this->bytes as $row) { - foreach ($row as $byte) { - yield $byte; - } - } - } - - /** - * Gets the byte for a specific position. - */ - public function get(int $x, int $y) : int - { - return $this->bytes[$y][$x]; - } - - /** - * Sets the byte for a specific position. - */ - public function set(int $x, int $y, int $value) : void - { - $this->bytes[$y][$x] = $value; - } - - /** - * Clears the matrix with a specific value. - */ - public function clear(int $value) : void - { - for ($y = 0; $y < $this->height; ++$y) { - for ($x = 0; $x < $this->width; ++$x) { - $this->bytes[$y][$x] = $value; - } - } - } - - public function __clone() - { - $this->bytes = clone $this->bytes; - - foreach ($this->bytes as $index => $row) { - $this->bytes[$index] = clone $row; - } - } - - /** - * Returns a string representation of the matrix. - */ - public function __toString() : string - { - $result = ''; - - for ($y = 0; $y < $this->height; $y++) { - for ($x = 0; $x < $this->width; $x++) { - switch ($this->bytes[$y][$x]) { - case 0: - $result .= ' 0'; - break; - - case 1: - $result .= ' 1'; - break; - - default: - $result .= ' '; - break; - } - } - - $result .= "\n"; - } - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php deleted file mode 100644 index 4345f57..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/Encoder.php +++ /dev/null @@ -1,652 +0,0 @@ -getSize() - + $mode->getCharacterCountBits(Version::getVersionForNumber(1)) - + $dataBits->getSize(); - $provisionalVersion = self::chooseVersion($provisionalBitsNeeded, $ecLevel); - - // Use that guess to calculate the right version. I am still not sure - // this works in 100% of cases. - $bitsNeeded = $headerBits->getSize() - + $mode->getCharacterCountBits($provisionalVersion) - + $dataBits->getSize(); - $version = self::chooseVersion($bitsNeeded, $ecLevel); - - $headerAndDataBits = new BitArray(); - $headerAndDataBits->appendBitArray($headerBits); - - // Find "length" of main segment and write it. - $numLetters = (Mode::BYTE() === $mode ? $dataBits->getSizeInBytes() : strlen($content)); - self::appendLengthInfo($numLetters, $version, $mode, $headerAndDataBits); - - // Put data together into the overall payload. - $headerAndDataBits->appendBitArray($dataBits); - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numDataBytes = $version->getTotalCodewords() - $ecBlocks->getTotalEcCodewords(); - - // Terminate the bits properly. - self::terminateBits($numDataBytes, $headerAndDataBits); - - // Interleave data bits with error correction code. - $finalBits = self::interleaveWithEcBytes( - $headerAndDataBits, - $version->getTotalCodewords(), - $numDataBytes, - $ecBlocks->getNumBlocks() - ); - - // Choose the mask pattern. - $dimension = $version->getDimensionForVersion(); - $matrix = new ByteMatrix($dimension, $dimension); - $maskPattern = self::chooseMaskPattern($finalBits, $ecLevel, $version, $matrix); - - // Build the matrix. - MatrixUtil::buildMatrix($finalBits, $ecLevel, $version, $maskPattern, $matrix); - - return new QrCode($mode, $ecLevel, $version, $maskPattern, $matrix); - } - - /** - * Gets the alphanumeric code for a byte. - */ - private static function getAlphanumericCode(int $code) : int - { - if (isset(self::ALPHANUMERIC_TABLE[$code])) { - return self::ALPHANUMERIC_TABLE[$code]; - } - - return -1; - } - - /** - * Chooses the best mode for a given content. - */ - private static function chooseMode(string $content, string $encoding = null) : Mode - { - if (null !== $encoding && 0 === strcasecmp($encoding, 'SHIFT-JIS')) { - return self::isOnlyDoubleByteKanji($content) ? Mode::KANJI() : Mode::BYTE(); - } - - $hasNumeric = false; - $hasAlphanumeric = false; - $contentLength = strlen($content); - - for ($i = 0; $i < $contentLength; ++$i) { - $char = $content[$i]; - - if (ctype_digit($char)) { - $hasNumeric = true; - } elseif (-1 !== self::getAlphanumericCode(ord($char))) { - $hasAlphanumeric = true; - } else { - return Mode::BYTE(); - } - } - - if ($hasAlphanumeric) { - return Mode::ALPHANUMERIC(); - } elseif ($hasNumeric) { - return Mode::NUMERIC(); - } - - return Mode::BYTE(); - } - - /** - * Calculates the mask penalty for a matrix. - */ - private static function calculateMaskPenalty(ByteMatrix $matrix) : int - { - return ( - MaskUtil::applyMaskPenaltyRule1($matrix) - + MaskUtil::applyMaskPenaltyRule2($matrix) - + MaskUtil::applyMaskPenaltyRule3($matrix) - + MaskUtil::applyMaskPenaltyRule4($matrix) - ); - } - - /** - * Checks if content only consists of double-byte kanji characters. - */ - private static function isOnlyDoubleByteKanji(string $content) : bool - { - $bytes = @iconv('utf-8', 'SHIFT-JIS', $content); - - if (false === $bytes) { - return false; - } - - $length = strlen($bytes); - - if (0 !== $length % 2) { - return false; - } - - for ($i = 0; $i < $length; $i += 2) { - $byte = $bytes[$i] & 0xff; - - if (($byte < 0x81 || $byte > 0x9f) && $byte < 0xe0 || $byte > 0xeb) { - return false; - } - } - - return true; - } - - /** - * Chooses the best mask pattern for a matrix. - */ - private static function chooseMaskPattern( - BitArray $bits, - ErrorCorrectionLevel $ecLevel, - Version $version, - ByteMatrix $matrix - ) : int { - $minPenalty = PHP_INT_MAX; - $bestMaskPattern = -1; - - for ($maskPattern = 0; $maskPattern < QrCode::NUM_MASK_PATTERNS; ++$maskPattern) { - MatrixUtil::buildMatrix($bits, $ecLevel, $version, $maskPattern, $matrix); - $penalty = self::calculateMaskPenalty($matrix); - - if ($penalty < $minPenalty) { - $minPenalty = $penalty; - $bestMaskPattern = $maskPattern; - } - } - - return $bestMaskPattern; - } - - /** - * Chooses the best version for the input. - * - * @throws WriterException if data is too big - */ - private static function chooseVersion(int $numInputBits, ErrorCorrectionLevel $ecLevel) : Version - { - for ($versionNum = 1; $versionNum <= 40; ++$versionNum) { - $version = Version::getVersionForNumber($versionNum); - $numBytes = $version->getTotalCodewords(); - - $ecBlocks = $version->getEcBlocksForLevel($ecLevel); - $numEcBytes = $ecBlocks->getTotalEcCodewords(); - - $numDataBytes = $numBytes - $numEcBytes; - $totalInputBytes = intdiv($numInputBits + 8, 8); - - if ($numDataBytes >= $totalInputBytes) { - return $version; - } - } - - throw new WriterException('Data too big'); - } - - /** - * Terminates the bits in a bit array. - * - * @throws WriterException if data bits cannot fit in the QR code - * @throws WriterException if bits size does not equal the capacity - */ - private static function terminateBits(int $numDataBytes, BitArray $bits) : void - { - $capacity = $numDataBytes << 3; - - if ($bits->getSize() > $capacity) { - throw new WriterException('Data bits cannot fit in the QR code'); - } - - for ($i = 0; $i < 4 && $bits->getSize() < $capacity; ++$i) { - $bits->appendBit(false); - } - - $numBitsInLastByte = $bits->getSize() & 0x7; - - if ($numBitsInLastByte > 0) { - for ($i = $numBitsInLastByte; $i < 8; ++$i) { - $bits->appendBit(false); - } - } - - $numPaddingBytes = $numDataBytes - $bits->getSizeInBytes(); - - for ($i = 0; $i < $numPaddingBytes; ++$i) { - $bits->appendBits(0 === ($i & 0x1) ? 0xec : 0x11, 8); - } - - if ($bits->getSize() !== $capacity) { - throw new WriterException('Bits size does not equal capacity'); - } - } - - /** - * Gets number of data- and EC bytes for a block ID. - * - * @return int[] - * @throws WriterException if block ID is too large - * @throws WriterException if EC bytes mismatch - * @throws WriterException if RS blocks mismatch - * @throws WriterException if total bytes mismatch - */ - private static function getNumDataBytesAndNumEcBytesForBlockId( - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks, - int $blockId - ) : array { - if ($blockId >= $numRsBlocks) { - throw new WriterException('Block ID too large'); - } - - $numRsBlocksInGroup2 = $numTotalBytes % $numRsBlocks; - $numRsBlocksInGroup1 = $numRsBlocks - $numRsBlocksInGroup2; - $numTotalBytesInGroup1 = intdiv($numTotalBytes, $numRsBlocks); - $numTotalBytesInGroup2 = $numTotalBytesInGroup1 + 1; - $numDataBytesInGroup1 = intdiv($numDataBytes, $numRsBlocks); - $numDataBytesInGroup2 = $numDataBytesInGroup1 + 1; - $numEcBytesInGroup1 = $numTotalBytesInGroup1 - $numDataBytesInGroup1; - $numEcBytesInGroup2 = $numTotalBytesInGroup2 - $numDataBytesInGroup2; - - if ($numEcBytesInGroup1 !== $numEcBytesInGroup2) { - throw new WriterException('EC bytes mismatch'); - } - - if ($numRsBlocks !== $numRsBlocksInGroup1 + $numRsBlocksInGroup2) { - throw new WriterException('RS blocks mismatch'); - } - - if ($numTotalBytes !== - (($numDataBytesInGroup1 + $numEcBytesInGroup1) * $numRsBlocksInGroup1) - + (($numDataBytesInGroup2 + $numEcBytesInGroup2) * $numRsBlocksInGroup2) - ) { - throw new WriterException('Total bytes mismatch'); - } - - if ($blockId < $numRsBlocksInGroup1) { - return [$numDataBytesInGroup1, $numEcBytesInGroup1]; - } else { - return [$numDataBytesInGroup2, $numEcBytesInGroup2]; - } - } - - /** - * Interleaves data with EC bytes. - * - * @throws WriterException if number of bits and data bytes does not match - * @throws WriterException if data bytes does not match offset - * @throws WriterException if an interleaving error occurs - */ - private static function interleaveWithEcBytes( - BitArray $bits, - int $numTotalBytes, - int $numDataBytes, - int $numRsBlocks - ) : BitArray { - if ($bits->getSizeInBytes() !== $numDataBytes) { - throw new WriterException('Number of bits and data bytes does not match'); - } - - $dataBytesOffset = 0; - $maxNumDataBytes = 0; - $maxNumEcBytes = 0; - - $blocks = new SplFixedArray($numRsBlocks); - - for ($i = 0; $i < $numRsBlocks; ++$i) { - list($numDataBytesInBlock, $numEcBytesInBlock) = self::getNumDataBytesAndNumEcBytesForBlockId( - $numTotalBytes, - $numDataBytes, - $numRsBlocks, - $i - ); - - $size = $numDataBytesInBlock; - $dataBytes = $bits->toBytes(8 * $dataBytesOffset, $size); - $ecBytes = self::generateEcBytes($dataBytes, $numEcBytesInBlock); - $blocks[$i] = new BlockPair($dataBytes, $ecBytes); - - $maxNumDataBytes = max($maxNumDataBytes, $size); - $maxNumEcBytes = max($maxNumEcBytes, count($ecBytes)); - $dataBytesOffset += $numDataBytesInBlock; - } - - if ($numDataBytes !== $dataBytesOffset) { - throw new WriterException('Data bytes does not match offset'); - } - - $result = new BitArray(); - - for ($i = 0; $i < $maxNumDataBytes; ++$i) { - foreach ($blocks as $block) { - $dataBytes = $block->getDataBytes(); - - if ($i < count($dataBytes)) { - $result->appendBits($dataBytes[$i], 8); - } - } - } - - for ($i = 0; $i < $maxNumEcBytes; ++$i) { - foreach ($blocks as $block) { - $ecBytes = $block->getErrorCorrectionBytes(); - - if ($i < count($ecBytes)) { - $result->appendBits($ecBytes[$i], 8); - } - } - } - - if ($numTotalBytes !== $result->getSizeInBytes()) { - throw new WriterException( - 'Interleaving error: ' . $numTotalBytes . ' and ' . $result->getSizeInBytes() . ' differ' - ); - } - - return $result; - } - - /** - * Generates EC bytes for given data. - * - * @param SplFixedArray $dataBytes - * @return SplFixedArray - */ - private static function generateEcBytes(SplFixedArray $dataBytes, int $numEcBytesInBlock) : SplFixedArray - { - $numDataBytes = count($dataBytes); - $toEncode = new SplFixedArray($numDataBytes + $numEcBytesInBlock); - - for ($i = 0; $i < $numDataBytes; $i++) { - $toEncode[$i] = $dataBytes[$i] & 0xff; - } - - $ecBytes = new SplFixedArray($numEcBytesInBlock); - $codec = self::getCodec($numDataBytes, $numEcBytesInBlock); - $codec->encode($toEncode, $ecBytes); - - return $ecBytes; - } - - /** - * Gets an RS codec and caches it. - */ - private static function getCodec(int $numDataBytes, int $numEcBytesInBlock) : ReedSolomonCodec - { - $cacheId = $numDataBytes . '-' . $numEcBytesInBlock; - - if (isset(self::$codecs[$cacheId])) { - return self::$codecs[$cacheId]; - } - - return self::$codecs[$cacheId] = new ReedSolomonCodec( - 8, - 0x11d, - 0, - 1, - $numEcBytesInBlock, - 255 - $numDataBytes - $numEcBytesInBlock - ); - } - - /** - * Appends mode information to a bit array. - */ - private static function appendModeInfo(Mode $mode, BitArray $bits) : void - { - $bits->appendBits($mode->getBits(), 4); - } - - /** - * Appends length information to a bit array. - * - * @throws WriterException if num letters is bigger than expected - */ - private static function appendLengthInfo(int $numLetters, Version $version, Mode $mode, BitArray $bits) : void - { - $numBits = $mode->getCharacterCountBits($version); - - if ($numLetters >= (1 << $numBits)) { - throw new WriterException($numLetters . ' is bigger than ' . ((1 << $numBits) - 1)); - } - - $bits->appendBits($numLetters, $numBits); - } - - /** - * Appends bytes to a bit array in a specific mode. - * - * @throws WriterException if an invalid mode was supplied - */ - private static function appendBytes(string $content, Mode $mode, BitArray $bits, string $encoding) : void - { - switch ($mode) { - case Mode::NUMERIC(): - self::appendNumericBytes($content, $bits); - break; - - case Mode::ALPHANUMERIC(): - self::appendAlphanumericBytes($content, $bits); - break; - - case Mode::BYTE(): - self::append8BitBytes($content, $bits, $encoding); - break; - - case Mode::KANJI(): - self::appendKanjiBytes($content, $bits); - break; - - default: - throw new WriterException('Invalid mode: ' . $mode); - } - } - - /** - * Appends numeric bytes to a bit array. - */ - private static function appendNumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $num1 = (int) $content[$i]; - - if ($i + 2 < $length) { - // Encode three numeric letters in ten bits. - $num2 = (int) $content[$i + 1]; - $num3 = (int) $content[$i + 2]; - $bits->appendBits($num1 * 100 + $num2 * 10 + $num3, 10); - $i += 3; - } elseif ($i + 1 < $length) { - // Encode two numeric letters in seven bits. - $num2 = (int) $content[$i + 1]; - $bits->appendBits($num1 * 10 + $num2, 7); - $i += 2; - } else { - // Encode one numeric letter in four bits. - $bits->appendBits($num1, 4); - ++$i; - } - } - } - - /** - * Appends alpha-numeric bytes to a bit array. - * - * @throws WriterException if an invalid alphanumeric code was found - */ - private static function appendAlphanumericBytes(string $content, BitArray $bits) : void - { - $length = strlen($content); - $i = 0; - - while ($i < $length) { - $code1 = self::getAlphanumericCode(ord($content[$i])); - - if (-1 === $code1) { - throw new WriterException('Invalid alphanumeric code'); - } - - if ($i + 1 < $length) { - $code2 = self::getAlphanumericCode(ord($content[$i + 1])); - - if (-1 === $code2) { - throw new WriterException('Invalid alphanumeric code'); - } - - // Encode two alphanumeric letters in 11 bits. - $bits->appendBits($code1 * 45 + $code2, 11); - $i += 2; - } else { - // Encode one alphanumeric letter in six bits. - $bits->appendBits($code1, 6); - ++$i; - } - } - } - - /** - * Appends regular 8-bit bytes to a bit array. - * - * @throws WriterException if content cannot be encoded to target encoding - */ - private static function append8BitBytes(string $content, BitArray $bits, string $encoding) : void - { - $bytes = @iconv('utf-8', $encoding, $content); - - if (false === $bytes) { - throw new WriterException('Could not encode content to ' . $encoding); - } - - $length = strlen($bytes); - - for ($i = 0; $i < $length; $i++) { - $bits->appendBits(ord($bytes[$i]), 8); - } - } - - /** - * Appends KANJI bytes to a bit array. - * - * @throws WriterException if content does not seem to be encoded in SHIFT-JIS - * @throws WriterException if an invalid byte sequence occurs - */ - private static function appendKanjiBytes(string $content, BitArray $bits) : void - { - if (strlen($content) % 2 > 0) { - // We just do a simple length check here. The for loop will check - // individual characters. - throw new WriterException('Content does not seem to be encoded in SHIFT-JIS'); - } - - $length = strlen($content); - - for ($i = 0; $i < $length; $i += 2) { - $byte1 = ord($content[$i]) & 0xff; - $byte2 = ord($content[$i + 1]) & 0xff; - $code = ($byte1 << 8) | $byte2; - - if ($code >= 0x8140 && $code <= 0x9ffc) { - $subtracted = $code - 0x8140; - } elseif ($code >= 0xe040 && $code <= 0xebbf) { - $subtracted = $code - 0xc140; - } else { - throw new WriterException('Invalid byte sequence'); - } - - $encoded = (($subtracted >> 8) * 0xc0) + ($subtracted & 0xff); - - $bits->appendBits($encoded, 13); - } - } - - /** - * Appends ECI information to a bit array. - */ - private static function appendEci(CharacterSetEci $eci, BitArray $bits) : void - { - $mode = Mode::ECI(); - $bits->appendBits($mode->getBits(), 4); - $bits->appendBits($eci->getValue(), 8); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php deleted file mode 100644 index ba97dfb..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/MaskUtil.php +++ /dev/null @@ -1,271 +0,0 @@ -getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height - 1; ++$y) { - for ($x = 0; $x < $width - 1; ++$x) { - $value = $array[$y][$x]; - - if ($value === $array[$y][$x + 1] - && $value === $array[$y + 1][$x] - && $value === $array[$y + 1][$x + 1] - ) { - ++$penalty; - } - } - } - - return self::N2 * $penalty; - } - - /** - * Applies mask penalty rule 3 and returns the penalty. - * - * Finds consecutive cells of 00001011101 or 10111010000, and gives penalty - * to them. If we find patterns like 000010111010000, we give penalties - * twice (i.e. 40 * 2). - */ - public static function applyMaskPenaltyRule3(ByteMatrix $matrix) : int - { - $penalty = 0; - $array = $matrix->getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height; ++$y) { - for ($x = 0; $x < $width; ++$x) { - if ($x + 6 < $width - && 1 === $array[$y][$x] - && 0 === $array[$y][$x + 1] - && 1 === $array[$y][$x + 2] - && 1 === $array[$y][$x + 3] - && 1 === $array[$y][$x + 4] - && 0 === $array[$y][$x + 5] - && 1 === $array[$y][$x + 6] - && ( - ( - $x + 10 < $width - && 0 === $array[$y][$x + 7] - && 0 === $array[$y][$x + 8] - && 0 === $array[$y][$x + 9] - && 0 === $array[$y][$x + 10] - ) - || ( - $x - 4 >= 0 - && 0 === $array[$y][$x - 1] - && 0 === $array[$y][$x - 2] - && 0 === $array[$y][$x - 3] - && 0 === $array[$y][$x - 4] - ) - ) - ) { - $penalty += self::N3; - } - - if ($y + 6 < $height - && 1 === $array[$y][$x] - && 0 === $array[$y + 1][$x] - && 1 === $array[$y + 2][$x] - && 1 === $array[$y + 3][$x] - && 1 === $array[$y + 4][$x] - && 0 === $array[$y + 5][$x] - && 1 === $array[$y + 6][$x] - && ( - ( - $y + 10 < $height - && 0 === $array[$y + 7][$x] - && 0 === $array[$y + 8][$x] - && 0 === $array[$y + 9][$x] - && 0 === $array[$y + 10][$x] - ) - || ( - $y - 4 >= 0 - && 0 === $array[$y - 1][$x] - && 0 === $array[$y - 2][$x] - && 0 === $array[$y - 3][$x] - && 0 === $array[$y - 4][$x] - ) - ) - ) { - $penalty += self::N3; - } - } - } - - return $penalty; - } - - /** - * Applies mask penalty rule 4 and returns the penalty. - * - * Calculates the ratio of dark cells and gives penalty if the ratio is far - * from 50%. It gives 10 penalty for 5% distance. - */ - public static function applyMaskPenaltyRule4(ByteMatrix $matrix) : int - { - $numDarkCells = 0; - - $array = $matrix->getArray(); - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - - for ($y = 0; $y < $height; ++$y) { - $arrayY = $array[$y]; - - for ($x = 0; $x < $width; ++$x) { - if (1 === $arrayY[$x]) { - ++$numDarkCells; - } - } - } - - $numTotalCells = $height * $width; - $darkRatio = $numDarkCells / $numTotalCells; - $fixedPercentVariances = (int) (abs($darkRatio - 0.5) * 20); - - return $fixedPercentVariances * self::N4; - } - - /** - * Returns the mask bit for "getMaskPattern" at "x" and "y". - * - * See 8.8 of JISX0510:2004 for mask pattern conditions. - * - * @throws InvalidArgumentException if an invalid mask pattern was supplied - */ - public static function getDataMaskBit(int $maskPattern, int $x, int $y) : bool - { - switch ($maskPattern) { - case 0: - $intermediate = ($y + $x) & 0x1; - break; - - case 1: - $intermediate = $y & 0x1; - break; - - case 2: - $intermediate = $x % 3; - break; - - case 3: - $intermediate = ($y + $x) % 3; - break; - - case 4: - $intermediate = (BitUtils::unsignedRightShift($y, 1) + (int) ($x / 3)) & 0x1; - break; - - case 5: - $temp = $y * $x; - $intermediate = ($temp & 0x1) + ($temp % 3); - break; - - case 6: - $temp = $y * $x; - $intermediate = (($temp & 0x1) + ($temp % 3)) & 0x1; - break; - - case 7: - $temp = $y * $x; - $intermediate = (($temp % 3) + (($y + $x) & 0x1)) & 0x1; - break; - - default: - throw new InvalidArgumentException('Invalid mask pattern: ' . $maskPattern); - } - - return 0 == $intermediate; - } - - /** - * Helper function for applyMaskPenaltyRule1. - * - * We need this for doing this calculation in both vertical and horizontal - * orders respectively. - */ - private static function applyMaskPenaltyRule1Internal(ByteMatrix $matrix, bool $isHorizontal) : int - { - $penalty = 0; - $iLimit = $isHorizontal ? $matrix->getHeight() : $matrix->getWidth(); - $jLimit = $isHorizontal ? $matrix->getWidth() : $matrix->getHeight(); - $array = $matrix->getArray(); - - for ($i = 0; $i < $iLimit; ++$i) { - $numSameBitCells = 0; - $prevBit = -1; - - for ($j = 0; $j < $jLimit; $j++) { - $bit = $isHorizontal ? $array[$i][$j] : $array[$j][$i]; - - if ($bit === $prevBit) { - ++$numSameBitCells; - } else { - if ($numSameBitCells >= 5) { - $penalty += self::N1 + ($numSameBitCells - 5); - } - - $numSameBitCells = 1; - $prevBit = $bit; - } - } - - if ($numSameBitCells >= 5) { - $penalty += self::N1 + ($numSameBitCells - 5); - } - } - - return $penalty; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php deleted file mode 100644 index 0967e29..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/MatrixUtil.php +++ /dev/null @@ -1,513 +0,0 @@ -clear(-1); - } - - /** - * Builds a complete matrix. - */ - public static function buildMatrix( - BitArray $dataBits, - ErrorCorrectionLevel $level, - Version $version, - int $maskPattern, - ByteMatrix $matrix - ) : void { - self::clearMatrix($matrix); - self::embedBasicPatterns($version, $matrix); - self::embedTypeInfo($level, $maskPattern, $matrix); - self::maybeEmbedVersionInfo($version, $matrix); - self::embedDataBits($dataBits, $maskPattern, $matrix); - } - - /** - * Removes the position detection patterns from a matrix. - * - * This can be useful if you need to render those patterns separately. - */ - public static function removePositionDetectionPatterns(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::removePositionDetectionPattern(0, 0, $matrix); - self::removePositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::removePositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - } - - /** - * Embeds type information into a matrix. - */ - private static function embedTypeInfo(ErrorCorrectionLevel $level, int $maskPattern, ByteMatrix $matrix) : void - { - $typeInfoBits = new BitArray(); - self::makeTypeInfoBits($level, $maskPattern, $typeInfoBits); - - $typeInfoBitsSize = $typeInfoBits->getSize(); - - for ($i = 0; $i < $typeInfoBitsSize; ++$i) { - $bit = $typeInfoBits->get($typeInfoBitsSize - 1 - $i); - - $x1 = self::TYPE_INFO_COORDINATES[$i][0]; - $y1 = self::TYPE_INFO_COORDINATES[$i][1]; - - $matrix->set($x1, $y1, (int) $bit); - - if ($i < 8) { - $x2 = $matrix->getWidth() - $i - 1; - $y2 = 8; - } else { - $x2 = 8; - $y2 = $matrix->getHeight() - 7 + ($i - 8); - } - - $matrix->set($x2, $y2, (int) $bit); - } - } - - /** - * Generates type information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeTypeInfoBits(ErrorCorrectionLevel $level, int $maskPattern, BitArray $bits) : void - { - $typeInfo = ($level->getBits() << 3) | $maskPattern; - $bits->appendBits($typeInfo, 5); - - $bchCode = self::calculateBchCode($typeInfo, self::TYPE_INFO_POLY); - $bits->appendBits($bchCode, 10); - - $maskBits = new BitArray(); - $maskBits->appendBits(self::TYPE_INFO_MASK_PATTERN, 15); - $bits->xorBits($maskBits); - - if (15 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Embeds version information if required. - */ - private static function maybeEmbedVersionInfo(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 7) { - return; - } - - $versionInfoBits = new BitArray(); - self::makeVersionInfoBits($version, $versionInfoBits); - - $bitIndex = 6 * 3 - 1; - - for ($i = 0; $i < 6; ++$i) { - for ($j = 0; $j < 3; ++$j) { - $bit = $versionInfoBits->get($bitIndex); - --$bitIndex; - - $matrix->set($i, $matrix->getHeight() - 11 + $j, (int) $bit); - $matrix->set($matrix->getHeight() - 11 + $j, $i, (int) $bit); - } - } - } - - /** - * Generates version information bits and appends them to a bit array. - * - * @throws RuntimeException if bit array resulted in invalid size - */ - private static function makeVersionInfoBits(Version $version, BitArray $bits) : void - { - $bits->appendBits($version->getVersionNumber(), 6); - - $bchCode = self::calculateBchCode($version->getVersionNumber(), self::VERSION_INFO_POLY); - $bits->appendBits($bchCode, 12); - - if (18 !== $bits->getSize()) { - throw new RuntimeException('Bit array resulted in invalid size: ' . $bits->getSize()); - } - } - - /** - * Calculates the BCH code for a value and a polynomial. - */ - private static function calculateBchCode(int $value, int $poly) : int - { - $msbSetInPoly = self::findMsbSet($poly); - $value <<= $msbSetInPoly - 1; - - while (self::findMsbSet($value) >= $msbSetInPoly) { - $value ^= $poly << (self::findMsbSet($value) - $msbSetInPoly); - } - - return $value; - } - - /** - * Finds and MSB set. - */ - private static function findMsbSet(int $value) : int - { - $numDigits = 0; - - while (0 !== $value) { - $value >>= 1; - ++$numDigits; - } - - return $numDigits; - } - - /** - * Embeds basic patterns into a matrix. - */ - private static function embedBasicPatterns(Version $version, ByteMatrix $matrix) : void - { - self::embedPositionDetectionPatternsAndSeparators($matrix); - self::embedDarkDotAtLeftBottomCorner($matrix); - self::maybeEmbedPositionAdjustmentPatterns($version, $matrix); - self::embedTimingPatterns($matrix); - } - - /** - * Embeds position detection patterns and separators into a byte matrix. - */ - private static function embedPositionDetectionPatternsAndSeparators(ByteMatrix $matrix) : void - { - $pdpWidth = count(self::POSITION_DETECTION_PATTERN[0]); - - self::embedPositionDetectionPattern(0, 0, $matrix); - self::embedPositionDetectionPattern($matrix->getWidth() - $pdpWidth, 0, $matrix); - self::embedPositionDetectionPattern(0, $matrix->getWidth() - $pdpWidth, $matrix); - - $hspWidth = 8; - - self::embedHorizontalSeparationPattern(0, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern($matrix->getWidth() - $hspWidth, $hspWidth - 1, $matrix); - self::embedHorizontalSeparationPattern(0, $matrix->getWidth() - $hspWidth, $matrix); - - $vspSize = 7; - - self::embedVerticalSeparationPattern($vspSize, 0, $matrix); - self::embedVerticalSeparationPattern($matrix->getHeight() - $vspSize - 1, 0, $matrix); - self::embedVerticalSeparationPattern($vspSize, $matrix->getHeight() - $vspSize, $matrix); - } - - /** - * Embeds a single position detection pattern into a byte matrix. - */ - private static function embedPositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_DETECTION_PATTERN[$y][$x]); - } - } - } - - private static function removePositionDetectionPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; ++$y) { - for ($x = 0; $x < 7; ++$x) { - $matrix->set($xStart + $x, $yStart + $y, 0); - } - } - } - - /** - * Embeds a single horizontal separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedHorizontalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($x = 0; $x < 8; $x++) { - if (-1 !== $matrix->get($xStart + $x, $yStart)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart + $x, $yStart, 0); - } - } - - /** - * Embeds a single vertical separation pattern. - * - * @throws RuntimeException if a byte was already set - */ - private static function embedVerticalSeparationPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 7; $y++) { - if (-1 !== $matrix->get($xStart, $yStart + $y)) { - throw new RuntimeException('Byte already set'); - } - - $matrix->set($xStart, $yStart + $y, 0); - } - } - - /** - * Embeds a dot at the left bottom corner. - * - * @throws RuntimeException if a byte was already set to 0 - */ - private static function embedDarkDotAtLeftBottomCorner(ByteMatrix $matrix) : void - { - if (0 === $matrix->get(8, $matrix->getHeight() - 8)) { - throw new RuntimeException('Byte already set to 0'); - } - - $matrix->set(8, $matrix->getHeight() - 8, 1); - } - - /** - * Embeds position adjustment patterns if required. - */ - private static function maybeEmbedPositionAdjustmentPatterns(Version $version, ByteMatrix $matrix) : void - { - if ($version->getVersionNumber() < 2) { - return; - } - - $index = $version->getVersionNumber() - 1; - - $coordinates = self::POSITION_ADJUSTMENT_PATTERN_COORDINATE_TABLE[$index]; - $numCoordinates = count($coordinates); - - for ($i = 0; $i < $numCoordinates; ++$i) { - for ($j = 0; $j < $numCoordinates; ++$j) { - $y = $coordinates[$i]; - $x = $coordinates[$j]; - - if (null === $x || null === $y) { - continue; - } - - if (-1 === $matrix->get($x, $y)) { - self::embedPositionAdjustmentPattern($x - 2, $y - 2, $matrix); - } - } - } - } - - /** - * Embeds a single position adjustment pattern. - */ - private static function embedPositionAdjustmentPattern(int $xStart, int $yStart, ByteMatrix $matrix) : void - { - for ($y = 0; $y < 5; $y++) { - for ($x = 0; $x < 5; $x++) { - $matrix->set($xStart + $x, $yStart + $y, self::POSITION_ADJUSTMENT_PATTERN[$y][$x]); - } - } - } - - /** - * Embeds timing patterns into a matrix. - */ - private static function embedTimingPatterns(ByteMatrix $matrix) : void - { - $matrixWidth = $matrix->getWidth(); - - for ($i = 8; $i < $matrixWidth - 8; ++$i) { - $bit = ($i + 1) % 2; - - if (-1 === $matrix->get($i, 6)) { - $matrix->set($i, 6, $bit); - } - - if (-1 === $matrix->get(6, $i)) { - $matrix->set(6, $i, $bit); - } - } - } - - /** - * Embeds "dataBits" using "getMaskPattern". - * - * For debugging purposes, it skips masking process if "getMaskPattern" is -1. See 8.7 of JISX0510:2004 (p.38) for - * how to embed data bits. - * - * @throws WriterException if not all bits could be consumed - */ - private static function embedDataBits(BitArray $dataBits, int $maskPattern, ByteMatrix $matrix) : void - { - $bitIndex = 0; - $direction = -1; - - // Start from the right bottom cell. - $x = $matrix->getWidth() - 1; - $y = $matrix->getHeight() - 1; - - while ($x > 0) { - // Skip vertical timing pattern. - if (6 === $x) { - --$x; - } - - while ($y >= 0 && $y < $matrix->getHeight()) { - for ($i = 0; $i < 2; $i++) { - $xx = $x - $i; - - // Skip the cell if it's not empty. - if (-1 !== $matrix->get($xx, $y)) { - continue; - } - - if ($bitIndex < $dataBits->getSize()) { - $bit = $dataBits->get($bitIndex); - ++$bitIndex; - } else { - // Padding bit. If there is no bit left, we'll fill the - // left cells with 0, as described in 8.4.9 of - // JISX0510:2004 (p. 24). - $bit = false; - } - - // Skip masking if maskPattern is -1. - if (-1 !== $maskPattern && MaskUtil::getDataMaskBit($maskPattern, $xx, $y)) { - $bit = ! $bit; - } - - $matrix->set($xx, $y, (int) $bit); - } - - $y += $direction; - } - - $direction = -$direction; - $y += $direction; - $x -= 2; - } - - // All bits should be consumed - if ($dataBits->getSize() !== $bitIndex) { - throw new WriterException('Not all bits consumed (' . $bitIndex . ' out of ' . $dataBits->getSize() .')'); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php b/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php deleted file mode 100644 index f568e88..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Encoder/QrCode.php +++ /dev/null @@ -1,141 +0,0 @@ -mode = $mode; - $this->errorCorrectionLevel = $errorCorrectionLevel; - $this->version = $version; - $this->maskPattern = $maskPattern; - $this->matrix = $matrix; - } - - /** - * Gets the mode. - */ - public function getMode() : Mode - { - return $this->mode; - } - - /** - * Gets the EC level. - */ - public function getErrorCorrectionLevel() : ErrorCorrectionLevel - { - return $this->errorCorrectionLevel; - } - - /** - * Gets the version. - */ - public function getVersion() : Version - { - return $this->version; - } - - /** - * Gets the mask pattern. - */ - public function getMaskPattern() : int - { - return $this->maskPattern; - } - - /** - * Gets the matrix. - * - * @return ByteMatrix - */ - public function getMatrix() - { - return $this->matrix; - } - - /** - * Validates whether a mask pattern is valid. - */ - public static function isValidMaskPattern(int $maskPattern) : bool - { - return $maskPattern > 0 && $maskPattern < self::NUM_MASK_PATTERNS; - } - - /** - * Returns a string representation of the QR code. - */ - public function __toString() : string - { - $result = "<<\n" - . ' mode: ' . $this->mode . "\n" - . ' ecLevel: ' . $this->errorCorrectionLevel . "\n" - . ' version: ' . $this->version . "\n" - . ' maskPattern: ' . $this->maskPattern . "\n"; - - if ($this->matrix === null) { - $result .= " matrix: null\n"; - } else { - $result .= " matrix:\n"; - $result .= $this->matrix; - } - - $result .= ">>\n"; - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php b/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php deleted file mode 100644 index 6f70c20..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Exception/ExceptionInterface.php +++ /dev/null @@ -1,10 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Alpha must be between 0 and 100'); - } - - $this->alpha = $alpha; - $this->baseColor = $baseColor; - } - - public function getAlpha() : int - { - return $this->alpha; - } - - public function getBaseColor() : ColorInterface - { - return $this->baseColor; - } - - public function toRgb() : Rgb - { - return $this->baseColor->toRgb(); - } - - public function toCmyk() : Cmyk - { - return $this->baseColor->toCmyk(); - } - - public function toGray() : Gray - { - return $this->baseColor->toGray(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php deleted file mode 100644 index d6de390..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Cmyk.php +++ /dev/null @@ -1,103 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Cyan must be between 0 and 100'); - } - - if ($magenta < 0 || $magenta > 100) { - throw new Exception\InvalidArgumentException('Magenta must be between 0 and 100'); - } - - if ($yellow < 0 || $yellow > 100) { - throw new Exception\InvalidArgumentException('Yellow must be between 0 and 100'); - } - - if ($black < 0 || $black > 100) { - throw new Exception\InvalidArgumentException('Black must be between 0 and 100'); - } - - $this->cyan = $cyan; - $this->magenta = $magenta; - $this->yellow = $yellow; - $this->black = $black; - } - - public function getCyan() : int - { - return $this->cyan; - } - - public function getMagenta() : int - { - return $this->magenta; - } - - public function getYellow() : int - { - return $this->yellow; - } - - public function getBlack() : int - { - return $this->black; - } - - public function toRgb() : Rgb - { - $k = $this->black / 100; - $c = (-$k * $this->cyan + $k * 100 + $this->cyan) / 100; - $m = (-$k * $this->magenta + $k * 100 + $this->magenta) / 100; - $y = (-$k * $this->yellow + $k * 100 + $this->yellow) / 100; - - return new Rgb( - (int) (-$c * 255 + 255), - (int) (-$m * 255 + 255), - (int) (-$y * 255 + 255) - ); - } - - public function toCmyk() : Cmyk - { - return $this; - } - - public function toGray() : Gray - { - return $this->toRgb()->toGray(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php deleted file mode 100644 index b50d1ca..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/ColorInterface.php +++ /dev/null @@ -1,22 +0,0 @@ - 100) { - throw new Exception\InvalidArgumentException('Gray must be between 0 and 100'); - } - - $this->gray = (int) $gray; - } - - public function getGray() : int - { - return $this->gray; - } - - public function toRgb() : Rgb - { - return new Rgb((int) ($this->gray * 2.55), (int) ($this->gray * 2.55), (int) ($this->gray * 2.55)); - } - - public function toCmyk() : Cmyk - { - return new Cmyk(0, 0, 0, 100 - $this->gray); - } - - public function toGray() : Gray - { - return $this; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php deleted file mode 100644 index 7935406..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Color/Rgb.php +++ /dev/null @@ -1,88 +0,0 @@ - 255) { - throw new Exception\InvalidArgumentException('Red must be between 0 and 255'); - } - - if ($green < 0 || $green > 255) { - throw new Exception\InvalidArgumentException('Green must be between 0 and 255'); - } - - if ($blue < 0 || $blue > 255) { - throw new Exception\InvalidArgumentException('Blue must be between 0 and 255'); - } - - $this->red = $red; - $this->green = $green; - $this->blue = $blue; - } - - public function getRed() : int - { - return $this->red; - } - - public function getGreen() : int - { - return $this->green; - } - - public function getBlue() : int - { - return $this->blue; - } - - public function toRgb() : Rgb - { - return $this; - } - - public function toCmyk() : Cmyk - { - $c = 1 - ($this->red / 255); - $m = 1 - ($this->green / 255); - $y = 1 - ($this->blue / 255); - $k = min($c, $m, $y); - - return new Cmyk( - (int) (100 * ($c - $k) / (1 - $k)), - (int) (100 * ($m - $k) / (1 - $k)), - (int) (100 * ($y - $k) / (1 - $k)), - (int) (100 * $k) - ); - } - - public function toGray() : Gray - { - return new Gray((int) (($this->red * 0.21 + $this->green * 0.71 + $this->blue * 0.07) / 2.55)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php deleted file mode 100644 index a3e1909..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/CompositeEye.php +++ /dev/null @@ -1,38 +0,0 @@ -externalEye = $externalEye; - $this->internalEye = $internalEye; - } - - public function getExternalPath() : Path - { - return $this->externalEye->getExternalPath(); - } - - public function getInternalPath() : Path - { - return $this->externalEye->getInternalPath(); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php deleted file mode 100644 index ab68f3c..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/EyeInterface.php +++ /dev/null @@ -1,26 +0,0 @@ -module = $module; - } - - public function getExternalPath() : Path - { - $matrix = new ByteMatrix(7, 7); - - for ($x = 0; $x < 7; ++$x) { - $matrix->set($x, 0, 1); - $matrix->set($x, 6, 1); - } - - for ($y = 1; $y < 6; ++$y) { - $matrix->set(0, $y, 1); - $matrix->set(6, $y, 1); - } - - return $this->module->createPath($matrix)->translate(-3.5, -3.5); - } - - public function getInternalPath() : Path - { - $matrix = new ByteMatrix(3, 3); - - for ($x = 0; $x < 3; ++$x) { - for ($y = 0; $y < 3; ++$y) { - $matrix->set($x, $y, 1); - } - } - - return $this->module->createPath($matrix)->translate(-1.5, -1.5); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php deleted file mode 100644 index 64d54ee..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SimpleCircleEye.php +++ /dev/null @@ -1,54 +0,0 @@ -move(-3.5, -3.5) - ->line(3.5, -3.5) - ->line(3.5, 3.5) - ->line(-3.5, 3.5) - ->close() - ->move(-2.5, -2.5) - ->line(-2.5, 2.5) - ->line(2.5, 2.5) - ->line(2.5, -2.5) - ->close() - ; - } - - public function getInternalPath() : Path - { - return (new Path()) - ->move(1.5, 0) - ->ellipticArc(1.5, 1.5, 0., false, true, 0., 1.5) - ->ellipticArc(1.5, 1.5, 0., false, true, -1.5, 0.) - ->ellipticArc(1.5, 1.5, 0., false, true, 0., -1.5) - ->ellipticArc(1.5, 1.5, 0., false, true, 1.5, 0.) - ->close() - ; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php deleted file mode 100644 index a3892b4..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Eye/SquareEye.php +++ /dev/null @@ -1,53 +0,0 @@ -move(-3.5, -3.5) - ->line(3.5, -3.5) - ->line(3.5, 3.5) - ->line(-3.5, 3.5) - ->close() - ->move(-2.5, -2.5) - ->line(-2.5, 2.5) - ->line(2.5, 2.5) - ->line(2.5, -2.5) - ->close() - ; - } - - public function getInternalPath() : Path - { - return (new Path()) - ->move(-1.5, -1.5) - ->line(1.5, -1.5) - ->line(1.5, 1.5) - ->line(-1.5, 1.5) - ->close() - ; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php deleted file mode 100644 index b581b54..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/EpsImageBackEnd.php +++ /dev/null @@ -1,376 +0,0 @@ -eps = "%!PS-Adobe-3.0 EPSF-3.0\n" - . "%%Creator: BaconQrCode\n" - . sprintf("%%%%BoundingBox: 0 0 %d %d \n", $size, $size) - . "%%BeginProlog\n" - . "save\n" - . "50 dict begin\n" - . "/q { gsave } bind def\n" - . "/Q { grestore } bind def\n" - . "/s { scale } bind def\n" - . "/t { translate } bind def\n" - . "/r { rotate } bind def\n" - . "/n { newpath } bind def\n" - . "/m { moveto } bind def\n" - . "/l { lineto } bind def\n" - . "/c { curveto } bind def\n" - . "/z { closepath } bind def\n" - . "/f { eofill } bind def\n" - . "/rgb { setrgbcolor } bind def\n" - . "/cmyk { setcmykcolor } bind def\n" - . "/gray { setgray } bind def\n" - . "%%EndProlog\n" - . "1 -1 s\n" - . sprintf("0 -%d t\n", $size); - - if ($backgroundColor instanceof Alpha && 0 === $backgroundColor->getAlpha()) { - return; - } - - $this->eps .= wordwrap( - '0 0 m' - . sprintf(' %s 0 l', (string) $size) - . sprintf(' %s %s l', (string) $size, (string) $size) - . sprintf(' 0 %s l', (string) $size) - . ' z' - . ' ' .$this->getColorSetString($backgroundColor) . " f\n", - 75, - "\n " - ); - } - - public function scale(float $size) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%1\$s %1\$s s\n", round($size, self::PRECISION)); - } - - public function translate(float $x, float $y) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%s %s t\n", round($x, self::PRECISION), round($y, self::PRECISION)); - } - - public function rotate(int $degrees) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= sprintf("%d r\n", $degrees); - } - - public function push() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "q\n"; - } - - public function pop() : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "Q\n"; - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'n ' - . $this->drawPathOperations($path, $fromX, $fromY) - . ' ' . $this->getColorSetString($color) . " f\n", - 75, - "\n " - ); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $fromX = 0; - $fromY = 0; - $this->eps .= wordwrap( - 'q n ' . $this->drawPathOperations($path, $fromX, $fromY) . "\n", - 75, - "\n " - ); - - $this->createGradientFill($gradient, $x, $y, $width, $height); - } - - public function done() : string - { - if (null === $this->eps) { - throw new RuntimeException('No image has been started'); - } - - $this->eps .= "%%TRAILER\nend restore\n%%EOF"; - $blob = $this->eps; - $this->eps = null; - - return $blob; - } - - private function drawPathOperations(Iterable $ops, &$fromX, &$fromY) : string - { - $pathData = []; - - foreach ($ops as $op) { - switch (true) { - case $op instanceof Move: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s m', $toX, $toY); - break; - - case $op instanceof Line: - $fromX = $toX = round($op->getX(), self::PRECISION); - $fromY = $toY = round($op->getY(), self::PRECISION); - $pathData[] = sprintf('%s %s l', $toX, $toY); - break; - - case $op instanceof EllipticArc: - $pathData[] = $this->drawPathOperations($op->toCurves($fromX, $fromY), $fromX, $fromY); - break; - - case $op instanceof Curve: - $x1 = round($op->getX1(), self::PRECISION); - $y1 = round($op->getY1(), self::PRECISION); - $x2 = round($op->getX2(), self::PRECISION); - $y2 = round($op->getY2(), self::PRECISION); - $fromX = $x3 = round($op->getX3(), self::PRECISION); - $fromY = $y3 = round($op->getY3(), self::PRECISION); - $pathData[] = sprintf('%s %s %s %s %s %s c', $x1, $y1, $x2, $y2, $x3, $y3); - break; - - case $op instanceof Close: - $pathData[] = 'z'; - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - return implode(' ', $pathData); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : void - { - $startColor = $gradient->getStartColor(); - $endColor = $gradient->getEndColor(); - - if ($startColor instanceof Alpha) { - $startColor = $startColor->getBaseColor(); - } - - $startColorType = get_class($startColor); - - if (! in_array($startColorType, [Rgb::class, Cmyk::class, Gray::class])) { - $startColorType = Cmyk::class; - $startColor = $startColor->toCmyk(); - } - - if (get_class($endColor) !== $startColorType) { - switch ($startColorType) { - case Cmyk::class: - $endColor = $endColor->toCmyk(); - break; - - case Rgb::class: - $endColor = $endColor->toRgb(); - break; - - case Gray::class: - $endColor = $endColor->toGray(); - break; - } - } - - $this->eps .= "eoclip\n<<\n"; - - if ($gradient->getType() === GradientType::RADIAL()) { - $this->eps .= " /ShadingType 3\n"; - } else { - $this->eps .= " /ShadingType 2\n"; - } - - $this->eps .= " /Extend [ true true ]\n" - . " /AntiAlias true\n"; - - switch ($startColorType) { - case Cmyk::class: - $this->eps .= " /ColorSpace /DeviceCMYK\n"; - break; - - case Rgb::class: - $this->eps .= " /ColorSpace /DeviceRGB\n"; - break; - - case Gray::class: - $this->eps .= " /ColorSpace /DeviceGray\n"; - break; - } - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::VERTICAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y, self::PRECISION), - round($x + $width, self::PRECISION), - round($y + $height, self::PRECISION) - ); - break; - - case GradientType::INVERSE_DIAGONAL(): - $this->eps .= sprintf( - " /Coords [ %s %s %s %s ]\n", - round($x, self::PRECISION), - round($y + $height, self::PRECISION), - round($x + $width, self::PRECISION), - round($y, self::PRECISION) - ); - break; - - case GradientType::RADIAL(): - $centerX = ($x + $width) / 2; - $centerY = ($y + $height) / 2; - - $this->eps .= sprintf( - " /Coords [ %s %s 0 %s %s %s ]\n", - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round($centerX, self::PRECISION), - round($centerY, self::PRECISION), - round(max($width, $height) / 2, self::PRECISION) - ); - break; - } - - $this->eps .= " /Function\n" - . " <<\n" - . " /FunctionType 2\n" - . " /Domain [ 0 1 ]\n" - . sprintf(" /C0 [ %s ]\n", $this->getColorString($startColor)) - . sprintf(" /C1 [ %s ]\n", $this->getColorString($endColor)) - . " /N 1\n" - . " >>\n>>\nshfill\nQ\n"; - } - - private function getColorSetString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return $this->getColorString($color) . ' rgb'; - } - - if ($color instanceof Cmyk) { - return $this->getColorString($color) . ' cmyk'; - } - - if ($color instanceof Gray) { - return $this->getColorString($color) . ' gray'; - } - - return $this->getColorSetString($color->toCmyk()); - } - - private function getColorString(ColorInterface $color) : string - { - if ($color instanceof Rgb) { - return sprintf('%s %s %s', $color->getRed() / 255, $color->getGreen() / 255, $color->getBlue() / 255); - } - - if ($color instanceof Cmyk) { - return sprintf( - '%s %s %s %s', - $color->getCyan() / 100, - $color->getMagenta() / 100, - $color->getYellow() / 100, - $color->getBlack() / 100 - ); - } - - if ($color instanceof Gray) { - return sprintf('%s', $color->getGray() / 100); - } - - return $this->getColorString($color->toCmyk()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php deleted file mode 100644 index 0935819..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/ImageBackEndInterface.php +++ /dev/null @@ -1,87 +0,0 @@ -imageFormat = $imageFormat; - $this->compressionQuality = $compressionQuality; - } - - public function new(int $size, ColorInterface $backgroundColor) : void - { - $this->image = new Imagick(); - $this->image->newImage($size, $size, $this->getColorPixel($backgroundColor)); - $this->image->setImageFormat($this->imageFormat); - $this->image->setCompressionQuality($this->compressionQuality); - $this->draw = new ImagickDraw(); - $this->gradientCount = 0; - $this->matrices = [new TransformationMatrix()]; - $this->matrixIndex = 0; - } - - public function scale(float $size) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->scale($size, $size); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::scale($size)); - } - - public function translate(float $x, float $y) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->translate($x, $y); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::translate($x, $y)); - } - - public function rotate(int $degrees) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->rotate($degrees); - $this->matrices[$this->matrixIndex] = $this->matrices[$this->matrixIndex] - ->multiply(TransformationMatrix::rotate($degrees)); - } - - public function push() : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->push(); - $this->matrices[++$this->matrixIndex] = $this->matrices[$this->matrixIndex - 1]; - } - - public function pop() : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->pop(); - unset($this->matrices[$this->matrixIndex--]); - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->setFillColor($this->getColorPixel($color)); - $this->drawPath($path); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->draw->setFillPatternURL('#' . $this->createGradientFill($gradient, $x, $y, $width, $height)); - $this->drawPath($path); - } - - public function done() : string - { - if (null === $this->draw) { - throw new RuntimeException('No image has been started'); - } - - $this->image->drawImage($this->draw); - $blob = $this->image->getImageBlob(); - $this->draw->clear(); - $this->image->clear(); - $this->draw = null; - $this->image = null; - $this->gradientCount = null; - - return $blob; - } - - private function drawPath(Path $path) : void - { - $this->draw->pathStart(); - - foreach ($path as $op) { - switch (true) { - case $op instanceof Move: - $this->draw->pathMoveToAbsolute($op->getX(), $op->getY()); - break; - - case $op instanceof Line: - $this->draw->pathLineToAbsolute($op->getX(), $op->getY()); - break; - - case $op instanceof EllipticArc: - $this->draw->pathEllipticArcAbsolute( - $op->getXRadius(), - $op->getYRadius(), - $op->getXAxisAngle(), - $op->isLargeArc(), - $op->isSweep(), - $op->getX(), - $op->getY() - ); - break; - - case $op instanceof Curve: - $this->draw->pathCurveToAbsolute( - $op->getX1(), - $op->getY1(), - $op->getX2(), - $op->getY2(), - $op->getX3(), - $op->getY3() - ); - break; - - case $op instanceof Close: - $this->draw->pathClose(); - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - $this->draw->pathFinish(); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string - { - list($width, $height) = $this->matrices[$this->matrixIndex]->apply($x + $width, $y + $height); - list($x, $y) = $this->matrices[$this->matrixIndex]->apply($x, $y); - $width -= $x; - $height -= $y; - - $startColor = $this->getColorPixel($gradient->getStartColor())->getColorAsString(); - $endColor = $this->getColorPixel($gradient->getEndColor())->getColorAsString(); - $gradientImage = new Imagick(); - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $gradientImage->newPseudoImage((int) $height, (int) $width, sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - $gradientImage->rotateImage('transparent', -90); - break; - - case GradientType::VERTICAL(): - $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - break; - - case GradientType::DIAGONAL(): - case GradientType::INVERSE_DIAGONAL(): - $gradientImage->newPseudoImage((int) ($width * sqrt(2)), (int) ($height * sqrt(2)), sprintf( - 'gradient:%s-%s', - $startColor, - $endColor - )); - - if (GradientType::DIAGONAL() === $gradient->getType()) { - $gradientImage->rotateImage('transparent', -45); - } else { - $gradientImage->rotateImage('transparent', -135); - } - - $rotatedWidth = $gradientImage->getImageWidth(); - $rotatedHeight = $gradientImage->getImageHeight(); - - $gradientImage->setImagePage($rotatedWidth, $rotatedHeight, 0, 0); - $gradientImage->cropImage( - intdiv($rotatedWidth, 2) - 2, - intdiv($rotatedHeight, 2) - 2, - intdiv($rotatedWidth, 4) + 1, - intdiv($rotatedWidth, 4) + 1 - ); - break; - - case GradientType::RADIAL(): - $gradientImage->newPseudoImage((int) $width, (int) $height, sprintf( - 'radial-gradient:%s-%s', - $startColor, - $endColor - )); - break; - } - - $id = sprintf('g%d', ++$this->gradientCount); - $this->draw->pushPattern($id, 0, 0, $x + $width, $y + $height); - $this->draw->composite(Imagick::COMPOSITE_COPY, $x, $y, $width, $height, $gradientImage); - $this->draw->popPattern(); - return $id; - } - - private function getColorPixel(ColorInterface $color) : ImagickPixel - { - $alpha = 100; - - if ($color instanceof Alpha) { - $alpha = $color->getAlpha(); - $color = $color->getBaseColor(); - } - - if ($color instanceof Rgb) { - return new ImagickPixel(sprintf( - 'rgba(%d, %d, %d, %F)', - $color->getRed(), - $color->getGreen(), - $color->getBlue(), - $alpha / 100 - )); - } - - if ($color instanceof Cmyk) { - return new ImagickPixel(sprintf( - 'cmyka(%d, %d, %d, %d, %F)', - $color->getCyan(), - $color->getMagenta(), - $color->getYellow(), - $color->getBlack(), - $alpha / 100 - )); - } - - if ($color instanceof Gray) { - return new ImagickPixel(sprintf( - 'graya(%d%%, %F)', - $color->getGray(), - $alpha / 100 - )); - } - - return $this->getColorPixel(new Alpha($alpha, $color->toRgb())); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php deleted file mode 100644 index 714da6e..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/SvgImageBackEnd.php +++ /dev/null @@ -1,369 +0,0 @@ -xmlWriter = new XMLWriter(); - $this->xmlWriter->openMemory(); - - $this->xmlWriter->startDocument('1.0', 'UTF-8'); - $this->xmlWriter->startElement('svg'); - $this->xmlWriter->writeAttribute('xmlns', 'http://www.w3.org/2000/svg'); - $this->xmlWriter->writeAttribute('version', '1.1'); - $this->xmlWriter->writeAttribute('width', (string) $size); - $this->xmlWriter->writeAttribute('height', (string) $size); - $this->xmlWriter->writeAttribute('viewBox', '0 0 '. $size . ' ' . $size); - - $this->gradientCount = 0; - $this->currentStack = 0; - $this->stack[0] = 0; - - $alpha = 1; - - if ($backgroundColor instanceof Alpha) { - $alpha = $backgroundColor->getAlpha() / 100; - } - - if (0 === $alpha) { - return; - } - - $this->xmlWriter->startElement('rect'); - $this->xmlWriter->writeAttribute('x', '0'); - $this->xmlWriter->writeAttribute('y', '0'); - $this->xmlWriter->writeAttribute('width', (string) $size); - $this->xmlWriter->writeAttribute('height', (string) $size); - $this->xmlWriter->writeAttribute('fill', $this->getColorString($backgroundColor)); - - if ($alpha < 1) { - $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); - } - - $this->xmlWriter->endElement(); - } - - public function scale(float $size) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute( - 'transform', - sprintf('scale(%s)', round($size, self::PRECISION)) - ); - ++$this->stack[$this->currentStack]; - } - - public function translate(float $x, float $y) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute( - 'transform', - sprintf('translate(%s,%s)', round($x, self::PRECISION), round($y, self::PRECISION)) - ); - ++$this->stack[$this->currentStack]; - } - - public function rotate(int $degrees) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->xmlWriter->writeAttribute('transform', sprintf('rotate(%d)', $degrees)); - ++$this->stack[$this->currentStack]; - } - - public function push() : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $this->xmlWriter->startElement('g'); - $this->stack[] = 1; - ++$this->currentStack; - } - - public function pop() : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - for ($i = 0; $i < $this->stack[$this->currentStack]; ++$i) { - $this->xmlWriter->endElement(); - } - - array_pop($this->stack); - --$this->currentStack; - } - - public function drawPathWithColor(Path $path, ColorInterface $color) : void - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $alpha = 1; - - if ($color instanceof Alpha) { - $alpha = $color->getAlpha() / 100; - } - - $this->startPathElement($path); - $this->xmlWriter->writeAttribute('fill', $this->getColorString($color)); - - if ($alpha < 1) { - $this->xmlWriter->writeAttribute('fill-opacity', (string) $alpha); - } - - $this->xmlWriter->endElement(); - } - - public function drawPathWithGradient( - Path $path, - Gradient $gradient, - float $x, - float $y, - float $width, - float $height - ) : void { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - $gradientId = $this->createGradientFill($gradient, $x, $y, $width, $height); - $this->startPathElement($path); - $this->xmlWriter->writeAttribute('fill', 'url(#' . $gradientId . ')'); - $this->xmlWriter->endElement(); - } - - public function done() : string - { - if (null === $this->xmlWriter) { - throw new RuntimeException('No image has been started'); - } - - foreach ($this->stack as $openElements) { - for ($i = $openElements; $i > 0; --$i) { - $this->xmlWriter->endElement(); - } - } - - $this->xmlWriter->endDocument(); - $blob = $this->xmlWriter->outputMemory(true); - $this->xmlWriter = null; - $this->stack = null; - $this->currentStack = null; - $this->gradientCount = null; - - return $blob; - } - - private function startPathElement(Path $path) : void - { - $pathData = []; - - foreach ($path as $op) { - switch (true) { - case $op instanceof Move: - $pathData[] = sprintf( - 'M%s %s', - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof Line: - $pathData[] = sprintf( - 'L%s %s', - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof EllipticArc: - $pathData[] = sprintf( - 'A%s %s %s %u %u %s %s', - round($op->getXRadius(), self::PRECISION), - round($op->getYRadius(), self::PRECISION), - round($op->getXAxisAngle(), self::PRECISION), - $op->isLargeArc(), - $op->isSweep(), - round($op->getX(), self::PRECISION), - round($op->getY(), self::PRECISION) - ); - break; - - case $op instanceof Curve: - $pathData[] = sprintf( - 'C%s %s %s %s %s %s', - round($op->getX1(), self::PRECISION), - round($op->getY1(), self::PRECISION), - round($op->getX2(), self::PRECISION), - round($op->getY2(), self::PRECISION), - round($op->getX3(), self::PRECISION), - round($op->getY3(), self::PRECISION) - ); - break; - - case $op instanceof Close: - $pathData[] = 'Z'; - break; - - default: - throw new RuntimeException('Unexpected draw operation: ' . get_class($op)); - } - } - - $this->xmlWriter->startElement('path'); - $this->xmlWriter->writeAttribute('fill-rule', 'evenodd'); - $this->xmlWriter->writeAttribute('d', implode('', $pathData)); - } - - private function createGradientFill(Gradient $gradient, float $x, float $y, float $width, float $height) : string - { - $this->xmlWriter->startElement('defs'); - - $startColor = $gradient->getStartColor(); - $endColor = $gradient->getEndColor(); - - if ($gradient->getType() === GradientType::RADIAL()) { - $this->xmlWriter->startElement('radialGradient'); - } else { - $this->xmlWriter->startElement('linearGradient'); - } - - $this->xmlWriter->writeAttribute('gradientUnits', 'userSpaceOnUse'); - - switch ($gradient->getType()) { - case GradientType::HORIZONTAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); - break; - - case GradientType::VERTICAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); - break; - - case GradientType::DIAGONAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y + $height, self::PRECISION)); - break; - - case GradientType::INVERSE_DIAGONAL(): - $this->xmlWriter->writeAttribute('x1', (string) round($x, self::PRECISION)); - $this->xmlWriter->writeAttribute('y1', (string) round($y + $height, self::PRECISION)); - $this->xmlWriter->writeAttribute('x2', (string) round($x + $width, self::PRECISION)); - $this->xmlWriter->writeAttribute('y2', (string) round($y, self::PRECISION)); - break; - - case GradientType::RADIAL(): - $this->xmlWriter->writeAttribute('cx', (string) round(($x + $width) / 2, self::PRECISION)); - $this->xmlWriter->writeAttribute('cy', (string) round(($y + $height) / 2, self::PRECISION)); - $this->xmlWriter->writeAttribute('r', (string) round(max($width, $height) / 2, self::PRECISION)); - break; - } - - $id = sprintf('g%d', ++$this->gradientCount); - $this->xmlWriter->writeAttribute('id', $id); - - $this->xmlWriter->startElement('stop'); - $this->xmlWriter->writeAttribute('offset', '0%'); - $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($startColor)); - - if ($startColor instanceof Alpha) { - $this->xmlWriter->writeAttribute('stop-opacity', $startColor->getAlpha()); - } - - $this->xmlWriter->endElement(); - - $this->xmlWriter->startElement('stop'); - $this->xmlWriter->writeAttribute('offset', '100%'); - $this->xmlWriter->writeAttribute('stop-color', $this->getColorString($endColor)); - - if ($endColor instanceof Alpha) { - $this->xmlWriter->writeAttribute('stop-opacity', $endColor->getAlpha()); - } - - $this->xmlWriter->endElement(); - - $this->xmlWriter->endElement(); - $this->xmlWriter->endElement(); - - return $id; - } - - private function getColorString(ColorInterface $color) : string - { - $color = $color->toRgb(); - - return sprintf( - '#%02x%02x%02x', - $color->getRed(), - $color->getGreen(), - $color->getBlue() - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php deleted file mode 100644 index 7e88da6..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Image/TransformationMatrix.php +++ /dev/null @@ -1,68 +0,0 @@ -values = [1, 0, 0, 1, 0, 0]; - } - - public function multiply(self $other) : self - { - $matrix = new self(); - $matrix->values[0] = $this->values[0] * $other->values[0] + $this->values[2] * $other->values[1]; - $matrix->values[1] = $this->values[1] * $other->values[0] + $this->values[3] * $other->values[1]; - $matrix->values[2] = $this->values[0] * $other->values[2] + $this->values[2] * $other->values[3]; - $matrix->values[3] = $this->values[1] * $other->values[2] + $this->values[3] * $other->values[3]; - $matrix->values[4] = $this->values[0] * $other->values[4] + $this->values[2] * $other->values[5] - + $this->values[4]; - $matrix->values[5] = $this->values[1] * $other->values[4] + $this->values[3] * $other->values[5] - + $this->values[5]; - - return $matrix; - } - - public static function scale(float $size) : self - { - $matrix = new self(); - $matrix->values = [$size, 0, 0, $size, 0, 0]; - return $matrix; - } - - public static function translate(float $x, float $y) : self - { - $matrix = new self(); - $matrix->values = [1, 0, 0, 1, $x, $y]; - return $matrix; - } - - public static function rotate(int $degrees) : self - { - $matrix = new self(); - $rad = deg2rad($degrees); - $matrix->values = [cos($rad), sin($rad), -sin($rad), cos($rad), 0, 0]; - return $matrix; - } - - - /** - * Applies this matrix onto a point and returns the resulting viewport point. - * - * @return float[] - */ - public function apply(float $x, float $y) : array - { - return [ - $x * $this->values[0] + $y * $this->values[2] + $this->values[4], - $x * $this->values[1] + $y * $this->values[3] + $this->values[5], - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php deleted file mode 100644 index ab16276..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/ImageRenderer.php +++ /dev/null @@ -1,152 +0,0 @@ -rendererStyle = $rendererStyle; - $this->imageBackEnd = $imageBackEnd; - } - - /** - * @throws InvalidArgumentException if matrix width doesn't match height - */ - public function render(QrCode $qrCode) : string - { - $size = $this->rendererStyle->getSize(); - $margin = $this->rendererStyle->getMargin(); - $matrix = $qrCode->getMatrix(); - $matrixSize = $matrix->getWidth(); - - if ($matrixSize !== $matrix->getHeight()) { - throw new InvalidArgumentException('Matrix must have the same width and height'); - } - - $totalSize = $matrixSize + ($margin * 2); - $moduleSize = $size / $totalSize; - $fill = $this->rendererStyle->getFill(); - - $this->imageBackEnd->new($size, $fill->getBackgroundColor()); - $this->imageBackEnd->scale((float) $moduleSize); - $this->imageBackEnd->translate((float) $margin, (float) $margin); - - $module = $this->rendererStyle->getModule(); - $moduleMatrix = clone $matrix; - MatrixUtil::removePositionDetectionPatterns($moduleMatrix); - $modulePath = $this->drawEyes($matrixSize, $module->createPath($moduleMatrix)); - - if ($fill->hasGradientFill()) { - $this->imageBackEnd->drawPathWithGradient( - $modulePath, - $fill->getForegroundGradient(), - 0, - 0, - $matrixSize, - $matrixSize - ); - } else { - $this->imageBackEnd->drawPathWithColor($modulePath, $fill->getForegroundColor()); - } - - return $this->imageBackEnd->done(); - } - - private function drawEyes(int $matrixSize, Path $modulePath) : Path - { - $fill = $this->rendererStyle->getFill(); - - $eye = $this->rendererStyle->getEye(); - $externalPath = $eye->getExternalPath(); - $internalPath = $eye->getInternalPath(); - - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getTopLeftEyeFill(), - 3.5, - 3.5, - 0, - $modulePath - ); - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getTopRightEyeFill(), - $matrixSize - 3.5, - 3.5, - 90, - $modulePath - ); - $modulePath = $this->drawEye( - $externalPath, - $internalPath, - $fill->getBottomLeftEyeFill(), - 3.5, - $matrixSize - 3.5, - -90, - $modulePath - ); - - return $modulePath; - } - - private function drawEye( - Path $externalPath, - Path $internalPath, - EyeFill $fill, - float $xTranslation, - float $yTranslation, - int $rotation, - Path $modulePath - ) : Path { - if ($fill->inheritsBothColors()) { - return $modulePath - ->append($externalPath->translate($xTranslation, $yTranslation)) - ->append($internalPath->translate($xTranslation, $yTranslation)); - } - - $this->imageBackEnd->push(); - $this->imageBackEnd->translate($xTranslation, $yTranslation); - - if (0 !== $rotation) { - $this->imageBackEnd->rotate($rotation); - } - - if ($fill->inheritsExternalColor()) { - $modulePath = $modulePath->append($externalPath->translate($xTranslation, $yTranslation)); - } else { - $this->imageBackEnd->drawPathWithColor($externalPath, $fill->getExternalColor()); - } - - if ($fill->inheritsInternalColor()) { - $modulePath = $modulePath->append($internalPath->translate($xTranslation, $yTranslation)); - } else { - $this->imageBackEnd->drawPathWithColor($internalPath, $fill->getInternalColor()); - } - - $this->imageBackEnd->pop(); - - return $modulePath; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php deleted file mode 100644 index f536e5a..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/DotsModule.php +++ /dev/null @@ -1,63 +0,0 @@ - 1) { - throw new InvalidArgumentException('Size must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->size = $size; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $width = $matrix->getWidth(); - $height = $matrix->getHeight(); - $path = new Path(); - $halfSize = $this->size / 2; - $margin = (1 - $this->size) / 2; - - for ($y = 0; $y < $height; ++$y) { - for ($x = 0; $x < $width; ++$x) { - if (! $matrix->get($x, $y)) { - continue; - } - - $pathX = $x + $margin; - $pathY = $y + $margin; - - $path = $path - ->move($pathX + $this->size, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY + $this->size) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX, $pathY + $halfSize) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $halfSize, $pathY) - ->ellipticArc($halfSize, $halfSize, 0, false, true, $pathX + $this->size, $pathY + $halfSize) - ->close() - ; - } - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php deleted file mode 100644 index 90482f2..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/Edge.php +++ /dev/null @@ -1,100 +0,0 @@ - - */ - private $points = []; - - /** - * @var array|null - */ - private $simplifiedPoints; - - /** - * @var int - */ - private $minX = PHP_INT_MAX; - - /** - * @var int - */ - private $minY = PHP_INT_MAX; - - /** - * @var int - */ - private $maxX = -1; - - /** - * @var int - */ - private $maxY = -1; - - public function __construct(bool $positive) - { - $this->positive = $positive; - } - - public function addPoint(int $x, int $y) : void - { - $this->points[] = [$x, $y]; - $this->minX = min($this->minX, $x); - $this->minY = min($this->minY, $y); - $this->maxX = max($this->maxX, $x); - $this->maxY = max($this->maxY, $y); - } - - public function isPositive() : bool - { - return $this->positive; - } - - /** - * @return array - */ - public function getPoints() : array - { - return $this->points; - } - - public function getMaxX() : int - { - return $this->maxX; - } - - public function getSimplifiedPoints() : array - { - if (null !== $this->simplifiedPoints) { - return $this->simplifiedPoints; - } - - $points = []; - $length = count($this->points); - - for ($i = 0; $i < $length; ++$i) { - $previousPoint = $this->points[(0 === $i ? $length : $i) - 1]; - $nextPoint = $this->points[($length - 1 === $i ? -1 : $i) + 1]; - $currentPoint = $this->points[$i]; - - if (($previousPoint[0] === $currentPoint[0] && $currentPoint[0] === $nextPoint[0]) - || ($previousPoint[1] === $currentPoint[1] && $currentPoint[1] === $nextPoint[1]) - ) { - continue; - } - - $points[] = $currentPoint; - } - - return $this->simplifiedPoints = $points; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php deleted file mode 100644 index af52d52..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/EdgeIterator/EdgeIterator.php +++ /dev/null @@ -1,169 +0,0 @@ -bytes = iterator_to_array($matrix->getBytes()); - $this->size = count($this->bytes); - $this->width = $matrix->getWidth(); - $this->height = $matrix->getHeight(); - } - - /** - * @return Edge[] - */ - public function getIterator() : Traversable - { - $originalBytes = $this->bytes; - $point = $this->findNext(0, 0); - - while (null !== $point) { - $edge = $this->findEdge($point[0], $point[1]); - $this->xorEdge($edge); - - yield $edge; - - $point = $this->findNext($point[0], $point[1]); - } - - $this->bytes = $originalBytes; - } - - /** - * @return int[]|null - */ - private function findNext(int $x, int $y) : ?array - { - $i = $this->width * $y + $x; - - while ($i < $this->size && 1 !== $this->bytes[$i]) { - ++$i; - } - - if ($i < $this->size) { - return $this->pointOf($i); - } - - return null; - } - - private function findEdge(int $x, int $y) : Edge - { - $edge = new Edge($this->isSet($x, $y)); - $startX = $x; - $startY = $y; - $dirX = 0; - $dirY = 1; - - while (true) { - $edge->addPoint($x, $y); - $x += $dirX; - $y += $dirY; - - if ($x === $startX && $y === $startY) { - break; - } - - $left = $this->isSet($x + ($dirX + $dirY - 1 ) / 2, $y + ($dirY - $dirX - 1) / 2); - $right = $this->isSet($x + ($dirX - $dirY - 1) / 2, $y + ($dirY + $dirX - 1) / 2); - - if ($right && ! $left) { - $tmp = $dirX; - $dirX = -$dirY; - $dirY = $tmp; - } elseif ($right) { - $tmp = $dirX; - $dirX = -$dirY; - $dirY = $tmp; - } elseif (! $left) { - $tmp = $dirX; - $dirX = $dirY; - $dirY = -$tmp; - } - } - - return $edge; - } - - private function xorEdge(Edge $path) : void - { - $points = $path->getPoints(); - $y1 = $points[0][1]; - $length = count($points); - $maxX = $path->getMaxX(); - - for ($i = 1; $i < $length; ++$i) { - $y = $points[$i][1]; - - if ($y === $y1) { - continue; - } - - $x = $points[$i][0]; - $minY = min($y1, $y); - - for ($j = $x; $j < $maxX; ++$j) { - $this->flip($j, $minY); - } - - $y1 = $y; - } - } - - private function isSet(int $x, int $y) : bool - { - return ( - $x >= 0 - && $x < $this->width - && $y >= 0 - && $y < $this->height - ) && 1 === $this->bytes[$this->width * $y + $x]; - } - - /** - * @return int[] - */ - private function pointOf(int $i) : array - { - $y = intdiv($i, $this->width); - return [$i - $y * $this->width, $y]; - } - - private function flip(int $x, int $y) : void - { - $this->bytes[$this->width * $y + $x] = ( - $this->isSet($x, $y) ? 0 : 1 - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php deleted file mode 100644 index 0ccb0e0..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/ModuleInterface.php +++ /dev/null @@ -1,18 +0,0 @@ - 1) { - throw new InvalidArgumentException('Intensity must between 0 (exclusive) and 1 (inclusive)'); - } - - $this->intensity = $intensity / 2; - } - - public function createPath(ByteMatrix $matrix) : Path - { - $path = new Path(); - - foreach (new EdgeIterator($matrix) as $edge) { - $points = $edge->getSimplifiedPoints(); - $length = count($points); - - $currentPoint = $points[0]; - $nextPoint = $points[1]; - $horizontal = ($currentPoint[1] === $nextPoint[1]); - - if ($horizontal) { - $right = $nextPoint[0] > $currentPoint[0]; - $path = $path->move( - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } else { - $up = $nextPoint[0] < $currentPoint[0]; - $path = $path->move( - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } - - for ($i = 1; $i <= $length; ++$i) { - if ($i === $length) { - $previousPoint = $points[$length - 1]; - $currentPoint = $points[0]; - $nextPoint = $points[1]; - } else { - $previousPoint = $points[(0 === $i ? $length : $i) - 1]; - $currentPoint = $points[$i]; - $nextPoint = $points[($length - 1 === $i ? -1 : $i) + 1]; - } - - $horizontal = ($previousPoint[1] === $currentPoint[1]); - - if ($horizontal) { - $right = $previousPoint[0] < $currentPoint[0]; - $up = $nextPoint[1] < $currentPoint[1]; - $sweep = ($up xor $right); - - if ($this->intensity < 0.5 - || ($right && $previousPoint[0] !== $currentPoint[0] - 1) - || (! $right && $previousPoint[0] - 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0] + ($right ? -$this->intensity : $this->intensity), - $currentPoint[1] - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0], - $currentPoint[1] + ($up ? -$this->intensity : $this->intensity) - ); - } else { - $up = $previousPoint[1] > $currentPoint[1]; - $right = $nextPoint[0] > $currentPoint[0]; - $sweep = ! ($up xor $right); - - if ($this->intensity < 0.5 - || ($up && $previousPoint[1] !== $currentPoint[1] + 1) - || (! $up && $previousPoint[0] + 1 !== $currentPoint[0]) - ) { - $path = $path->line( - $currentPoint[0], - $currentPoint[1] + ($up ? $this->intensity : -$this->intensity) - ); - } - - $path = $path->ellipticArc( - $this->intensity, - $this->intensity, - 0, - false, - $sweep, - $currentPoint[0] + ($right ? $this->intensity : -$this->intensity), - $currentPoint[1] - ); - } - } - - $path = $path->close(); - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php deleted file mode 100644 index 9ab4607..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Module/SquareModule.php +++ /dev/null @@ -1,47 +0,0 @@ -getSimplifiedPoints(); - $length = count($points); - $path = $path->move($points[0][0], $points[0][1]); - - for ($i = 1; $i < $length; ++$i) { - $path = $path->line($points[$i][0], $points[$i][1]); - } - - $path = $path->close(); - } - - return $path; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php deleted file mode 100644 index b07feb0..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Close.php +++ /dev/null @@ -1,29 +0,0 @@ -x1 = $x1; - $this->y1 = $y1; - $this->x2 = $x2; - $this->y2 = $y2; - $this->x3 = $x3; - $this->y3 = $y3; - } - - public function getX1() : float - { - return $this->x1; - } - - public function getY1() : float - { - return $this->y1; - } - - public function getX2() : float - { - return $this->x2; - } - - public function getY2() : float - { - return $this->y2; - } - - public function getX3() : float - { - return $this->x3; - } - - public function getY3() : float - { - return $this->y3; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self( - $this->x1 + $x, - $this->y1 + $y, - $this->x2 + $x, - $this->y2 + $y, - $this->x3 + $x, - $this->y3 + $y - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php deleted file mode 100644 index eff7deb..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/EllipticArc.php +++ /dev/null @@ -1,278 +0,0 @@ -xRadius = abs($xRadius); - $this->yRadius = abs($yRadius); - $this->xAxisAngle = $xAxisAngle % 360; - $this->largeArc = $largeArc; - $this->sweep = $sweep; - $this->x = $x; - $this->y = $y; - } - - public function getXRadius() : float - { - return $this->xRadius; - } - - public function getYRadius() : float - { - return $this->yRadius; - } - - public function getXAxisAngle() : float - { - return $this->xAxisAngle; - } - - public function isLargeArc() : bool - { - return $this->largeArc; - } - - public function isSweep() : bool - { - return $this->sweep; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self( - $this->xRadius, - $this->yRadius, - $this->xAxisAngle, - $this->largeArc, - $this->sweep, - $this->x + $x, - $this->y + $y - ); - } - - /** - * Converts the elliptic arc to multiple curves. - * - * Since not all image back ends support elliptic arcs, this method allows to convert the arc into multiple curves - * resembling the same result. - * - * @see https://mortoray.com/2017/02/16/rendering-an-svg-elliptical-arc-as-bezier-curves/ - * @return array - */ - public function toCurves(float $fromX, float $fromY) : array - { - if (sqrt(($fromX - $this->x) ** 2 + ($fromY - $this->y) ** 2) < self::ZERO_TOLERANCE) { - return []; - } - - if ($this->xRadius < self::ZERO_TOLERANCE || $this->yRadius < self::ZERO_TOLERANCE) { - return [new Line($this->x, $this->y)]; - } - - return $this->createCurves($fromX, $fromY); - } - - /** - * @return Curve[] - */ - private function createCurves(float $fromX, $fromY) : array - { - $xAngle = deg2rad($this->xAxisAngle); - list($centerX, $centerY, $radiusX, $radiusY, $startAngle, $deltaAngle) = - $this->calculateCenterPointParameters($fromX, $fromY, $xAngle); - - $s = $startAngle; - $e = $s + $deltaAngle; - $sign = ($e < $s) ? -1 : 1; - $remain = abs($e - $s); - $p1 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s); - $curves = []; - - while ($remain > self::ZERO_TOLERANCE) { - $step = min($remain, pi() / 2); - $signStep = $step * $sign; - $p2 = self::point($centerX, $centerY, $radiusX, $radiusY, $xAngle, $s + $signStep); - - $alphaT = tan($signStep / 2); - $alpha = sin($signStep) * (sqrt(4 + 3 * $alphaT ** 2) - 1) / 3; - $d1 = self::derivative($radiusX, $radiusY, $xAngle, $s); - $d2 = self::derivative($radiusX, $radiusY, $xAngle, $s + $signStep); - - $curves[] = new Curve( - $p1[0] + $alpha * $d1[0], - $p1[1] + $alpha * $d1[1], - $p2[0] - $alpha * $d2[0], - $p2[1] - $alpha * $d2[1], - $p2[0], - $p2[1] - ); - - $s += $signStep; - $remain -= $step; - $p1 = $p2; - } - - return $curves; - } - - /** - * @return float[] - */ - private function calculateCenterPointParameters(float $fromX, float $fromY, float $xAngle) - { - $rX = $this->xRadius; - $rY = $this->yRadius; - - // F.6.5.1 - $dx2 = ($fromX - $this->x) / 2; - $dy2 = ($fromY - $this->y) / 2; - $x1p = cos($xAngle) * $dx2 + sin($xAngle) * $dy2; - $y1p = -sin($xAngle) * $dx2 + cos($xAngle) * $dy2; - - // F.6.5.2 - $rxs = $rX ** 2; - $rys = $rY ** 2; - $x1ps = $x1p ** 2; - $y1ps = $y1p ** 2; - $cr = $x1ps / $rxs + $y1ps / $rys; - - if ($cr > 1) { - $s = sqrt($cr); - $rX *= $s; - $rY *= $s; - $rxs = $rX ** 2; - $rys = $rY ** 2; - } - - $dq = ($rxs * $y1ps + $rys * $x1ps); - $pq = ($rxs * $rys - $dq) / $dq; - $q = sqrt(max(0, $pq)); - - if ($this->largeArc === $this->sweep) { - $q = -$q; - } - - $cxp = $q * $rX * $y1p / $rY; - $cyp = -$q * $rY * $x1p / $rX; - - // F.6.5.3 - $cx = cos($xAngle) * $cxp - sin($xAngle) * $cyp + ($fromX + $this->x) / 2; - $cy = sin($xAngle) * $cxp + cos($xAngle) * $cyp + ($fromY + $this->y) / 2; - - // F.6.5.5 - $theta = self::angle(1, 0, ($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY); - - // F.6.5.6 - $delta = self::angle(($x1p - $cxp) / $rX, ($y1p - $cyp) / $rY, (-$x1p - $cxp) / $rX, (-$y1p - $cyp) / $rY); - $delta = fmod($delta, pi() * 2); - - if (! $this->sweep) { - $delta -= 2 * pi(); - } - - return [$cx, $cy, $rX, $rY, $theta, $delta]; - } - - private static function angle(float $ux, float $uy, float $vx, float $vy) : float - { - // F.6.5.4 - $dot = $ux * $vx + $uy * $vy; - $length = sqrt($ux ** 2 + $uy ** 2) * sqrt($vx ** 2 + $vy ** 2); - $angle = acos(min(1, max(-1, $dot / $length))); - - if (($ux * $vy - $uy * $vx) < 0) { - return -$angle; - } - - return $angle; - } - - /** - * @return float[] - */ - private static function point( - float $centerX, - float $centerY, - float $radiusX, - float $radiusY, - float $xAngle, - float $angle - ) : array { - return [ - $centerX + $radiusX * cos($xAngle) * cos($angle) - $radiusY * sin($xAngle) * sin($angle), - $centerY + $radiusX * sin($xAngle) * cos($angle) + $radiusY * cos($xAngle) * sin($angle), - ]; - } - - /** - * @return float[] - */ - private static function derivative(float $radiusX, float $radiusY, float $xAngle, float $angle) : array - { - return [ - -$radiusX * cos($xAngle) * sin($angle) - $radiusY * sin($xAngle) * cos($angle), - -$radiusX * sin($xAngle) * sin($angle) + $radiusY * cos($xAngle) * cos($angle), - ]; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php deleted file mode 100644 index 3149a39..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Line.php +++ /dev/null @@ -1,41 +0,0 @@ -x = $x; - $this->y = $y; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self($this->x + $x, $this->y + $y); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php deleted file mode 100644 index 481d0dd..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/Move.php +++ /dev/null @@ -1,41 +0,0 @@ -x = $x; - $this->y = $y; - } - - public function getX() : float - { - return $this->x; - } - - public function getY() : float - { - return $this->y; - } - - /** - * @return self - */ - public function translate(float $x, float $y) : OperationInterface - { - return new self($this->x + $x, $this->y + $y); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php deleted file mode 100644 index a5fa0ed..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/Path/OperationInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -operations[] = new Move($x, $y); - return $path; - } - - /** - * Draws a line from the current position to another position. - */ - public function line(float $x, float $y) : self - { - $path = clone $this; - $path->operations[] = new Line($x, $y); - return $path; - } - - /** - * Draws an elliptic arc from the current position to another position. - */ - public function ellipticArc( - float $xRadius, - float $yRadius, - float $xAxisRotation, - bool $largeArc, - bool $sweep, - float $x, - float $y - ) : self { - $path = clone $this; - $path->operations[] = new EllipticArc($xRadius, $yRadius, $xAxisRotation, $largeArc, $sweep, $x, $y); - return $path; - } - - /** - * Draws a curve from the current position to another position. - */ - public function curve(float $x1, float $y1, float $x2, float $y2, float $x3, float $y3) : self - { - $path = clone $this; - $path->operations[] = new Curve($x1, $y1, $x2, $y2, $x3, $y3); - return $path; - } - - /** - * Closes a sub-path. - */ - public function close() : self - { - $path = clone $this; - $path->operations[] = Close::instance(); - return $path; - } - - /** - * Appends another path to this one. - */ - public function append(self $other) : self - { - $path = clone $this; - $path->operations = array_merge($this->operations, $other->operations); - return $path; - } - - public function translate(float $x, float $y) : self - { - $path = new self(); - - foreach ($this->operations as $operation) { - $path->operations[] = $operation->translate($x, $y); - } - - return $path; - } - - /** - * @return OperationInterface[]|Traversable - */ - public function getIterator() : Traversable - { - foreach ($this->operations as $operation) { - yield $operation; - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php deleted file mode 100644 index 8aa7652..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/PlainTextRenderer.php +++ /dev/null @@ -1,86 +0,0 @@ -margin = $margin; - } - - /** - * @throws InvalidArgumentException if matrix width doesn't match height - */ - public function render(QrCode $qrCode) : string - { - $matrix = $qrCode->getMatrix(); - $matrixSize = $matrix->getWidth(); - - if ($matrixSize !== $matrix->getHeight()) { - throw new InvalidArgumentException('Matrix must have the same width and height'); - } - - $rows = $matrix->getArray()->toArray(); - - if (0 !== $matrixSize % 2) { - $rows[] = array_fill(0, $matrixSize, 0); - } - - $horizontalMargin = str_repeat(self::EMPTY_BLOCK, $this->margin); - $result = str_repeat("\n", (int) ceil($this->margin / 2)); - - for ($i = 0; $i < $matrixSize; $i += 2) { - $result .= $horizontalMargin; - - $upperRow = $rows[$i]; - $lowerRow = $rows[$i + 1]; - - for ($j = 0; $j < $matrixSize; ++$j) { - $upperBit = $upperRow[$j]; - $lowerBit = $lowerRow[$j]; - - if ($upperBit) { - $result .= $lowerBit ? self::FULL_BLOCK : self::UPPER_HALF_BLOCK; - } else { - $result .= $lowerBit ? self::LOWER_HALF_BLOCK : self::EMPTY_BLOCK; - } - } - - $result .= $horizontalMargin . "\n"; - } - - $result .= str_repeat("\n", (int) ceil($this->margin / 2)); - - return $result; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php deleted file mode 100644 index b0aae39..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererInterface.php +++ /dev/null @@ -1,11 +0,0 @@ -externalColor = $externalColor; - $this->internalColor = $internalColor; - } - - public static function uniform(ColorInterface $color) : self - { - return new self($color, $color); - } - - public static function inherit() : self - { - return self::$inherit ?: self::$inherit = new self(null, null); - } - - public function inheritsBothColors() : bool - { - return null === $this->externalColor && null === $this->internalColor; - } - - public function inheritsExternalColor() : bool - { - return null === $this->externalColor; - } - - public function inheritsInternalColor() : bool - { - return null === $this->internalColor; - } - - public function getExternalColor() : ColorInterface - { - if (null === $this->externalColor) { - throw new RuntimeException('External eye color inherits foreground color'); - } - - return $this->externalColor; - } - - public function getInternalColor() : ColorInterface - { - if (null === $this->internalColor) { - throw new RuntimeException('Internal eye color inherits foreground color'); - } - - return $this->internalColor; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php deleted file mode 100644 index d54268e..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Fill.php +++ /dev/null @@ -1,168 +0,0 @@ -backgroundColor = $backgroundColor; - $this->foregroundColor = $foregroundColor; - $this->foregroundGradient = $foregroundGradient; - $this->topLeftEyeFill = $topLeftEyeFill; - $this->topRightEyeFill = $topRightEyeFill; - $this->bottomLeftEyeFill = $bottomLeftEyeFill; - } - - public static function default() : self - { - return self::$default ?: self::$default = self::uniformColor(new Gray(100), new Gray(0)); - } - - public static function withForegroundColor( - ColorInterface $backgroundColor, - ColorInterface $foregroundColor, - EyeFill $topLeftEyeFill, - EyeFill $topRightEyeFill, - EyeFill $bottomLeftEyeFill - ) : self { - return new self( - $backgroundColor, - $foregroundColor, - null, - $topLeftEyeFill, - $topRightEyeFill, - $bottomLeftEyeFill - ); - } - - public static function withForegroundGradient( - ColorInterface $backgroundColor, - Gradient $foregroundGradient, - EyeFill $topLeftEyeFill, - EyeFill $topRightEyeFill, - EyeFill $bottomLeftEyeFill - ) : self { - return new self( - $backgroundColor, - null, - $foregroundGradient, - $topLeftEyeFill, - $topRightEyeFill, - $bottomLeftEyeFill - ); - } - - public static function uniformColor(ColorInterface $backgroundColor, ColorInterface $foregroundColor) : self - { - return new self( - $backgroundColor, - $foregroundColor, - null, - EyeFill::inherit(), - EyeFill::inherit(), - EyeFill::inherit() - ); - } - - public static function uniformGradient(ColorInterface $backgroundColor, Gradient $foregroundGradient) : self - { - return new self( - $backgroundColor, - null, - $foregroundGradient, - EyeFill::inherit(), - EyeFill::inherit(), - EyeFill::inherit() - ); - } - - public function hasGradientFill() : bool - { - return null !== $this->foregroundGradient; - } - - public function getBackgroundColor() : ColorInterface - { - return $this->backgroundColor; - } - - public function getForegroundColor() : ColorInterface - { - if (null === $this->foregroundColor) { - throw new RuntimeException('Fill uses a gradient, thus no foreground color is available'); - } - - return $this->foregroundColor; - } - - public function getForegroundGradient() : Gradient - { - if (null === $this->foregroundGradient) { - throw new RuntimeException('Fill uses a single color, thus no foreground gradient is available'); - } - - return $this->foregroundGradient; - } - - public function getTopLeftEyeFill() : EyeFill - { - return $this->topLeftEyeFill; - } - - public function getTopRightEyeFill() : EyeFill - { - return $this->topRightEyeFill; - } - - public function getBottomLeftEyeFill() : EyeFill - { - return $this->bottomLeftEyeFill; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php deleted file mode 100644 index 3813dfd..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/Gradient.php +++ /dev/null @@ -1,46 +0,0 @@ -startColor = $startColor; - $this->endColor = $endColor; - $this->type = $type; - } - - public function getStartColor() : ColorInterface - { - return $this->startColor; - } - - public function getEndColor() : ColorInterface - { - return $this->endColor; - } - - public function getType() : GradientType - { - return $this->type; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php b/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php deleted file mode 100644 index c1ca754..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Renderer/RendererStyle/GradientType.php +++ /dev/null @@ -1,22 +0,0 @@ -margin = $margin; - $this->size = $size; - $this->module = $module ?: SquareModule::instance(); - $this->eye = $eye ?: new ModuleEye($this->module); - $this->fill = $fill ?: Fill::default(); - } - - public function withSize(int $size) : self - { - $style = clone $this; - $style->size = $size; - return $style; - } - - public function withMargin(int $margin) : self - { - $style = clone $this; - $style->margin = $margin; - return $style; - } - - public function getSize() : int - { - return $this->size; - } - - public function getMargin() : int - { - return $this->margin; - } - - public function getModule() : ModuleInterface - { - return $this->module; - } - - public function getEye() : EyeInterface - { - return $this->eye; - } - - public function getFill() : Fill - { - return $this->fill; - } -} diff --git a/conlite/external/bacon/bacon-qr-code/src/Writer.php b/conlite/external/bacon/bacon-qr-code/src/Writer.php deleted file mode 100644 index 6688901..0000000 --- a/conlite/external/bacon/bacon-qr-code/src/Writer.php +++ /dev/null @@ -1,68 +0,0 @@ -renderer = $renderer; - } - - /** - * Writes QR code and returns it as string. - * - * Content is a string which *should* be encoded in UTF-8, in case there are - * non ASCII-characters present. - * - * @throws InvalidArgumentException if the content is empty - */ - public function writeString( - string $content, - string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING, - ?ErrorCorrectionLevel $ecLevel = null - ) : string { - if (strlen($content) === 0) { - throw new InvalidArgumentException('Found empty contents'); - } - - if (null === $ecLevel) { - $ecLevel = ErrorCorrectionLevel::L(); - } - - return $this->renderer->render(Encoder::encode($content, $ecLevel, $encoding)); - } - - /** - * Writes QR code to a file. - * - * @see Writer::writeString() - */ - public function writeFile( - string $content, - string $filename, - string $encoding = Encoder::DEFAULT_BYTE_MODE_ECODING, - ?ErrorCorrectionLevel $ecLevel = null - ) : void { - file_put_contents($filename, $this->writeString($content, $encoding, $ecLevel)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php deleted file mode 100644 index add798b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitArrayTest.php +++ /dev/null @@ -1,222 +0,0 @@ -assertFalse($array->get($i)); - $array->set($i); - $this->assertTrue($array->get($i)); - } - } - - public function testGetNextSet1() : void - { - $array = new BitArray(32); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 32, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i)); - } - } - - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 33, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 33, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet2() : void - { - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $i <= 31 ? 31 : 33, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $i <= 31 ? 31 : 33, $array->getNextSet($i)); - } - } - - $array = new BitArray(33); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, 32, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, 32, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet3() : void - { - $array = new BitArray(63); - $array->set(31); - $array->set(32); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($i <= 31) { - $expected = 31; - } elseif ($i <= 32) { - $expected = 32; - } else { - $expected = 63; - } - - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $expected, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet4() : void - { - $array = new BitArray(63); - $array->set(33); - $array->set(40); - - for ($i = 0; $i < $array->getSize(); ++$i) { - if ($i <= 33) { - $expected = 33; - } elseif ($i <= 40) { - $expected = 40; - } else { - $expected = 63; - } - - if ($this->getPhpUnitMajorVersion() === 7) { - $this->assertEquals($i, $expected, '', $array->getNextSet($i)); - } else { - $this->assertEqualsWithDelta($i, $expected, $array->getNextSet($i)); - } - } - } - - public function testGetNextSet5() : void - { - mt_srand(0xdeadbeef, MT_RAND_PHP); - - for ($i = 0; $i < 10; ++$i) { - $array = new BitArray(mt_rand(1, 100)); - $numSet = mt_rand(0, 19); - - for ($j = 0; $j < $numSet; ++$j) { - $array->set(mt_rand(0, $array->getSize() - 1)); - } - - $numQueries = mt_rand(0, 19); - - for ($j = 0; $j < $numQueries; ++$j) { - $query = mt_rand(0, $array->getSize() - 1); - $expected = $query; - - while ($expected < $array->getSize() && ! $array->get($expected)) { - ++$expected; - } - - $actual = $array->getNextSet($query); - - if ($actual !== $expected) { - $array->getNextSet($query); - } - - $this->assertEquals($expected, $actual); - } - } - } - - public function testSetBulk() : void - { - $array = new BitArray(64); - $array->setBulk(32, 0xFFFF0000); - - for ($i = 0; $i < 48; ++$i) { - $this->assertFalse($array->get($i)); - } - - for ($i = 48; $i < 64; ++$i) { - $this->assertTrue($array->get($i)); - } - } - - public function testClear() : void - { - $array = new BitArray(32); - - for ($i = 0; $i < 32; ++$i) { - $array->set($i); - } - - $array->clear(); - - for ($i = 0; $i < 32; ++$i) { - $this->assertFalse($array->get($i)); - } - } - - public function testGetArray() : void - { - $array = new BitArray(64); - $array->set(0); - $array->set(63); - - $ints = $array->getBitArray(); - - $this->assertSame(1, $ints[0]); - $this->assertSame(0x80000000, $ints[1]); - } - - public function testIsRange() : void - { - $array = new BitArray(64); - $this->assertTrue($array->isRange(0, 64, false)); - $this->assertFalse($array->isRange(0, 64, true)); - - $array->set(32); - $this->assertTrue($array->isRange(32, 33, true)); - - $array->set(31); - $this->assertTrue($array->isRange(31, 33, true)); - - $array->set(34); - $this->assertFalse($array->isRange(31, 35, true)); - - for ($i = 0; $i < 31; ++$i) { - $array->set($i); - } - - $this->assertTrue($array->isRange(0, 33, true)); - - for ($i = 33; $i < 64; ++$i) { - $array->set($i); - } - - $this->assertTrue($array->isRange(0, 64, true)); - $this->assertFalse($array->isRange(0, 64, false)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php deleted file mode 100644 index 8ad86d4..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitMatrixTest.php +++ /dev/null @@ -1,115 +0,0 @@ -assertEquals(33, $matrix->getHeight()); - - for ($y = 0; $y < 33; ++$y) { - for ($x = 0; $x < 33; ++$x) { - if ($y * $x % 3 === 0) { - $matrix->set($x, $y); - } - } - } - - for ($y = 0; $y < 33; $y++) { - for ($x = 0; $x < 33; ++$x) { - $this->assertSame(0 === $x * $y % 3, $matrix->get($x, $y)); - } - } - } - - public function testSetRegion() : void - { - $matrix = new BitMatrix(5); - $matrix->setRegion(1, 1, 3, 3); - - for ($y = 0; $y < 5; ++$y) { - for ($x = 0; $x < 5; ++$x) { - $this->assertSame($y >= 1 && $y <= 3 && $x >= 1 && $x <= 3, $matrix->get($x, $y)); - } - } - } - - public function testRectangularMatrix() : void - { - $matrix = new BitMatrix(75, 20); - $this->assertSame(75, $matrix->getWidth()); - $this->assertSame(20, $matrix->getHeight()); - - $matrix->set(10, 0); - $matrix->set(11, 1); - $matrix->set(50, 2); - $matrix->set(51, 3); - $matrix->flip(74, 4); - $matrix->flip(0, 5); - - $this->assertTrue($matrix->get(10, 0)); - $this->assertTrue($matrix->get(11, 1)); - $this->assertTrue($matrix->get(50, 2)); - $this->assertTrue($matrix->get(51, 3)); - $this->assertTrue($matrix->get(74, 4)); - $this->assertTrue($matrix->get(0, 5)); - - $matrix->flip(50, 2); - $matrix->flip(51, 3); - - $this->assertFalse($matrix->get(50, 2)); - $this->assertFalse($matrix->get(51, 3)); - } - - public function testRectangularSetRegion() : void - { - $matrix = new BitMatrix(320, 240); - $this->assertSame(320, $matrix->getWidth()); - $this->assertSame(240, $matrix->getHeight()); - - $matrix->setRegion(105, 22, 80, 12); - - for ($y = 0; $y < 240; ++$y) { - for ($x = 0; $x < 320; ++$x) { - $this->assertEquals($y >= 22 && $y < 34 && $x >= 105 && $x < 185, $matrix->get($x, $y)); - } - } - } - - public function testGetRow() : void - { - $matrix = new BitMatrix(102, 5); - - for ($x = 0; $x < 102; ++$x) { - if (0 === ($x & 3)) { - $matrix->set($x, 2); - } - } - - $array1 = $matrix->getRow(2, null); - $this->assertSame(102, $array1->getSize()); - - $array2 = new BitArray(60); - $array2 = $matrix->getRow(2, $array2); - $this->assertSame(102, $array2->getSize()); - - $array3 = new BitArray(200); - $array3 = $matrix->getRow(2, $array3); - $this->assertSame(200, $array3->getSize()); - - for ($x = 0; $x < 102; ++$x) { - $on = (0 === ($x & 3)); - - $this->assertSame($on, $array1->get($x)); - $this->assertSame($on, $array2->get($x)); - $this->assertSame($on, $array3->get($x)); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php deleted file mode 100644 index 2904d31..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/BitUtilsTest.php +++ /dev/null @@ -1,25 +0,0 @@ -assertSame(1, BitUtils::unsignedRightShift(1, 0)); - $this->assertSame(1, BitUtils::unsignedRightShift(10, 3)); - $this->assertSame(536870910, BitUtils::unsignedRightShift(-10, 3)); - } - - public function testNumberOfTrailingZeros() : void - { - $this->assertSame(32, BitUtils::numberOfTrailingZeros(0)); - $this->assertSame(1, BitUtils::numberOfTrailingZeros(10)); - $this->assertSame(0, BitUtils::numberOfTrailingZeros(15)); - $this->assertSame(2, BitUtils::numberOfTrailingZeros(20)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php deleted file mode 100644 index 369b5d9..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ErrorCorrectionLevelTest.php +++ /dev/null @@ -1,25 +0,0 @@ -assertSame(0x0, ErrorCorrectionLevel::M()->getBits()); - $this->assertSame(0x1, ErrorCorrectionLevel::L()->getBits()); - $this->assertSame(0x2, ErrorCorrectionLevel::H()->getBits()); - $this->assertSame(0x3, ErrorCorrectionLevel::Q()->getBits()); - } - - public function testInvalidErrorCorrectionLevelThrowsException() : void - { - $this->expectException(OutOfBoundsException::class); - ErrorCorrectionLevel::forBits(4); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php deleted file mode 100644 index 39534a2..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/FormatInformationTest.php +++ /dev/null @@ -1,94 +0,0 @@ -assertSame(0, FormatInformation::numBitsDiffering(1, 1)); - $this->assertSame(1, FormatInformation::numBitsDiffering(0, 2)); - $this->assertSame(2, FormatInformation::numBitsDiffering(1, 2)); - $this->assertEquals(32, FormatInformation::numBitsDiffering(-1, 0)); - } - - public function testDecode() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertNotNull($expected); - $this->assertSame(7, $expected->getDataMask()); - $this->assertSame(ErrorCorrectionLevel::Q(), $expected->getErrorCorrectionLevel()); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::UNMAKSED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ) - ); - } - - public function testDecodeWithBitDifference() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x1, - self::MASKED_TEST_FORMAT_INFO ^ 0x1 - ) - ); - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x3, - self::MASKED_TEST_FORMAT_INFO ^ 0x3 - ) - ); - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x7, - self::MASKED_TEST_FORMAT_INFO ^ 0x7 - ) - ); - $this->assertNull( - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0xf, - self::MASKED_TEST_FORMAT_INFO ^ 0xf - ) - ); - } - - public function testDecodeWithMisRead() : void - { - $expected = FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO, - self::MASKED_TEST_FORMAT_INFO - ); - - $this->assertEquals( - $expected, - FormatInformation::decodeFormatInformation( - self::MASKED_TEST_FORMAT_INFO ^ 0x3, - self::MASKED_TEST_FORMAT_INFO ^ 0xf - ) - ); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php deleted file mode 100644 index 51fcb3e..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ModeTest.php +++ /dev/null @@ -1,19 +0,0 @@ -assertSame(0x0, Mode::TERMINATOR()->getBits()); - $this->assertSame(0x1, Mode::NUMERIC()->getBits()); - $this->assertSame(0x2, Mode::ALPHANUMERIC()->getBits()); - $this->assertSame(0x4, Mode::BYTE()->getBits()); - $this->assertSame(0x8, Mode::KANJI()->getBits()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php deleted file mode 100644 index 47975b5..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/ReedSolomonCodecTest.php +++ /dev/null @@ -1,96 +0,0 @@ -encode($block, $parity); - - // Copy parity into test blocks - for ($i = 0; $i < $numRoots; ++$i) { - $block[$i + $dataSize] = $parity[$i]; - $tBlock[$i + $dataSize] = $parity[$i]; - } - - // Seed with errors - for ($i = 0; $i < $errors; ++$i) { - $errorValue = mt_rand(1, $blockSize); - - do { - $errorLocation = mt_rand(0, $blockSize); - } while (0 !== $errorLocations[$errorLocation]); - - $errorLocations[$errorLocation] = 1; - - if (mt_rand(0, 1)) { - $erasures[] = $errorLocation; - } - - $tBlock[$errorLocation] ^= $errorValue; - } - - $erasures = SplFixedArray::fromArray($erasures, false); - - // Decode the errored block - $foundErrors = $codec->decode($tBlock, $erasures); - - if ($errors > 0 && null === $foundErrors) { - $this->assertSame($block, $tBlock, 'Decoder failed to correct errors'); - } - - $this->assertSame($errors, $foundErrors, 'Found errors do not equal expected errors'); - - for ($i = 0; $i < $foundErrors; ++$i) { - if (0 === $errorLocations[$erasures[$i]]) { - $this->fail(sprintf('Decoder indicates error in location %d without error', $erasures[$i])); - } - } - - $this->assertEquals($block, $tBlock, 'Decoder did not correct errors'); - } - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php b/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php deleted file mode 100644 index f6f038b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Common/VersionTest.php +++ /dev/null @@ -1,78 +0,0 @@ -assertNotNull($version); - $this->assertEquals($versionNumber, $version->getVersionNumber()); - $this->assertNotNull($version->getAlignmentPatternCenters()); - - if ($versionNumber > 1) { - $this->assertTrue(count($version->getAlignmentPatternCenters()) > 0); - } - - $this->assertEquals($dimension, $version->getDimensionForVersion()); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::H())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::L())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::M())); - $this->assertNotNull($version->getEcBlocksForLevel(ErrorCorrectionLevel::Q())); - $this->assertNotNull($version->buildFunctionPattern()); - } - - /** - * @dataProvider versions - */ - public function testGetProvisionalVersionForDimension(int $versionNumber, int $dimension) : void - { - $this->assertSame( - $versionNumber, - Version::getProvisionalVersionForDimension($dimension)->getVersionNumber() - ); - } - - /** - * @dataProvider decodeInformation - */ - public function testDecodeVersionInformation(int $expectedVersion, int $mask) : void - { - $version = Version::decodeVersionInformation($mask); - $this->assertNotNull($version); - $this->assertSame($expectedVersion, $version->getVersionNumber()); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php deleted file mode 100644 index 9baa66b..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/EncoderTest.php +++ /dev/null @@ -1,487 +0,0 @@ -getMethods(ReflectionMethod::IS_STATIC) as $method) { - $method->setAccessible(true); - $this->methods[$method->getName()] = $method; - } - } - - public function testGetAlphanumericCode() : void - { - // The first ten code points are numbers. - for ($i = 0; $i < 10; ++$i) { - $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('0') + $i)); - } - - // The next 26 code points are capital alphabet letters. - for ($i = 10; $i < 36; ++$i) { - // The first ten code points are numbers - $this->assertSame($i, $this->methods['getAlphanumericCode']->invoke(null, ord('A') + $i - 10)); - } - - // Others are symbol letters. - $this->assertSame(36, $this->methods['getAlphanumericCode']->invoke(null, ord(' '))); - $this->assertSame(37, $this->methods['getAlphanumericCode']->invoke(null, ord('$'))); - $this->assertSame(38, $this->methods['getAlphanumericCode']->invoke(null, ord('%'))); - $this->assertSame(39, $this->methods['getAlphanumericCode']->invoke(null, ord('*'))); - $this->assertSame(40, $this->methods['getAlphanumericCode']->invoke(null, ord('+'))); - $this->assertSame(41, $this->methods['getAlphanumericCode']->invoke(null, ord('-'))); - $this->assertSame(42, $this->methods['getAlphanumericCode']->invoke(null, ord('.'))); - $this->assertSame(43, $this->methods['getAlphanumericCode']->invoke(null, ord('/'))); - $this->assertSame(44, $this->methods['getAlphanumericCode']->invoke(null, ord(':'))); - - // Should return -1 for other letters. - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('a'))); - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord('#'))); - $this->assertSame(-1, $this->methods['getAlphanumericCode']->invoke(null, ord("\0"))); - } - - public function testChooseMode() : void - { - // Numeric mode - $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0')); - $this->assertSame(Mode::NUMERIC(), $this->methods['chooseMode']->invoke(null, '0123456789')); - - // Alphanumeric mode - $this->assertSame(Mode::ALPHANUMERIC(), $this->methods['chooseMode']->invoke(null, 'A')); - $this->assertSame( - Mode::ALPHANUMERIC(), - $this->methods['chooseMode']->invoke(null, '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ $%*+-./:') - ); - - // 8-bit byte mode - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, 'a')); - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, '#')); - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, '')); - - // AIUE in Hiragana in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\x8\xa\x8\xa\x8\xa\x8\xa6")); - - // Nihon in Kanji in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\x9\xf\x9\x7b")); - - // Sou-Utso-Byou in Kanji in SHIFT-JIS - $this->assertSame(Mode::BYTE(), $this->methods['chooseMode']->invoke(null, "\xe\x4\x9\x5\x9\x61")); - } - - public function testEncode() : void - { - $qrCode = Encoder::encode('ABCDEF', ErrorCorrectionLevel::H()); - $expected = "<<\n" - . " mode: ALPHANUMERIC\n" - . " ecLevel: H\n" - . " version: 1\n" - . " maskPattern: 0\n" - . " matrix:\n" - . " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0\n" - . " 0 0 1 0 1 1 1 0 1 1 0 0 1 1 0 0 0 1 0 0 1\n" - . " 1 0 1 1 1 0 0 1 0 0 0 1 0 1 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 0 1 0 0 0 1 0 1 0 1 0 1 1 0\n" - . " 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 0\n" - . " 0 0 1 1 0 1 1 1 1 0 0 0 1 0 1 0 1 1 1 1 0\n" - . " 0 0 0 0 0 0 0 0 1 0 0 1 1 1 0 1 0 1 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 1 0 1 0 1 1 0 0 0 0 1\n" - . " 1 0 0 0 0 0 1 0 1 1 1 1 0 1 0 1 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 0 1 1 0 1 0 1 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 1 1 1 1 0 1 0 1 0\n" - . " 1 0 1 1 1 0 1 0 1 0 0 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 1 0 1 1 0 1 0 0 0 1 1\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 1 0 1 0 1\n" - . ">>\n"; - - $this->assertSame($expected, (string) $qrCode); - } - - public function testSimpleUtf8Eci() : void - { - $qrCode = Encoder::encode('hello', ErrorCorrectionLevel::H(), 'utf-8'); - $expected = "<<\n" - . " mode: BYTE\n" - . " ecLevel: H\n" - . " version: 1\n" - . " maskPattern: 3\n" - . " matrix:\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 1 0 1 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 1 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 1 1 1 0 0 0 1 1 0 1 0 0 0 0\n" - . " 0 0 1 1 1 0 0 0 0 0 1 1 0 0 0 1 0 1 1 1 0\n" - . " 0 1 0 1 0 1 1 1 0 1 0 1 0 0 0 0 0 1 1 1 1\n" - . " 1 1 0 0 1 0 0 1 1 0 0 1 1 1 1 0 1 0 1 1 0\n" - . " 0 0 0 0 1 0 1 1 1 1 0 0 0 0 0 1 0 0 1 0 0\n" - . " 0 0 0 0 0 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 1 1 0 1 0 1 1 0 0 1 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 1 0 0 1 1 1 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 0 0 0 1 1 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 1 1 1 0 1 0 0 0 1 1 0 0 0\n" - . " 1 0 1 1 1 0 1 0 1 1 0 0 0 1 0 0 1 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 0\n" - . " 1 1 1 1 1 1 1 0 0 1 0 1 1 1 0 1 1 0 0 0 0\n" - . ">>\n"; - - $this->assertSame($expected, (string) $qrCode); - } - - public function testAppendModeInfo() : void - { - $bits = new BitArray(); - $this->methods['appendModeInfo']->invoke(null, Mode::NUMERIC(), $bits); - $this->assertSame(' ...X', (string) $bits); - } - - public function testAppendLengthInfo() : void - { - // 1 letter (1/1), 10 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 1, - Version::getVersionForNumber(1), - Mode::NUMERIC(), - $bits - ); - $this->assertSame(' ........ .X', (string) $bits); - - // 2 letters (2/1), 11 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 2, - Version::getVersionForNumber(10), - Mode::ALPHANUMERIC(), - $bits - ); - $this->assertSame(' ........ .X.', (string) $bits); - - // 255 letters (255/1), 16 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 255, - Version::getVersionForNumber(27), - Mode::BYTE(), - $bits - ); - $this->assertSame(' ........ XXXXXXXX', (string) $bits); - - // 512 letters (1024/2), 12 bits. - $bits = new BitArray(); - $this->methods['appendLengthInfo']->invoke( - null, - 512, - Version::getVersionForNumber(40), - Mode::KANJI(), - $bits - ); - $this->assertSame(' ..X..... ....', (string) $bits); - } - - public function testAppendBytes() : void - { - // Should use appendNumericBytes. - // 1 = 01 = 0001 in 4 bits. - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - '1', - Mode::NUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' ...X', (string) $bits); - - // Should use appendAlphaNumericBytes. - // A = 10 = 0xa = 001010 in 6 bits. - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - 'A', - Mode::ALPHANUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' ..X.X.', (string) $bits); - - // Should use append8BitBytes. - // 0x61, 0x62, 0x63 - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - 'abc', - Mode::BYTE(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits); - - // Should use appendKanjiBytes. - // 0x93, 0x5f - $bits = new BitArray(); - $this->methods['appendBytes']->invoke( - null, - "\x93\x5f", - Mode::KANJI(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - $this->assertSame(' .XX.XX.. XXXXX', (string) $bits); - - // Lower letters such as 'a' cannot be encoded in alphanumeric mode. - $this->expectException(WriterException::class); - $this->methods['appendBytes']->invoke( - null, - 'a', - Mode::ALPHANUMERIC(), - $bits, - Encoder::DEFAULT_BYTE_MODE_ECODING - ); - } - - public function testTerminateBits() : void - { - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 0, $bits); - $this->assertSame('', (string) $bits); - - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 3); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 5); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 8); - $this->methods['terminateBits']->invoke(null, 1, $bits); - $this->assertSame(' ........', (string) $bits); - - $bits = new BitArray(); - $this->methods['terminateBits']->invoke(null, 2, $bits); - $this->assertSame(' ........ XXX.XX..', (string) $bits); - - $bits = new BitArray(); - $bits->appendBits(0, 1); - $this->methods['terminateBits']->invoke(null, 3, $bits); - $this->assertSame(' ........ XXX.XX.. ...X...X', (string) $bits); - } - - public function testGetNumDataBytesAndNumEcBytesForBlockId() : void - { - // Version 1-H. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 26, 9, 1, 0); - $this->assertSame(9, $numDataBytes); - $this->assertSame(17, $numEcBytes); - - // Version 3-H. 2 blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 70, 26, 2, 0); - $this->assertSame(13, $numDataBytes); - $this->assertSame(22, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 70, 26, 2, 1); - $this->assertSame(13, $numDataBytes); - $this->assertSame(22, $numEcBytes); - - // Version 7-H. (4 + 1) blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 196, 66, 5, 0); - $this->assertSame(13, $numDataBytes); - $this->assertSame(26, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 196, 66, 5, 4); - $this->assertSame(14, $numDataBytes); - $this->assertSame(26, $numEcBytes); - - // Version 40-H. (20 + 61) blocks. - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 0); - $this->assertSame(15, $numDataBytes); - $this->assertSame(30, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 20); - $this->assertSame(16, $numDataBytes); - $this->assertSame(30, $numEcBytes); - list($numDataBytes, $numEcBytes) = $this->methods['getNumDataBytesAndNumEcBytesForBlockId'] - ->invoke(null, 3706, 1276, 81, 80); - $this->assertSame(16, $numDataBytes); - $this->assertSame(30, $numEcBytes); - } - - public function testInterleaveWithEcBytes() : void - { - $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false); - $in = new BitArray(); - - foreach ($dataBytes as $dataByte) { - $in->appendBits($dataByte, 8); - } - - $outBits = $this->methods['interleaveWithEcBytes']->invoke(null, $in, 26, 9, 1); - $expected = SplFixedArray::fromArray([ - // Data bytes. - 32, 65, 205, 69, 41, 220, 46, 128, 236, - // Error correction bytes. - 42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61, - ], false); - - $out = $outBits->toBytes(0, count($expected)); - - $this->assertEquals($expected, $out); - } - - public function testAppendNumericBytes() : void - { - // 1 = 01 = 0001 in 4 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '1', $bits); - $this->assertSame(' ...X', (string) $bits); - - // 12 = 0xc = 0001100 in 7 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '12', $bits); - $this->assertSame(' ...XX..', (string) $bits); - - // 123 = 0x7b = 0001111011 in 10 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '123', $bits); - $this->assertSame(' ...XXXX. XX', (string) $bits); - - // 1234 = "123" + "4" = 0001111011 + 0100 in 14 bits. - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '1234', $bits); - $this->assertSame(' ...XXXX. XX.X..', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['appendNumericBytes']->invoke(null, '', $bits); - $this->assertSame('', (string) $bits); - } - - public function testAppendAlphanumericBytes() : void - { - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'A', $bits); - $this->assertSame(' ..X.X.', (string) $bits); - - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'AB', $bits); - $this->assertSame(' ..XXX..X X.X', (string) $bits); - - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'ABC', $bits); - $this->assertSame(' ..XXX..X X.X..XX. .', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, '', $bits); - $this->assertSame('', (string) $bits); - - // Invalid data - $this->expectException(WriterException::class); - $bits = new BitArray(); - $this->methods['appendAlphanumericBytes']->invoke(null, 'abc', $bits); - } - - public function testAppend8BitBytes() : void - { - // 0x61, 0x62, 0x63 - $bits = new BitArray(); - $this->methods['append8BitBytes']->invoke(null, 'abc', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING); - $this->assertSame(' .XX....X .XX...X. .XX...XX', (string) $bits); - - // Empty - $bits = new BitArray(); - $this->methods['append8BitBytes']->invoke(null, '', $bits, Encoder::DEFAULT_BYTE_MODE_ECODING); - $this->assertSame('', (string) $bits); - } - - public function testAppendKanjiBytes() : void - { - // Numbers are from page 21 of JISX0510:2004 - $bits = new BitArray(); - $this->methods['appendKanjiBytes']->invoke(null, "\x93\x5f", $bits); - $this->assertSame(' .XX.XX.. XXXXX', (string) $bits); - - $this->methods['appendKanjiBytes']->invoke(null, "\xe4\xaa", $bits); - $this->assertSame(' .XX.XX.. XXXXXXX. X.X.X.X. X.', (string) $bits); - } - - public function testGenerateEcBytes() : void - { - // Numbers are from http://www.swetake.com/qr/qr3.html and - // http://www.swetake.com/qr/qr9.html - $dataBytes = SplFixedArray::fromArray([32, 65, 205, 69, 41, 220, 46, 128, 236], false); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17); - $expected = SplFixedArray::fromArray( - [42, 159, 74, 221, 244, 169, 239, 150, 138, 70, 237, 85, 224, 96, 74, 219, 61], - false - ); - $this->assertEquals($expected, $ecBytes); - - $dataBytes = SplFixedArray::fromArray( - [67, 70, 22, 38, 54, 70, 86, 102, 118, 134, 150, 166, 182, 198, 214], - false - ); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 18); - $expected = SplFixedArray::fromArray( - [175, 80, 155, 64, 178, 45, 214, 233, 65, 209, 12, 155, 117, 31, 140, 214, 27, 187], - false - ); - $this->assertEquals($expected, $ecBytes); - - // High-order zero coefficient case. - $dataBytes = SplFixedArray::fromArray([32, 49, 205, 69, 42, 20, 0, 236, 17], false); - $ecBytes = $this->methods['generateEcBytes']->invoke(null, $dataBytes, 17); - $expected = SplFixedArray::fromArray( - [0, 3, 130, 179, 194, 0, 55, 211, 110, 79, 98, 72, 170, 96, 211, 137, 213], - false - ); - $this->assertEquals($expected, $ecBytes); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php deleted file mode 100644 index 46670fc..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/MaskUtilTest.php +++ /dev/null @@ -1,251 +0,0 @@ -assertSame( - 1 === $expected[$y][$x], - MaskUtil::getDataMaskBit($maskPattern, $x, $y) - ); - } - } - } - - public function testApplyMaskPenaltyRule1() : void - { - $matrix = new ByteMatrix(4, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule1($matrix)); - - // Horizontal - $matrix = new ByteMatrix(6, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - $matrix->set(4, 0, 0); - $matrix->set(5, 0, 1); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix)); - $matrix->set(5, 0, 0); - $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix)); - - // Vertical - $matrix = new ByteMatrix(1, 6); - $matrix->set(0, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(0, 3, 0); - $matrix->set(0, 4, 0); - $matrix->set(0, 5, 1); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule1($matrix)); - $matrix->set(0, 5, 0); - $this->assertSame(4, MaskUtil::applyMaskPenaltyRule1($matrix)); - } - - public function testApplyMaskPenaltyRule2() : void - { - $matrix = new ByteMatrix(1, 1); - $matrix->set(0, 0, 0); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(2, 2); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 1); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(2, 2); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 0); - $this->assertSame(3, MaskUtil::applyMaskPenaltyRule2($matrix)); - - $matrix = new ByteMatrix(3, 3); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(1, 1, 0); - $matrix->set(2, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(1, 2, 0); - $matrix->set(2, 2, 0); - $this->assertSame(3 * 4, MaskUtil::applyMaskPenaltyRule2($matrix)); - } - - public function testApplyMaskPenalty3() : void - { - // Horizontal 00001011101 - $matrix = new ByteMatrix(11, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 0); - $matrix->set(3, 0, 0); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $matrix->set(6, 0, 1); - $matrix->set(7, 0, 1); - $matrix->set(8, 0, 1); - $matrix->set(9, 0, 0); - $matrix->set(10, 0, 1); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Horizontal 10111010000 - $matrix = new ByteMatrix(11, 1); - $matrix->set(0, 0, 1); - $matrix->set(1, 0, 0); - $matrix->set(2, 0, 1); - $matrix->set(3, 0, 1); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $matrix->set(6, 0, 1); - $matrix->set(7, 0, 0); - $matrix->set(8, 0, 0); - $matrix->set(9, 0, 0); - $matrix->set(10, 0, 0); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Vertical 00001011101 - $matrix = new ByteMatrix(1, 11); - $matrix->set(0, 0, 0); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 0); - $matrix->set(0, 3, 0); - $matrix->set(0, 4, 1); - $matrix->set(0, 5, 0); - $matrix->set(0, 6, 1); - $matrix->set(0, 7, 1); - $matrix->set(0, 8, 1); - $matrix->set(0, 9, 0); - $matrix->set(0, 10, 1); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - - // Vertical 10111010000 - $matrix = new ByteMatrix(1, 11); - $matrix->set(0, 0, 1); - $matrix->set(0, 1, 0); - $matrix->set(0, 2, 1); - $matrix->set(0, 3, 1); - $matrix->set(0, 4, 1); - $matrix->set(0, 5, 0); - $matrix->set(0, 6, 1); - $matrix->set(0, 7, 0); - $matrix->set(0, 8, 0); - $matrix->set(0, 9, 0); - $matrix->set(0, 10, 0); - $this->assertSame(40, MaskUtil::applyMaskPenaltyRule3($matrix)); - } - - public function testApplyMaskPenaltyRule4() : void - { - // Dark cell ratio = 0% - $matrix = new ByteMatrix(1, 1); - $matrix->set(0, 0, 0); - $this->assertSame(100, MaskUtil::applyMaskPenaltyRule4($matrix)); - - // Dark cell ratio = 5% - $matrix = new ByteMatrix(2, 1); - $matrix->set(0, 0, 0); - $matrix->set(0, 0, 1); - $this->assertSame(0, MaskUtil::applyMaskPenaltyRule4($matrix)); - - // Dark cell ratio = 66.67% - $matrix = new ByteMatrix(6, 1); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 1); - $matrix->set(2, 0, 1); - $matrix->set(3, 0, 1); - $matrix->set(4, 0, 1); - $matrix->set(5, 0, 0); - $this->assertSame(30, MaskUtil::applyMaskPenaltyRule4($matrix)); - } -} diff --git a/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php b/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php deleted file mode 100644 index 106ceaa..0000000 --- a/conlite/external/bacon/bacon-qr-code/test/Encoder/MatrixUtilTest.php +++ /dev/null @@ -1,335 +0,0 @@ -getMethods(ReflectionMethod::IS_STATIC) as $method) { - $method->setAccessible(true); - $this->methods[$method->getName()] = $method; - } - } - - public function testToString() : void - { - $matrix = new ByteMatrix(3, 3); - $matrix->set(0, 0, 0); - $matrix->set(1, 0, 1); - $matrix->set(2, 0, 0); - $matrix->set(0, 1, 1); - $matrix->set(1, 1, 0); - $matrix->set(2, 1, 1); - $matrix->set(0, 2, -1); - $matrix->set(1, 2, -1); - $matrix->set(2, 2, -1); - - $expected = " 0 1 0\n 1 0 1\n \n"; - $this->assertSame($expected, (string) $matrix); - } - - public function testClearMatrix() : void - { - $matrix = new ByteMatrix(2, 2); - MatrixUtil::clearMatrix($matrix); - - $this->assertSame(-1, $matrix->get(0, 0)); - $this->assertSame(-1, $matrix->get(1, 0)); - $this->assertSame(-1, $matrix->get(0, 1)); - $this->assertSame(-1, $matrix->get(1, 1)); - } - - public function testEmbedBasicPatterns1() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(1), - $matrix - ); - $expected = " 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 0 0 0 0 0 0 0 1 \n" - . " 1 1 1 1 1 1 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 1 1 1 1 1 1 0 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedBasicPatterns2() : void - { - $matrix = new ByteMatrix(25, 25); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(2), - $matrix - ); - $expected = " 1 1 1 1 1 1 1 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 \n" - . " 0 \n" - . " 1 1 1 1 1 1 \n" - . " 0 0 0 0 0 0 0 0 1 1 0 0 0 1 \n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 \n" - . " 1 0 0 0 0 0 1 0 1 0 0 0 1 \n" - . " 1 0 1 1 1 0 1 0 1 1 1 1 1 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 1 1 1 0 1 0 \n" - . " 1 0 0 0 0 0 1 0 \n" - . " 1 1 1 1 1 1 1 0 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedTypeInfo() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedTypeInfo']->invoke( - null, - ErrorCorrectionLevel::M(), - 5, - $matrix - ); - $expected = " 0 \n" - . " 1 \n" - . " 1 \n" - . " 1 \n" - . " 0 \n" - . " 0 \n" - . " \n" - . " 1 \n" - . " 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0\n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 0 \n" - . " 1 \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedVersionInfo() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['maybeEmbedVersionInfo']->invoke( - null, - Version::getVersionForNumber(7), - $matrix - ); - $expected = " 0 0 1 \n" - . " 0 1 0 \n" - . " 0 1 0 \n" - . " 0 1 1 \n" - . " 1 1 1 \n" - . " 0 0 0 \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " 0 0 0 0 1 0 \n" - . " 0 1 1 1 1 0 \n" - . " 1 0 0 1 1 0 \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n" - . " \n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testEmbedDataBits() : void - { - $matrix = new ByteMatrix(21, 21); - MatrixUtil::clearMatrix($matrix); - $this->methods['embedBasicPatterns']->invoke( - null, - Version::getVersionForNumber(1), - $matrix - ); - - $bits = new BitArray(); - $this->methods['embedDataBits']->invoke( - null, - $bits, - -1, - $matrix - ); - - $expected = " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0\n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testBuildMatrix() : void - { - $bytes = [ - 32, 65, 205, 69, 41, 220, 46, 128, 236, 42, 159, 74, 221, 244, 169, - 239, 150, 138, 70, 237, 85, 224, 96, 74, 219 , 61 - ]; - $bits = new BitArray(); - - foreach ($bytes as $byte) { - $bits->appendBits($byte, 8); - } - - $matrix = new ByteMatrix(21, 21); - MatrixUtil::buildMatrix( - $bits, - ErrorCorrectionLevel::H(), - Version::getVersionForNumber(1), - 3, - $matrix - ); - - $expected = " 1 1 1 1 1 1 1 0 0 1 1 0 0 0 1 1 1 1 1 1 1\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 1\n" - . " 1 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 0 1 1 0 0 0 1 0 1 1 1 0 1\n" - . " 1 0 1 1 1 0 1 0 1 1 0 0 1 0 1 0 1 1 1 0 1\n" - . " 1 0 0 0 0 0 1 0 0 0 1 1 1 0 1 0 0 0 0 0 1\n" - . " 1 1 1 1 1 1 1 0 1 0 1 0 1 0 1 1 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 0 1 1 0 0 0 0 0 0 0 0\n" - . " 0 0 1 1 0 0 1 1 1 0 0 1 1 1 1 0 1 0 0 0 0\n" - . " 1 0 1 0 1 0 0 0 0 0 1 1 1 0 0 1 0 1 1 1 0\n" - . " 1 1 1 1 0 1 1 0 1 0 1 1 1 0 0 1 1 1 0 1 0\n" - . " 1 0 1 0 1 1 0 1 1 1 0 0 1 1 1 0 0 1 0 1 0\n" - . " 0 0 1 0 0 1 1 1 0 0 0 0 0 0 1 0 1 1 1 1 1\n" - . " 0 0 0 0 0 0 0 0 1 1 0 1 0 0 0 0 0 1 0 1 1\n" - . " 1 1 1 1 1 1 1 0 1 1 1 1 0 0 0 0 1 0 1 1 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 1 0 1 1 1 0 0 0 0 0\n" - . " 1 0 1 1 1 0 1 0 0 1 0 0 1 1 0 0 1 0 0 1 1\n" - . " 1 0 1 1 1 0 1 0 1 1 0 1 0 0 0 0 0 1 1 1 0\n" - . " 1 0 1 1 1 0 1 0 1 1 1 1 0 0 0 0 1 1 1 0 0\n" - . " 1 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0\n" - . " 1 1 1 1 1 1 1 0 0 0 1 1 1 1 1 0 1 0 0 1 0\n"; - - $this->assertSame($expected, (string) $matrix); - } - - public function testFindMsbSet() : void - { - $this->assertSame(0, $this->methods['findMsbSet']->invoke(null, 0)); - $this->assertSame(1, $this->methods['findMsbSet']->invoke(null, 1)); - $this->assertSame(8, $this->methods['findMsbSet']->invoke(null, 0x80)); - $this->assertSame(32, $this->methods['findMsbSet']->invoke(null, 0x80000000)); - } - - public function testCalculateBchCode() : void - { - // Encoding of type information. - // From Appendix C in JISX0510:2004 (p 65) - $this->assertSame(0xdc, $this->methods['calculateBchCode']->invoke(null, 5, 0x537)); - // From http://www.swetake.com/qr/qr6.html - $this->assertSame(0x1c2, $this->methods['calculateBchCode']->invoke(null, 0x13, 0x537)); - // From http://www.swetake.com/qr/qr11.html - $this->assertSame(0x214, $this->methods['calculateBchCode']->invoke(null, 0x1b, 0x537)); - - // Encoding of version information. - // From Appendix D in JISX0510:2004 (p 68) - $this->assertSame(0xc94, $this->methods['calculateBchCode']->invoke(null, 7, 0x1f25)); - $this->assertSame(0x5bc, $this->methods['calculateBchCode']->invoke(null, 8, 0x1f25)); - $this->assertSame(0xa99, $this->methods['calculateBchCode']->invoke(null, 9, 0x1f25)); - $this->assertSame(0x4d3, $this->methods['calculateBchCode']->invoke(null, 10, 0x1f25)); - $this->assertSame(0x9a6, $this->methods['calculateBchCode']->invoke(null, 20, 0x1f25)); - $this->assertSame(0xd75, $this->methods['calculateBchCode']->invoke(null, 30, 0x1f25)); - $this->assertSame(0xc69, $this->methods['calculateBchCode']->invoke(null, 40, 0x1f25)); - } - - public function testMakeVersionInfoBits() : void - { - // From Appendix D in JISX0510:2004 (p 68) - $bits = new BitArray(); - $this->methods['makeVersionInfoBits']->invoke(null, Version::getVersionForNumber(7), $bits); - $this->assertSame(' ...XXXXX ..X..X.X ..', (string) $bits); - } - - public function testMakeTypeInfoBits() : void - { - // From Appendix D in JISX0510:2004 (p 68) - $bits = new BitArray(); - $this->methods['makeTypeInfoBits']->invoke(null, ErrorCorrectionLevel::M(), 5, $bits); - $this->assertSame(' X......X X..XXX.', (string) $bits); - } -} diff --git a/conlite/external/composer/ClassLoader.php b/conlite/external/composer/ClassLoader.php index 0cd6055..afef3fa 100644 --- a/conlite/external/composer/ClassLoader.php +++ b/conlite/external/composer/ClassLoader.php @@ -149,7 +149,7 @@ class ClassLoader /** * @return string[] Array of classname => path - * @psalm-var array + * @psalm-return array */ public function getClassMap() { diff --git a/conlite/external/composer/InstalledVersions.php b/conlite/external/composer/InstalledVersions.php index d50e0c9..41bc143 100644 --- a/conlite/external/composer/InstalledVersions.php +++ b/conlite/external/composer/InstalledVersions.php @@ -21,6 +21,8 @@ use Composer\Semver\VersionParser; * See also https://getcomposer.org/doc/07-runtime.md#installed-versions * * To require its presence, you can require `composer-runtime-api ^2.0` + * + * @final */ class InstalledVersions { diff --git a/conlite/external/composer/autoload_classmap.php b/conlite/external/composer/autoload_classmap.php index 0d872c1..65cba2c 100644 --- a/conlite/external/composer/autoload_classmap.php +++ b/conlite/external/composer/autoload_classmap.php @@ -2,7 +2,7 @@ // autoload_classmap.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( diff --git a/conlite/external/composer/autoload_namespaces.php b/conlite/external/composer/autoload_namespaces.php index 4a9c20b..f1ae7a0 100644 --- a/conlite/external/composer/autoload_namespaces.php +++ b/conlite/external/composer/autoload_namespaces.php @@ -2,7 +2,7 @@ // autoload_namespaces.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( diff --git a/conlite/external/composer/autoload_psr4.php b/conlite/external/composer/autoload_psr4.php index abe8038..7359147 100644 --- a/conlite/external/composer/autoload_psr4.php +++ b/conlite/external/composer/autoload_psr4.php @@ -2,12 +2,11 @@ // autoload_psr4.php @generated by Composer -$vendorDir = dirname(dirname(__FILE__)); +$vendorDir = dirname(__DIR__); $baseDir = dirname(dirname($vendorDir)); return array( + 'Symfony\\Component\\OptionsResolver\\' => array($vendorDir . '/symfony/options-resolver'), 'Endroid\\QrCode\\' => array($vendorDir . '/endroid/qr-code/src'), - 'DASPRiD\\Enum\\' => array($vendorDir . '/dasprid/enum/src'), 'Conlite\\External\\' => array($vendorDir . ''), - 'BaconQrCode\\' => array($vendorDir . '/bacon/bacon-qr-code/src'), ); diff --git a/conlite/external/composer/autoload_real.php b/conlite/external/composer/autoload_real.php index e8f5631..522aa8a 100644 --- a/conlite/external/composer/autoload_real.php +++ b/conlite/external/composer/autoload_real.php @@ -25,30 +25,11 @@ class ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb require __DIR__ . '/platform_check.php'; spl_autoload_register(array('ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb', 'loadClassLoader'), true, true); - self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__))); + self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(__DIR__)); spl_autoload_unregister(array('ComposerAutoloaderInit4710875e1096bb659e0da9fbf88400bb', 'loadClassLoader')); - $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded()); - if ($useStaticLoader) { - require __DIR__ . '/autoload_static.php'; - - call_user_func(\Composer\Autoload\ComposerStaticInit4710875e1096bb659e0da9fbf88400bb::getInitializer($loader)); - } else { - $map = require __DIR__ . '/autoload_namespaces.php'; - foreach ($map as $namespace => $path) { - $loader->set($namespace, $path); - } - - $map = require __DIR__ . '/autoload_psr4.php'; - foreach ($map as $namespace => $path) { - $loader->setPsr4($namespace, $path); - } - - $classMap = require __DIR__ . '/autoload_classmap.php'; - if ($classMap) { - $loader->addClassMap($classMap); - } - } + require __DIR__ . '/autoload_static.php'; + call_user_func(\Composer\Autoload\ComposerStaticInit4710875e1096bb659e0da9fbf88400bb::getInitializer($loader)); $loader->register(true); diff --git a/conlite/external/composer/autoload_static.php b/conlite/external/composer/autoload_static.php index 873b5d4..01b957d 100644 --- a/conlite/external/composer/autoload_static.php +++ b/conlite/external/composer/autoload_static.php @@ -7,41 +7,33 @@ namespace Composer\Autoload; class ComposerStaticInit4710875e1096bb659e0da9fbf88400bb { public static $prefixLengthsPsr4 = array ( + 'S' => + array ( + 'Symfony\\Component\\OptionsResolver\\' => 34, + ), 'E' => array ( 'Endroid\\QrCode\\' => 15, ), - 'D' => - array ( - 'DASPRiD\\Enum\\' => 13, - ), 'C' => array ( 'Conlite\\External\\' => 17, ), - 'B' => - array ( - 'BaconQrCode\\' => 12, - ), ); public static $prefixDirsPsr4 = array ( + 'Symfony\\Component\\OptionsResolver\\' => + array ( + 0 => __DIR__ . '/..' . '/symfony/options-resolver', + ), 'Endroid\\QrCode\\' => array ( 0 => __DIR__ . '/..' . '/endroid/qr-code/src', ), - 'DASPRiD\\Enum\\' => - array ( - 0 => __DIR__ . '/..' . '/dasprid/enum/src', - ), 'Conlite\\External\\' => array ( 0 => __DIR__ . '/../../..' . '/conlite/external', ), - 'BaconQrCode\\' => - array ( - 0 => __DIR__ . '/..' . '/bacon/bacon-qr-code/src', - ), ); public static $classMap = array ( diff --git a/conlite/external/composer/installed.json b/conlite/external/composer/installed.json index 186557f..0dcc590 100644 --- a/conlite/external/composer/installed.json +++ b/conlite/external/composer/installed.json @@ -1,147 +1,37 @@ { "packages": [ - { - "name": "bacon/bacon-qr-code", - "version": "2.0.4", - "version_normalized": "2.0.4.0", - "source": { - "type": "git", - "url": "https://github.com/Bacon/BaconQrCode.git", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/Bacon/BaconQrCode/zipball/f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "reference": "f73543ac4e1def05f1a70bcd1525c8a157a1ad09", - "shasum": "" - }, - "require": { - "dasprid/enum": "^1.0.3", - "ext-iconv": "*", - "php": "^7.1 || ^8.0" - }, - "require-dev": { - "phly/keep-a-changelog": "^1.4", - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "suggest": { - "ext-imagick": "to generate QR code images" - }, - "time": "2021-06-18T13:26:35+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "BaconQrCode\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "BaconQrCode is a QR code generator for PHP.", - "homepage": "https://github.com/Bacon/BaconQrCode", - "support": { - "issues": "https://github.com/Bacon/BaconQrCode/issues", - "source": "https://github.com/Bacon/BaconQrCode/tree/2.0.4" - }, - "install-path": "../bacon/bacon-qr-code" - }, - { - "name": "dasprid/enum", - "version": "1.0.3", - "version_normalized": "1.0.3.0", - "source": { - "type": "git", - "url": "https://github.com/DASPRiD/Enum.git", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/DASPRiD/Enum/zipball/5abf82f213618696dda8e3bf6f64dd042d8542b2", - "reference": "5abf82f213618696dda8e3bf6f64dd042d8542b2", - "shasum": "" - }, - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "time": "2020-10-02T16:03:48+00:00", - "type": "library", - "installation-source": "dist", - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-2-Clause" - ], - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "description": "PHP 7.1 enum implementation", - "keywords": [ - "enum", - "map" - ], - "support": { - "issues": "https://github.com/DASPRiD/Enum/issues", - "source": "https://github.com/DASPRiD/Enum/tree/1.0.3" - }, - "install-path": "../dasprid/enum" - }, { "name": "endroid/qr-code", - "version": "4.2.2", - "version_normalized": "4.2.2.0", + "version": "1.9.3", + "version_normalized": "1.9.3.0", "source": { "type": "git", "url": "https://github.com/endroid/qr-code.git", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78" + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/endroid/qr-code/zipball/53bfce79da95bf082484301fecbc1d77a3907f78", - "reference": "53bfce79da95bf082484301fecbc1d77a3907f78", + "url": "https://api.github.com/repos/endroid/qr-code/zipball/c9644bec2a9cc9318e98d1437de3c628dcd1ef93", + "reference": "c9644bec2a9cc9318e98d1437de3c628dcd1ef93", "shasum": "" }, "require": { - "bacon/bacon-qr-code": "^2.0", - "php": "^7.3||^8.0" + "ext-gd": "*", + "php": ">=5.4", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "endroid/quality": "dev-master", - "ext-gd": "*", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" + "phpunit/phpunit": "^4.0|^5.0", + "sensio/framework-extra-bundle": "^3.0", + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0" }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" - }, - "time": "2021-08-16T22:08:35+00:00", + "time": "2017-04-08T09:13:59+00:00", "type": "library", "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } }, "installation-source": "dist", @@ -157,28 +47,24 @@ "authors": [ { "name": "Jeroen van den Enden", - "email": "info@endroid.nl" + "email": "info@endroid.nl", + "homepage": "http://endroid.nl/" } ], "description": "Endroid QR Code", - "homepage": "https://github.com/endroid/qr-code", + "homepage": "https://github.com/endroid/QrCode", "keywords": [ + "bundle", "code", "endroid", - "php", "qr", - "qrcode" + "qrcode", + "symfony" ], "support": { "issues": "https://github.com/endroid/qr-code/issues", - "source": "https://github.com/endroid/qr-code/tree/4.2.2" + "source": "https://github.com/endroid/qr-code/tree/1.9.3" }, - "funding": [ - { - "url": "https://github.com/endroid", - "type": "github" - } - ], "install-path": "../endroid/qr-code" }, { @@ -278,6 +164,75 @@ } ], "install-path": "../phpmailer/phpmailer" + }, + { + "name": "symfony/options-resolver", + "version": "v3.4.47", + "version_normalized": "3.4.47.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/options-resolver.git", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/options-resolver/zipball/c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "reference": "c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744", + "shasum": "" + }, + "require": { + "php": "^5.5.9|>=7.0.8" + }, + "time": "2020-10-24T10:57:07+00:00", + "type": "library", + "installation-source": "dist", + "autoload": { + "psr-4": { + "Symfony\\Component\\OptionsResolver\\": "" + }, + "exclude-from-classmap": [ + "/Tests/" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Fabien Potencier", + "email": "fabien@symfony.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony OptionsResolver Component", + "homepage": "https://symfony.com", + "keywords": [ + "config", + "configuration", + "options" + ], + "support": { + "source": "https://github.com/symfony/options-resolver/tree/v3.4.47" + }, + "funding": [ + { + "url": "https://symfony.com/sponsor", + "type": "custom" + }, + { + "url": "https://github.com/fabpot", + "type": "github" + }, + { + "url": "https://tidelift.com/funding/github/packagist/symfony/symfony", + "type": "tidelift" + } + ], + "install-path": "../symfony/options-resolver" } ], "dev": false, diff --git a/conlite/external/composer/installed.php b/conlite/external/composer/installed.php index 8fc393b..0c07d71 100644 --- a/conlite/external/composer/installed.php +++ b/conlite/external/composer/installed.php @@ -5,36 +5,18 @@ 'type' => 'library', 'install_path' => __DIR__ . '/../../../', 'aliases' => array(), - 'reference' => '3b151533a38f3a212c4b7a3b3452c56268cbadf2', + 'reference' => '0a7adbf0db76ed6c5fb65d9757552ef26b59a659', 'name' => 'vendor/conlite', 'dev' => false, ), 'versions' => array( - 'bacon/bacon-qr-code' => array( - 'pretty_version' => '2.0.4', - 'version' => '2.0.4.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../bacon/bacon-qr-code', - 'aliases' => array(), - 'reference' => 'f73543ac4e1def05f1a70bcd1525c8a157a1ad09', - 'dev_requirement' => false, - ), - 'dasprid/enum' => array( - 'pretty_version' => '1.0.3', - 'version' => '1.0.3.0', - 'type' => 'library', - 'install_path' => __DIR__ . '/../dasprid/enum', - 'aliases' => array(), - 'reference' => '5abf82f213618696dda8e3bf6f64dd042d8542b2', - 'dev_requirement' => false, - ), 'endroid/qr-code' => array( - 'pretty_version' => '4.2.2', - 'version' => '4.2.2.0', + 'pretty_version' => '1.9.3', + 'version' => '1.9.3.0', 'type' => 'library', 'install_path' => __DIR__ . '/../endroid/qr-code', 'aliases' => array(), - 'reference' => '53bfce79da95bf082484301fecbc1d77a3907f78', + 'reference' => 'c9644bec2a9cc9318e98d1437de3c628dcd1ef93', 'dev_requirement' => false, ), 'phpmailer/phpmailer' => array( @@ -46,13 +28,22 @@ 'reference' => 'acba50393dd03da69a50226c139722af8b153b11', 'dev_requirement' => false, ), + 'symfony/options-resolver' => array( + 'pretty_version' => 'v3.4.47', + 'version' => '3.4.47.0', + 'type' => 'library', + 'install_path' => __DIR__ . '/../symfony/options-resolver', + 'aliases' => array(), + 'reference' => 'c7efc97a47b2ebaabc19d5b6c6b50f5c37c92744', + 'dev_requirement' => false, + ), 'vendor/conlite' => array( 'pretty_version' => 'dev-develop', 'version' => 'dev-develop', 'type' => 'library', 'install_path' => __DIR__ . '/../../../', 'aliases' => array(), - 'reference' => '3b151533a38f3a212c4b7a3b3452c56268cbadf2', + 'reference' => '0a7adbf0db76ed6c5fb65d9757552ef26b59a659', 'dev_requirement' => false, ), ), diff --git a/conlite/external/composer/platform_check.php b/conlite/external/composer/platform_check.php index 92370c5..d673084 100644 --- a/conlite/external/composer/platform_check.php +++ b/conlite/external/composer/platform_check.php @@ -4,8 +4,8 @@ $issues = array(); -if (!(PHP_VERSION_ID >= 70300)) { - $issues[] = 'Your Composer dependencies require a PHP version ">= 7.3.0". You are running ' . PHP_VERSION . '.'; +if (!(PHP_VERSION_ID >= 50509)) { + $issues[] = 'Your Composer dependencies require a PHP version ">= 5.5.9". You are running ' . PHP_VERSION . '.'; } if ($issues) { diff --git a/conlite/external/dasprid/enum/LICENSE b/conlite/external/dasprid/enum/LICENSE deleted file mode 100644 index d45a356..0000000 --- a/conlite/external/dasprid/enum/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -Copyright (c) 2017, Ben Scholzen 'DASPRiD' -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/conlite/external/dasprid/enum/README.md b/conlite/external/dasprid/enum/README.md deleted file mode 100644 index 9e9ca12..0000000 --- a/conlite/external/dasprid/enum/README.md +++ /dev/null @@ -1,164 +0,0 @@ -# PHP 7.1 enums - -[![Build Status](https://travis-ci.org/DASPRiD/Enum.svg?branch=master)](https://travis-ci.org/DASPRiD/Enum) -[![Coverage Status](https://coveralls.io/repos/github/DASPRiD/Enum/badge.svg?branch=master)](https://coveralls.io/github/DASPRiD/Enum?branch=master) -[![Latest Stable Version](https://poser.pugx.org/dasprid/enum/v/stable)](https://packagist.org/packages/dasprid/enum) -[![Total Downloads](https://poser.pugx.org/dasprid/enum/downloads)](https://packagist.org/packages/dasprid/enum) -[![License](https://poser.pugx.org/dasprid/enum/license)](https://packagist.org/packages/dasprid/enum) - -It is a well known fact that PHP is missing a basic enum type, ignoring the rather incomplete `SplEnum` implementation -which is only available as a PECL extension. There are also quite a few other userland enum implementations around, -but all of them have one or another compromise. This library tries to close that gap as far as PHP allows it to. - -## Usage - -### Basics - -At its core, there is the `DASPRiD\Enum\AbstractEnum` class, which by default will work with constants like any other -enum implementation you might know. The first clear difference is that you should define all the constants as protected -(so nobody outside your class can read them but the `AbstractEnum` can still do so). The other even mightier difference -is that, for simple enums, the value of the constant doesn't matter at all. Let's have a look at a simple example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MONDAY() - * @method static self TUESDAY() - * @method static self WEDNESDAY() - * @method static self THURSDAY() - * @method static self FRIDAY() - * @method static self SATURDAY() - * @method static self SUNDAY() - */ -final class WeekDay extends AbstractEnum -{ - protected const MONDAY = null; - protected const TUESDAY = null; - protected const WEDNESDAY = null; - protected const THURSDAY = null; - protected const FRIDAY = null; - protected const SATURDAY = null; - protected const SUNDAY = null; -} -``` - -If you need to provide constants for either internal use or public use, you can mark them as either private or public, -in which case they will be ignored by the enum, which only considers protected constants as valid values. As you can -see, we specifically defined the generated magic methods in a class level doc block, so anyone using this class will -automatically have proper auto-completion in their IDE. Now since you have defined the enum, you can simply use it like -that: - -```php -function tellItLikeItIs(WeekDay $weekDay) -{ - switch ($weekDay) { - case WeekDay::MONDAY(): - echo 'Mondays are bad.'; - break; - - case WeekDay::FRIDAY(): - echo 'Fridays are better.'; - break; - - case WeekDay::SATURDAY(): - case WeekDay::SUNDAY(): - echo 'Weekends are best.'; - break; - - default: - echo 'Midweek days are so-so.'; - } -} - -tellItLikeItIs(WeekDay::MONDAY()); -tellItLikeItIs(WeekDay::WEDNESDAY()); -tellItLikeItIs(WeekDay::FRIDAY()); -tellItLikeItIs(WeekDay::SATURDAY()); -tellItLikeItIs(WeekDay::SUNDAY()); -``` - -### More complex example - -Of course, all enums are singletons, which are not cloneable or serializable. Thus you can be sure that there is always -just one instance of the same type. Of course, the values of constants are not completely useless, let's have a look at -a more complex example: - -```php -use DASPRiD\Enum\AbstractEnum; - -/** - * @method static self MERCURY() - * @method static self VENUS() - * @method static self EARTH() - * @method static self MARS() - * @method static self JUPITER() - * @method static self SATURN() - * @method static self URANUS() - * @method static self NEPTUNE() - */ -final class Planet extends AbstractEnum -{ - protected const MERCURY = [3.303e+23, 2.4397e6]; - protected const VENUS = [4.869e+24, 6.0518e6]; - protected const EARTH = [5.976e+24, 6.37814e6]; - protected const MARS = [6.421e+23, 3.3972e6]; - protected const JUPITER = [1.9e+27, 7.1492e7]; - protected const SATURN = [5.688e+26, 6.0268e7]; - protected const URANUS = [8.686e+25, 2.5559e7]; - protected const NEPTUNE = [1.024e+26, 2.4746e7]; - - /** - * Universal gravitational constant. - * - * @var float - */ - private const G = 6.67300E-11; - - /** - * Mass in kilograms. - * - * @var float - */ - private $mass; - - /** - * Radius in meters. - * - * @var float - */ - private $radius; - - protected function __construct(float $mass, float $radius) - { - $this->mass = $mass; - $this->radius = $radius; - } - - public function mass() : float - { - return $this->mass; - } - - public function radius() : float - { - return $this->radius; - } - - public function surfaceGravity() : float - { - return self::G * $this->mass / ($this->radius * $this->radius); - } - - public function surfaceWeight(float $otherMass) : float - { - return $otherMass * $this->surfaceGravity(); - } -} - -$myMass = 80; - -foreach (Planet::values() as $planet) { - printf("Your weight on %s is %f\n", $planet, $planet->surfaceWeight($myMass)); -} -``` diff --git a/conlite/external/dasprid/enum/composer.json b/conlite/external/dasprid/enum/composer.json deleted file mode 100644 index b3d745a..0000000 --- a/conlite/external/dasprid/enum/composer.json +++ /dev/null @@ -1,31 +0,0 @@ -{ - "name": "dasprid/enum", - "description": "PHP 7.1 enum implementation", - "license": "BSD-2-Clause", - "authors": [ - { - "name": "Ben Scholzen 'DASPRiD'", - "email": "mail@dasprids.de", - "homepage": "https://dasprids.de/", - "role": "Developer" - } - ], - "keywords": [ - "enum", - "map" - ], - "require-dev": { - "phpunit/phpunit": "^7 | ^8 | ^9", - "squizlabs/php_codesniffer": "^3.4" - }, - "autoload": { - "psr-4": { - "DASPRiD\\Enum\\": "src/" - } - }, - "autoload-dev": { - "psr-4": { - "DASPRiD\\EnumTest\\": "test/" - } - } -} diff --git a/conlite/external/dasprid/enum/phpunit.xml.dist b/conlite/external/dasprid/enum/phpunit.xml.dist deleted file mode 100644 index 307a430..0000000 --- a/conlite/external/dasprid/enum/phpunit.xml.dist +++ /dev/null @@ -1,17 +0,0 @@ - - - - - ./test - - - - - - src - - - diff --git a/conlite/external/dasprid/enum/src/AbstractEnum.php b/conlite/external/dasprid/enum/src/AbstractEnum.php deleted file mode 100644 index 79fe81c..0000000 --- a/conlite/external/dasprid/enum/src/AbstractEnum.php +++ /dev/null @@ -1,241 +0,0 @@ -> - */ - private static $values = []; - - /** - * @var array - */ - private static $allValuesLoaded = []; - - /** - * @var array - */ - private static $constants = []; - - /** - * The constructor is private by default to avoid arbitrary enum creation. - * - * When creating your own constructor for a parameterized enum, make sure to declare it as protected, so that - * the static methods are able to construct it. Avoid making it public, as that would allow creation of - * non-singleton enum instances. - */ - private function __construct() - { - } - - /** - * Magic getter which forwards all calls to {@see self::valueOf()}. - * - * @return static - */ - final public static function __callStatic(string $name, array $arguments) : self - { - return static::valueOf($name); - } - - /** - * Returns an enum with the specified name. - * - * The name must match exactly an identifier used to declare an enum in this type (extraneous whitespace characters - * are not permitted). - * - * @return static - * @throws IllegalArgumentException if the enum has no constant with the specified name - */ - final public static function valueOf(string $name) : self - { - if (isset(self::$values[static::class][$name])) { - return self::$values[static::class][$name]; - } - - $constants = self::constants(); - - if (array_key_exists($name, $constants)) { - return self::createValue($name, $constants[$name][0], $constants[$name][1]); - } - - throw new IllegalArgumentException(sprintf('No enum constant %s::%s', static::class, $name)); - } - - /** - * @return static - */ - private static function createValue(string $name, int $ordinal, array $arguments) : self - { - $instance = new static(...$arguments); - $instance->name = $name; - $instance->ordinal = $ordinal; - self::$values[static::class][$name] = $instance; - return $instance; - } - - /** - * Obtains all possible types defined by this enum. - * - * @return static[] - */ - final public static function values() : array - { - if (isset(self::$allValuesLoaded[static::class])) { - return self::$values[static::class]; - } - - if (! isset(self::$values[static::class])) { - self::$values[static::class] = []; - } - - foreach (self::constants() as $name => $constant) { - if (array_key_exists($name, self::$values[static::class])) { - continue; - } - - static::createValue($name, $constant[0], $constant[1]); - } - - uasort(self::$values[static::class], function (self $a, self $b) { - return $a->ordinal() <=> $b->ordinal(); - }); - - self::$allValuesLoaded[static::class] = true; - return self::$values[static::class]; - } - - private static function constants() : array - { - if (isset(self::$constants[static::class])) { - return self::$constants[static::class]; - } - - self::$constants[static::class] = []; - $reflectionClass = new ReflectionClass(static::class); - $ordinal = -1; - - foreach ($reflectionClass->getReflectionConstants() as $reflectionConstant) { - if (! $reflectionConstant->isProtected()) { - continue; - } - - $value = $reflectionConstant->getValue(); - - self::$constants[static::class][$reflectionConstant->name] = [ - ++$ordinal, - is_array($value) ? $value : [] - ]; - } - - return self::$constants[static::class]; - } - - /** - * Returns the name of this enum constant, exactly as declared in its enum declaration. - * - * Most programmers should use the {@see self::__toString()} method in preference to this one, as the toString - * method may return a more user-friendly name. This method is designed primarily for use in specialized situations - * where correctness depends on getting the exact name, which will not vary from release to release. - */ - final public function name() : string - { - return $this->name; - } - - /** - * Returns the ordinal of this enumeration constant (its position in its enum declaration, where the initial - * constant is assigned an ordinal of zero). - * - * Most programmers will have no use for this method. It is designed for use by sophisticated enum-based data - * structures. - */ - final public function ordinal() : int - { - return $this->ordinal; - } - - /** - * Compares this enum with the specified object for order. - * - * Returns negative integer, zero or positive integer as this object is less than, equal to or greater than the - * specified object. - * - * Enums are only comparable to other enums of the same type. The natural order implemented by this method is the - * order in which the constants are declared. - * - * @throws MismatchException if the passed enum is not of the same type - */ - final public function compareTo(self $other) : int - { - if (! $other instanceof static) { - throw new MismatchException(sprintf( - 'The passed enum %s is not of the same type as %s', - get_class($other), - static::class - )); - } - - return $this->ordinal - $other->ordinal; - } - - /** - * Forbid cloning enums. - * - * @throws CloneNotSupportedException - */ - final public function __clone() - { - throw new CloneNotSupportedException(); - } - - /** - * Forbid serializing enums. - * - * @throws SerializeNotSupportedException - */ - final public function __sleep() : array - { - throw new SerializeNotSupportedException(); - } - - /** - * Forbid unserializing enums. - * - * @throws UnserializeNotSupportedException - */ - final public function __wakeup() : void - { - throw new UnserializeNotSupportedException(); - } - - /** - * Turns the enum into a string representation. - * - * You may override this method to give a more user-friendly version. - */ - public function __toString() : string - { - return $this->name; - } -} diff --git a/conlite/external/dasprid/enum/src/EnumMap.php b/conlite/external/dasprid/enum/src/EnumMap.php deleted file mode 100644 index 77c5f35..0000000 --- a/conlite/external/dasprid/enum/src/EnumMap.php +++ /dev/null @@ -1,375 +0,0 @@ - - */ - private $keyUniverse; - - /** - * Array representation of this map. The ith element is the value to which universe[i] is currently mapped, or null - * if it isn't mapped to anything, or NullValue if it's mapped to null. - * - * @var array - */ - private $values; - - /** - * @var int - */ - private $size = 0; - - /** - * Creates a new enum map. - * - * @param string $keyType the type of the keys, must extend AbstractEnum - * @param string $valueType the type of the values - * @param bool $allowNullValues whether to allow null values - * @throws IllegalArgumentException when key type does not extend AbstractEnum - */ - public function __construct(string $keyType, string $valueType, bool $allowNullValues) - { - if (! is_subclass_of($keyType, AbstractEnum::class)) { - throw new IllegalArgumentException(sprintf( - 'Class %s does not extend %s', - $keyType, - AbstractEnum::class - )); - } - - $this->keyType = $keyType; - $this->valueType = $valueType; - $this->allowNullValues = $allowNullValues; - $this->keyUniverse = $keyType::values(); - $this->values = array_fill(0, count($this->keyUniverse), null); - } - - /** - * Checks whether the map types match the supplied ones. - * - * You should call this method when an EnumMap is passed to you and you want to ensure that it's made up of the - * correct types. - * - * @throws ExpectationException when supplied key type mismatches local key type - * @throws ExpectationException when supplied value type mismatches local value type - * @throws ExpectationException when the supplied map allows null values, abut should not - */ - public function expect(string $keyType, string $valueType, bool $allowNullValues) : void - { - if ($keyType !== $this->keyType) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with key type %s, but got %s', - $keyType, - $this->keyType - )); - } - - if ($valueType !== $this->valueType) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with value type %s, but got %s', - $keyType, - $this->keyType - )); - } - - if ($allowNullValues !== $this->allowNullValues) { - throw new ExpectationException(sprintf( - 'Callee expected an EnumMap with nullable flag %s, but got %s', - ($allowNullValues ? 'true' : 'false'), - ($this->allowNullValues ? 'true' : 'false') - )); - } - } - - /** - * Returns the number of key-value mappings in this map. - */ - public function size() : int - { - return $this->size; - } - - /** - * Returns true if this map maps one or more keys to the specified value. - */ - public function containsValue($value) : bool - { - return in_array($this->maskNull($value), $this->values, true); - } - - /** - * Returns true if this map contains a mapping for the specified key. - */ - public function containsKey(AbstractEnum $key) : bool - { - $this->checkKeyType($key); - return null !== $this->values[$key->ordinal()]; - } - - /** - * Returns the value to which the specified key is mapped, or null if this map contains no mapping for the key. - * - * More formally, if this map contains a mapping from a key to a value, then this method returns the value; - * otherwise it returns null (there can be at most one such mapping). - * - * A return value of null does not necessarily indicate that the map contains no mapping for the key; it's also - * possible that hte map explicitly maps the key to null. The {@see self::containsKey()} operation may be used to - * distinguish these two cases. - * - * @return mixed - */ - public function get(AbstractEnum $key) - { - $this->checkKeyType($key); - return $this->unmaskNull($this->values[$key->ordinal()]); - } - - /** - * Associates the specified value with the specified key in this map. - * - * If the map previously contained a mapping for this key, the old value is replaced. - * - * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. - * (a null return can also indicate that the map previously associated null with the specified key.) - * @throws IllegalArgumentException when the passed values does not match the internal value type - */ - public function put(AbstractEnum $key, $value) - { - $this->checkKeyType($key); - - if (! $this->isValidValue($value)) { - throw new IllegalArgumentException(sprintf('Value is not of type %s', $this->valueType)); - } - - $index = $key->ordinal(); - $oldValue = $this->values[$index]; - $this->values[$index] = $this->maskNull($value); - - if (null === $oldValue) { - ++$this->size; - } - - return $this->unmaskNull($oldValue); - } - - /** - * Removes the mapping for this key frm this map if present. - * - * @return mixed the previous value associated with the specified key, or null if there was no mapping for the key. - * (a null return can also indicate that the map previously associated null with the specified key.) - */ - public function remove(AbstractEnum $key) - { - $this->checkKeyType($key); - - $index = $key->ordinal(); - $oldValue = $this->values[$index]; - $this->values[$index] = null; - - if (null !== $oldValue) { - --$this->size; - } - - return $this->unmaskNull($oldValue); - } - - /** - * Removes all mappings from this map. - */ - public function clear() : void - { - $this->values = array_fill(0, count($this->keyUniverse), null); - $this->size = 0; - } - - /** - * Compares the specified map with this map for quality. - * - * Returns true if the two maps represent the same mappings. - */ - public function equals(self $other) : bool - { - if ($this === $other) { - return true; - } - - if ($this->size !== $other->size) { - return false; - } - - return $this->values === $other->values; - } - - /** - * Returns the values contained in this map. - * - * The array will contain the values in the order their corresponding keys appear in the map, which is their natural - * order (the order in which the num constants are declared). - */ - public function values() : array - { - return array_values(array_map(function ($value) { - return $this->unmaskNull($value); - }, array_filter($this->values, function ($value) : bool { - return null !== $value; - }))); - } - - public function serialize() : string - { - $values = []; - - foreach ($this->values as $ordinal => $value) { - if (null === $value) { - continue; - } - - $values[$ordinal] = $this->unmaskNull($value); - } - - return serialize([ - 'keyType' => $this->keyType, - 'valueType' => $this->valueType, - 'allowNullValues' => $this->allowNullValues, - 'values' => $values, - ]); - } - - public function unserialize($serialized) : void - { - $data = unserialize($serialized); - $this->__construct($data['keyType'], $data['valueType'], $data['allowNullValues']); - - foreach ($this->keyUniverse as $key) { - if (array_key_exists($key->ordinal(), $data['values'])) { - $this->put($key, $data['values'][$key->ordinal()]); - } - } - } - - public function getIterator() : Traversable - { - foreach ($this->keyUniverse as $key) { - if (null === $this->values[$key->ordinal()]) { - continue; - } - - yield $key => $this->unmaskNull($this->values[$key->ordinal()]); - } - } - - private function maskNull($value) - { - if (null === $value) { - return NullValue::instance(); - } - - return $value; - } - - private function unmaskNull($value) - { - if ($value instanceof NullValue) { - return null; - } - - return $value; - } - - /** - * @throws IllegalArgumentException when the passed key does not match the internal key type - */ - private function checkKeyType(AbstractEnum $key) : void - { - if (get_class($key) !== $this->keyType) { - throw new IllegalArgumentException(sprintf( - 'Object of type %s is not the same type as %s', - get_class($key), - $this->keyType - )); - } - } - - private function isValidValue($value) : bool - { - if (null === $value) { - if ($this->allowNullValues) { - return true; - } - - return false; - } - - switch ($this->valueType) { - case 'mixed': - return true; - - case 'bool': - case 'boolean': - return is_bool($value); - - case 'int': - case 'integer': - return is_int($value); - - case 'float': - case 'double': - return is_float($value); - - case 'string': - return is_string($value); - - case 'object': - return is_object($value); - - case 'array': - return is_array($value); - } - - return $value instanceof $this->valueType; - } -} diff --git a/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php b/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php deleted file mode 100644 index 4b37dbe..0000000 --- a/conlite/external/dasprid/enum/src/Exception/CloneNotSupportedException.php +++ /dev/null @@ -1,10 +0,0 @@ -getProperty('constants'); - $constantsProperty->setAccessible(true); - $constantsProperty->setValue([]); - - $valuesProperty = $reflectionClass->getProperty('values'); - $valuesProperty->setAccessible(true); - $valuesProperty->setValue([]); - - $allValuesLoadedProperty = $reflectionClass->getProperty('allValuesLoaded'); - $allValuesLoadedProperty->setAccessible(true); - $allValuesLoadedProperty->setValue([]); - } - - public function testToString() : void - { - $weekday = WeekDay::FRIDAY(); - self::assertSame('FRIDAY', (string) $weekday); - } - - public function testName() : void - { - $this->assertSame('WEDNESDAY', WeekDay::WEDNESDAY()->name()); - } - - public function testOrdinal() : void - { - $this->assertSame(2, WeekDay::WEDNESDAY()->ordinal()); - } - - public function testSameInstanceIsReturned() : void - { - self::assertSame(WeekDay::FRIDAY(), WeekDay::FRIDAY()); - } - - public static function testValueOf() : void - { - self::assertSame(WeekDay::FRIDAY(), WeekDay::valueOf('FRIDAY')); - } - - public function testValueOfInvalidConstant() : void - { - $this->expectException(IllegalArgumentException::class); - WeekDay::valueOf('CATURDAY'); - } - - public function testExceptionOnCloneAttempt() : void - { - $this->expectException(CloneNotSupportedException::class); - clone WeekDay::FRIDAY(); - } - - public function testExceptionOnSerializeAttempt() : void - { - $this->expectException(SerializeNotSupportedException::class); - serialize(WeekDay::FRIDAY()); - } - - public function testExceptionOnUnserializeAttempt() : void - { - $this->expectException(UnserializeNotSupportedException::class); - unserialize('O:24:"DASPRiD\\EnumTest\\WeekDay":0:{}'); - } - - public function testReturnValueOfValuesIsSortedByOrdinal() : void - { - // Initialize some week days out of order - WeekDay::SATURDAY(); - WeekDay::TUESDAY(); - - $ordinals = array_values(array_map(function (WeekDay $weekDay) : int { - return $weekDay->ordinal(); - }, WeekDay::values())); - - self::assertSame([0, 1, 2, 3, 4, 5, 6], $ordinals); - - $cachedOrdinals = array_values(array_map(function (WeekDay $weekDay) : int { - return $weekDay->ordinal(); - }, WeekDay::values())); - $this->assertSame($ordinals, $cachedOrdinals); - } - - public function testCompareTo() : void - { - $this->assertSame(-4, WeekDay::WEDNESDAY()->compareTo(WeekDay::SUNDAY())); - $this->assertSame(4, WeekDay::SUNDAY()->compareTo(WeekDay::WEDNESDAY())); - $this->assertSame(0, WeekDay::WEDNESDAY()->compareTo(WeekDay::WEDNESDAY())); - } - - public function testCompareToWrongEnum() : void - { - $this->expectException(MismatchException::class); - WeekDay::MONDAY()->compareTo(Planet::EARTH()); - } - - public function testParameterizedEnum() : void - { - $planet = Planet::EARTH(); - $this->assertSame(5.976e+24, $planet->mass()); - $this->assertSame(6.37814e6, $planet->radius()); - } -} diff --git a/conlite/external/dasprid/enum/test/EnumMapTest.php b/conlite/external/dasprid/enum/test/EnumMapTest.php deleted file mode 100644 index d51a86c..0000000 --- a/conlite/external/dasprid/enum/test/EnumMapTest.php +++ /dev/null @@ -1,243 +0,0 @@ -expectException(IllegalArgumentException::class); - new EnumMap(stdClass::class, 'string', false); - } - - public function testUnexpectedKeyType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', false); - $map->expect(Planet::class, 'string', false); - } - - public function testUnexpectedValueType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', false); - $map->expect(WeekDay::class, 'int', false); - } - - public function testUnexpectedNullableValueType() : void - { - $this->expectException(ExpectationException::class); - $map = new EnumMap(WeekDay::class, 'string', true); - $map->expect(WeekDay::class, 'string', false); - } - - public function testExpectedTypes() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->expect(WeekDay::class, 'string', true); - $this->addToAssertionCount(1); - } - - public function testSize() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertSame(0, $map->size()); - $map->put(WeekDay::MONDAY(), 'foo'); - $this->assertSame(1, $map->size()); - } - - public function testContainsValue() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertFalse($map->containsValue('foo')); - $map->put(WeekDay::TUESDAY(), 'foo'); - $this->assertTrue($map->containsValue('foo')); - $this->assertFalse($map->containsValue(null)); - $map->put(WeekDay::WEDNESDAY(), null); - $this->assertTrue($map->containsValue(null)); - } - - public function testContainsKey() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertFalse($map->containsKey(WeekDay::TUESDAY())); - $map->put(WeekDay::TUESDAY(), 'foo'); - $this->assertTrue($map->containsKey(WeekDay::TUESDAY())); - $map->put(WeekDay::WEDNESDAY(), null); - $this->assertTrue($map->containsKey(WeekDay::WEDNESDAY())); - } - - public function testPutAndGet() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->put(WeekDay::FRIDAY(), null); - $this->assertSame('foo', $map->get(WeekDay::TUESDAY())); - $this->assertSame(null, $map->get(WeekDay::WEDNESDAY())); - $this->assertSame(null, $map->get(WeekDay::FRIDAY())); - } - - public function testPutInvalidKey() : void - { - $this->expectException(IllegalArgumentException::class); - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(Planet::MARS(), 'foo'); - } - - public function invalidValues() : array - { - return [ - ['bool', null, false], - ['bool', 0], - ['boolean', 0], - ['int', 2.4], - ['integer', 5.3], - ['float', 3], - ['double', 7], - ['string', 1], - ['object', 1], - ['array', 1], - [stdClass::class, 1], - ]; - } - - /** - * @dataProvider invalidValues - * @param mixed $value - */ - public function testPutInvalidValue(string $valueType, $value, bool $allowNull = true) : void - { - $this->expectException(IllegalArgumentException::class); - $map = new EnumMap(WeekDay::class, $valueType, $allowNull); - $map->put(WeekDay::TUESDAY(), $value); - } - - public function validValues() : array - { - return [ - ['bool', null], - ['mixed', 'foo'], - ['mixed', 1], - ['mixed', new stdClass()], - ['bool', true], - ['boolean', false], - ['int', 1], - ['integer', 4], - ['float', 2.5], - ['double', 6.4], - ['string', 'foo'], - ['object', new stdClass()], - ['array', ['foo']], - [stdClass::class, new stdClass()], - ]; - } - - /** - * @dataProvider validValues - * @param mixed $value - */ - public function testPutValidValue(string $valueType, $value, bool $allowNull = true) : void - { - $map = new EnumMap(WeekDay::class, $valueType, $allowNull); - $map->put(WeekDay::TUESDAY(), $value); - $this->addToAssertionCount(1); - } - - public function testRemove() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->remove(WeekDay::TUESDAY()); - $map->remove(WeekDay::WEDNESDAY()); - $this->assertSame(null, $map->get(WeekDay::TUESDAY())); - $this->assertSame(0, $map->size()); - } - - public function testClear() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::TUESDAY(), 'foo'); - $map->clear(); - $this->assertSame(null, $map->get(WeekDay::TUESDAY())); - $this->assertSame(0, $map->size()); - } - - public function testEqualsWithSameInstance() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertTrue($map->equals($map)); - } - - public function testEqualsWithDifferentSize() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::MONDAY(), 'foo'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testEqualsWithDifferentValues() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::MONDAY(), 'bar'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testEqualsWithDifferentConstants() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = new EnumMap(WeekDay::class, 'string', true); - $mapB->put(WeekDay::TUESDAY(), 'foo'); - - $this->assertFalse($mapA->equals($mapB)); - } - - public function testValues() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $this->assertSame([], $map->values()); - - $map->put(WeekDay::FRIDAY(), 'foo'); - $map->put(WeekDay::TUESDAY(), 'bar'); - $map->put(WeekDay::SUNDAY(), null); - - $this->assertSame(['bar', 'foo', null], $map->values()); - } - - public function testSerializeAndUnserialize() : void - { - $mapA = new EnumMap(WeekDay::class, 'string', true); - $mapA->put(WeekDay::MONDAY(), 'foo'); - $mapB = unserialize(serialize($mapA)); - - $this->assertTrue($mapA->equals($mapB)); - } - - public function testIterator() : void - { - $map = new EnumMap(WeekDay::class, 'string', true); - $map->put(WeekDay::FRIDAY(), 'foo'); - $map->put(WeekDay::TUESDAY(), 'bar'); - $map->put(WeekDay::SUNDAY(), null); - - $result = []; - - foreach ($map as $key => $value) { - $result[$key->ordinal()] = $value; - } - - $this->assertSame([1 => 'bar', 4 => 'foo', 6 => null], $result); - } -} diff --git a/conlite/external/dasprid/enum/test/NullValueTest.php b/conlite/external/dasprid/enum/test/NullValueTest.php deleted file mode 100644 index 9f70640..0000000 --- a/conlite/external/dasprid/enum/test/NullValueTest.php +++ /dev/null @@ -1,31 +0,0 @@ -expectException(CloneNotSupportedException::class); - clone NullValue::instance(); - } - - public function testExceptionOnSerializeAttempt() : void - { - $this->expectException(SerializeNotSupportedException::class); - serialize(NullValue::instance()); - } - - public function testExceptionOnUnserializeAttempt() : void - { - $this->expectException(UnserializeNotSupportedException::class); - unserialize('O:22:"DASPRiD\\Enum\\NullValue":0:{}'); - } -} diff --git a/conlite/external/dasprid/enum/test/Planet.php b/conlite/external/dasprid/enum/test/Planet.php deleted file mode 100644 index 3c44c1d..0000000 --- a/conlite/external/dasprid/enum/test/Planet.php +++ /dev/null @@ -1,73 +0,0 @@ -mass = $mass; - $this->radius = $radius; - } - - public function mass() : float - { - return $this->mass; - } - - public function radius() : float - { - return $this->radius; - } - - public function surfaceGravity() : float - { - return self::G * $this->mass / ($this->radius * $this->radius); - } - - public function surfaceWeight(float $otherMass) : float - { - return $otherMass * $this->surfaceGravity(); - } -} diff --git a/conlite/external/dasprid/enum/test/WeekDay.php b/conlite/external/dasprid/enum/test/WeekDay.php deleted file mode 100644 index 70b8db5..0000000 --- a/conlite/external/dasprid/enum/test/WeekDay.php +++ /dev/null @@ -1,26 +0,0 @@ -=5.4", + "ext-gd": "*", + "symfony/options-resolver": "^2.3|^3.0" }, "require-dev": { - "ext-gd": "*", - "endroid/quality": "dev-master", - "khanamiryan/qrcode-detector-decoder": "^1.0.4", - "setasign/fpdf": "^1.8.2" - }, - "suggest": { - "ext-gd": "Enables you to write PNG images", - "khanamiryan/qrcode-detector-decoder": "Enables you to use the image validator", - "roave/security-advisories": "Makes sure package versions with known security issues are not installed", - "setasign/fpdf": "Enables you to use the PDF writer" + "symfony/browser-kit": "^2.3|^3.0", + "symfony/framework-bundle": "^2.3|^3.0", + "symfony/http-kernel": "^2.3|^3.0", + "sensio/framework-extra-bundle": "^3.0", + "phpunit/phpunit": "^4.0|^5.0" }, "autoload": { "psr-4": { @@ -38,11 +35,11 @@ } }, "config": { - "sort-packages": true + "bin-dir": "bin" }, "extra": { "branch-alias": { - "dev-master": "4.x-dev" + "dev-master": "1.x-dev" } } } diff --git a/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php b/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php deleted file mode 100644 index 90f23e0..0000000 --- a/conlite/external/endroid/qr-code/src/Bacon/ErrorCorrectionLevelConverter.php +++ /dev/null @@ -1,30 +0,0 @@ -getErrorCorrectionLevel()); - $baconMatrix = Encoder::encode($qrCode->getData(), $baconErrorCorrectionLevel, strval($qrCode->getEncoding()))->getMatrix(); - - $blockValues = []; - $columnCount = $baconMatrix->getWidth(); - $rowCount = $baconMatrix->getHeight(); - for ($rowIndex = 0; $rowIndex < $rowCount; ++$rowIndex) { - $blockValues[$rowIndex] = []; - for ($columnIndex = 0; $columnIndex < $columnCount; ++$columnIndex) { - $blockValues[$rowIndex][$columnIndex] = $baconMatrix->get($columnIndex, $rowIndex); - } - } - - return new Matrix($blockValues, $qrCode->getSize(), $qrCode->getMargin(), $qrCode->getRoundBlockSizeMode()); - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/Builder.php b/conlite/external/endroid/qr-code/src/Builder/Builder.php deleted file mode 100644 index 6e5ab03..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/Builder.php +++ /dev/null @@ -1,255 +0,0 @@ - */ - private $options; - - public function __construct() - { - $this->options = [ - 'writer' => new PngWriter(), - 'writerOptions' => [], - 'qrCodeClass' => QrCode::class, - 'logoClass' => Logo::class, - 'labelClass' => Label::class, - 'validateResult' => false, - ]; - } - - public static function create(): BuilderInterface - { - return new self(); - } - - public function writer(WriterInterface $writer): BuilderInterface - { - $this->options['writer'] = $writer; - - return $this; - } - - /** @param array $writerOptions */ - public function writerOptions(array $writerOptions): BuilderInterface - { - $this->options['writerOptions'] = $writerOptions; - - return $this; - } - - public function data(string $data): BuilderInterface - { - $this->options['data'] = $data; - - return $this; - } - - public function encoding(EncodingInterface $encoding): BuilderInterface - { - $this->options['encoding'] = $encoding; - - return $this; - } - - public function errorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): BuilderInterface - { - $this->options['errorCorrectionLevel'] = $errorCorrectionLevel; - - return $this; - } - - public function size(int $size): BuilderInterface - { - $this->options['size'] = $size; - - return $this; - } - - public function margin(int $margin): BuilderInterface - { - $this->options['margin'] = $margin; - - return $this; - } - - public function roundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): BuilderInterface - { - $this->options['roundBlockSizeMode'] = $roundBlockSizeMode; - - return $this; - } - - public function foregroundColor(ColorInterface $foregroundColor): BuilderInterface - { - $this->options['foregroundColor'] = $foregroundColor; - - return $this; - } - - public function backgroundColor(ColorInterface $backgroundColor): BuilderInterface - { - $this->options['backgroundColor'] = $backgroundColor; - - return $this; - } - - public function logoPath(string $logoPath): BuilderInterface - { - $this->options['logoPath'] = $logoPath; - - return $this; - } - - public function logoResizeToWidth(int $logoResizeToWidth): BuilderInterface - { - $this->options['logoResizeToWidth'] = $logoResizeToWidth; - - return $this; - } - - public function logoResizeToHeight(int $logoResizeToHeight): BuilderInterface - { - $this->options['logoResizeToHeight'] = $logoResizeToHeight; - - return $this; - } - - public function logoPunchoutBackground(bool $logoPunchoutBackground): BuilderInterface - { - $this->options['logoPunchoutBackground'] = $logoPunchoutBackground; - - return $this; - } - - public function labelText(string $labelText): BuilderInterface - { - $this->options['labelText'] = $labelText; - - return $this; - } - - public function labelFont(FontInterface $labelFont): BuilderInterface - { - $this->options['labelFont'] = $labelFont; - - return $this; - } - - public function labelAlignment(LabelAlignmentInterface $labelAlignment): BuilderInterface - { - $this->options['labelAlignment'] = $labelAlignment; - - return $this; - } - - public function labelMargin(MarginInterface $labelMargin): BuilderInterface - { - $this->options['labelMargin'] = $labelMargin; - - return $this; - } - - public function labelTextColor(ColorInterface $labelTextColor): BuilderInterface - { - $this->options['labelTextColor'] = $labelTextColor; - - return $this; - } - - public function validateResult(bool $validateResult): BuilderInterface - { - $this->options['validateResult'] = $validateResult; - - return $this; - } - - public function build(): ResultInterface - { - if (!isset($this->options['writer']) || !$this->options['writer'] instanceof WriterInterface) { - throw new \Exception('Pass a valid writer via $builder->writer()'); - } - - $writer = $this->options['writer']; - - if ($this->options['validateResult'] && !$writer instanceof ValidatingWriterInterface) { - throw new \Exception('Unable to validate result with '.get_class($writer)); - } - - /** @var QrCode $qrCode */ - $qrCode = $this->buildObject($this->options['qrCodeClass']); - - /** @var LogoInterface|null $logo */ - $logo = $this->buildObject($this->options['logoClass'], 'logo'); - - /** @var LabelInterface|null $label */ - $label = $this->buildObject($this->options['labelClass'], 'label'); - - $result = $writer->write($qrCode, $logo, $label, $this->options['writerOptions']); - - if ($this->options['validateResult'] && $writer instanceof ValidatingWriterInterface) { - $writer->validateResult($result, $qrCode->getData()); - } - - return $result; - } - - /** - * @param class-string $class - * - * @return mixed - */ - private function buildObject(string $class, string $optionsPrefix = null) - { - /** @var \ReflectionClass $reflectionClass */ - $reflectionClass = new \ReflectionClass($class); - - $arguments = []; - $hasBuilderOptions = false; - $missingRequiredArguments = []; - /** @var \ReflectionMethod $constructor */ - $constructor = $reflectionClass->getConstructor(); - $constructorParameters = $constructor->getParameters(); - foreach ($constructorParameters as $parameter) { - $optionName = null === $optionsPrefix ? $parameter->getName() : $optionsPrefix.ucfirst($parameter->getName()); - if (isset($this->options[$optionName])) { - $hasBuilderOptions = true; - $arguments[] = $this->options[$optionName]; - } elseif ($parameter->isDefaultValueAvailable()) { - $arguments[] = $parameter->getDefaultValue(); - } else { - $missingRequiredArguments[] = $optionName; - } - } - - if (!$hasBuilderOptions) { - return null; - } - - if (count($missingRequiredArguments) > 0) { - throw new \Exception(sprintf('Missing required arguments: %s', implode(', ', $missingRequiredArguments))); - } - - return $reflectionClass->newInstanceArgs($arguments); - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php b/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php deleted file mode 100644 index 5e69bc2..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderInterface.php +++ /dev/null @@ -1,63 +0,0 @@ - $writerOptions */ - public function writerOptions(array $writerOptions): BuilderInterface; - - public function data(string $data): BuilderInterface; - - public function encoding(EncodingInterface $encoding): BuilderInterface; - - public function errorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): BuilderInterface; - - public function size(int $size): BuilderInterface; - - public function margin(int $margin): BuilderInterface; - - public function roundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): BuilderInterface; - - public function foregroundColor(ColorInterface $foregroundColor): BuilderInterface; - - public function backgroundColor(ColorInterface $backgroundColor): BuilderInterface; - - public function logoPath(string $logoPath): BuilderInterface; - - public function logoResizeToWidth(int $logoResizeToWidth): BuilderInterface; - - public function logoResizeToHeight(int $logoResizeToHeight): BuilderInterface; - - public function logoPunchoutBackground(bool $logoPunchoutBackground): BuilderInterface; - - public function labelText(string $labelText): BuilderInterface; - - public function labelFont(FontInterface $labelFont): BuilderInterface; - - public function labelAlignment(LabelAlignmentInterface $labelAlignment): BuilderInterface; - - public function labelMargin(MarginInterface $labelMargin): BuilderInterface; - - public function labelTextColor(ColorInterface $labelTextColor): BuilderInterface; - - public function validateResult(bool $validateResult): BuilderInterface; - - public function build(): ResultInterface; -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php b/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php deleted file mode 100644 index eb9666a..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistry.php +++ /dev/null @@ -1,25 +0,0 @@ - */ - private $builders = []; - - public function getBuilder(string $name): BuilderInterface - { - if (!isset($this->builders[$name])) { - throw new \Exception(sprintf('Builder with name "%s" not available from registry', $name)); - } - - return $this->builders[$name]; - } - - public function addBuilder(string $name, BuilderInterface $builder): void - { - $this->builders[$name] = $builder; - } -} diff --git a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php b/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php deleted file mode 100644 index 048d649..0000000 --- a/conlite/external/endroid/qr-code/src/Builder/BuilderRegistryInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -red = $red; - $this->green = $green; - $this->blue = $blue; - $this->alpha = $alpha; - } - - public function getRed(): int - { - return $this->red; - } - - public function getGreen(): int - { - return $this->green; - } - - public function getBlue(): int - { - return $this->blue; - } - - public function getAlpha(): int - { - return $this->alpha; - } - - public function getOpacity(): float - { - return 1 - $this->alpha / 127; - } - - public function toArray(): array - { - return [ - 'red' => $this->red, - 'green' => $this->green, - 'blue' => $this->blue, - 'alpha' => $this->alpha, - ]; - } -} diff --git a/conlite/external/endroid/qr-code/src/Color/ColorInterface.php b/conlite/external/endroid/qr-code/src/Color/ColorInterface.php deleted file mode 100644 index 91d3818..0000000 --- a/conlite/external/endroid/qr-code/src/Color/ColorInterface.php +++ /dev/null @@ -1,21 +0,0 @@ - */ - public function toArray(): array; -} diff --git a/conlite/external/endroid/qr-code/src/Encoding/Encoding.php b/conlite/external/endroid/qr-code/src/Encoding/Encoding.php deleted file mode 100644 index 7586e6f..0000000 --- a/conlite/external/endroid/qr-code/src/Encoding/Encoding.php +++ /dev/null @@ -1,25 +0,0 @@ -value = $value; - } - - public function __toString(): string - { - return $this->value; - } -} diff --git a/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php b/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php deleted file mode 100644 index f57001b..0000000 --- a/conlite/external/endroid/qr-code/src/Encoding/EncodingInterface.php +++ /dev/null @@ -1,10 +0,0 @@ -width = $width; - $this->height = $height; - } - - public static function createForLabel(LabelInterface $label): self - { - if (false !== strpos($label->getText(), "\n")) { - throw new \Exception('Label does not support line breaks'); - } - - if (!function_exists('imagettfbbox')) { - throw new \Exception('Function "imagettfbbox" does not exist: check your FreeType installation'); - } - - $labelBox = imagettfbbox($label->getFont()->getSize(), 0, $label->getFont()->getPath(), $label->getText()); - - if (!is_array($labelBox)) { - throw new \Exception('Unable to generate label image box: check your FreeType installation'); - } - - return new self( - intval($labelBox[2] - $labelBox[0]), - intval($labelBox[0] - $labelBox[7]) - ); - } - - public function getWidth(): int - { - return $this->width; - } - - public function getHeight(): int - { - return $this->height; - } -} diff --git a/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php b/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php deleted file mode 100644 index 2639cf4..0000000 --- a/conlite/external/endroid/qr-code/src/ImageData/LogoImageData.php +++ /dev/null @@ -1,168 +0,0 @@ -data = $data; - $this->image = $image; - $this->mimeType = $mimeType; - $this->width = $width; - $this->height = $height; - $this->punchoutBackground = $punchoutBackground; - } - - public static function createForLogo(LogoInterface $logo): self - { - $data = @file_get_contents($logo->getPath()); - - if (!is_string($data)) { - throw new \Exception(sprintf('Invalid data at path "%s"', $logo->getPath())); - } - - if (false !== filter_var($logo->getPath(), FILTER_VALIDATE_URL)) { - $mimeType = self::detectMimeTypeFromUrl($logo->getPath()); - } else { - $mimeType = self::detectMimeTypeFromPath($logo->getPath()); - } - - $width = $logo->getResizeToWidth(); - $height = $logo->getResizeToHeight(); - - if ('image/svg+xml' === $mimeType) { - if (null === $width || null === $height) { - throw new \Exception('SVG Logos require an explicitly set resize width and height'); - } - - return new self($data, null, $mimeType, $width, $height, $logo->getPunchoutBackground()); - } - - $image = imagecreatefromstring($data); - - if (!$image) { - throw new \Exception(sprintf('Unable to parse image data at path "%s"', $logo->getPath())); - } - - // No target width and height specified: use from original image - if (null !== $width && null !== $height) { - return new self($data, $image, $mimeType, $width, $height, $logo->getPunchoutBackground()); - } - - // Only target width specified: calculate height - if (null !== $width && null === $height) { - return new self($data, $image, $mimeType, $width, intval(imagesy($image) * $width / imagesx($image)), $logo->getPunchoutBackground()); - } - - // Only target height specified: calculate width - if (null === $width && null !== $height) { - return new self($data, $image, $mimeType, intval(imagesx($image) * $height / imagesy($image)), $height, $logo->getPunchoutBackground()); - } - - return new self($data, $image, $mimeType, imagesx($image), imagesy($image), $logo->getPunchoutBackground()); - } - - public function getData(): string - { - return $this->data; - } - - /** @return mixed */ - public function getImage() - { - return $this->image; - } - - public function getMimeType(): string - { - return $this->mimeType; - } - - public function getWidth(): int - { - return $this->width; - } - - public function getHeight(): int - { - return $this->height; - } - - public function getPunchoutBackground(): bool - { - return $this->punchoutBackground; - } - - public function createDataUri(): string - { - return 'data:'.$this->mimeType.';base64,'.base64_encode($this->data); - } - - private static function detectMimeTypeFromUrl(string $url): string - { - /** @var mixed $format */ - $format = PHP_VERSION > 80000 ? true : 1; - - $headers = get_headers($url, $format); - - if (!is_array($headers) || !isset($headers['Content-Type'])) { - throw new \Exception(sprintf('Content type could not be determined for logo URL "%s"', $url)); - } - - return is_array($headers['Content-Type']) ? $headers['Content-Type'][1] : $headers['Content-Type']; - } - - private static function detectMimeTypeFromPath(string $path): string - { - if (!function_exists('mime_content_type')) { - throw new \Exception('You need the ext-fileinfo extension to determine logo mime type'); - } - - $mimeType = @mime_content_type($path); - - if (!is_string($mimeType)) { - throw new \Exception('Could not determine mime type'); - } - - if (!preg_match('#^image/#', $mimeType)) { - throw new \Exception('Logo path is not an image'); - } - - // Passing mime type image/svg results in invisible images - if ('image/svg' === $mimeType) { - return 'image/svg+xml'; - } - - return $mimeType; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php b/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php deleted file mode 100644 index c13e287..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Alignment/LabelAlignmentCenter.php +++ /dev/null @@ -1,9 +0,0 @@ -validatePath($path); - - $this->path = $path; - $this->size = $size; - } - - private function validatePath(string $path): void - { - if (!file_exists($path)) { - throw new \Exception(sprintf('Invalid font path "%s"', $path)); - } - } - - public function getPath(): string - { - return $this->path; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php b/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php deleted file mode 100644 index 1c0de9a..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Font/FontInterface.php +++ /dev/null @@ -1,12 +0,0 @@ -size = $size; - } - - public function getPath(): string - { - return __DIR__.'/../../../assets/noto_sans.otf'; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php b/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php deleted file mode 100644 index 76c95b0..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Font/OpenSans.php +++ /dev/null @@ -1,26 +0,0 @@ -size = $size; - } - - public function getPath(): string - { - return __DIR__.'/../../../assets/open_sans.ttf'; - } - - public function getSize(): int - { - return $this->size; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Label.php b/conlite/external/endroid/qr-code/src/Label/Label.php deleted file mode 100644 index b15ef76..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Label.php +++ /dev/null @@ -1,111 +0,0 @@ -text = $text; - $this->font = isset($font) ? $font : new Font(__DIR__.'/../../assets/noto_sans.otf', 16); - $this->alignment = isset($alignment) ? $alignment : new LabelAlignmentCenter(); - $this->margin = isset($margin) ? $margin : new Margin(0, 10, 10, 10); - $this->textColor = isset($textColor) ? $textColor : new Color(0, 0, 0); - } - - public static function create(string $text): self - { - return new self($text); - } - - public function getText(): string - { - return $this->text; - } - - public function setText(string $text): self - { - $this->text = $text; - - return $this; - } - - public function getFont(): FontInterface - { - return $this->font; - } - - public function setFont(FontInterface $font): self - { - $this->font = $font; - - return $this; - } - - public function getAlignment(): LabelAlignmentInterface - { - return $this->alignment; - } - - public function setAlignment(LabelAlignmentInterface $alignment): self - { - $this->alignment = $alignment; - - return $this; - } - - public function getMargin(): MarginInterface - { - return $this->margin; - } - - public function setMargin(MarginInterface $margin): self - { - $this->margin = $margin; - - return $this; - } - - public function getTextColor(): ColorInterface - { - return $this->textColor; - } - - public function setTextColor(ColorInterface $textColor): self - { - $this->textColor = $textColor; - - return $this; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/LabelInterface.php b/conlite/external/endroid/qr-code/src/Label/LabelInterface.php deleted file mode 100644 index a7d2ed6..0000000 --- a/conlite/external/endroid/qr-code/src/Label/LabelInterface.php +++ /dev/null @@ -1,23 +0,0 @@ -top = $top; - $this->right = $right; - $this->bottom = $bottom; - $this->left = $left; - } - - public function getTop(): int - { - return $this->top; - } - - public function getRight(): int - { - return $this->right; - } - - public function getBottom(): int - { - return $this->bottom; - } - - public function getLeft(): int - { - return $this->left; - } - - /** @return array */ - public function toArray(): array - { - return [ - 'top' => $this->top, - 'right' => $this->right, - 'bottom' => $this->bottom, - 'left' => $this->left, - ]; - } -} diff --git a/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php b/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php deleted file mode 100644 index bc428bd..0000000 --- a/conlite/external/endroid/qr-code/src/Label/Margin/MarginInterface.php +++ /dev/null @@ -1,19 +0,0 @@ - */ - public function toArray(): array; -} diff --git a/conlite/external/endroid/qr-code/src/Logo/Logo.php b/conlite/external/endroid/qr-code/src/Logo/Logo.php deleted file mode 100644 index f9bb38f..0000000 --- a/conlite/external/endroid/qr-code/src/Logo/Logo.php +++ /dev/null @@ -1,81 +0,0 @@ -path = $path; - $this->resizeToWidth = $resizeToWidth; - $this->resizeToHeight = $resizeToHeight; - $this->punchoutBackground = $punchoutBackground; - } - - public static function create(string $path): self - { - return new self($path); - } - - public function getPath(): string - { - return $this->path; - } - - public function setPath(string $path): self - { - $this->path = $path; - - return $this; - } - - public function getResizeToWidth(): ?int - { - return $this->resizeToWidth; - } - - public function setResizeToWidth(?int $resizeToWidth): self - { - $this->resizeToWidth = $resizeToWidth; - - return $this; - } - - public function getResizeToHeight(): ?int - { - return $this->resizeToHeight; - } - - public function setResizeToHeight(?int $resizeToHeight): self - { - $this->resizeToHeight = $resizeToHeight; - - return $this; - } - - public function getPunchoutBackground(): bool - { - return $this->punchoutBackground; - } - - public function setPunchoutBackground(bool $punchoutBackground): self - { - $this->punchoutBackground = $punchoutBackground; - - return $this; - } -} diff --git a/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php b/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php deleted file mode 100644 index 13d940c..0000000 --- a/conlite/external/endroid/qr-code/src/Logo/LogoInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -> */ - private $blockValues = []; - - /** @var float */ - private $blockSize; - - /** @var int */ - private $innerSize; - - /** @var int */ - private $outerSize; - - /** @var int */ - private $marginLeft; - - /** @var int */ - private $marginRight; - - /** @param array> $blockValues */ - public function __construct(array $blockValues, int $size, int $margin, RoundBlockSizeModeInterface $roundBlockSizeMode) - { - $this->blockValues = $blockValues; - - $this->blockSize = $size / $this->getBlockCount(); - $this->innerSize = $size; - $this->outerSize = $size + 2 * $margin; - - if ($roundBlockSizeMode instanceof RoundBlockSizeModeEnlarge) { - $this->blockSize = intval(ceil($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - $this->outerSize = $this->innerSize + 2 * $margin; - } elseif ($roundBlockSizeMode instanceof RoundBlockSizeModeShrink) { - $this->blockSize = intval(floor($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - $this->outerSize = $this->innerSize + 2 * $margin; - } elseif ($roundBlockSizeMode instanceof RoundBlockSizeModeMargin) { - $this->blockSize = intval(floor($this->blockSize)); - $this->innerSize = $this->blockSize * $this->getBlockCount(); - } - - if ($this->blockSize < 1) { - throw new \Exception('Too much data: increase image dimensions or lower error correction level'); - } - - $this->marginLeft = intval(($this->outerSize - $this->innerSize) / 2); - $this->marginRight = $this->outerSize - $this->innerSize - $this->marginLeft; - } - - public function getBlockValue(int $rowIndex, int $columnIndex): int - { - return $this->blockValues[$rowIndex][$columnIndex]; - } - - public function getBlockCount(): int - { - return count($this->blockValues[0]); - } - - public function getBlockSize(): float - { - return $this->blockSize; - } - - public function getInnerSize(): int - { - return $this->innerSize; - } - - public function getOuterSize(): int - { - return $this->outerSize; - } - - public function getMarginLeft(): int - { - return $this->marginLeft; - } - - public function getMarginRight(): int - { - return $this->marginRight; - } -} diff --git a/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php b/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php deleted file mode 100644 index be501f1..0000000 --- a/conlite/external/endroid/qr-code/src/Matrix/MatrixFactoryInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - + * + * This source file is subject to the MIT license that is bundled + * with this source code in the file LICENSE. + */ namespace Endroid\QrCode; -use Endroid\QrCode\Color\Color; -use Endroid\QrCode\Color\ColorInterface; -use Endroid\QrCode\Encoding\Encoding; -use Endroid\QrCode\Encoding\EncodingInterface; -use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelInterface; -use Endroid\QrCode\ErrorCorrectionLevel\ErrorCorrectionLevelLow; -use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeInterface; -use Endroid\QrCode\RoundBlockSizeMode\RoundBlockSizeModeMargin; +use Endroid\QrCode\Exceptions\DataDoesntExistsException; +use Endroid\QrCode\Exceptions\FreeTypeLibraryMissingException; +use Endroid\QrCode\Exceptions\ImageFunctionFailedException; +use Endroid\QrCode\Exceptions\ImageTypeInvalidException; +use Endroid\QrCode\Exceptions\VersionTooLargeException; +use Endroid\QrCode\Exceptions\ImageSizeTooLargeException; +use Endroid\QrCode\Exceptions\ImageFunctionUnknownException; +use ReflectionFunction; -final class QrCode implements QrCodeInterface +/** + * Generate QR Code. + */ +class QrCode { + /** @const int Error Correction Level Low (7%) */ + const LEVEL_LOW = 1; + + /** @const int Error Correction Level Medium (15%) */ + const LEVEL_MEDIUM = 0; + + /** @const int Error Correction Level Quartile (25%) */ + const LEVEL_QUARTILE = 3; + + /** @const int Error Correction Level High (30%) */ + const LEVEL_HIGH = 2; + + /** @const string Image type png */ + const IMAGE_TYPE_PNG = 'png'; + + /** @const string Image type gif */ + const IMAGE_TYPE_GIF = 'gif'; + + /** @const string Image type jpeg */ + const IMAGE_TYPE_JPEG = 'jpeg'; + + /** @const string Image type wbmp */ + const IMAGE_TYPE_WBMP = 'wbmp'; + + /** @const int Horizontal label alignment to the center of image */ + const LABEL_HALIGN_CENTER = 0; + + /** @const int Horizontal label alignment to the left side of image */ + const LABEL_HALIGN_LEFT = 1; + + /** @const int Horizontal label alignment to the left border of QR Code */ + const LABEL_HALIGN_LEFT_BORDER = 2; + + /** @const int Horizontal label alignment to the left side of QR Code */ + const LABEL_HALIGN_LEFT_CODE = 3; + + /** @const int Horizontal label alignment to the right side of image */ + const LABEL_HALIGN_RIGHT = 4; + + /** @const int Horizontal label alignment to the right border of QR Code */ + const LABEL_HALIGN_RIGHT_BORDER = 5; + + /** @const int Horizontal label alignment to the right side of QR Code */ + const LABEL_HALIGN_RIGHT_CODE = 6; + + /** @const int Vertical label alignment to the top */ + const LABEL_VALIGN_TOP = 1; + + /** @const int Vertical label alignment to the top and hide border */ + const LABEL_VALIGN_TOP_NO_BORDER = 2; + + /** @const int Vertical label alignment to the middle*/ + const LABEL_VALIGN_MIDDLE = 3; + + /** @const int Vertical label alignment to the bottom */ + const LABEL_VALIGN_BOTTOM = 4; + /** @var string */ - private $data; + protected $logo = null; - /** @var EncodingInterface */ - private $encoding; + protected $logo_size = 48; - /** @var ErrorCorrectionLevelInterface */ - private $errorCorrectionLevel; + /** @var string */ + protected $text = ''; /** @var int */ - private $size; + protected $size = 0; /** @var int */ - private $margin; + protected $padding = 16; - /** @var RoundBlockSizeModeInterface */ - private $roundBlockSizeMode; + /** @var bool */ + protected $draw_quiet_zone = false; - /** @var ColorInterface */ - private $foregroundColor; + /** @var bool */ + protected $draw_border = false; - /** @var ColorInterface */ - private $backgroundColor; + /** @var array */ + protected $color_foreground = ['r' => 0, 'g' => 0, 'b' => 0, 'a' => 0]; - public function __construct( - string $data, - EncodingInterface $encoding = null, - ErrorCorrectionLevelInterface $errorCorrectionLevel = null, - int $size = 300, - int $margin = 10, - RoundBlockSizeModeInterface $roundBlockSizeMode = null, - ColorInterface $foregroundColor = null, - ColorInterface $backgroundColor = null - ) { - $this->data = $data; - $this->encoding = isset($encoding) ? $encoding : new Encoding('UTF-8'); - $this->errorCorrectionLevel = isset($errorCorrectionLevel) ? $errorCorrectionLevel : new ErrorCorrectionLevelLow(); + /** @var array */ + protected $color_background = ['r' => 255, 'g' => 255, 'b' => 255, 'a' => 0]; + + /** @var string */ + protected $label = ''; + + /** @var int */ + protected $label_font_size = 16; + + /** @var string */ + protected $label_font_path = ''; + + /** @var int */ + protected $label_halign = self::LABEL_HALIGN_CENTER; + + /** @var int */ + protected $label_valign = self::LABEL_VALIGN_MIDDLE; + + /** @var resource */ + protected $image = null; + + /** @var int */ + protected $version; + + /** @var int */ + protected $error_correction = self::LEVEL_MEDIUM; + + /** @var array */ + protected $error_corrections_available = [ + self::LEVEL_LOW, + self::LEVEL_MEDIUM, + self::LEVEL_QUARTILE, + self::LEVEL_HIGH, + ]; + + /** @var int */ + protected $module_size; + + /** @var string */ + protected $image_type = self::IMAGE_TYPE_PNG; + + /** @var array */ + protected $image_types_available = [ + self::IMAGE_TYPE_GIF, + self::IMAGE_TYPE_PNG, + self::IMAGE_TYPE_JPEG, + self::IMAGE_TYPE_WBMP, + ]; + + /** @var string */ + protected $image_path; + + /** @var string */ + protected $path; + + /** @var int */ + protected $structure_append_n; + + /** @var int */ + protected $structure_append_m; + + /** @var int */ + protected $structure_append_parity; + + /** @var string */ + protected $structure_append_original_data; + + /** + * Class constructor. + * + * @param string $text + */ + public function __construct($text = '') + { + $this->setPath(__DIR__.'/../assets/data'); + $this->setImagePath(__DIR__.'/../assets/image'); + $this->setLabelFontPath(__DIR__.'/../assets/font/opensans.ttf'); + $this->setText($text); + } + + /** + * Set structure append. + * + * @param int $n + * @param int $m + * @param int $parity Parity + * @param string $original_data Original data + * + * @return QrCode + */ + public function setStructureAppend($n, $m, $parity, $original_data) + { + $this->structure_append_n = $n; + $this->structure_append_m = $m; + $this->structure_append_parity = $parity; + $this->structure_append_original_data = $original_data; + + return $this; + } + + /** + * Set QR Code version. + * + * @param int $version QR Code version + * + * @return QrCode + */ + public function setVersion($version) + { + if ($version <= 40 && $version >= 0) { + $this->version = $version; + } + + return $this; + } + + /** + * Return QR Code version. + * + * @return int + */ + public function getVersion() + { + return $this->version; + } + + /** + * Set QR Code error correction level. + * + * @param mixed $error_correction Error Correction Level + * + * @return QrCode + */ + public function setErrorCorrection($error_correction) + { + if (!is_numeric($error_correction)) { + $level_constant = 'Endroid\QrCode\QrCode::LEVEL_'.strtoupper($error_correction); + $error_correction = constant($level_constant); + } + + if (in_array($error_correction, $this->error_corrections_available)) { + $this->error_correction = $error_correction; + } + + return $this; + } + + /** + * Return QR Code error correction level. + * + * @return int + */ + public function getErrorCorrection() + { + return $this->error_correction; + } + + /** + * Set QR Code module size. + * + * @param int $module_size Module size + * + * @return QrCode + */ + public function setModuleSize($module_size) + { + $this->module_size = $module_size; + + return $this; + } + + /** + * Return QR Code module size. + * + * @return int + */ + public function getModuleSize() + { + return $this->module_size; + } + + /** + * Set image type for rendering. + * + * @param string $image_type Image type + * + * @return QrCode + * + * @throws ImageTypeInvalidException + */ + public function setImageType($image_type) + { + if (!in_array($image_type, $this->image_types_available)) { + throw new ImageTypeInvalidException('QRCode: image type '.$image_type.' is invalid.'); + } + + $this->image_type = $image_type; + + return $this; + } + + /** + * Return image type for rendering. + * + * @return string + */ + public function getImageType() + { + return $this->image_type; + } + + /** + * Set image type for rendering via extension. + * + * @param string $extension Image extension + * + * @return QrCode + */ + public function setExtension($extension) + { + if ($extension == 'jpg') { + $this->setImageType('jpeg'); + } else { + $this->setImageType($extension); + } + + return $this; + } + + /** + * Set path to the images directory. + * + * @param string $image_path Image directory + * + * @return QrCode + */ + public function setImagePath($image_path) + { + $this->image_path = $image_path; + + return $this; + } + + /** + * Return path to the images directory. + * + * @return string + */ + public function getImagePath() + { + return $this->image_path; + } + + /** + * Set path to the data directory. + * + * @param string $path Data directory + * + * @return QrCode + */ + public function setPath($path) + { + $this->path = $path; + + return $this; + } + + /** + * Return path to the data directory. + * + * @return string + */ + public function getPath() + { + return $this->path; + } + + /** + * Set logo in QR Code. + * + * @param string $logo Logo Path + * + * @throws Exceptions\DataDoesntExistsException + * + * @return QrCode + */ + public function setLogo($logo) + { + if (!file_exists($logo)) { + throw new DataDoesntExistsException("$logo file does not exist"); + } + + $this->logo = $logo; + + return $this; + } + + /** + * Set logo size in QR Code(default 48). + * + * @param int $logo_size Logo Size + * + * @return QrCode + */ + public function setLogoSize($logo_size) + { + $this->logo_size = $logo_size; + + return $this; + } + + /** + * Set text to hide in QR Code. + * + * @param string $text Text to hide + * + * @return QrCode + */ + public function setText($text) + { + $this->text = $text; + + return $this; + } + + /** + * Return text that will be hid in QR Code. + * + * @return string + */ + public function getText() + { + return $this->text; + } + + /** + * Set QR Code size (width). + * + * @param int $size Width of the QR Code + * + * @return QrCode + */ + public function setSize($size) + { $this->size = $size; - $this->margin = $margin; - $this->roundBlockSizeMode = isset($roundBlockSizeMode) ? $roundBlockSizeMode : new RoundBlockSizeModeMargin(); - $this->foregroundColor = isset($foregroundColor) ? $foregroundColor : new Color(0, 0, 0); - $this->backgroundColor = isset($backgroundColor) ? $backgroundColor : new Color(255, 255, 255); - } - - public static function create(string $data): self - { - return new self($data); - } - - public function getData(): string - { - return $this->data; - } - - public function setData(string $data): self - { - $this->data = $data; return $this; } - public function getEncoding(): EncodingInterface - { - return $this->encoding; - } - - public function setEncoding(Encoding $encoding): self - { - $this->encoding = $encoding; - - return $this; - } - - public function getErrorCorrectionLevel(): ErrorCorrectionLevelInterface - { - return $this->errorCorrectionLevel; - } - - public function setErrorCorrectionLevel(ErrorCorrectionLevelInterface $errorCorrectionLevel): self - { - $this->errorCorrectionLevel = $errorCorrectionLevel; - - return $this; - } - - public function getSize(): int + /** + * Return QR Code size (width). + * + * @return int + */ + public function getSize() { return $this->size; } - public function setSize(int $size): self + /** + * Set padding around the QR Code. + * + * @param int $padding Padding around QR Code + * + * @return QrCode + */ + public function setPadding($padding) { - $this->size = $size; + $this->padding = $padding; return $this; } - public function getMargin(): int + /** + * Return padding around the QR Code. + * + * @return int + */ + public function getPadding() { - return $this->margin; + return $this->padding; } - public function setMargin(int $margin): self + /** + * Set draw required four-module wide margin. + * + * @param bool $draw_quiet_zone State of required four-module wide margin drawing + * + * @return QrCode + */ + public function setDrawQuietZone($draw_quiet_zone) { - $this->margin = $margin; + $this->draw_quiet_zone = $draw_quiet_zone; return $this; } - public function getRoundBlockSizeMode(): RoundBlockSizeModeInterface + /** + * Return draw required four-module wide margin. + * + * @return bool + */ + public function getDrawQuietZone() { - return $this->roundBlockSizeMode; + return $this->draw_quiet_zone; } - public function setRoundBlockSizeMode(RoundBlockSizeModeInterface $roundBlockSizeMode): self + /** + * Set draw border around QR Code. + * + * @param bool $draw_border State of border drawing + * + * @return QrCode + */ + public function setDrawBorder($draw_border) { - $this->roundBlockSizeMode = $roundBlockSizeMode; + $this->draw_border = $draw_border; return $this; } - public function getForegroundColor(): ColorInterface + /** + * Return draw border around QR Code. + * + * @return bool + */ + public function getDrawBorder() { - return $this->foregroundColor; + return $this->draw_border; } - public function setForegroundColor(ColorInterface $foregroundColor): self + /** + * Set QR Code label (text). + * + * @param int|string $label Label to print under QR code + * + * @return QrCode + */ + public function setLabel($label) { - $this->foregroundColor = $foregroundColor; + $this->label = $label; return $this; } - public function getBackgroundColor(): ColorInterface + /** + * Return QR Code label (text). + * + * @return string + */ + public function getLabel() { - return $this->backgroundColor; + return $this->label; } - public function setBackgroundColor(ColorInterface $backgroundColor): self + /** + * Set QR Code label font size. + * + * @param int $label_font_size Font size of the QR code label + * + * @return QrCode + */ + public function setLabelFontSize($label_font_size) { - $this->backgroundColor = $backgroundColor; + $this->label_font_size = $label_font_size; return $this; } + + /** + * Return QR Code label font size. + * + * @return int + */ + public function getLabelFontSize() + { + return $this->label_font_size; + } + + /** + * Set QR Code label font path. + * + * @param int $label_font_path Path to the QR Code label's TTF font file + * + * @return QrCode + */ + public function setLabelFontPath($label_font_path) + { + $this->label_font_path = $label_font_path; + + return $this; + } + + /** + * Return path to the QR Code label's TTF font file. + * + * @return string + */ + public function getLabelFontPath() + { + return $this->label_font_path; + } + + /** + * Set label horizontal alignment. + * + * @param int $label_halign Label horizontal alignment + * + * @return QrCode + */ + public function setLabelHalign($label_halign) + { + $this->label_halign = $label_halign; + + return $this; + } + + /** + * Return label horizontal alignment. + * + * @return int + */ + public function getLabelHalign() + { + return $this->label_halign; + } + + /** + * Set label vertical alignment. + * + * @param int $label_valign Label vertical alignment + * + * @return QrCode + */ + public function setLabelValign($label_valign) + { + $this->label_valign = $label_valign; + + return $this; + } + + /** + * Return label vertical alignment. + * + * @return int + */ + public function getLabelValign() + { + return $this->label_valign; + } + + /** + * Set foreground color of the QR Code. + * + * @param array $color_foreground RGB color + * + * @return QrCode + */ + public function setForegroundColor($color_foreground) + { + if (!isset($color_foreground['a'])) { + $color_foreground['a'] = 0; + } + + $this->color_foreground = $color_foreground; + + return $this; + } + + /** + * Return foreground color of the QR Code. + * + * @return array + */ + public function getForegroundColor() + { + return $this->color_foreground; + } + + /** + * Set background color of the QR Code. + * + * @param array $color_background RGB color + * + * @return QrCode + */ + public function setBackgroundColor($color_background) + { + if (!isset($color_background['a'])) { + $color_background['a'] = 0; + } + + $this->color_background = $color_background; + + return $this; + } + + /** + * Return background color of the QR Code. + * + * @return array + */ + public function getBackgroundColor() + { + return $this->color_background; + } + + /** + * Return the image resource. + * + * @return resource + */ + public function getImage() + { + if (empty($this->image)) { + $this->create(); + } + + return $this->image; + } + + /** + * Return the data URI. + * + * @return string + */ + public function getDataUri() + { + if (empty($this->image)) { + $this->create(); + } + + ob_start(); + call_user_func('image'.$this->image_type, $this->image); + $contents = ob_get_clean(); + + return 'data:image/'.$this->image_type.';base64,'.base64_encode($contents); + } + + /** + * Render the QR Code then save it to given file name. + * + * @param string $filename File name of the QR Code + * + * @return QrCode + */ + public function save($filename) + { + $this->render($filename); + + return $this; + } + + /** + * Render the QR Code then save it to given file name or + * output it to the browser when file name omitted. + * + * @param null|string $filename File name of the QR Code + * @param null|string $format Format of the file (png, jpeg, jpg, gif, wbmp) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return QrCode + */ + public function render($filename = null, $format = 'png') + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + if ($filename === null) { + $success = call_user_func('image'.$format, $this->image); + } else { + $success = call_user_func_array('image'.$format, [$this->image, $filename]); + } + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + return $this; + } + + /** + * Returns the content type corresponding to the image type. + * + * @return string + */ + public function getContentType() + { + $contentType = 'image/'.$this->image_type; + + return $contentType; + } + + /** + * Create QR Code and return its content. + * + * @param string|null $format Image type (gif, png, wbmp, jpeg) + * + * @throws ImageFunctionUnknownException + * @throws ImageFunctionFailedException + * + * @return string + */ + public function get($format = null) + { + $this->create(); + + if ($format == 'jpg') { + $format = 'jpeg'; + } + + if (!in_array($format, $this->image_types_available)) { + $format = $this->image_type; + } + + if (!function_exists('image'.$format)) { + throw new ImageFunctionUnknownException('QRCode: function image'.$format.' does not exists.'); + } + + ob_start(); + $success = call_user_func('image'.$format, $this->image); + + if ($success === false) { + throw new ImageFunctionFailedException('QRCode: function image'.$format.' failed.'); + } + + $content = ob_get_clean(); + + return $content; + } + + /** + * Create the image. + * + * @throws Exceptions\DataDoesntExistsException + * @throws Exceptions\VersionTooLargeException + * @throws Exceptions\ImageSizeTooLargeException + * @throws \OverflowException + */ + public function create() + { + $image_path = $this->image_path; + $path = $this->path; + + $version_ul = 40; + + $qrcode_data_string = $this->text;//Previously from $_GET["d"]; + + $qrcode_error_correct = $this->error_correction;//Previously from $_GET["e"]; + $qrcode_module_size = $this->module_size;//Previously from $_GET["s"]; + $qrcode_version = $this->version;//Previously from $_GET["v"]; + $qrcode_image_type = $this->image_type;//Previously from $_GET["t"]; + + $qrcode_structureappend_n = $this->structure_append_n;//Previously from $_GET["n"]; + $qrcode_structureappend_m = $this->structure_append_m;//Previously from $_GET["m"]; + $qrcode_structureappend_parity = $this->structure_append_parity;//Previously from $_GET["p"]; + $qrcode_structureappend_originaldata = $this->structure_append_original_data;//Previously from $_GET["o"]; + + if ($qrcode_module_size > 0) { + } else { + if ($qrcode_image_type == 'jpeg') { + $qrcode_module_size = 8; + } else { + $qrcode_module_size = 4; + } + } + $data_length = strlen($qrcode_data_string); + if ($data_length <= 0) { + throw new DataDoesntExistsException('QRCode: data does not exist.'); + } + $data_counter = 0; + if ($qrcode_structureappend_n > 1 + && $qrcode_structureappend_n <= 16 + && $qrcode_structureappend_m > 0 + && $qrcode_structureappend_m <= 16) { + $data_value[0] = 3; + $data_bits[0] = 4; + + $data_value[1] = $qrcode_structureappend_m - 1; + $data_bits[1] = 4; + + $data_value[2] = $qrcode_structureappend_n - 1; + $data_bits[2] = 4; + + $originaldata_length = strlen($qrcode_structureappend_originaldata); + if ($originaldata_length > 1) { + $qrcode_structureappend_parity = 0; + $i = 0; + while ($i < $originaldata_length) { + $qrcode_structureappend_parity = ($qrcode_structureappend_parity ^ ord(substr($qrcode_structureappend_originaldata, $i, 1))); + ++$i; + } + } + + $data_value[3] = $qrcode_structureappend_parity; + $data_bits[3] = 8; + + $data_counter = 4; + } + + $data_bits[$data_counter] = 4; + + /* --- determine encode mode */ + + if (preg_match('/[^0-9]/', $qrcode_data_string) != 0) { + if (preg_match("/[^0-9A-Z \$\*\%\+\.\/\:\-]/", $qrcode_data_string) != 0) { + /* --- 8bit byte mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, + 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]; + + $data_value[$data_counter] = 4; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 8; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + ++$data_counter; + $i = 0; + while ($i < $data_length) { + $data_value[$data_counter] = ord(substr($qrcode_data_string, $i, 1)); + $data_bits[$data_counter] = 8; + ++$data_counter; + ++$i; + } + } else { + /* ---- alphanumeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 2; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 9; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $alphanumeric_character_hash = ['0' => 0, '1' => 1, '2' => 2, '3' => 3, '4' => 4, + '5' => 5, '6' => 6, '7' => 7, '8' => 8, '9' => 9, 'A' => 10, 'B' => 11, 'C' => 12, 'D' => 13, 'E' => 14, + 'F' => 15, 'G' => 16, 'H' => 17, 'I' => 18, 'J' => 19, 'K' => 20, 'L' => 21, 'M' => 22, 'N' => 23, + 'O' => 24, 'P' => 25, 'Q' => 26, 'R' => 27, 'S' => 28, 'T' => 29, 'U' => 30, 'V' => 31, + 'W' => 32, 'X' => 33, 'Y' => 34, 'Z' => 35, ' ' => 36, '$' => 37, '%' => 38, '*' => 39, + '+' => 40, '-' => 41, '.' => 42, '/' => 43, ':' => 44]; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 2) == 0) { + $data_value[$data_counter] = $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 6; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 45 + $alphanumeric_character_hash[substr($qrcode_data_string, $i, 1)]; + $data_bits[$data_counter] = 11; + ++$data_counter; + } + ++$i; + } + } + } else { + /* ---- numeric mode */ + + $codeword_num_plus = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, + 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4]; + + $data_value[$data_counter] = 1; + ++$data_counter; + $data_value[$data_counter] = $data_length; + $data_bits[$data_counter] = 10; /* #version 1-9 */ + $codeword_num_counter_value = $data_counter; + + $i = 0; + ++$data_counter; + while ($i < $data_length) { + if (($i % 3) == 0) { + $data_value[$data_counter] = substr($qrcode_data_string, $i, 1); + $data_bits[$data_counter] = 4; + } else { + $data_value[$data_counter] = $data_value[$data_counter] * 10 + substr($qrcode_data_string, $i, 1); + if (($i % 3) == 1) { + $data_bits[$data_counter] = 7; + } else { + $data_bits[$data_counter] = 10; + ++$data_counter; + } + } + ++$i; + } + } + if (array_key_exists($data_counter, $data_bits) && $data_bits[$data_counter] > 0) { + ++$data_counter; + } + $i = 0; + $total_data_bits = 0; + while ($i < $data_counter) { + $total_data_bits += $data_bits[$i]; + ++$i; + } + + $ecc_character_hash = [ + 'L' => '1', + 'l' => '1', + 'M' => '0', + 'm' => '0', + 'Q' => '3', + 'q' => '3', + 'H' => '2', + 'h' => '2', + ]; + + if (!is_numeric($qrcode_error_correct)) { + $ec = @$ecc_character_hash[$qrcode_error_correct]; + } else { + $ec = $qrcode_error_correct; + } + + if (!$ec) { + $ec = 0; + } + + $max_data_bits = 0; + + $max_data_bits_array = [ + 0, 128, 224, 352, 512, 688, 864, 992, 1232, 1456, 1728, + 2032, 2320, 2672, 2920, 3320, 3624, 4056, 4504, 5016, 5352, + 5712, 6256, 6880, 7312, 8000, 8496, 9024, 9544, 10136, 10984, + 11640, 12328, 13048, 13800, 14496, 15312, 15936, 16816, 17728, 18672, + + 152, 272, 440, 640, 864, 1088, 1248, 1552, 1856, 2192, + 2592, 2960, 3424, 3688, 4184, 4712, 5176, 5768, 6360, 6888, + 7456, 8048, 8752, 9392, 10208, 10960, 11744, 12248, 13048, 13880, + 14744, 15640, 16568, 17528, 18448, 19472, 20528, 21616, 22496, 23648, + + 72, 128, 208, 288, 368, 480, 528, 688, 800, 976, + 1120, 1264, 1440, 1576, 1784, 2024, 2264, 2504, 2728, 3080, + 3248, 3536, 3712, 4112, 4304, 4768, 5024, 5288, 5608, 5960, + 6344, 6760, 7208, 7688, 7888, 8432, 8768, 9136, 9776, 10208, + + 104, 176, 272, 384, 496, 608, 704, 880, 1056, 1232, + 1440, 1648, 1952, 2088, 2360, 2600, 2936, 3176, 3560, 3880, + 4096, 4544, 4912, 5312, 5744, 6032, 6464, 6968, 7288, 7880, + 8264, 8920, 9368, 9848, 10288, 10832, 11408, 12016, 12656, 13328 + ]; + if (!is_numeric($qrcode_version)) { + $qrcode_version = 0; + } + if (!$qrcode_version) { + /* #--- auto version select */ + $i = 1 + 40 * $ec; + $j = $i + 39; + $qrcode_version = 1; + while ($i <= $j) { + if (($max_data_bits_array[$i]) >= $total_data_bits + $codeword_num_plus[$qrcode_version]) { + $max_data_bits = $max_data_bits_array[$i]; + break; + } + ++$i; + ++$qrcode_version; + } + } else { + $max_data_bits = $max_data_bits_array[$qrcode_version + 40 * $ec]; + } + if ($qrcode_version > $version_ul) { + throw new VersionTooLargeException('QRCode : version too large'); + } + + $total_data_bits += $codeword_num_plus[$qrcode_version]; + $data_bits[$codeword_num_counter_value] += $codeword_num_plus[$qrcode_version]; + + $max_codewords_array = [0, 26, 44, 70, 100, 134, 172, 196, 242, + 292, 346, 404, 466, 532, 581, 655, 733, 815, 901, 991, 1085, 1156, + 1258, 1364, 1474, 1588, 1706, 1828, 1921, 2051, 2185, 2323, 2465, + 2611, 2761, 2876, 3034, 3196, 3362, 3532, 3706]; + + $max_codewords = $max_codewords_array[$qrcode_version]; + $max_modules_1side = 17 + ($qrcode_version << 2); + + $matrix_remain_bit = [0, 0, 7, 7, 7, 7, 7, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3, 3, 3, 3, + 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 3, 0, 0, 0, 0, 0, 0]; + + /* ---- read version ECC data file */ + + $byte_num = $matrix_remain_bit[$qrcode_version] + ($max_codewords << 3); + $filename = $path.'/qrv'.$qrcode_version.'_'.$ec.'.dat'; + $fp1 = fopen($filename, 'rb'); + $matx = fread($fp1, $byte_num); + $maty = fread($fp1, $byte_num); + $masks = fread($fp1, $byte_num); + $fi_x = fread($fp1, 15); + $fi_y = fread($fp1, 15); + $rs_ecc_codewords = ord(fread($fp1, 1)); + $rso = fread($fp1, 128); + fclose($fp1); + + $matrix_x_array = unpack('C*', $matx); + $matrix_y_array = unpack('C*', $maty); + $mask_array = unpack('C*', $masks); + + $rs_block_order = unpack('C*', $rso); + + $format_information_x2 = unpack('C*', $fi_x); + $format_information_y2 = unpack('C*', $fi_y); + + $format_information_x1 = [0, 1, 2, 3, 4, 5, 7, 8, 8, 8, 8, 8, 8, 8, 8]; + $format_information_y1 = [8, 8, 8, 8, 8, 8, 8, 8, 7, 5, 4, 3, 2, 1, 0]; + + $max_data_codewords = ($max_data_bits >> 3); + + $filename = $path.'/rsc'.$rs_ecc_codewords.'.dat'; + $fp0 = fopen($filename, 'rb'); + $i = 0; + $rs_cal_table_array = []; + while ($i < 256) { + $rs_cal_table_array[$i] = fread($fp0, $rs_ecc_codewords); + ++$i; + } + fclose($fp0); + + /* --- set terminator */ + + if ($total_data_bits <= $max_data_bits - 4) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = 4; + } else { + if ($total_data_bits < $max_data_bits) { + $data_value[$data_counter] = 0; + $data_bits[$data_counter] = $max_data_bits - $total_data_bits; + } else { + if ($total_data_bits > $max_data_bits) { + throw new \OverflowException('QRCode: overflow error'); + } + } + } + + /* ----divide data by 8bit */ + + $i = 0; + $codewords_counter = 0; + $codewords[0] = 0; + $remaining_bits = 8; + + while ($i <= $data_counter) { + $buffer = @$data_value[$i]; + $buffer_bits = @$data_bits[$i]; + + $flag = 1; + while ($flag) { + if ($remaining_bits > $buffer_bits) { + $codewords[$codewords_counter] = ((@$codewords[$codewords_counter] << $buffer_bits) | $buffer); + $remaining_bits -= $buffer_bits; + $flag = 0; + } else { + $buffer_bits -= $remaining_bits; + $codewords[$codewords_counter] = (($codewords[$codewords_counter] << $remaining_bits) | ($buffer >> $buffer_bits)); + + if ($buffer_bits == 0) { + $flag = 0; + } else { + $buffer = ($buffer & ((1 << $buffer_bits) - 1)); + $flag = 1; + } + + ++$codewords_counter; + if ($codewords_counter < $max_data_codewords - 1) { + $codewords[$codewords_counter] = 0; + } + $remaining_bits = 8; + } + } + ++$i; + } + if ($remaining_bits != 8) { + $codewords[$codewords_counter] = $codewords[$codewords_counter] << $remaining_bits; + } else { + --$codewords_counter; + } + + /* ---- set padding character */ + + if ($codewords_counter < $max_data_codewords - 1) { + $flag = 1; + while ($codewords_counter < $max_data_codewords - 1) { + ++$codewords_counter; + if ($flag == 1) { + $codewords[$codewords_counter] = 236; + } else { + $codewords[$codewords_counter] = 17; + } + $flag = $flag * (-1); + } + } + + /* ---- RS-ECC prepare */ + + $i = 0; + $j = 0; + $rs_block_number = 0; + $rs_temp[0] = ''; + + while ($i < $max_data_codewords) { + $rs_temp[$rs_block_number] .= chr($codewords[$i]); + ++$j; + + if ($j >= $rs_block_order[$rs_block_number + 1] - $rs_ecc_codewords) { + $j = 0; + ++$rs_block_number; + $rs_temp[$rs_block_number] = ''; + } + ++$i; + } + + /* + # + # RS-ECC main + # + */ + + $rs_block_number = 0; + $rs_block_order_num = count($rs_block_order); + + while ($rs_block_number < $rs_block_order_num) { + $rs_codewords = $rs_block_order[$rs_block_number + 1]; + $rs_data_codewords = $rs_codewords - $rs_ecc_codewords; + + $rstemp = $rs_temp[$rs_block_number].str_repeat(chr(0), $rs_ecc_codewords); + $padding_data = str_repeat(chr(0), $rs_data_codewords); + + $j = $rs_data_codewords; + while ($j > 0) { + $first = ord(substr($rstemp, 0, 1)); + + if ($first) { + $left_chr = substr($rstemp, 1); + $cal = $rs_cal_table_array[$first].$padding_data; + $rstemp = $left_chr ^ $cal; + } else { + $rstemp = substr($rstemp, 1); + } + + --$j; + } + + $codewords = array_merge($codewords, unpack('C*', $rstemp)); + + ++$rs_block_number; + } + + /* ---- flash matrix */ + $matrix_content = []; + $i = 0; + while ($i < $max_modules_1side) { + $j = 0; + while ($j < $max_modules_1side) { + $matrix_content[$j][$i] = 0; + ++$j; + } + ++$i; + } + + /* --- attach data */ + + $i = 0; + while ($i < $max_codewords) { + $codeword_i = $codewords[$i]; + $j = 8; + while ($j >= 1) { + $codeword_bits_number = ($i << 3) + $j; + $matrix_content[ $matrix_x_array[$codeword_bits_number] ][ $matrix_y_array[$codeword_bits_number] ] = ((255 * ($codeword_i & 1)) ^ $mask_array[$codeword_bits_number]); + $codeword_i = $codeword_i >> 1; + --$j; + } + ++$i; + } + + $matrix_remain = $matrix_remain_bit[$qrcode_version]; + while ($matrix_remain) { + $remain_bit_temp = $matrix_remain + ($max_codewords << 3); + $matrix_content[ $matrix_x_array[$remain_bit_temp] ][ $matrix_y_array[$remain_bit_temp] ] = (255 ^ $mask_array[$remain_bit_temp]); + --$matrix_remain; + } + + #--- mask select + + $min_demerit_score = 0; + $hor_master = ''; + $ver_master = ''; + $k = 0; + while ($k < $max_modules_1side) { + $l = 0; + while ($l < $max_modules_1side) { + $hor_master = $hor_master.chr($matrix_content[$l][$k]); + $ver_master = $ver_master.chr($matrix_content[$k][$l]); + ++$l; + } + ++$k; + } + $i = 0; + $all_matrix = $max_modules_1side * $max_modules_1side; + $mask_number = 0; + while ($i < 8) { + $demerit_n1 = 0; + $ptn_temp = []; + $bit = 1 << $i; + $bit_r = (~$bit) & 255; + $bit_mask = str_repeat(chr($bit), $all_matrix); + $hor = $hor_master & $bit_mask; + $ver = $ver_master & $bit_mask; + + $ver_shift1 = $ver.str_repeat(chr(170), $max_modules_1side); + $ver_shift2 = str_repeat(chr(170), $max_modules_1side).$ver; + $ver_shift1_0 = $ver.str_repeat(chr(0), $max_modules_1side); + $ver_shift2_0 = str_repeat(chr(0), $max_modules_1side).$ver; + $ver_or = chunk_split(~($ver_shift1 | $ver_shift2), $max_modules_1side, chr(170)); + $ver_and = chunk_split(~($ver_shift1_0 & $ver_shift2_0), $max_modules_1side, chr(170)); + + $hor = chunk_split(~$hor, $max_modules_1side, chr(170)); + $ver = chunk_split(~$ver, $max_modules_1side, chr(170)); + $hor = $hor.chr(170).$ver; + + $n1_search = '/'.str_repeat(chr(255), 5).'+|'.str_repeat(chr($bit_r), 5).'+/'; + $n3_search = chr($bit_r).chr(255).chr($bit_r).chr($bit_r).chr($bit_r).chr(255).chr($bit_r); + + $demerit_n3 = substr_count($hor, $n3_search) * 40; + $demerit_n4 = floor(abs(((100 * (substr_count($ver, chr($bit_r)) / ($byte_num))) - 50) / 5)) * 10; + + $n2_search1 = '/'.chr($bit_r).chr($bit_r).'+/'; + $n2_search2 = '/'.chr(255).chr(255).'+/'; + $demerit_n2 = 0; + preg_match_all($n2_search1, $ver_and, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $ptn_temp = []; + preg_match_all($n2_search2, $ver_or, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n2 += (strlen($str_temp) - 1); + } + $demerit_n2 *= 3; + + $ptn_temp = []; + + preg_match_all($n1_search, $hor, $ptn_temp); + foreach ($ptn_temp[0] as $str_temp) { + $demerit_n1 += (strlen($str_temp) - 2); + } + + $demerit_score = $demerit_n1 + $demerit_n2 + $demerit_n3 + $demerit_n4; + + if ($demerit_score <= $min_demerit_score || $i == 0) { + $mask_number = $i; + $min_demerit_score = $demerit_score; + } + + ++$i; + } + + $mask_content = 1 << $mask_number; + + # --- format information + + $format_information_value = (($ec << 3) | $mask_number); + $format_information_array = ['101010000010010', '101000100100101', + '101111001111100', '101101101001011', '100010111111001', '100000011001110', + '100111110010111', '100101010100000', '111011111000100', '111001011110011', + '111110110101010', '111100010011101', '110011000101111', '110001100011000', + '110110001000001', '110100101110110', '001011010001001', '001001110111110', + '001110011100111', '001100111010000', '000011101100010', '000001001010101', + '000110100001100', '000100000111011', '011010101011111', '011000001101000', + '011111100110001', '011101000000110', '010010010110100', '010000110000011', + '010111011011010', '010101111101101']; + $i = 0; + while ($i < 15) { + $content = substr($format_information_array[$format_information_value], $i, 1); + + $matrix_content[$format_information_x1[$i]][$format_information_y1[$i]] = $content * 255; + $matrix_content[$format_information_x2[$i + 1]][$format_information_y2[$i + 1]] = $content * 255; + ++$i; + } + + $mib = $max_modules_1side; + if ($this->draw_quiet_zone) { + $mib += 8; + } + + if ($this->size == 0) { + $this->size = $mib * $qrcode_module_size; + if ($this->size > 1480) { + throw new ImageSizeTooLargeException('QRCode: image size too large'); + } + } + + $image_width = $this->size + $this->padding * 2; + $image_height = $this->size + $this->padding * 2; + + if (!empty($this->label)) { + if (!function_exists('imagettfbbox')) { + throw new FreeTypeLibraryMissingException('QRCode: missing function "imagettfbbox". Did you install the FreeType library?'); + } + $font_box = imagettfbbox($this->label_font_size, 0, $this->label_font_path, $this->label); + $label_width = (int) $font_box[2] - (int) $font_box[0]; + $label_height = (int) $font_box[0] - (int) $font_box[7]; + + if ($this->label_valign == self::LABEL_VALIGN_MIDDLE) { + $image_height += $label_height + $this->padding; + } else { + $image_height += $label_height; + } + } + + $output_image = imagecreate($image_width, $image_height); + imagecolorallocate($output_image, 255, 255, 255); + + $image_path = $image_path.'/qrv'.$qrcode_version.'.png'; + + $base_image = imagecreatefrompng($image_path); + $code_size = $this->size; + $module_size = function ($size = 1) use ($code_size, $base_image) { + return round($code_size / imagesx($base_image) * $size); + }; + + $col[1] = imagecolorallocate($base_image, 0, 0, 0); + $col[0] = imagecolorallocate($base_image, 255, 255, 255); + + $i = 4; + $mxe = 4 + $max_modules_1side; + $ii = 0; + while ($i < $mxe) { + $j = 4; + $jj = 0; + while ($j < $mxe) { + if ($matrix_content[$ii][$jj] & $mask_content) { + imagesetpixel($base_image, $i, $j, $col[1]); + } + ++$j; + ++$jj; + } + ++$i; + ++$ii; + } + + if ($this->draw_quiet_zone == true) { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 0, 0, $this->size, $this->size, $mib, $mib); + } else { + imagecopyresampled($output_image, $base_image, $this->padding, $this->padding, 4, 4, $this->size, $this->size, $mib, $mib); + } + + if ($this->draw_border == true) { + $border_width = $this->padding; + $border_height = $this->size + $this->padding - 1; + $border_color = imagecolorallocate($output_image, 0, 0, 0); + imagerectangle($output_image, $border_width, $border_width, $border_height, $border_height, $border_color); + } + + if (!empty($this->label)) { + // Label horizontal alignment + switch ($this->label_halign) { + case self::LABEL_HALIGN_LEFT: + $font_x = 0; + break; + + case self::LABEL_HALIGN_LEFT_BORDER: + $font_x = $this->padding; + break; + + case self::LABEL_HALIGN_LEFT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->padding + $module_size(4); + } else { + $font_x = $this->padding; + } + break; + + case self::LABEL_HALIGN_RIGHT: + $font_x = $this->size + ($this->padding * 2) - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_BORDER: + $font_x = $this->size + $this->padding - $label_width; + break; + + case self::LABEL_HALIGN_RIGHT_CODE: + if ($this->draw_quiet_zone == true) { + $font_x = $this->size + $this->padding - $label_width - $module_size(4); + } else { + $font_x = $this->size + $this->padding - $label_width; + } + break; + + default: + $font_x = floor($image_width - $label_width) / 2; + } + + // Label vertical alignment + switch ($this->label_valign) { + case self::LABEL_VALIGN_TOP_NO_BORDER: + $font_y = $image_height - $this->padding - 1; + break; + + case self::LABEL_VALIGN_BOTTOM: + $font_y = $image_height; + break; + + default: + $font_y = $image_height - $this->padding; + } + + $label_bg_x1 = $font_x - $module_size(2); + $label_bg_y1 = $font_y - $label_height; + $label_bg_x2 = $font_x + $label_width + $module_size(2); + $label_bg_y2 = $font_y; + + $color = imagecolorallocate($output_image, 0, 0, 0); + $label_bg_color = imagecolorallocate($output_image, 255, 255, 255); + + imagefilledrectangle($output_image, $label_bg_x1, $label_bg_y1, $label_bg_x2, $label_bg_y2, $label_bg_color); + imagettftext($output_image, $this->label_font_size, 0, $font_x, $font_y, $color, $this->label_font_path, $this->label); + } + + $imagecolorset_function = new ReflectionFunction('imagecolorset'); + $allow_alpha = $imagecolorset_function->getNumberOfParameters() == 6; + + if ($this->color_background != null) { + $index = imagecolorclosest($output_image, 255, 255, 255); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b'], $this->color_background['a']); + } else { + imagecolorset($output_image, $index, $this->color_background['r'], $this->color_background['g'], $this->color_background['b']); + } + } + + if ($this->color_foreground != null) { + $index = imagecolorclosest($output_image, 0, 0, 0); + if ($allow_alpha) { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b'], $this->color_foreground['a']); + } else { + imagecolorset($output_image, $index, $this->color_foreground['r'], $this->color_foreground['g'], $this->color_foreground['b']); + } + } + + if (!empty($this->logo)) { + $output_image_org = $output_image; + $output_image = imagecreatetruecolor($image_width, $image_height); + imagecopy($output_image, $output_image_org, 0, 0, 0, 0, $image_width, $image_height); + + $image_info = getimagesize($this->logo); + + if ($image_info !== false) { + $image_type = strtolower(substr(image_type_to_extension($image_info [2]), 1)); + $logo_image = call_user_func('imagecreatefrom'.$image_type, $this->logo); + } else { + $logo_image = call_user_func('imagecreatefrom'.$this->image_type, $this->logo); + } + + if (!$logo_image) { + throw new ImageFunctionFailedException('imagecreatefrom'.$this->image_type.' '.$this->logo.' failed'); + } + $src_w = imagesx($logo_image); + $src_h = imagesy($logo_image); + + $dst_x = ($image_width - $this->logo_size) / 2; + $dst_y = ($this->size + $this->padding * 2 - $this->logo_size) / 2; + + $successful = imagecopyresampled($output_image, $logo_image, $dst_x, $dst_y, 0, 0, $this->logo_size, $this->logo_size, $src_w, $src_h); + if (!$successful) { + throw new ImageFunctionFailedException('add logo [image'.$this->format.'] failed.'); + } + imagedestroy($logo_image); + } + $this->image = $output_image; + } } diff --git a/conlite/external/endroid/qr-code/src/QrCodeInterface.php b/conlite/external/endroid/qr-code/src/QrCodeInterface.php deleted file mode 100644 index 2c96984..0000000 --- a/conlite/external/endroid/qr-code/src/QrCodeInterface.php +++ /dev/null @@ -1,29 +0,0 @@ -create($qrCode); - - return new BinaryResult($matrix); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php b/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php deleted file mode 100644 index 3e89515..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/DebugWriter.php +++ /dev/null @@ -1,28 +0,0 @@ -setValidateResult(true); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php b/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php deleted file mode 100644 index 2ffd219..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/EpsWriter.php +++ /dev/null @@ -1,44 +0,0 @@ -create($qrCode); - - $lines = [ - '%!PS-Adobe-3.0 EPSF-3.0', - '%%BoundingBox: 0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize(), - '/F { rectfill } def', - number_format($qrCode->getBackgroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getBackgroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', - '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize().' F', - number_format($qrCode->getForegroundColor()->getRed() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getGreen() / 100, 2, '.', ',').' '.number_format($qrCode->getForegroundColor()->getBlue() / 100, 2, '.', ',').' setrgbcolor', - ]; - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($matrix->getBlockCount() - 1 - $rowIndex, $columnIndex)) { - $x = $matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex; - $y = $matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex; - $lines[] = number_format($x, self::DECIMAL_PRECISION, '.', '').' '.number_format($y, self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' '.number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '').' F'; - } - } - } - - return new EpsResult($lines); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php b/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php deleted file mode 100644 index fea70f4..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/PdfWriter.php +++ /dev/null @@ -1,116 +0,0 @@ -create($qrCode); - - $unit = 'mm'; - if (isset($options[self::WRITER_OPTION_UNIT])) { - $unit = $options[self::WRITER_OPTION_UNIT]; - } - - $allowedUnits = ['mm', 'pt', 'cm', 'in']; - if (!in_array($unit, $allowedUnits)) { - throw new \Exception(sprintf('PDF Measure unit should be one of [%s]', implode(', ', $allowedUnits))); - } - - $labelSpace = 0; - if ($label instanceof LabelInterface) { - $labelSpace = 30; - } - - if (!class_exists(\FPDF::class)) { - throw new \Exception('Unable to find FPDF: check your installation'); - } - - $foregroundColor = $qrCode->getForegroundColor(); - if ($foregroundColor->getAlpha() > 0) { - throw new \Exception('PDF Writer does not support alpha channels'); - } - $backgroundColor = $qrCode->getBackgroundColor(); - if ($backgroundColor->getAlpha() > 0) { - throw new \Exception('PDF Writer does not support alpha channels'); - } - - // @todo Check how to add label height later - $fpdf = new \FPDF('P', $unit, [$matrix->getOuterSize(), $matrix->getOuterSize() + $labelSpace]); - $fpdf->AddPage(); - - $fpdf->SetFillColor($backgroundColor->getRed(), $backgroundColor->getGreen(), $backgroundColor->getBlue()); - $fpdf->Rect(0, 0, $matrix->getOuterSize(), $matrix->getOuterSize(), 'F'); - $fpdf->SetFillColor($foregroundColor->getRed(), $foregroundColor->getGreen(), $foregroundColor->getBlue()); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - $fpdf->Rect( - $matrix->getMarginLeft() + ($columnIndex * $matrix->getBlockSize()), - $matrix->getMarginLeft() + ($rowIndex * $matrix->getBlockSize()), - $matrix->getBlockSize(), - $matrix->getBlockSize(), - 'F' - ); - } - } - } - - $result = new PdfResult($fpdf); - - if ($logo instanceof LogoInterface) { - $result = $this->addLogo($logo, $result); - } - - if ($label instanceof LabelInterface) { - $fpdf->setY($fpdf->GetPageHeight() - 25); - $fpdf->SetFont('Helvetica', null, $label->getFont()->getSize()); - $fpdf->Cell(0, 0, $label->getText(), 0, 0, 'C'); - } - - return $result; - } - - private function addLogo(LogoInterface $logo, PdfResult $result): PdfResult - { - $fpdf = $result->getPdf(); - - $logoPath = $logo->getPath(); - $logoHeight = $logo->getResizeToHeight(); - $logoWidth = $logo->getResizeToWidth(); - - if (null === $logoHeight || null === $logoWidth) { - [$logoSourceWidth, $logoSourceHeight] = \getimagesize($logoPath); - - if (null === $logoWidth) { - $logoWidth = (int) $logoSourceWidth; - } - - if (null === $logoHeight) { - $aspectRatio = $logoWidth / $logoSourceWidth; - $logoHeight = (int) ($logoSourceHeight * $aspectRatio); - } - } - - $logoX = $fpdf->GetPageWidth() / 2 - (int) $logoWidth / 2; - $logoY = $fpdf->GetPageHeight() / 2 - (int) $logoHeight / 2; - - $fpdf->Image($logoPath, $logoX, $logoY, $logoWidth, $logoHeight); - - return $result; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/PngWriter.php b/conlite/external/endroid/qr-code/src/Writer/PngWriter.php deleted file mode 100644 index 209d69e..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/PngWriter.php +++ /dev/null @@ -1,232 +0,0 @@ -create($qrCode); - - $baseBlockSize = 50; - $baseImage = imagecreatetruecolor($matrix->getBlockCount() * $baseBlockSize, $matrix->getBlockCount() * $baseBlockSize); - - if (!$baseImage) { - throw new \Exception('Unable to generate image: check your GD installation'); - } - - /** @var int $foregroundColor */ - $foregroundColor = imagecolorallocatealpha( - $baseImage, - $qrCode->getForegroundColor()->getRed(), - $qrCode->getForegroundColor()->getGreen(), - $qrCode->getForegroundColor()->getBlue(), - $qrCode->getForegroundColor()->getAlpha() - ); - - /** @var int $backgroundColor */ - $backgroundColor = imagecolorallocatealpha( - $baseImage, - $qrCode->getBackgroundColor()->getRed(), - $qrCode->getBackgroundColor()->getGreen(), - $qrCode->getBackgroundColor()->getBlue(), - $qrCode->getBackgroundColor()->getAlpha() - ); - - imagefill($baseImage, 0, 0, $backgroundColor); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - imagefilledrectangle( - $baseImage, - $columnIndex * $baseBlockSize, - $rowIndex * $baseBlockSize, - ($columnIndex + 1) * $baseBlockSize, - ($rowIndex + 1) * $baseBlockSize, - $foregroundColor - ); - } - } - } - - $targetWidth = $matrix->getOuterSize(); - $targetHeight = $matrix->getOuterSize(); - - if ($label instanceof LabelInterface) { - $labelImageData = LabelImageData::createForLabel($label); - $targetHeight += $labelImageData->getHeight() + $label->getMargin()->getTop() + $label->getMargin()->getBottom(); - } - - $targetImage = imagecreatetruecolor($targetWidth, $targetHeight); - - if (!$targetImage) { - throw new \Exception('Unable to generate image: check your GD installation'); - } - - /** @var int $backgroundColor */ - $backgroundColor = imagecolorallocatealpha( - $targetImage, - $qrCode->getBackgroundColor()->getRed(), - $qrCode->getBackgroundColor()->getGreen(), - $qrCode->getBackgroundColor()->getBlue(), - $qrCode->getBackgroundColor()->getAlpha() - ); - - imagefill($targetImage, 0, 0, $backgroundColor); - - imagecopyresampled( - $targetImage, - $baseImage, - $matrix->getMarginLeft(), - $matrix->getMarginLeft(), - 0, - 0, - $matrix->getInnerSize(), - $matrix->getInnerSize(), - imagesx($baseImage), - imagesy($baseImage) - ); - - if (PHP_VERSION_ID < 80000) { - imagedestroy($baseImage); - } - - if ($qrCode->getBackgroundColor()->getAlpha() > 0) { - imagesavealpha($targetImage, true); - } - - $result = new PngResult($targetImage); - - if ($logo instanceof LogoInterface) { - $result = $this->addLogo($logo, $result); - } - - if ($label instanceof LabelInterface) { - $result = $this->addLabel($label, $result); - } - - return $result; - } - - private function addLogo(LogoInterface $logo, PngResult $result): PngResult - { - $logoImageData = LogoImageData::createForLogo($logo); - - if ('image/svg+xml' === $logoImageData->getMimeType()) { - throw new \Exception('PNG Writer does not support SVG logo'); - } - - $targetImage = $result->getImage(); - - if ($logoImageData->getPunchoutBackground()) { - /** @var int $transparent */ - $transparent = imagecolorallocatealpha($targetImage, 255, 255, 255, 127); - imagealphablending($targetImage, false); - for ( - $x_offset = intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2); - $x_offset < intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2) + $logoImageData->getWidth(); - ++$x_offset - ) { - for ( - $y_offset = intval(imagesy($targetImage) / 2 - $logoImageData->getHeight() / 2); - $y_offset < intval(imagesy($targetImage) / 2 - $logoImageData->getHeight() / 2) + $logoImageData->getHeight(); - ++$y_offset - ) { - imagesetpixel( - $targetImage, - $x_offset, - $y_offset, - $transparent - ); - } - } - } - - imagecopyresampled( - $targetImage, - $logoImageData->getImage(), - intval(imagesx($targetImage) / 2 - $logoImageData->getWidth() / 2), - intval(imagesx($targetImage) / 2 - $logoImageData->getHeight() / 2), - 0, - 0, - $logoImageData->getWidth(), - $logoImageData->getHeight(), - imagesx($logoImageData->getImage()), - imagesy($logoImageData->getImage()) - ); - - if (PHP_VERSION_ID < 80000) { - imagedestroy($logoImageData->getImage()); - } - - return new PngResult($targetImage); - } - - private function addLabel(LabelInterface $label, PngResult $result): PngResult - { - $targetImage = $result->getImage(); - - $labelImageData = LabelImageData::createForLabel($label); - - /** @var int $textColor */ - $textColor = imagecolorallocatealpha( - $targetImage, - $label->getTextColor()->getRed(), - $label->getTextColor()->getGreen(), - $label->getTextColor()->getBlue(), - $label->getTextColor()->getAlpha() - ); - - $x = intval(imagesx($targetImage) / 2 - $labelImageData->getWidth() / 2); - $y = imagesy($targetImage) - $label->getMargin()->getBottom(); - - if ($label->getAlignment() instanceof LabelAlignmentLeft) { - $x = $label->getMargin()->getLeft(); - } elseif ($label->getAlignment() instanceof LabelAlignmentRight) { - $x = imagesx($targetImage) - $labelImageData->getWidth() - $label->getMargin()->getRight(); - } - - imagettftext($targetImage, $label->getFont()->getSize(), 0, $x, $y, $textColor, $label->getFont()->getPath(), $label->getText()); - - return new PngResult($targetImage); - } - - public function validateResult(ResultInterface $result, string $expectedData): void - { - $string = $result->getString(); - - if (!class_exists(QrReader::class)) { - throw new \Exception('Please install khanamiryan/qrcode-detector-decoder or disable image validation'); - } - - if (PHP_VERSION_ID >= 80000) { - throw new \Exception('The validator is not compatible with PHP 8 yet, see https://github.com/khanamiryan/php-qrcode-detector-decoder/pull/103'); - } - - $reader = new QrReader($string, QrReader::SOURCE_TYPE_BLOB); - if ($reader->text() !== $expectedData) { - throw new \Exception('Built-in validation reader read "'.$reader->text().'" instead of "'.$expectedData.'". - Adjust your parameters to increase readability or disable built-in validation.'); - } - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php deleted file mode 100644 index 43b680b..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/AbstractResult.php +++ /dev/null @@ -1,19 +0,0 @@ -getMimeType().';base64,'.base64_encode($this->getString()); - } - - public function saveToFile(string $path): void - { - $string = $this->getString(); - file_put_contents($path, $string); - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php deleted file mode 100644 index 7466759..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/BinaryResult.php +++ /dev/null @@ -1,35 +0,0 @@ -matrix = $matrix; - } - - public function getString(): string - { - $binaryString = ''; - for ($rowIndex = 0; $rowIndex < $this->matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $this->matrix->getBlockCount(); ++$columnIndex) { - $binaryString .= $this->matrix->getBlockValue($rowIndex, $columnIndex); - } - $binaryString .= "\n"; - } - - return $binaryString; - } - - public function getMimeType(): string - { - return 'text/plain'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php deleted file mode 100644 index ce9a28c..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/DebugResult.php +++ /dev/null @@ -1,83 +0,0 @@ - */ - private $options; - - /** @var bool */ - private $validateResult = false; - - /** @param array $options */ - public function __construct(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []) - { - $this->qrCode = $qrCode; - $this->logo = $logo; - $this->label = $label; - $this->options = $options; - } - - public function setValidateResult(bool $validateResult): void - { - $this->validateResult = $validateResult; - } - - public function getString(): string - { - $debugLines = []; - - $debugLines[] = 'Data: '.$this->qrCode->getData(); - $debugLines[] = 'Encoding: '.$this->qrCode->getEncoding(); - $debugLines[] = 'Error Correction Level: '.get_class($this->qrCode->getErrorCorrectionLevel()); - $debugLines[] = 'Size: '.$this->qrCode->getSize(); - $debugLines[] = 'Margin: '.$this->qrCode->getMargin(); - $debugLines[] = 'Round block size mode: '.get_class($this->qrCode->getRoundBlockSizeMode()); - $debugLines[] = 'Foreground color: ['.implode(', ', $this->qrCode->getForegroundColor()->toArray()).']'; - $debugLines[] = 'Background color: ['.implode(', ', $this->qrCode->getBackgroundColor()->toArray()).']'; - - foreach ($this->options as $key => $value) { - $debugLines[] = 'Writer option: '.$key.': '.$value; - } - - if (isset($this->logo)) { - $debugLines[] = 'Logo path: '.$this->logo->getPath(); - $debugLines[] = 'Logo resize to width: '.$this->logo->getResizeToWidth(); - $debugLines[] = 'Logo resize to height: '.$this->logo->getResizeToHeight(); - } - - if (isset($this->label)) { - $debugLines[] = 'Label text: '.$this->label->getText(); - $debugLines[] = 'Label font path: '.$this->label->getFont()->getPath(); - $debugLines[] = 'Label font size: '.$this->label->getFont()->getSize(); - $debugLines[] = 'Label alignment: '.get_class($this->label->getAlignment()); - $debugLines[] = 'Label margin: ['.implode(', ', $this->label->getMargin()->toArray()).']'; - $debugLines[] = 'Label text color: ['.implode(', ', $this->label->getTextColor()->toArray()).']'; - } - - $debugLines[] = 'Validate result: '.($this->validateResult ? 'true' : 'false'); - - return implode("\n", $debugLines); - } - - public function getMimeType(): string - { - return 'text/plain'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php deleted file mode 100644 index 31d56a1..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/EpsResult.php +++ /dev/null @@ -1,27 +0,0 @@ - */ - private $lines; - - /** @param array $lines */ - public function __construct(array $lines) - { - $this->lines = $lines; - } - - public function getString(): string - { - return implode("\n", $this->lines); - } - - public function getMimeType(): string - { - return 'image/eps'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php deleted file mode 100644 index 936219e..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/PdfResult.php +++ /dev/null @@ -1,31 +0,0 @@ -fpdf = $fpdf; - } - - public function getPdf(): \FPDF - { - return $this->fpdf; - } - - public function getString(): string - { - return $this->fpdf->Output('S'); - } - - public function getMimeType(): string - { - return 'application/pdf'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php b/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php deleted file mode 100644 index efa26c5..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/PngResult.php +++ /dev/null @@ -1,36 +0,0 @@ -image = $image; - } - - /** @return mixed */ - public function getImage() - { - return $this->image; - } - - public function getString(): string - { - ob_start(); - imagepng($this->image); - - return strval(ob_get_clean()); - } - - public function getMimeType(): string - { - return 'image/png'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php b/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php deleted file mode 100644 index a255605..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/Result/ResultInterface.php +++ /dev/null @@ -1,16 +0,0 @@ -xml = $xml; - $this->excludeXmlDeclaration = $excludeXmlDeclaration; - } - - public function getXml(): \SimpleXMLElement - { - return $this->xml; - } - - public function getString(): string - { - $string = $this->xml->asXML(); - - if (!is_string($string)) { - throw new \Exception('Could not save SVG XML to string'); - } - - if ($this->excludeXmlDeclaration) { - $string = str_replace("\n", '', $string); - } - - return $string; - } - - public function getMimeType(): string - { - return 'image/svg+xml'; - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php b/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php deleted file mode 100644 index 88665af..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/SvgWriter.php +++ /dev/null @@ -1,109 +0,0 @@ -create($qrCode); - - $xml = new \SimpleXMLElement(''); - $xml->addAttribute('version', '1.1'); - $xml->addAttribute('width', $matrix->getOuterSize().'px'); - $xml->addAttribute('height', $matrix->getOuterSize().'px'); - $xml->addAttribute('viewBox', '0 0 '.$matrix->getOuterSize().' '.$matrix->getOuterSize()); - $xml->addChild('defs'); - - $blockDefinition = $xml->defs->addChild('rect'); - $blockDefinition->addAttribute('id', $options[self::WRITER_OPTION_BLOCK_ID]); - $blockDefinition->addAttribute('width', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '')); - $blockDefinition->addAttribute('height', number_format($matrix->getBlockSize(), self::DECIMAL_PRECISION, '.', '')); - $blockDefinition->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getForegroundColor()->getRed(), $qrCode->getForegroundColor()->getGreen(), $qrCode->getForegroundColor()->getBlue())); - $blockDefinition->addAttribute('fill-opacity', strval($qrCode->getForegroundColor()->getOpacity())); - - $background = $xml->addChild('rect'); - $background->addAttribute('x', '0'); - $background->addAttribute('y', '0'); - $background->addAttribute('width', strval($matrix->getOuterSize())); - $background->addAttribute('height', strval($matrix->getOuterSize())); - $background->addAttribute('fill', '#'.sprintf('%02x%02x%02x', $qrCode->getBackgroundColor()->getRed(), $qrCode->getBackgroundColor()->getGreen(), $qrCode->getBackgroundColor()->getBlue())); - $background->addAttribute('fill-opacity', strval($qrCode->getBackgroundColor()->getOpacity())); - - for ($rowIndex = 0; $rowIndex < $matrix->getBlockCount(); ++$rowIndex) { - for ($columnIndex = 0; $columnIndex < $matrix->getBlockCount(); ++$columnIndex) { - if (1 === $matrix->getBlockValue($rowIndex, $columnIndex)) { - $block = $xml->addChild('use'); - $block->addAttribute('x', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $columnIndex, self::DECIMAL_PRECISION, '.', '')); - $block->addAttribute('y', number_format($matrix->getMarginLeft() + $matrix->getBlockSize() * $rowIndex, self::DECIMAL_PRECISION, '.', '')); - $block->addAttribute('xlink:href', '#'.$options[self::WRITER_OPTION_BLOCK_ID], 'http://www.w3.org/1999/xlink'); - } - } - } - - $result = new SvgResult($xml, $options[self::WRITER_OPTION_EXCLUDE_XML_DECLARATION]); - - if ($logo instanceof LogoInterface) { - $this->addLogo($logo, $result, $options); - } - - return $result; - } - - /** @param array $options */ - private function addLogo(LogoInterface $logo, SvgResult $result, array $options): void - { - $logoImageData = LogoImageData::createForLogo($logo); - - if (!isset($options[self::WRITER_OPTION_FORCE_XLINK_HREF])) { - $options[self::WRITER_OPTION_FORCE_XLINK_HREF] = false; - } - - $xml = $result->getXml(); - - /** @var \SimpleXMLElement $xmlAttributes */ - $xmlAttributes = $xml->attributes(); - - $x = intval($xmlAttributes->width) / 2 - $logoImageData->getWidth() / 2; - $y = intval($xmlAttributes->height) / 2 - $logoImageData->getHeight() / 2; - - $imageDefinition = $xml->addChild('image'); - $imageDefinition->addAttribute('x', strval($x)); - $imageDefinition->addAttribute('y', strval($y)); - $imageDefinition->addAttribute('width', strval($logoImageData->getWidth())); - $imageDefinition->addAttribute('height', strval($logoImageData->getHeight())); - $imageDefinition->addAttribute('preserveAspectRatio', 'none'); - - // xlink:href is actually deprecated, but still required when placing the qr code in a pdf. - // SimpleXML strips out the xlink part by using addAttribute(), so it must be set directly. - if ($options[self::WRITER_OPTION_FORCE_XLINK_HREF]) { - $imageDefinition['xlink:href'] = $logoImageData->createDataUri(); - } else { - $imageDefinition->addAttribute('href', $logoImageData->createDataUri()); - } - } -} diff --git a/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php b/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php deleted file mode 100644 index 4f40048..0000000 --- a/conlite/external/endroid/qr-code/src/Writer/ValidatingWriterInterface.php +++ /dev/null @@ -1,12 +0,0 @@ - $options */ - public function write(QrCodeInterface $qrCode, LogoInterface $logo = null, LabelInterface $label = null, array $options = []): ResultInterface; -} diff --git a/conlite/includes/startup.php b/conlite/includes/startup.php index 323a941..9a51ad9 100644 --- a/conlite/includes/startup.php +++ b/conlite/includes/startup.php @@ -228,4 +228,4 @@ if($cfg['debug']['sendnocacheheader']) { header("Pragma: no-cache"); // HTTP 1.0. header("Expires: 0"); // Proxies. } -?> \ No newline at end of file +?> diff --git a/nbproject/project.xml b/nbproject/project.xml index 0edc2ce..c7e626f 100644 --- a/nbproject/project.xml +++ b/nbproject/project.xml @@ -3,7 +3,7 @@ org.netbeans.modules.php.project - ConLite213 + cl_stage diff --git a/setup/lib/defines.php b/setup/lib/defines.php index aec9db6..9eb0ec5 100644 --- a/setup/lib/defines.php +++ b/setup/lib/defines.php @@ -39,4 +39,4 @@ define('C_SETUP_STEPWIDTH', 28); define('C_SETUP_STEPHEIGHT', 28); define('C_SETUP_MIN_PHP_VERSION', '7.4.0'); define('C_SETUP_MAX_PHP_VERSION', '8.2.0'); -define('C_SETUP_VERSION', '2.2.0 beta'); \ No newline at end of file +define('C_SETUP_VERSION', '2.2.0 beta'); diff --git a/setup/steps/forms/clientmode.php b/setup/steps/forms/clientmode.php index aa90d75..ca9be72 100644 --- a/setup/steps/forms/clientmode.php +++ b/setup/steps/forms/clientmode.php @@ -48,7 +48,7 @@ class cSetupClientMode extends cSetupMask { $aChoices["CLIENT"] = i18n_setup("Client without examples"); $aChoices["NOCLIENT"] = i18n_setup("Don't create client"); - $sChoiceDefault = "CLIENTEXAMPLES"; + $sChoiceDefault = "NOCLIENT"; foreach ($aChoices as $sKey => $sChoice) { if ($sChoice == "none") {