cleanup code
This commit is contained in:
parent
3eccfa3cc0
commit
d502866111
57
fonts.js
57
fonts.js
@ -2036,12 +2036,14 @@ var Type2CFF = (function() {
|
|||||||
parse: function cff_parse() {
|
parse: function cff_parse() {
|
||||||
var header = this.parseHeader();
|
var header = this.parseHeader();
|
||||||
var nameIndex = this.parseIndex(header.endPos);
|
var nameIndex = this.parseIndex(header.endPos);
|
||||||
|
|
||||||
var dictIndex = this.parseIndex(nameIndex.endPos);
|
var dictIndex = this.parseIndex(nameIndex.endPos);
|
||||||
|
if (dictIndex.length != 1)
|
||||||
|
error('More than 1 font');
|
||||||
|
|
||||||
var stringIndex = this.parseIndex(dictIndex.endPos);
|
var stringIndex = this.parseIndex(dictIndex.endPos);
|
||||||
var gsubrIndex = this.parseIndex(stringIndex.endPos);
|
var gsubrIndex = this.parseIndex(stringIndex.endPos);
|
||||||
|
|
||||||
if (dictIndex.length != 1)
|
|
||||||
error('More than 1 font');
|
|
||||||
|
|
||||||
var strings = this.getStrings(stringIndex);
|
var strings = this.getStrings(stringIndex);
|
||||||
|
|
||||||
@ -2055,20 +2057,20 @@ var Type2CFF = (function() {
|
|||||||
var privBytes = bytes.subarray(privOffset, privOffset + privLength);
|
var privBytes = bytes.subarray(privOffset, privOffset + privLength);
|
||||||
baseDict = this.parseDict(privBytes);
|
baseDict = this.parseDict(privBytes);
|
||||||
var privDict = this.getPrivDict(baseDict, strings);
|
var privDict = this.getPrivDict(baseDict, strings);
|
||||||
|
|
||||||
// var encoding = this.parseEncoding(topDict['Encoding']);
|
TODO('Parse encoding');
|
||||||
var charStrings = this.parseIndex(topDict['CharStrings']);
|
var charStrings = this.parseIndex(topDict['CharStrings']);
|
||||||
var charset = this.parseCharsets(topDict['charset'], charStrings.length,
|
var charset = this.parseCharsets(topDict['charset'], charStrings.length,
|
||||||
strings);
|
strings);
|
||||||
|
|
||||||
// charstrings contains info about glyphs (one element per glyph
|
// charstrings contains info about glyphs (one element per glyph
|
||||||
// containing mappings for {unicode, width}
|
// containing mappings for {unicode, width})
|
||||||
this.charstrings = this.getCharStrings(charset, charStrings,
|
this.charstrings = this.getCharStrings(charset, charStrings,
|
||||||
privDict, this.properties);
|
privDict, this.properties);
|
||||||
},
|
},
|
||||||
getCharStrings: function cff_charstrings(charsets, charStrings,
|
getCharStrings: function cff_charstrings(charsets, charStrings,
|
||||||
privDict, properties) {
|
privDict, properties) {
|
||||||
var widths = properties.glyphWidths;
|
var widths = properties.widths;
|
||||||
|
|
||||||
var defaultWidth = privDict['defaultWidthX'];
|
var defaultWidth = privDict['defaultWidthX'];
|
||||||
var nominalWidth = privDict['nominalWidthX'];
|
var nominalWidth = privDict['nominalWidthX'];
|
||||||
@ -2078,10 +2080,11 @@ var Type2CFF = (function() {
|
|||||||
var charName = charsets[i];
|
var charName = charsets[i];
|
||||||
var charCode = GlyphsUnicode[charName];
|
var charCode = GlyphsUnicode[charName];
|
||||||
if (charCode) {
|
if (charCode) {
|
||||||
var width = widths[charCode];
|
var width = widths[charCode] || defaultWidth;
|
||||||
if (!width)
|
|
||||||
width = defaultWidth;
|
|
||||||
charstrings.push({unicode: charCode, width: width});
|
charstrings.push({unicode: charCode, width: width});
|
||||||
|
} else {
|
||||||
|
if (charName !== '.notdef')
|
||||||
|
warn('Cannot find unicode for glyph ' + charName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return charstrings;
|
return charstrings;
|
||||||
@ -2099,17 +2102,18 @@ var Type2CFF = (function() {
|
|||||||
var bytes = this.bytes;
|
var bytes = this.bytes;
|
||||||
var format = bytes[pos++];
|
var format = bytes[pos++];
|
||||||
var charset = ['.notdef'];
|
var charset = ['.notdef'];
|
||||||
|
// subtract 1 for the .notdef glyph
|
||||||
|
length -= 1;
|
||||||
|
|
||||||
switch (format) {
|
switch (format) {
|
||||||
case 0:
|
case 0:
|
||||||
for (var i = 0, ii = length - 1; i < ii; ++i) {
|
for (var i = 0; i < length; ++i) {
|
||||||
var id = bytes[pos++];
|
var id = bytes[pos++];
|
||||||
id = (id << 8) | bytes[pos++];
|
id = (id << 8) | bytes[pos++];
|
||||||
charset.push(strings[id]);
|
charset.push(strings[id]);
|
||||||
}
|
}
|
||||||
return charset;
|
return charset;
|
||||||
case 1:
|
case 1:
|
||||||
// subtract 1 for the .notdef glyph
|
|
||||||
length -= 1;
|
|
||||||
while (charset.length <= length) {
|
while (charset.length <= length) {
|
||||||
var first = bytes[pos++];
|
var first = bytes[pos++];
|
||||||
first = (first << 8) | bytes[pos++];
|
first = (first << 8) | bytes[pos++];
|
||||||
@ -2119,18 +2123,27 @@ var Type2CFF = (function() {
|
|||||||
}
|
}
|
||||||
return charset;
|
return charset;
|
||||||
case 2:
|
case 2:
|
||||||
|
while (charset.length <= length) {
|
||||||
|
var first = bytes[pos++];
|
||||||
|
first = (first << 8) | bytes[pos++];
|
||||||
|
var numLeft = bytes[pos++];
|
||||||
|
numLeft = (numLeft << 8) | bytes[pos++];
|
||||||
|
for (var i = 0; i <= numLeft; ++i)
|
||||||
|
charset.push(strings[first++]);
|
||||||
|
}
|
||||||
|
return charset;
|
||||||
default:
|
default:
|
||||||
|
error('Unknown charset format');
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
getPrivDict: function cff_getprivdict(baseDict, strings) {
|
getPrivDict: function cff_getprivdict(baseDict, strings) {
|
||||||
var dict = {};
|
var dict = {};
|
||||||
|
|
||||||
|
// default values
|
||||||
dict['defaultWidthX'] = 0;
|
dict['defaultWidthX'] = 0;
|
||||||
dict['nominalWidthX'] = 0;
|
dict['nominalWidthX'] = 0;
|
||||||
|
|
||||||
// default values
|
|
||||||
|
|
||||||
for (var i = 0, ii = baseDict.length; i < ii; ++i) {
|
for (var i = 0, ii = baseDict.length; i < ii; ++i) {
|
||||||
var pair = baseDict[i];
|
var pair = baseDict[i];
|
||||||
var key = pair[0];
|
var key = pair[0];
|
||||||
@ -2192,12 +2205,19 @@ var Type2CFF = (function() {
|
|||||||
return dict;
|
return dict;
|
||||||
},
|
},
|
||||||
getStrings: function cff_getstrings(stringIndex) {
|
getStrings: function cff_getstrings(stringIndex) {
|
||||||
|
function bytesToString(bytesArr) {
|
||||||
|
var s = "";
|
||||||
|
for (var i = 0, ii = bytesArr.length; i < ii; ++i)
|
||||||
|
s += String.fromCharCode(bytesArr[i]);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
var stringArray = [];
|
var stringArray = [];
|
||||||
for (var i = 0, ii = CFFStrings.length; i < ii; ++i)
|
for (var i = 0, ii = CFFStrings.length; i < ii; ++i)
|
||||||
stringArray.push(CFFStrings[i]);
|
stringArray.push(CFFStrings[i]);
|
||||||
|
|
||||||
for (var i = 0, ii = stringIndex.length; i < ii; ++i)
|
for (var i = 0, ii = stringIndex.length; i < ii; ++i)
|
||||||
stringArray.push(this.bytesToString(stringIndex.get(i)));
|
stringArray.push(bytesToString(stringIndex.get(i)));
|
||||||
|
|
||||||
return stringArray;
|
return stringArray;
|
||||||
},
|
},
|
||||||
@ -2207,6 +2227,7 @@ var Type2CFF = (function() {
|
|||||||
|
|
||||||
while(bytes[offset] != 1)
|
while(bytes[offset] != 1)
|
||||||
++offset;
|
++offset;
|
||||||
|
|
||||||
if (offset != 0) {
|
if (offset != 0) {
|
||||||
warning("cff data is shifted");
|
warning("cff data is shifted");
|
||||||
bytes = bytes.subarray(offset);
|
bytes = bytes.subarray(offset);
|
||||||
@ -2325,12 +2346,6 @@ var Type2CFF = (function() {
|
|||||||
endPos: end
|
endPos: end
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
bytesToString: function cff_bytestostring(bytesArr) {
|
|
||||||
var s = "";
|
|
||||||
for (var i = 0, ii = bytesArr.length; i < ii; ++i)
|
|
||||||
s += String.fromCharCode(bytesArr[i]);
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return constructor;
|
return constructor;
|
||||||
|
2
pdf.js
2
pdf.js
@ -3838,7 +3838,7 @@ var PartialEvaluator = (function() {
|
|||||||
var properties = {
|
var properties = {
|
||||||
type: subType.name,
|
type: subType.name,
|
||||||
subtype: fileType,
|
subtype: fileType,
|
||||||
glyphWidths: glyphWidths,
|
widths: glyphWidths,
|
||||||
encoding: encodingMap,
|
encoding: encodingMap,
|
||||||
charset: charset,
|
charset: charset,
|
||||||
firstChar: fontDict.get('FirstChar'),
|
firstChar: fontDict.get('FirstChar'),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user