return glyphs;
},
+ getBaseFontMetrics: function(baseFontName) {
+ var map = {};
+ if (/^Symbol(-?(Bold|Italic))*$/.test(baseFontName)) {
+ // special case for symbols
+ var encoding = Encodings.symbolsEncoding;
+ for (var i = 0, n = encoding.length, j; i < n; i++) {
+ if (!(j = encoding[i]))
+ continue;
+ map[i] = GlyphsUnicode[j] || 0;
+ }
+ }
+
+ var defaultWidth = 0;
+ var widths = Metrics[stdFontMap[baseFontName] || baseFontName];
+ if (IsNum(widths)) {
+ defaultWidth = widths;
+ widths = null;
+ }
+
+ return {
+ defaultWidth: defaultWidth,
+ widths: widths || [],
+ map: map
+ };
+ },
+
translateFont: function(dict, xref, resources) {
var baseDict = dict;
var type = dict.get('Subtype');
return null;
// Using base font name as a font name.
- baseFontName = baseFontName.name;
- var map = {};
- if (/^Symbol(-?(Bold|Italic))*$/.test(baseFontName)) {
- // special case for symbols
- var encoding = Encodings.symbolsEncoding;
- for (var i = 0, n = encoding.length, j; i < n; i++) {
- if (!(j = encoding[i]))
- continue;
- map[i] = GlyphsUnicode[j] || 0;
- }
- }
+ baseFontName = baseFontName.name.replace(/,/g, '_');
+ var metrics = this.getBaseFontMetrics(baseFontName);
- var defaultWidth = 0;
- var widths = Metrics[stdFontMap[baseFontName] || baseFontName];
- if (IsNum(widths)) {
- defaultWidth = widths;
- widths = null;
- }
var properties = {
type: type.name,
- encoding: map,
+ encoding: metrics.map,
differences: [],
- widths: widths || {},
- defaultWidth: defaultWidth,
+ widths: metrics.widths,
+ defaultWidth: metrics.defaultWidth,
firstChar: 0,
lastChar: 256
};
// a variant.
var firstChar = xref.fetchIfRef(dict.get('FirstChar')) || 0;
var lastChar = xref.fetchIfRef(dict.get('LastChar')) || 256;
- var widths = xref.fetchIfRef(dict.get('Widths')) || [];
+ var defaultWidth = 0;
+ var glyphWidths = {};
+ var encoding = {};
+ var widths = xref.fetchIfRef(dict.get('Widths'));
+ if (widths) {
+ for (var i = 0, j = firstChar; i < widths.length; i++, j++)
+ glyphWidths[j] = widths[i];
+ defaultWidth = parseFloat(descriptor.get('MissingWidth')) || 0;
+ } else {
+ // Trying get the BaseFont metrics (see comment above).
+ var baseFontName = dict.get('BaseFont');
+ if (IsName(baseFontName)) {
+ var metrics = this.getBaseFontMetrics(baseFontName.name);
+
+ glyphWidths = metrics.widths;
+ defaultWidth = metrics.defaultWidth;
+ encoding = metrics.map;
+ }
+ }
var fontName = xref.fetchIfRef(descriptor.get('FontName'));
assertWellFormed(IsName(fontName), 'invalid font name');
descent: descriptor.get('Descent'),
xHeight: descriptor.get('XHeight'),
capHeight: descriptor.get('CapHeight'),
- defaultWidth: parseFloat(descriptor.get('MissingWidth')) || 0,
+ defaultWidth: defaultWidth,
flags: descriptor.get('Flags'),
italicAngle: descriptor.get('ItalicAngle'),
differences: [],
- widths: (function() {
- var glyphWidths = {};
- for (var i = 0; i < widths.length; i++)
- glyphWidths[firstChar++] = widths[i];
- return glyphWidths;
- })(),
- encoding: {}
+ widths: glyphWidths,
+ encoding: encoding
};
properties.glyphs = this.extractEncoding(dict, xref, properties);