var fontCount = 0;
var fontName = "";
+/**
+ * If for some reason one want to debug without fonts activated, it just need
+ * to turn this pref to true/false.
+ */
+var kDisableFonts = false;
+
/**
* Hold a map of decoded fonts and of the standard fourteen Type1 fonts and
* their acronyms.
}
fontCount++;
+ if (aProperties.ignore || kDisableFonts) {
+ Fonts[aName] = {
+ data: aFile,
+ loading: false,
+ properties: {},
+ cache: Object.create(null)
+ }
+ return;
+ }
+
switch (aProperties.type) {
case "Type1":
var cff = new CFF(aName, aFile, aProperties);
if (debug)
ctx.fillText(testString, 20, 20);
- var start = Date.now();
var interval = window.setInterval(function canvasInterval(self) {
+ this.start = this.start || Date.now();
ctx.font = "bold italic 20px " + fontName + ", Symbol, Arial";
// For some reasons the font has not loaded, so mark it loaded for the
// page to proceed but cry
- if ((Date.now() - start) >= kMaxWaitForFontFace) {
+ if ((Date.now() - this.start) >= kMaxWaitForFontFace) {
window.clearInterval(interval);
Fonts[fontName].loading = false;
warn("Is " + fontName + " for charset: " + charset + " loaded?");
+ this.start = 0;
} else if (textWidth != ctx.measureText(testString).width) {
window.clearInterval(interval);
Fonts[fontName].loading = false;
+ this.start = 0;
}
if (debug)
});
}
+
+ var offsetDelta = 0;
+
// Replace the old CMAP table
var rewrittedCMAP = this._createCMAPTable(glyphs);
- var offsetDelta = rewrittedCMAP.length - originalCMAP.data.length;
+ offsetDelta = rewrittedCMAP.length - originalCMAP.data.length;
originalCMAP.data = rewrittedCMAP;
// Rewrite the 'post' table if needed
error("FontFile not found for font: " + fontName);
fontFile = xref.fetchIfRef(fontFile);
+ // Fonts with an embedded cmap but without any assignment in
+ // it are not yet supported, so ask the fonts loader to ignore
+ // them to not pay a stupid one sec latence.
+ var ignoreFont = true;
+
var encodingMap = {};
var charset = [];
if (fontDict.has("Encoding")) {
+ ignoreFont = false;
+
var encoding = xref.fetchIfRef(fontDict.get("Encoding"));
if (IsDict(encoding)) {
// Build a map between codes and glyphs
error("useCMap is not implemented");
break;
- case "begincodespacerange":
case "beginbfrange":
+ ignoreFont = false;
+ case "begincodespacerange":
token = "";
tokens = [];
break;
}
}
}
- }
+ }
var subType = fontDict.get("Subtype");
var bbox = descriptor.get("FontBBox");
type: subType.name,
encoding: encodingMap,
charset: charset,
- bbox: bbox
+ bbox: bbox,
+ ignore: ignoreFont
};
return {
}
this.current.fontSize = size;
- this.ctx.font = this.current.fontSize +'px "' + fontName + '"';
+ this.ctx.font = this.current.fontSize +'px "' + fontName + '", Symbol';
},
setTextRenderingMode: function(mode) {
TODO("text rendering mode");