8 changed files with 247 additions and 22 deletions
@ -0,0 +1,27 @@ |
|||||||
|
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- / |
||||||
|
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */ |
||||||
|
|
||||||
|
"use strict"; |
||||||
|
|
||||||
|
var consoleTimer = {}; |
||||||
|
var console = { |
||||||
|
log: function log() { |
||||||
|
var args = Array.prototype.slice.call(arguments); |
||||||
|
postMessage({ |
||||||
|
action: "log", |
||||||
|
data: args |
||||||
|
}); |
||||||
|
}, |
||||||
|
|
||||||
|
time: function(name) { |
||||||
|
consoleTimer[name] = Date.now(); |
||||||
|
}, |
||||||
|
|
||||||
|
timeEnd: function(name) { |
||||||
|
var time = consoleTimer[name]; |
||||||
|
if (time == null) { |
||||||
|
throw "Unkown timer name " + name; |
||||||
|
} |
||||||
|
this.log("Timer:", name, Date.now() - time); |
||||||
|
} |
||||||
|
} |
@ -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…
Reference in new issue