|  | @@ 626-675 (lines=50) @@ | 
                                                            
                                    | 623 |  | 							} | 
                                                            
                                    | 624 |  | 							break; | 
                                                            
                                    | 625 |  | 						} | 
                                                            
                                    | 626 |  | 						case 4: { // Format 4: Segment mapping to delta values | 
                                                            
                                    | 627 |  | 							$length = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 628 |  | 							$offset += 2; | 
                                                            
                                    | 629 |  | 							$offset += 2; // skip version/language | 
                                                            
                                    | 630 |  | 							$segCount = floor(TCPDF_STATIC::_getUSHORT($font, $offset) / 2); | 
                                                            
                                    | 631 |  | 							$offset += 2; | 
                                                            
                                    | 632 |  | 							$offset += 6; // skip searchRange, entrySelector, rangeShift | 
                                                            
                                    | 633 |  | 							$endCount = array(); // array of end character codes for each segment | 
                                                            
                                    | 634 |  | 							for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 635 |  | 								$endCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 636 |  | 								$offset += 2; | 
                                                            
                                    | 637 |  | 							} | 
                                                            
                                    | 638 |  | 							$offset += 2; // skip reservedPad | 
                                                            
                                    | 639 |  | 							$startCount = array(); // array of start character codes for each segment | 
                                                            
                                    | 640 |  | 							for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 641 |  | 								$startCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 642 |  | 								$offset += 2; | 
                                                            
                                    | 643 |  | 							} | 
                                                            
                                    | 644 |  | 							$idDelta = array(); // delta for all character codes in segment | 
                                                            
                                    | 645 |  | 							for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 646 |  | 								$idDelta[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 647 |  | 								$offset += 2; | 
                                                            
                                    | 648 |  | 							} | 
                                                            
                                    | 649 |  | 							$idRangeOffset = array(); // Offsets into glyphIdArray or 0 | 
                                                            
                                    | 650 |  | 							for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 651 |  | 								$idRangeOffset[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 652 |  | 								$offset += 2; | 
                                                            
                                    | 653 |  | 							} | 
                                                            
                                    | 654 |  | 							$gidlen = (floor($length / 2) - 8 - (4 * $segCount)); | 
                                                            
                                    | 655 |  | 							$glyphIdArray = array(); // glyph index array | 
                                                            
                                    | 656 |  | 							for ($k = 0; $k < $gidlen; ++$k) { | 
                                                            
                                    | 657 |  | 								$glyphIdArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 658 |  | 								$offset += 2; | 
                                                            
                                    | 659 |  | 							} | 
                                                            
                                    | 660 |  | 							for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 661 |  | 								for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) { | 
                                                            
                                    | 662 |  | 									if ($idRangeOffset[$k] == 0) { | 
                                                            
                                    | 663 |  | 										$g = ($idDelta[$k] + $c) % 65536; | 
                                                            
                                    | 664 |  | 									} else { | 
                                                            
                                    | 665 |  | 										$gid = (floor($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k)); | 
                                                            
                                    | 666 |  | 										$g = ($glyphIdArray[$gid] + $idDelta[$k]) % 65536; | 
                                                            
                                    | 667 |  | 									} | 
                                                            
                                    | 668 |  | 									if ($g < 0) { | 
                                                            
                                    | 669 |  | 										$g = 0; | 
                                                            
                                    | 670 |  | 									} | 
                                                            
                                    | 671 |  | 									$ctg[$c] = $g; | 
                                                            
                                    | 672 |  | 								} | 
                                                            
                                    | 673 |  | 							} | 
                                                            
                                    | 674 |  | 							break; | 
                                                            
                                    | 675 |  | 						} | 
                                                            
                                    | 676 |  | 						case 6: { // Format 6: Trimmed table mapping | 
                                                            
                                    | 677 |  | 							$offset += 4; // skip length and version/language | 
                                                            
                                    | 678 |  | 							$firstCode = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                                                
                                |  | @@ 1095-1146 (lines=52) @@ | 
                                                            
                                    | 1092 |  | 					} | 
                                                            
                                    | 1093 |  | 					break; | 
                                                            
                                    | 1094 |  | 				} | 
                                                            
                                    | 1095 |  | 				case 4: { // Format 4: Segment mapping to delta values | 
                                                            
                                    | 1096 |  | 					$length = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1097 |  | 					$offset += 2; | 
                                                            
                                    | 1098 |  | 					$offset += 2; // skip version/language | 
                                                            
                                    | 1099 |  | 					$segCount = floor(TCPDF_STATIC::_getUSHORT($font, $offset) / 2); | 
                                                            
                                    | 1100 |  | 					$offset += 2; | 
                                                            
                                    | 1101 |  | 					$offset += 6; // skip searchRange, entrySelector, rangeShift | 
                                                            
                                    | 1102 |  | 					$endCount = array(); // array of end character codes for each segment | 
                                                            
                                    | 1103 |  | 					for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 1104 |  | 						$endCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1105 |  | 						$offset += 2; | 
                                                            
                                    | 1106 |  | 					} | 
                                                            
                                    | 1107 |  | 					$offset += 2; // skip reservedPad | 
                                                            
                                    | 1108 |  | 					$startCount = array(); // array of start character codes for each segment | 
                                                            
                                    | 1109 |  | 					for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 1110 |  | 						$startCount[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1111 |  | 						$offset += 2; | 
                                                            
                                    | 1112 |  | 					} | 
                                                            
                                    | 1113 |  | 					$idDelta = array(); // delta for all character codes in segment | 
                                                            
                                    | 1114 |  | 					for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 1115 |  | 						$idDelta[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1116 |  | 						$offset += 2; | 
                                                            
                                    | 1117 |  | 					} | 
                                                            
                                    | 1118 |  | 					$idRangeOffset = array(); // Offsets into glyphIdArray or 0 | 
                                                            
                                    | 1119 |  | 					for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 1120 |  | 						$idRangeOffset[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1121 |  | 						$offset += 2; | 
                                                            
                                    | 1122 |  | 					} | 
                                                            
                                    | 1123 |  | 					$gidlen = (floor($length / 2) - 8 - (4 * $segCount)); | 
                                                            
                                    | 1124 |  | 					$glyphIdArray = array(); // glyph index array | 
                                                            
                                    | 1125 |  | 					for ($k = 0; $k < $gidlen; ++$k) { | 
                                                            
                                    | 1126 |  | 						$glyphIdArray[$k] = TCPDF_STATIC::_getUSHORT($font, $offset); | 
                                                            
                                    | 1127 |  | 						$offset += 2; | 
                                                            
                                    | 1128 |  | 					} | 
                                                            
                                    | 1129 |  | 					for ($k = 0; $k < $segCount; ++$k) { | 
                                                            
                                    | 1130 |  | 						for ($c = $startCount[$k]; $c <= $endCount[$k]; ++$c) { | 
                                                            
                                    | 1131 |  | 							if (isset($subsetchars[$c])) { | 
                                                            
                                    | 1132 |  | 								if ($idRangeOffset[$k] == 0) { | 
                                                            
                                    | 1133 |  | 									$g = ($idDelta[$k] + $c) % 65536; | 
                                                            
                                    | 1134 |  | 								} else { | 
                                                            
                                    | 1135 |  | 									$gid = (floor($idRangeOffset[$k] / 2) + ($c - $startCount[$k]) - ($segCount - $k)); | 
                                                            
                                    | 1136 |  | 									$g = ($glyphIdArray[$gid] + $idDelta[$k]) % 65536; | 
                                                            
                                    | 1137 |  | 								} | 
                                                            
                                    | 1138 |  | 								if ($g < 0) { | 
                                                            
                                    | 1139 |  | 									$g = 0; | 
                                                            
                                    | 1140 |  | 								} | 
                                                            
                                    | 1141 |  | 								$subsetglyphs[$g] = true; | 
                                                            
                                    | 1142 |  | 							} | 
                                                            
                                    | 1143 |  | 						} | 
                                                            
                                    | 1144 |  | 					}	 | 
                                                            
                                    | 1145 |  | 					break; | 
                                                            
                                    | 1146 |  | 				} | 
                                                            
                                    | 1147 |  | 				case 6: { // Format 6: Trimmed table mapping | 
                                                            
                                    | 1148 |  | 					$offset += 4; // skip length and version/language | 
                                                            
                                    | 1149 |  | 					$firstCode = TCPDF_STATIC::_getUSHORT($font, $offset); |