| 3215 | // Parse the CFF encoding data. Only one encoding can be specified per font. |
| 3216 | // See Adobe TN #5176 chapter 12, "Encodings". |
| 3217 | function parseCFFEncoding(data, start, charset) { |
| 3218 | var i; |
| 3219 | var code; |
| 3220 | var enc = {}; |
| 3221 | var parser = new parse.Parser(data, start); |
| 3222 | var format = parser.parseCard8(); |
| 3223 | if (format === 0) { |
| 3224 | var nCodes = parser.parseCard8(); |
| 3225 | for (i = 0; i < nCodes; i += 1) { |
| 3226 | code = parser.parseCard8(); |
| 3227 | enc[code] = i; |
| 3228 | } |
| 3229 | } else if (format === 1) { |
| 3230 | var nRanges = parser.parseCard8(); |
| 3231 | code = 1; |
| 3232 | for (i = 0; i < nRanges; i += 1) { |
| 3233 | var first = parser.parseCard8(); |
| 3234 | var nLeft = parser.parseCard8(); |
| 3235 | for (var j = first; j <= first + nLeft; j += 1) { |
| 3236 | enc[j] = code; |
| 3237 | code += 1; |
| 3238 | } |
| 3239 | } |
| 3240 | } else { |
| 3241 | throw new Error('Unknown encoding format ' + format); |
| 3242 | } |
| 3243 | |
| 3244 | return new encoding.CffEncoding(enc, charset); |
| 3245 | } |
| 3246 | |
| 3247 | // Take in charstring code and return a Glyph object. |
| 3248 | // The encoding is described in the Type 2 Charstring Format |