Merge pull request #2111 from yurydelendik/move-font-conversion

Move font translation to the worker
This commit is contained in:
Brendan Dahl 2012-09-12 18:04:17 -07:00
commit 6fc70bb2a7
3 changed files with 37 additions and 29 deletions

View File

@ -575,24 +575,15 @@ var WorkerTransport = (function WorkerTransportClosure() {
this.objs.resolve(id, imageData);
break;
case 'Font':
var name = data[2];
var file = data[3];
var properties = data[4];
if (file) {
// Rewrap the ArrayBuffer in a stream.
var fontFileDict = new Dict();
file = new Stream(file, 0, file.length, fontFileDict);
}
var exportedData = data[2];
// At this point, only the font object is created but the font is
// not yet attached to the DOM. This is done in `FontLoader.bind`.
var font;
try {
font = new Font(name, file, properties);
} catch (e) {
font = new ErrorFont(e);
}
if ('error' in exportedData)
font = new ErrorFont(exportedData.error);
else
font = new Font(exportedData);
this.objs.resolve(id, font);
break;
default:

View File

@ -171,31 +171,30 @@ var PartialEvaluator = (function PartialEvaluatorClosure() {
++self.objIdCounter;
if (!font.loadedName) {
font.translated = self.translateFont(font, xref, resources,
dependency);
if (font.translated) {
var translated = self.translateFont(font, xref, resources,
dependency);
if (translated) {
// keep track of each font we translated so the caller can
// load them asynchronously before calling display on a page
loadedName = 'font_' + uniquePrefix + self.objIdCounter;
font.translated.properties.loadedName = loadedName;
translated.properties.loadedName = loadedName;
font.loadedName = loadedName;
font.translated = translated;
var translated = font.translated;
// Convert the file to an ArrayBuffer which will be turned back into
// a Stream in the main thread.
if (translated.file)
translated.file = translated.file.getBytes();
if (translated.properties.file) {
translated.properties.file =
translated.properties.file.getBytes();
var data;
try {
var fontObj = new Font(translated.name,
translated.file,
translated.properties);
data = fontObj.export();
} catch (e) {
data = { error: e };
}
handler.send('obj', [
loadedName,
'Font',
translated.name,
translated.file,
translated.properties
data
]);
}
}

View File

@ -1526,6 +1526,15 @@ function fontCharsToUnicode(charCodes, fontProperties) {
*/
var Font = (function FontClosure() {
function Font(name, file, properties) {
if (arguments.length === 1) {
// importing translated data
var data = arguments[0];
for (var i in data) {
this[i] = data[i];
}
return;
}
this.name = name;
this.coded = properties.coded;
this.charProcOperatorList = properties.charProcOperatorList;
@ -2036,6 +2045,15 @@ var Font = (function FontClosure() {
mimetype: null,
encoding: null,
export: function Font_export() {
var data = {};
for (var i in this) {
if (this.hasOwnProperty(i))
data[i] = this[i];
}
return data;
},
checkAndRepair: function Font_checkAndRepair(name, font, properties) {
function readTableEntry(file) {
var tag = file.getBytes(4);