working on subroutines

This commit is contained in:
sbarman 2011-08-16 10:25:02 -07:00
parent 2b0d3418bd
commit bf9092b660

View File

@ -1598,6 +1598,17 @@ var Type1Parser = function() {
var c = ''; var c = '';
var count = eexecStr.length; var count = eexecStr.length;
for (var i = 0; i < count; i++) { for (var i = 0; i < count; i++) {
var getToken = function() {
while(i < count && (eexecStr[i] == ' ' || eexecStr[i] == '\n'))
++i;
var t = '';
while(i < count && !(eexecStr[i] == ' ' || eexecStr[i] == '\n'))
t += eexecStr[i++];
return t;
}
var c = eexecStr[i]; var c = eexecStr[i];
if ((glyphsSection || subrsSection) && c == 'R') { if ((glyphsSection || subrsSection) && c == 'R') {
@ -1627,7 +1638,25 @@ var Type1Parser = function() {
glyphsSection = true; glyphsSection = true;
break; break;
case '/Subrs': case '/Subrs':
subrsSection = true; ++i;
var num = parseInt(getToken());
getToken(); // read in 'array'
for (var j = 0; j < num; ++j) {
var t = getToken(); // read in 'dup'
if (t == 'ND')
break;
var index = parseInt(getToken());
if (index > j)
j = index;
var length = parseInt(getToken());
getToken(); // read in 'RD'
var data = eexec.slice(i + 1, i + 1 + length);
var encoded = decrypt(data, kCharStringsEncryptionKey, 4);
var str = decodeCharString(encoded);
i = i + 1 + length;
getToken(); //read in 'NP'
program.subrs[index] = str.charstring;
}
break; break;
case '/BlueValues': case '/BlueValues':
case '/OtherBlues': case '/OtherBlues':
@ -1909,8 +1938,13 @@ CFF.prototype = {
for (var i = 0; i < bias; i++) for (var i = 0; i < bias; i++)
type2Subrs.push([0x0B]); type2Subrs.push([0x0B]);
for (var i = 0; i < count; i++) for (var i = 0; i < count; i++) {
type2Subrs.push(this.flattenCharstring(type1Subrs[i], this.commandsMap)); var subr = type1Subrs[i];
if (!subr)
subr = [0x0B];
type2Subrs.push(this.flattenCharstring(subr, this.commandsMap));
}
return type2Subrs; return type2Subrs;
}, },