Moving CID-0 encoding hack to fonts.js
This commit is contained in:
		
							parent
							
								
									078433fecd
								
							
						
					
					
						commit
						ab391c318d
					
				
							
								
								
									
										60
									
								
								fonts.js
									
									
									
									
									
								
							
							
						
						
									
										60
									
								
								fonts.js
									
									
									
									
									
								
							@ -429,6 +429,9 @@ var Font = (function Font() {
 | 
			
		||||
      return;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    // Trying to fix encoding using glyph widths and CIDSystemInfo
 | 
			
		||||
    this.fixWidths(properties);
 | 
			
		||||
 | 
			
		||||
    if (!file) {
 | 
			
		||||
      // The file data is not specified. Trying to fix the font name
 | 
			
		||||
      // to be used with the canvas.font.
 | 
			
		||||
@ -1403,6 +1406,63 @@ var Font = (function Font() {
 | 
			
		||||
      return stringToArray(otf.file);
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    fixWidths: function font_fixWidths(properties) {
 | 
			
		||||
      var encoding = properties.encoding;
 | 
			
		||||
      if (encoding[0])
 | 
			
		||||
        return;
 | 
			
		||||
      var glyphsWidths = properties.widths;
 | 
			
		||||
      if (!glyphsWidths)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      var cidSystemInfo = properties.cidSystemInfo;
 | 
			
		||||
      var cidToUnicode;
 | 
			
		||||
      if (cidSystemInfo) {
 | 
			
		||||
        cidToUnicode = CIDToUnicodeMaps[cidSystemInfo.registry +
 | 
			
		||||
          '-' + cidSystemInfo.ordering];
 | 
			
		||||
      }
 | 
			
		||||
      if (!cidToUnicode)
 | 
			
		||||
        return;
 | 
			
		||||
 | 
			
		||||
      encoding[0] = { unicode: 0, width: 0 };
 | 
			
		||||
      var glyph = 1, i, j;
 | 
			
		||||
      for (i = 0; i < cidToUnicode.length; ++i) {
 | 
			
		||||
        var unicode = cidToUnicode[i];
 | 
			
		||||
        if (isArray(unicode)) {
 | 
			
		||||
          var length = unicode.length;
 | 
			
		||||
          if (glyph in glyphsWidths) {
 | 
			
		||||
            for (j = 0; j < length; j++) {
 | 
			
		||||
              encoding[unicode[j]] = {
 | 
			
		||||
                unicode: unicode[j],
 | 
			
		||||
                width: glyphsWidths[glyph]
 | 
			
		||||
              };
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
          glyph++;
 | 
			
		||||
        } else if (typeof unicode === 'object') {
 | 
			
		||||
          var fillLength = unicode.f;
 | 
			
		||||
          if (fillLength) {
 | 
			
		||||
            unicode = unicode.c;
 | 
			
		||||
            for (j = 0; j < fillLength; ++j) {
 | 
			
		||||
              if (!(glyph in glyphsWidths))
 | 
			
		||||
                continue;
 | 
			
		||||
              encoding[unicode] = {
 | 
			
		||||
                unicode: unicode,
 | 
			
		||||
                width: glyphsWidths[glyph]
 | 
			
		||||
              };
 | 
			
		||||
              unicode++;
 | 
			
		||||
              glyph++;
 | 
			
		||||
            }
 | 
			
		||||
          } else
 | 
			
		||||
            glyph += unicode.s;
 | 
			
		||||
        } else if (unicode) {
 | 
			
		||||
          encoding[unicode] = {
 | 
			
		||||
            unicode: unicode,
 | 
			
		||||
            width: glyphsWidths[glyph++]
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
 | 
			
		||||
    bindWorker: function font_bindWorker(data) {
 | 
			
		||||
      postMessage({
 | 
			
		||||
        action: 'font',
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										59
									
								
								pdf.js
									
									
									
									
									
								
							
							
						
						
									
										59
									
								
								pdf.js
									
									
									
									
									
								
							@ -4472,56 +4472,19 @@ var PartialEvaluator = (function partialEvaluator() {
 | 
			
		||||
        // Glyph ids are big-endian 2-byte values
 | 
			
		||||
        encoding = properties.encoding;
 | 
			
		||||
 | 
			
		||||
        // CIDSystemInfo might help to match width and glyphs
 | 
			
		||||
        var cidSystemInfo = dict.get('CIDSystemInfo');
 | 
			
		||||
        if (isDict(cidSystemInfo)) {
 | 
			
		||||
          properties.cidSystemInfo = {
 | 
			
		||||
            registry: cidSystemInfo.get('Registry'),
 | 
			
		||||
            ordering: cidSystemInfo.get('Ordering'),
 | 
			
		||||
            supplement: cidSystemInfo.get('Supplement')
 | 
			
		||||
          };
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        var cidToGidMap = dict.get('CIDToGIDMap');
 | 
			
		||||
        if (!cidToGidMap || !isRef(cidToGidMap)) {
 | 
			
		||||
          // trying to guess encoding from CIDSystemInfo
 | 
			
		||||
          var cidSystemInfo = dict.get('CIDSystemInfo');
 | 
			
		||||
          var cidToUnicode;
 | 
			
		||||
          if (isDict(cidSystemInfo)) {
 | 
			
		||||
            cidToUnicode = CIDToUnicodeMaps[
 | 
			
		||||
              cidSystemInfo.get('Registry') + '-' +
 | 
			
		||||
              cidSystemInfo.get('Ordering')];
 | 
			
		||||
          }
 | 
			
		||||
          if (cidToUnicode) {
 | 
			
		||||
            encoding[0] = { unicode: 0, width: 0 };
 | 
			
		||||
            var glyph = 1, i, j;
 | 
			
		||||
            for (i = 0; i < cidToUnicode.length; ++i) {
 | 
			
		||||
              var unicode = cidToUnicode[i];
 | 
			
		||||
              if (isArray(unicode)) {
 | 
			
		||||
                var length = unicode.length;
 | 
			
		||||
                if (glyph in glyphsWidths) {
 | 
			
		||||
                  for (j = 0; j < length; j++) {
 | 
			
		||||
                    encoding[unicode[j]] = {
 | 
			
		||||
                      unicode: unicode[j],
 | 
			
		||||
                      width: glyphsWidths[glyph]
 | 
			
		||||
                    };
 | 
			
		||||
                  }
 | 
			
		||||
                }
 | 
			
		||||
                glyph++;
 | 
			
		||||
              } else if (typeof unicode === 'object') {
 | 
			
		||||
                var fillLength = unicode.f;
 | 
			
		||||
                if (fillLength) {
 | 
			
		||||
                  unicode = unicode.c;
 | 
			
		||||
                  for (j = 0; j < fillLength; ++j) {
 | 
			
		||||
                    if (!(glyph in glyphsWidths))
 | 
			
		||||
                      continue;
 | 
			
		||||
                    encoding[unicode] = {
 | 
			
		||||
                      unicode: unicode,
 | 
			
		||||
                      width: glyphsWidths[glyph]
 | 
			
		||||
                    };
 | 
			
		||||
                    unicode++;
 | 
			
		||||
                    glyph++;
 | 
			
		||||
                  }
 | 
			
		||||
                } else
 | 
			
		||||
                  glyph += unicode.s;
 | 
			
		||||
              } else if (unicode) {
 | 
			
		||||
                encoding[unicode] = {
 | 
			
		||||
                  unicode: unicode,
 | 
			
		||||
                  width: glyphsWidths[glyph++]
 | 
			
		||||
                };
 | 
			
		||||
              }
 | 
			
		||||
            }
 | 
			
		||||
          }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
          return Object.create(GlyphsUnicode);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user