* @copyright 2023 smiley * @license MIT */ namespace WCPOS\Vendor\chillerlan\QRCode\Output; use function array_map, implode, is_string, max, min, sprintf; /** * */ class QRStringText extends QROutputAbstract { public const MIME_TYPE = 'text/plain'; /** * @inheritDoc */ public static function moduleValueIsValid($value) : bool { return is_string($value); } /** * @inheritDoc */ protected function prepareModuleValue($value) : string { return $value; } /** * @inheritDoc */ protected function getDefaultModuleValue(bool $isDark) : string { return $isDark ? '██' : '░░'; } /** * @inheritDoc */ public function dump(?string $file = null) : string { $lines = []; $linestart = $this->options->textLineStart; foreach ($this->matrix->getMatrix() as $row) { $lines[] = $linestart . implode('', array_map([$this, 'getModuleValue'], $row)); } $data = implode($this->eol, $lines); $this->saveToFile($data, $file); return $data; } /** * a little helper to create a proper ANSI 8-bit color escape sequence * * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit * @see https://en.wikipedia.org/wiki/Block_Elements * * @codeCoverageIgnore */ public static function ansi8(string $str, int $color, ?bool $background = null) : string { $color = max(0, min($color, 255)); $background = $background === \true ? 48 : 38; return sprintf("\x1b[%s;5;%sm%s\x1b[0m", $background, $color, $str); } }