@@ -512,6 +512,7 @@ var PartialEvaluator = (function partialEvaluator() {
512
512
error ('Encoding is not a Name nor a Dict' );
513
513
}
514
514
}
515
+
515
516
properties .differences = differences ;
516
517
properties .baseEncoding = baseEncoding ;
517
518
properties .hasEncoding = hasEncoding ;
@@ -554,9 +555,21 @@ var PartialEvaluator = (function partialEvaluator() {
554
555
var startRange = tokens [j ];
555
556
var endRange = tokens [j + 1 ];
556
557
var code = tokens [j + 2 ];
557
- while (startRange <= endRange ) {
558
- charToUnicode [startRange ] = code ++;
559
- ++startRange ;
558
+ if (code == 0xFFFF ) {
559
+ // CMap is broken, assuming code == startRange
560
+ code = startRange ;
561
+ }
562
+ if (isArray (code )) {
563
+ var codeindex = 0 ;
564
+ while (startRange <= endRange ) {
565
+ charToUnicode [startRange ] = code [codeindex ++];
566
+ ++startRange ;
567
+ }
568
+ } else {
569
+ while (startRange <= endRange ) {
570
+ charToUnicode [startRange ] = code ++;
571
+ ++startRange ;
572
+ }
560
573
}
561
574
}
562
575
break ;
@@ -595,9 +608,18 @@ var PartialEvaluator = (function partialEvaluator() {
595
608
}
596
609
} else if (byte == 0x3E ) {
597
610
if (token .length ) {
598
- // parsing hex number
599
- tokens .push (parseInt (token , 16 ));
600
- token = '';
611
+ if (token .length <= 4 ) {
612
+ // parsing hex number
613
+ tokens .push (parseInt (token , 16 ));
614
+ token = '';
615
+ } else {
616
+ // parsing hex UTF-16BE numbers
617
+ var str = [];
618
+ for (var i = 0 , ii = token .length ; i < ii ; i += 4 )
619
+ str .push (parseInt (token .substr (i , 4 ), 16 ));
620
+ tokens .push (String .fromCharCode .apply (String , str ));
621
+ token = '';
622
+ }
601
623
}
602
624
} else {
603
625
token += String .fromCharCode (byte );
0 commit comments