Convert the PartialEvaluator.readToUnicode method to be async
				
					
				
			This commit is contained in:
		
							parent
							
								
									f5c01188dc
								
							
						
					
					
						commit
						f21a30dfb4
					
				| @ -3765,70 +3765,70 @@ class PartialEvaluator { | ||||
|     return new IdentityToUnicodeMap(properties.firstChar, properties.lastChar); | ||||
|   } | ||||
| 
 | ||||
|   readToUnicode(cmapObj) { | ||||
|   async readToUnicode(cmapObj) { | ||||
|     if (!cmapObj) { | ||||
|       return Promise.resolve(null); | ||||
|       return null; | ||||
|     } | ||||
|     if (cmapObj instanceof Name) { | ||||
|       return CMapFactory.create({ | ||||
|       const cmap = await CMapFactory.create({ | ||||
|         encoding: cmapObj, | ||||
|         fetchBuiltInCMap: this._fetchBuiltInCMapBound, | ||||
|         useCMap: null, | ||||
|       }).then(function (cmap) { | ||||
|       }); | ||||
| 
 | ||||
|       if (cmap instanceof IdentityCMap) { | ||||
|         return new IdentityToUnicodeMap(0, 0xffff); | ||||
|       } | ||||
|       return new ToUnicodeMap(cmap.getMap()); | ||||
|     } | ||||
|     if (cmapObj instanceof BaseStream) { | ||||
|       try { | ||||
|         const cmap = await CMapFactory.create({ | ||||
|           encoding: cmapObj, | ||||
|           fetchBuiltInCMap: this._fetchBuiltInCMapBound, | ||||
|           useCMap: null, | ||||
|         }); | ||||
| 
 | ||||
|         if (cmap instanceof IdentityCMap) { | ||||
|           return new IdentityToUnicodeMap(0, 0xffff); | ||||
|         } | ||||
|         return new ToUnicodeMap(cmap.getMap()); | ||||
|       }); | ||||
|     } else if (cmapObj instanceof BaseStream) { | ||||
|       return CMapFactory.create({ | ||||
|         encoding: cmapObj, | ||||
|         fetchBuiltInCMap: this._fetchBuiltInCMapBound, | ||||
|         useCMap: null, | ||||
|       }).then( | ||||
|         function (cmap) { | ||||
|           if (cmap instanceof IdentityCMap) { | ||||
|             return new IdentityToUnicodeMap(0, 0xffff); | ||||
|         const map = new Array(cmap.length); | ||||
|         // Convert UTF-16BE
 | ||||
|         // NOTE: cmap can be a sparse array, so use forEach instead of
 | ||||
|         // `for(;;)` to iterate over all keys.
 | ||||
|         cmap.forEach(function (charCode, token) { | ||||
|           // Some cmaps contain *only* CID characters (fixes issue9367.pdf).
 | ||||
|           if (typeof token === "number") { | ||||
|             map[charCode] = String.fromCodePoint(token); | ||||
|             return; | ||||
|           } | ||||
|           const map = new Array(cmap.length); | ||||
|           // Convert UTF-16BE
 | ||||
|           // NOTE: cmap can be a sparse array, so use forEach instead of
 | ||||
|           // `for(;;)` to iterate over all keys.
 | ||||
|           cmap.forEach(function (charCode, token) { | ||||
|             // Some cmaps contain *only* CID characters (fixes issue9367.pdf).
 | ||||
|             if (typeof token === "number") { | ||||
|               map[charCode] = String.fromCodePoint(token); | ||||
|               return; | ||||
|           const str = []; | ||||
|           for (let k = 0; k < token.length; k += 2) { | ||||
|             const w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); | ||||
|             if ((w1 & 0xf800) !== 0xd800) { | ||||
|               // w1 < 0xD800 || w1 > 0xDFFF
 | ||||
|               str.push(w1); | ||||
|               continue; | ||||
|             } | ||||
|             const str = []; | ||||
|             for (let k = 0; k < token.length; k += 2) { | ||||
|               const w1 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); | ||||
|               if ((w1 & 0xf800) !== 0xd800) { | ||||
|                 // w1 < 0xD800 || w1 > 0xDFFF
 | ||||
|                 str.push(w1); | ||||
|                 continue; | ||||
|               } | ||||
|               k += 2; | ||||
|               const w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); | ||||
|               str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); | ||||
|             } | ||||
|             map[charCode] = String.fromCodePoint(...str); | ||||
|           }); | ||||
|           return new ToUnicodeMap(map); | ||||
|         }, | ||||
|         reason => { | ||||
|           if (reason instanceof AbortException) { | ||||
|             return null; | ||||
|             k += 2; | ||||
|             const w2 = (token.charCodeAt(k) << 8) | token.charCodeAt(k + 1); | ||||
|             str.push(((w1 & 0x3ff) << 10) + (w2 & 0x3ff) + 0x10000); | ||||
|           } | ||||
|           if (this.options.ignoreErrors) { | ||||
|             warn(`readToUnicode - ignoring ToUnicode data: "${reason}".`); | ||||
|             return null; | ||||
|           } | ||||
|           throw reason; | ||||
|           map[charCode] = String.fromCodePoint(...str); | ||||
|         }); | ||||
|         return new ToUnicodeMap(map); | ||||
|       } catch (reason) { | ||||
|         if (reason instanceof AbortException) { | ||||
|           return null; | ||||
|         } | ||||
|       ); | ||||
|         if (this.options.ignoreErrors) { | ||||
|           warn(`readToUnicode - ignoring ToUnicode data: "${reason}".`); | ||||
|           return null; | ||||
|         } | ||||
|         throw reason; | ||||
|       } | ||||
|     } | ||||
|     return Promise.resolve(null); | ||||
|     return null; | ||||
|   } | ||||
| 
 | ||||
|   readCidToGidMap(glyphsData, toUnicode) { | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user