Lazify OP_MAP.
This commit is contained in:
parent
1de90454b7
commit
d6adf84159
@ -61,6 +61,7 @@ var info = sharedUtil.info;
|
|||||||
var isArray = sharedUtil.isArray;
|
var isArray = sharedUtil.isArray;
|
||||||
var isNum = sharedUtil.isNum;
|
var isNum = sharedUtil.isNum;
|
||||||
var isString = sharedUtil.isString;
|
var isString = sharedUtil.isString;
|
||||||
|
var getLookupTableFactory = sharedUtil.getLookupTableFactory;
|
||||||
var warn = sharedUtil.warn;
|
var warn = sharedUtil.warn;
|
||||||
var Dict = corePrimitives.Dict;
|
var Dict = corePrimitives.Dict;
|
||||||
var Name = corePrimitives.Name;
|
var Name = corePrimitives.Name;
|
||||||
@ -2336,119 +2337,121 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
|
|||||||
//
|
//
|
||||||
// If variableArgs === true: [0, `numArgs`] expected
|
// If variableArgs === true: [0, `numArgs`] expected
|
||||||
// If variableArgs === false: exactly `numArgs` expected
|
// If variableArgs === false: exactly `numArgs` expected
|
||||||
var OP_MAP = {
|
var getOPMap = getLookupTableFactory(function (t) {
|
||||||
// Graphic state
|
// Graphic state
|
||||||
w: { id: OPS.setLineWidth, numArgs: 1, variableArgs: false },
|
t['w'] = { id: OPS.setLineWidth, numArgs: 1, variableArgs: false };
|
||||||
J: { id: OPS.setLineCap, numArgs: 1, variableArgs: false },
|
t['J'] = { id: OPS.setLineCap, numArgs: 1, variableArgs: false };
|
||||||
j: { id: OPS.setLineJoin, numArgs: 1, variableArgs: false },
|
t['j'] = { id: OPS.setLineJoin, numArgs: 1, variableArgs: false };
|
||||||
M: { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false },
|
t['M'] = { id: OPS.setMiterLimit, numArgs: 1, variableArgs: false };
|
||||||
d: { id: OPS.setDash, numArgs: 2, variableArgs: false },
|
t['d'] = { id: OPS.setDash, numArgs: 2, variableArgs: false };
|
||||||
ri: { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false },
|
t['ri'] = { id: OPS.setRenderingIntent, numArgs: 1, variableArgs: false };
|
||||||
i: { id: OPS.setFlatness, numArgs: 1, variableArgs: false },
|
t['i'] = { id: OPS.setFlatness, numArgs: 1, variableArgs: false };
|
||||||
gs: { id: OPS.setGState, numArgs: 1, variableArgs: false },
|
t['gs'] = { id: OPS.setGState, numArgs: 1, variableArgs: false };
|
||||||
q: { id: OPS.save, numArgs: 0, variableArgs: false },
|
t['q'] = { id: OPS.save, numArgs: 0, variableArgs: false };
|
||||||
Q: { id: OPS.restore, numArgs: 0, variableArgs: false },
|
t['Q'] = { id: OPS.restore, numArgs: 0, variableArgs: false };
|
||||||
cm: { id: OPS.transform, numArgs: 6, variableArgs: false },
|
t['cm'] = { id: OPS.transform, numArgs: 6, variableArgs: false };
|
||||||
|
|
||||||
// Path
|
// Path
|
||||||
m: { id: OPS.moveTo, numArgs: 2, variableArgs: false },
|
t['m'] = { id: OPS.moveTo, numArgs: 2, variableArgs: false };
|
||||||
l: { id: OPS.lineTo, numArgs: 2, variableArgs: false },
|
t['l'] = { id: OPS.lineTo, numArgs: 2, variableArgs: false };
|
||||||
c: { id: OPS.curveTo, numArgs: 6, variableArgs: false },
|
t['c'] = { id: OPS.curveTo, numArgs: 6, variableArgs: false };
|
||||||
v: { id: OPS.curveTo2, numArgs: 4, variableArgs: false },
|
t['v'] = { id: OPS.curveTo2, numArgs: 4, variableArgs: false };
|
||||||
y: { id: OPS.curveTo3, numArgs: 4, variableArgs: false },
|
t['y'] = { id: OPS.curveTo3, numArgs: 4, variableArgs: false };
|
||||||
h: { id: OPS.closePath, numArgs: 0, variableArgs: false },
|
t['h'] = { id: OPS.closePath, numArgs: 0, variableArgs: false };
|
||||||
re: { id: OPS.rectangle, numArgs: 4, variableArgs: false },
|
t['re'] = { id: OPS.rectangle, numArgs: 4, variableArgs: false };
|
||||||
S: { id: OPS.stroke, numArgs: 0, variableArgs: false },
|
t['S'] = { id: OPS.stroke, numArgs: 0, variableArgs: false };
|
||||||
s: { id: OPS.closeStroke, numArgs: 0, variableArgs: false },
|
t['s'] = { id: OPS.closeStroke, numArgs: 0, variableArgs: false };
|
||||||
f: { id: OPS.fill, numArgs: 0, variableArgs: false },
|
t['f'] = { id: OPS.fill, numArgs: 0, variableArgs: false };
|
||||||
F: { id: OPS.fill, numArgs: 0, variableArgs: false },
|
t['F'] = { id: OPS.fill, numArgs: 0, variableArgs: false };
|
||||||
'f*': { id: OPS.eoFill, numArgs: 0, variableArgs: false },
|
t['f*'] = { id: OPS.eoFill, numArgs: 0, variableArgs: false };
|
||||||
B: { id: OPS.fillStroke, numArgs: 0, variableArgs: false },
|
t['B'] = { id: OPS.fillStroke, numArgs: 0, variableArgs: false };
|
||||||
'B*': { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false },
|
t['B*'] = { id: OPS.eoFillStroke, numArgs: 0, variableArgs: false };
|
||||||
b: { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false },
|
t['b'] = { id: OPS.closeFillStroke, numArgs: 0, variableArgs: false };
|
||||||
'b*': { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false },
|
t['b*'] = { id: OPS.closeEOFillStroke, numArgs: 0, variableArgs: false };
|
||||||
n: { id: OPS.endPath, numArgs: 0, variableArgs: false },
|
t['n'] = { id: OPS.endPath, numArgs: 0, variableArgs: false };
|
||||||
|
|
||||||
// Clipping
|
// Clipping
|
||||||
W: { id: OPS.clip, numArgs: 0, variableArgs: false },
|
t['W'] = { id: OPS.clip, numArgs: 0, variableArgs: false };
|
||||||
'W*': { id: OPS.eoClip, numArgs: 0, variableArgs: false },
|
t['W*'] = { id: OPS.eoClip, numArgs: 0, variableArgs: false };
|
||||||
|
|
||||||
// Text
|
// Text
|
||||||
BT: { id: OPS.beginText, numArgs: 0, variableArgs: false },
|
t['BT'] = { id: OPS.beginText, numArgs: 0, variableArgs: false };
|
||||||
ET: { id: OPS.endText, numArgs: 0, variableArgs: false },
|
t['ET'] = { id: OPS.endText, numArgs: 0, variableArgs: false };
|
||||||
Tc: { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false },
|
t['Tc'] = { id: OPS.setCharSpacing, numArgs: 1, variableArgs: false };
|
||||||
Tw: { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false },
|
t['Tw'] = { id: OPS.setWordSpacing, numArgs: 1, variableArgs: false };
|
||||||
Tz: { id: OPS.setHScale, numArgs: 1, variableArgs: false },
|
t['Tz'] = { id: OPS.setHScale, numArgs: 1, variableArgs: false };
|
||||||
TL: { id: OPS.setLeading, numArgs: 1, variableArgs: false },
|
t['TL'] = { id: OPS.setLeading, numArgs: 1, variableArgs: false };
|
||||||
Tf: { id: OPS.setFont, numArgs: 2, variableArgs: false },
|
t['Tf'] = { id: OPS.setFont, numArgs: 2, variableArgs: false };
|
||||||
Tr: { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false },
|
t['Tr'] = { id: OPS.setTextRenderingMode, numArgs: 1, variableArgs: false };
|
||||||
Ts: { id: OPS.setTextRise, numArgs: 1, variableArgs: false },
|
t['Ts'] = { id: OPS.setTextRise, numArgs: 1, variableArgs: false };
|
||||||
Td: { id: OPS.moveText, numArgs: 2, variableArgs: false },
|
t['Td'] = { id: OPS.moveText, numArgs: 2, variableArgs: false };
|
||||||
TD: { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false },
|
t['TD'] = { id: OPS.setLeadingMoveText, numArgs: 2, variableArgs: false };
|
||||||
Tm: { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false },
|
t['Tm'] = { id: OPS.setTextMatrix, numArgs: 6, variableArgs: false };
|
||||||
'T*': { id: OPS.nextLine, numArgs: 0, variableArgs: false },
|
t['T*'] = { id: OPS.nextLine, numArgs: 0, variableArgs: false };
|
||||||
Tj: { id: OPS.showText, numArgs: 1, variableArgs: false },
|
t['Tj'] = { id: OPS.showText, numArgs: 1, variableArgs: false };
|
||||||
TJ: { id: OPS.showSpacedText, numArgs: 1, variableArgs: false },
|
t['TJ'] = { id: OPS.showSpacedText, numArgs: 1, variableArgs: false };
|
||||||
'\'': { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false },
|
t['\''] = { id: OPS.nextLineShowText, numArgs: 1, variableArgs: false };
|
||||||
'"': { id: OPS.nextLineSetSpacingShowText, numArgs: 3,
|
t['"'] = { id: OPS.nextLineSetSpacingShowText, numArgs: 3,
|
||||||
variableArgs: false },
|
variableArgs: false };
|
||||||
|
|
||||||
// Type3 fonts
|
// Type3 fonts
|
||||||
d0: { id: OPS.setCharWidth, numArgs: 2, variableArgs: false },
|
t['d0'] = { id: OPS.setCharWidth, numArgs: 2, variableArgs: false };
|
||||||
d1: { id: OPS.setCharWidthAndBounds, numArgs: 6, variableArgs: false },
|
t['d1'] = { id: OPS.setCharWidthAndBounds, numArgs: 6,
|
||||||
|
variableArgs: false };
|
||||||
|
|
||||||
// Color
|
// Color
|
||||||
CS: { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false },
|
t['CS'] = { id: OPS.setStrokeColorSpace, numArgs: 1, variableArgs: false };
|
||||||
cs: { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false },
|
t['cs'] = { id: OPS.setFillColorSpace, numArgs: 1, variableArgs: false };
|
||||||
SC: { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true },
|
t['SC'] = { id: OPS.setStrokeColor, numArgs: 4, variableArgs: true };
|
||||||
SCN: { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true },
|
t['SCN'] = { id: OPS.setStrokeColorN, numArgs: 33, variableArgs: true };
|
||||||
sc: { id: OPS.setFillColor, numArgs: 4, variableArgs: true },
|
t['sc'] = { id: OPS.setFillColor, numArgs: 4, variableArgs: true };
|
||||||
scn: { id: OPS.setFillColorN, numArgs: 33, variableArgs: true },
|
t['scn'] = { id: OPS.setFillColorN, numArgs: 33, variableArgs: true };
|
||||||
G: { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false },
|
t['G'] = { id: OPS.setStrokeGray, numArgs: 1, variableArgs: false };
|
||||||
g: { id: OPS.setFillGray, numArgs: 1, variableArgs: false },
|
t['g'] = { id: OPS.setFillGray, numArgs: 1, variableArgs: false };
|
||||||
RG: { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false },
|
t['RG'] = { id: OPS.setStrokeRGBColor, numArgs: 3, variableArgs: false };
|
||||||
rg: { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false },
|
t['rg'] = { id: OPS.setFillRGBColor, numArgs: 3, variableArgs: false };
|
||||||
K: { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false },
|
t['K'] = { id: OPS.setStrokeCMYKColor, numArgs: 4, variableArgs: false };
|
||||||
k: { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false },
|
t['k'] = { id: OPS.setFillCMYKColor, numArgs: 4, variableArgs: false };
|
||||||
|
|
||||||
// Shading
|
// Shading
|
||||||
sh: { id: OPS.shadingFill, numArgs: 1, variableArgs: false },
|
t['sh'] = { id: OPS.shadingFill, numArgs: 1, variableArgs: false };
|
||||||
|
|
||||||
// Images
|
// Images
|
||||||
BI: { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false },
|
t['BI'] = { id: OPS.beginInlineImage, numArgs: 0, variableArgs: false };
|
||||||
ID: { id: OPS.beginImageData, numArgs: 0, variableArgs: false },
|
t['ID'] = { id: OPS.beginImageData, numArgs: 0, variableArgs: false };
|
||||||
EI: { id: OPS.endInlineImage, numArgs: 1, variableArgs: false },
|
t['EI'] = { id: OPS.endInlineImage, numArgs: 1, variableArgs: false };
|
||||||
|
|
||||||
// XObjects
|
// XObjects
|
||||||
Do: { id: OPS.paintXObject, numArgs: 1, variableArgs: false },
|
t['Do'] = { id: OPS.paintXObject, numArgs: 1, variableArgs: false };
|
||||||
MP: { id: OPS.markPoint, numArgs: 1, variableArgs: false },
|
t['MP'] = { id: OPS.markPoint, numArgs: 1, variableArgs: false };
|
||||||
DP: { id: OPS.markPointProps, numArgs: 2, variableArgs: false },
|
t['DP'] = { id: OPS.markPointProps, numArgs: 2, variableArgs: false };
|
||||||
BMC: { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false },
|
t['BMC'] = { id: OPS.beginMarkedContent, numArgs: 1, variableArgs: false };
|
||||||
BDC: { id: OPS.beginMarkedContentProps, numArgs: 2,
|
t['BDC'] = { id: OPS.beginMarkedContentProps, numArgs: 2,
|
||||||
variableArgs: false },
|
variableArgs: false };
|
||||||
EMC: { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false },
|
t['EMC'] = { id: OPS.endMarkedContent, numArgs: 0, variableArgs: false };
|
||||||
|
|
||||||
// Compatibility
|
// Compatibility
|
||||||
BX: { id: OPS.beginCompat, numArgs: 0, variableArgs: false },
|
t['BX'] = { id: OPS.beginCompat, numArgs: 0, variableArgs: false };
|
||||||
EX: { id: OPS.endCompat, numArgs: 0, variableArgs: false },
|
t['EX'] = { id: OPS.endCompat, numArgs: 0, variableArgs: false };
|
||||||
|
|
||||||
// (reserved partial commands for the lexer)
|
// (reserved partial commands for the lexer)
|
||||||
BM: null,
|
t['BM'] = null;
|
||||||
BD: null,
|
t['BD'] = null;
|
||||||
'true': null,
|
t['true'] = null;
|
||||||
fa: null,
|
t['fa'] = null;
|
||||||
fal: null,
|
t['fal'] = null;
|
||||||
fals: null,
|
t['fals'] = null;
|
||||||
'false': null,
|
t['false'] = null;
|
||||||
nu: null,
|
t['nu'] = null;
|
||||||
nul: null,
|
t['nul'] = null;
|
||||||
'null': null
|
t['null'] = null;
|
||||||
};
|
});
|
||||||
|
|
||||||
function EvaluatorPreprocessor(stream, xref, stateManager) {
|
function EvaluatorPreprocessor(stream, xref, stateManager) {
|
||||||
// TODO(mduan): pass array of knownCommands rather than OP_MAP
|
this.opMap = getOPMap();
|
||||||
|
// TODO(mduan): pass array of knownCommands rather than this.opMap
|
||||||
// dictionary
|
// dictionary
|
||||||
this.parser = new Parser(new Lexer(stream, OP_MAP), false, xref);
|
this.parser = new Parser(new Lexer(stream, this.opMap), false, xref);
|
||||||
this.stateManager = stateManager;
|
this.stateManager = stateManager;
|
||||||
this.nonProcessedArgs = [];
|
this.nonProcessedArgs = [];
|
||||||
}
|
}
|
||||||
@ -2486,7 +2489,7 @@ var EvaluatorPreprocessor = (function EvaluatorPreprocessorClosure() {
|
|||||||
if (isCmd(obj)) {
|
if (isCmd(obj)) {
|
||||||
var cmd = obj.cmd;
|
var cmd = obj.cmd;
|
||||||
// Check that the command is valid
|
// Check that the command is valid
|
||||||
var opSpec = OP_MAP[cmd];
|
var opSpec = this.opMap[cmd];
|
||||||
if (!opSpec) {
|
if (!opSpec) {
|
||||||
warn('Unknown command "' + cmd + '"');
|
warn('Unknown command "' + cmd + '"');
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user