2026-01-09 07:13:59 +00:00

36 lines
1.1 KiB
PHP

<?php declare(strict_types=1);
namespace PrinsFrank\PdfParser\Document\CMap\ToUnicode;
use PrinsFrank\PdfParser\Exception\ParseFailureException;
/** @internal */
class BFRange {
/** @param list<string> $destinationCodePoints */
public function __construct(
public readonly int $sourceCodeStart,
public readonly int $sourceCodeEnd,
public readonly array $destinationCodePoints,
) {
}
public function containsCharacterCode(int $characterCode): bool {
return $characterCode >= $this->sourceCodeStart
&& $characterCode <= $this->sourceCodeEnd;
}
/** @throws ParseFailureException */
public function toUnicode(int $characterCode): ?string {
if (count($this->destinationCodePoints) === 1) {
return CodePoint::toString(
dechex(((int) hexdec($this->destinationCodePoints[0])) + $characterCode - $this->sourceCodeStart),
);
}
return CodePoint::toString(
$this->destinationCodePoints[$characterCode - $this->sourceCodeStart]
?? throw new ParseFailureException(),
);
}
}