diff --git a/src/Document/CMap/ToUnicode/ToUnicodeCMapParser.php b/src/Document/CMap/ToUnicode/ToUnicodeCMapParser.php index 02f9cf87..097022ed 100644 --- a/src/Document/CMap/ToUnicode/ToUnicodeCMapParser.php +++ b/src/Document/CMap/ToUnicode/ToUnicodeCMapParser.php @@ -69,13 +69,18 @@ public static function parse(Stream $stream, int $startOffset, int $nrOfBytes): } foreach ($matchesBFRange as $matchBFRange) { + $targetString = trim($matchBFRange['targetString']); + if (str_starts_with($targetString, '[') && str_ends_with($targetString, ']')) { + preg_match_all('/<\s*([^> ]+)\s*>/', $targetString, $hexMatches); + $targetValues = $hexMatches[1]; + } else { + $targetValues = [trim($targetString, '<> ')]; + } + $bfCharRangeInfo[$beginBFRangePos][] = new BFRange( (int) hexdec(trim($matchBFRange['start'])), (int) hexdec(trim($matchBFRange['end'])), - array_map( - fn(string $value) => trim($value), - explode('><', rtrim(ltrim(str_replace(' ', '', $matchBFRange['targetString']), '[<'), '>]')), - ), + $targetValues, ); } $lastPos = $endBFRangePos;