First pass on FontWorker
This commit is contained in:
parent
c712712e67
commit
b00df76044
8 changed files with 247 additions and 22 deletions
65
worker/font.js
Normal file
65
worker/font.js
Normal file
|
@ -0,0 +1,65 @@
|
|||
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- /
|
||||
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
|
||||
|
||||
"use strict";
|
||||
|
||||
importScripts("console.js");
|
||||
|
||||
importScripts("../pdf.js");
|
||||
importScripts("../fonts.js");
|
||||
importScripts("../glyphlist.js")
|
||||
|
||||
function fontDataToString(font) {
|
||||
// Doing postMessage on objects make them lose their "shape". This adds the
|
||||
// "shape" for all required objects agains, such that the encoding works as
|
||||
// expected.
|
||||
var fontFileDict = new Dict();
|
||||
fontFileDict.map = font.file.dict.map;
|
||||
|
||||
var fontFile = new Stream(font.file.bytes, font.file.start, font.file.end - font.file.start, fontFileDict);
|
||||
font.file = new FlateStream(fontFile);
|
||||
|
||||
// This will encode the font.
|
||||
var fontObj = new Font(font.name, font.file, font.properties);
|
||||
|
||||
// Create string that is used for css later.
|
||||
var str = "";
|
||||
var data = fontObj.data;
|
||||
var length = data.length;
|
||||
for (var j = 0; j < length; j++)
|
||||
str += String.fromCharCode(data[j]);
|
||||
|
||||
return {
|
||||
str: str,
|
||||
encoding: font.properties.encoding
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Functions to handle data sent by the MainThread.
|
||||
*/
|
||||
var actionHandler = {
|
||||
"fonts": function(data) {
|
||||
var fontData;
|
||||
var result = {};
|
||||
for (var i = 0; i < data.length; i++) {
|
||||
fontData = data[i];
|
||||
result[fontData.name] = fontDataToString(fontData);
|
||||
}
|
||||
|
||||
postMessage({
|
||||
action: "fonts",
|
||||
data: result
|
||||
})
|
||||
},
|
||||
}
|
||||
|
||||
// Listen to the MainThread for data and call actionHandler on it.
|
||||
this.onmessage = function(event) {
|
||||
var data = event.data;
|
||||
if (data.action in actionHandler) {
|
||||
actionHandler[data.action].call(this, data.data);
|
||||
} else {
|
||||
throw "Unkown action from worker: " + data.action;
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue