Encoding for standard fonts; symbols encoding
This commit is contained in:
parent
52b67e7850
commit
d58dac0fd3
3
fonts.js
3
fonts.js
@ -404,9 +404,6 @@ var Font = (function Font() {
|
||||
(fontName.indexOf('Italic') != -1);
|
||||
this.loadedName = fontName.split('-')[0];
|
||||
this.loading = false;
|
||||
this.charsToUnicode = function(s) {
|
||||
return s;
|
||||
};
|
||||
return;
|
||||
}
|
||||
|
||||
|
109
pdf.js
109
pdf.js
@ -3851,6 +3851,44 @@ var Encodings = {
|
||||
'ucircumflex', 'udieresis', 'yacute', 'thorn', 'ydieresis'
|
||||
]);
|
||||
},
|
||||
get symbolsEncoding() {
|
||||
return shadow(this, 'symbolsEncoding',
|
||||
[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
'space', 'exclam', 'universal', 'numbersign', 'existential', 'percent',
|
||||
'ampersand', 'suchthat', 'parenleft', 'parenright', 'asteriskmath',
|
||||
'plus', 'comma', 'minus', 'period', 'slash', 'zero', 'one', 'two',
|
||||
'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'colon',
|
||||
'semicolon', 'less', 'equal', 'greater', 'question', 'congruent',
|
||||
'Alpha', 'Beta', 'Chi', 'Delta', 'Epsilon', 'Phi', 'Gamma', 'Eta',
|
||||
'Iota', 'theta1', 'Kappa', 'Lambda', 'Mu', 'Nu', 'Omicron', 'Pi',
|
||||
'Theta', 'Rho', 'Sigma', 'Tau', 'Upsilon', 'sigma1', 'Omega', 'Xi',
|
||||
'Psi', 'Zeta', 'bracketleft', 'therefore', 'bracketright',
|
||||
'perpendicular', 'underscore', 'radicalex', 'alpha', 'beta', 'chi',
|
||||
'delta', 'epsilon', 'phi', 'gamma', 'eta', 'iota', 'phi1', 'kappa',
|
||||
'lambda', 'mu', 'nu', 'omicron', 'pi', 'theta', 'rho', 'sigma', 'tau',
|
||||
'upsilon', 'omega1', 'omega', 'xi', 'psi', 'zeta', 'braceleft', 'bar',
|
||||
'braceright', 'similar',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, 'Euro',
|
||||
'Upsilon1', 'minute', 'lessequal', 'fraction', 'infinity', 'florin',
|
||||
'club', 'diamond', 'heart', 'spade', 'arrowboth', 'arrowleft', 'arrowup',
|
||||
'arrowright', 'arrowdown', 'degree', 'plusminus', 'second',
|
||||
'greaterequal', 'multiply', 'proportional', 'partialdiff', 'bullet',
|
||||
'divide', 'notequal', 'equivalence', 'approxequal', 'ellipsis',
|
||||
'arrowvertex', 'arrowhorizex', 'carriagereturn', 'aleph', 'Ifraktur',
|
||||
'Rfraktur', 'weierstrass', 'circlemultiply', 'circleplus', 'emptyset',
|
||||
'intersection', 'union', 'propersuperset', 'reflexsuperset', 'notsubset',
|
||||
'propersubset', 'reflexsubset', 'element', 'notelement', 'angle',
|
||||
'gradient', 'registerserif', 'copyrightserif', 'trademarkserif',
|
||||
'product', 'radical', 'dotmath', 'logicalnot', 'logicaland', 'logicalor',
|
||||
'arrowdblboth', 'arrowdblleft', 'arrowdblup', 'arrowdblright',
|
||||
'arrowdbldown', 'lozenge', 'angleleft', 'registersans', 'copyrightsans',
|
||||
'trademarksans', 'summation', 'parenlefttp', 'parenleftex',
|
||||
'parenleftbt', 'bracketlefttp', 'bracketleftex', 'bracketleftbt',
|
||||
'bracelefttp', 'braceleftmid', 'braceleftbt', 'braceex', ,'angleright',
|
||||
'integral', 'integraltp', 'integralex', 'integralbt', 'parenrighttp',
|
||||
'parenrightex', 'parenrightbt', 'bracketrighttp', 'bracketrightex',
|
||||
'bracketrightbt', 'bracerighttp', 'bracerightmid', 'bracerightbt'
|
||||
]);
|
||||
},
|
||||
get zapfDingbatsEncoding() {
|
||||
return shadow(this, 'zapfDingbatsEncoding',
|
||||
[,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
|
||||
@ -4118,24 +4156,6 @@ var PartialEvaluator = (function() {
|
||||
fd = fontDict.get('FontDescriptor');
|
||||
}
|
||||
|
||||
if (!fd) {
|
||||
var baseFontName = fontDict.get('BaseFont');
|
||||
if (!IsName(baseFontName))
|
||||
return null;
|
||||
// Using base font name as a font name.
|
||||
return {
|
||||
name: baseFontName.name.replace(/[\+,\-]/g, '_'),
|
||||
fontDict: fontDict,
|
||||
properties: {}
|
||||
};
|
||||
}
|
||||
|
||||
var descriptor = xref.fetch(fd);
|
||||
|
||||
var fontName = xref.fetchIfRef(descriptor.get('FontName'));
|
||||
assertWellFormed(IsName(fontName), 'invalid font name');
|
||||
fontName = fontName.name.replace(/[\+,\-]/g, '_');
|
||||
|
||||
var encodingMap = {};
|
||||
var charset = [];
|
||||
if (compositeFont) {
|
||||
@ -4200,14 +4220,6 @@ var PartialEvaluator = (function() {
|
||||
GlyphsUnicode[data.name];
|
||||
}
|
||||
}
|
||||
|
||||
// Get the font charset if any
|
||||
var charset = descriptor.get('CharSet');
|
||||
if (charset) {
|
||||
assertWellFormed(IsString(charset), 'invalid charset');
|
||||
charset = charset.split('/');
|
||||
charset.shift();
|
||||
}
|
||||
} else if (IsName(encoding)) {
|
||||
var encoding = Encodings[encoding.name];
|
||||
if (!encoding)
|
||||
@ -4217,11 +4229,10 @@ var PartialEvaluator = (function() {
|
||||
for (var j = 0; j < encoding.length; j++)
|
||||
encodingMap[index++] = GlyphsUnicode[encoding[j]];
|
||||
|
||||
// firstChar and width are required
|
||||
// (except for 14 standard fonts)
|
||||
var firstChar = xref.fetchIfRef(fontDict.get('FirstChar'));
|
||||
var widths = xref.fetchIfRef(fontDict.get('Widths'));
|
||||
assertWellFormed(IsArray(widths) && IsInt(firstChar),
|
||||
'invalid font Widths or FirstChar');
|
||||
|
||||
var widths = xref.fetchIfRef(fontDict.get('Widths')) || [];
|
||||
for (var j = 0; j < widths.length; j++) {
|
||||
if (widths[j])
|
||||
charset.push(encoding[j + firstChar]);
|
||||
@ -4296,6 +4307,36 @@ var PartialEvaluator = (function() {
|
||||
}
|
||||
}
|
||||
|
||||
if (!fd) {
|
||||
var baseFontName = fontDict.get('BaseFont');
|
||||
if (!IsName(baseFontName))
|
||||
return null;
|
||||
// Using base font name as a font name.
|
||||
baseFontName = baseFontName.name.replace(/[\+,\-]/g, '_');
|
||||
if (baseFontName == 'Symbol') {
|
||||
// special case for symbols
|
||||
var encoding = Encodings.symbolsEncoding;
|
||||
for (var i = 0, n = encoding.length, j; i < n; i++) {
|
||||
if (!(j = encoding[i]))
|
||||
continue;
|
||||
encodingMap[i] = GlyphsUnicode[j] || 0;
|
||||
}
|
||||
}
|
||||
return {
|
||||
name: baseFontName,
|
||||
fontDict: fontDict,
|
||||
properties: {
|
||||
encoding: encodingMap
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
var descriptor = xref.fetch(fd);
|
||||
|
||||
var fontName = xref.fetchIfRef(descriptor.get('FontName'));
|
||||
assertWellFormed(IsName(fontName), 'invalid font name');
|
||||
fontName = fontName.name.replace(/[\+,\-]/g, '_');
|
||||
|
||||
var fontFile = descriptor.get('FontFile', 'FontFile2', 'FontFile3');
|
||||
if (fontFile) {
|
||||
fontFile = xref.fetchIfRef(fontFile);
|
||||
@ -4307,6 +4348,14 @@ var PartialEvaluator = (function() {
|
||||
}
|
||||
}
|
||||
|
||||
if (descriptor.has('CharSet')) {
|
||||
// Get the font charset if any (meaningful only in Type 1)
|
||||
charset = descriptor.get('CharSet');
|
||||
assertWellFormed(IsString(charset), 'invalid charset');
|
||||
charset = charset.split('/');
|
||||
charset.shift();
|
||||
}
|
||||
|
||||
var widths = fontDict.get('Widths');
|
||||
if (widths) {
|
||||
var glyphWidths = {};
|
||||
|
Loading…
x
Reference in New Issue
Block a user