Merge pull request #7441 from Snuffleupagus/issue-7439
Fallback to attempt to recover standard glyph names when amending the `charCodeToGlyphId` with entries from the `differences` array in `type1FontGlyphMapping` (issue 7439)
This commit is contained in:
		
						commit
						1f3f4a8dd7
					
				@ -185,6 +185,25 @@ function getFontType(type, subtype) {
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// Some bad PDF generators, e.g. Scribus PDF, include glyph names
 | 
			
		||||
// in a 'uniXXXX' format -- attempting to recover proper ones.
 | 
			
		||||
function recoverGlyphName(name, glyphsUnicodeMap) {
 | 
			
		||||
  if (glyphsUnicodeMap[name] !== undefined) {
 | 
			
		||||
    return name;
 | 
			
		||||
  }
 | 
			
		||||
  // The glyph name is non-standard, trying to recover.
 | 
			
		||||
  var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);
 | 
			
		||||
  if (unicode !== -1) {
 | 
			
		||||
    for (var key in glyphsUnicodeMap) {
 | 
			
		||||
      if (glyphsUnicodeMap[key] === unicode) {
 | 
			
		||||
        return key;
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  warn('Unable to recover a standard glyph name for: ' + name);
 | 
			
		||||
  return name;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
var Glyph = (function GlyphClosure() {
 | 
			
		||||
  function Glyph(fontChar, unicode, accent, width, vmetric, operatorListId,
 | 
			
		||||
                 isSpace, isInFont) {
 | 
			
		||||
@ -2266,26 +2285,6 @@ var Font = (function FontClosure() {
 | 
			
		||||
        return false;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
      // Some bad PDF generators, e.g. Scribus PDF, include glyph names
 | 
			
		||||
      // in a 'uniXXXX' format -- attempting to recover proper ones.
 | 
			
		||||
      function recoverGlyphName(name, glyphsUnicodeMap) {
 | 
			
		||||
        if (glyphsUnicodeMap[name] !== undefined) {
 | 
			
		||||
          return name;
 | 
			
		||||
        }
 | 
			
		||||
        // The glyph name is non-standard, trying to recover.
 | 
			
		||||
        var unicode = getUnicodeForGlyph(name, glyphsUnicodeMap);
 | 
			
		||||
        if (unicode !== -1) {
 | 
			
		||||
          for (var key in glyphsUnicodeMap) {
 | 
			
		||||
            if (glyphsUnicodeMap[key] === unicode) {
 | 
			
		||||
              return key;
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
        }
 | 
			
		||||
        warn('Unable to recover a standard glyph name for: ' + name);
 | 
			
		||||
        return name;
 | 
			
		||||
      }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      if (properties.type === 'CIDFontType2') {
 | 
			
		||||
        var cidToGidMap = properties.cidToGidMap || [];
 | 
			
		||||
        var isCidToGidMapEmpty = cidToGidMap.length === 0;
 | 
			
		||||
@ -2859,11 +2858,21 @@ function type1FontGlyphMapping(properties, builtInEncoding, glyphNames) {
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // Lastly, merge in the differences.
 | 
			
		||||
  var differences = properties.differences;
 | 
			
		||||
  var differences = properties.differences, glyphsUnicodeMap;
 | 
			
		||||
  if (differences) {
 | 
			
		||||
    for (charCode in differences) {
 | 
			
		||||
      var glyphName = differences[charCode];
 | 
			
		||||
      glyphId = glyphNames.indexOf(glyphName);
 | 
			
		||||
 | 
			
		||||
      if (glyphId === -1) {
 | 
			
		||||
        if (!glyphsUnicodeMap) {
 | 
			
		||||
          glyphsUnicodeMap = getGlyphsUnicode();
 | 
			
		||||
        }
 | 
			
		||||
        var standardGlyphName = recoverGlyphName(glyphName, glyphsUnicodeMap);
 | 
			
		||||
        if (standardGlyphName !== glyphName) {
 | 
			
		||||
          glyphId = glyphNames.indexOf(standardGlyphName);
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      if (glyphId >= 0) {
 | 
			
		||||
        charCodeToGlyphId[charCode] = glyphId;
 | 
			
		||||
      } else {
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								test/pdfs/.gitignore
									
									
									
									
										vendored
									
									
								
							@ -27,6 +27,7 @@
 | 
			
		||||
!issue7180.pdf
 | 
			
		||||
!issue7200.pdf
 | 
			
		||||
!issue7229.pdf
 | 
			
		||||
!issue7439.pdf
 | 
			
		||||
!filled-background.pdf
 | 
			
		||||
!ArabicCIDTrueType.pdf
 | 
			
		||||
!ThuluthFeatures.pdf
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										
											BIN
										
									
								
								test/pdfs/issue7439.pdf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								test/pdfs/issue7439.pdf
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							@ -1708,6 +1708,13 @@
 | 
			
		||||
       "link": false,
 | 
			
		||||
       "type": "eq"
 | 
			
		||||
    },
 | 
			
		||||
    {  "id": "issue7439",
 | 
			
		||||
       "file": "pdfs/issue7439.pdf",
 | 
			
		||||
       "md5": "56682657990a894c66db26560d3039d7",
 | 
			
		||||
       "rounds": 1,
 | 
			
		||||
       "link": false,
 | 
			
		||||
       "type": "eq"
 | 
			
		||||
    },
 | 
			
		||||
    {  "id": "bug867484",
 | 
			
		||||
      "file": "pdfs/bug867484.pdf",
 | 
			
		||||
      "md5": "347af7b0ef7279b1a7f43b03bfda4548",
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user