export interface PDFOperator { name: string; keyword: string | null; description: string; numArgs?: number; variableArgs?: boolean; class: string; } export class OperatorList { fnArray: []; argsArray: []; rangeArray: []; constructor(fnArray: [], argsArray: [], rangeArray: []) { this.fnArray = fnArray; this.argsArray = argsArray; this.rangeArray = rangeArray; } public static formatOperatorToMarkdown(operatorId: keyof typeof opLookup): string { const operator = opLookup[operatorId] as PDFOperator; if (!operator) { return `Unknown operator: ${operatorId}`; } const keyword = operator.keyword ? `\`${operator.keyword}\`` : 'N/A'; const args = operator.numArgs !== undefined ? `Arguments: ${operator.numArgs}${operator.variableArgs ? ' (variable)' : ''}` : 'No arguments'; return `**${operator.name}** (${keyword}) ` + `${operator.description} ` + `${args}`; } } export const opLookup = { '1': { name: 'dependency', keyword: "Do", description: 'Marks a resource dependency', numArgs: 0, variableArgs: false, class: 'operator' }, '2': { name: 'setLineWidth', keyword: 'w', description: 'Sets the line width in the graphics state', numArgs: 1, variableArgs: false, class: 'operator' }, '3': { name: 'setLineCap', keyword: 'J', description: 'Sets the line cap style in the graphics state (0=butt, 1=round, 2=square)', numArgs: 1, variableArgs: false, class: 'operator' }, '4': { name: 'setLineJoin', keyword: 'j', description: 'Sets the line join style in the graphics state (0=miter, 1=round, 2=bevel)', numArgs: 1, variableArgs: false, class: 'operator' }, '5': { name: 'setMiterLimit', keyword: 'M', description: 'Sets the miter limit in the graphics state', numArgs: 1, variableArgs: false, class: 'operator' }, '6': { name: 'setDash', keyword: 'd', description: 'Sets the line dash pattern in the graphics state', numArgs: 2, variableArgs: false, class: 'operator' }, '7': { name: 'setRenderingIntent', keyword: 'ri', description: 'Sets the color rendering intent in the graphics state', numArgs: 1, variableArgs: false, class: 'operator' }, '8': { name: 'setFlatness', keyword: 'i', description: 'Sets the flatness tolerance in the graphics state', numArgs: 1, variableArgs: false, class: 'operator' }, '9': { name: 'setGState', keyword: 'gs', description: 'Sets the specified parameters in the graphics state', numArgs: 1, variableArgs: false, class: 'operator' }, '10': { name: 'save', keyword: 'q', description: 'Pushes a copy of the current graphics state onto the graphics state stack', numArgs: 0, variableArgs: false, class: 'operator' }, '11': { name: 'restore', keyword: 'Q', description: 'Restores the graphics state by popping it from the stack', numArgs: 0, variableArgs: false, class: 'operator' }, '12': { name: 'transform', keyword: 'cm', description: 'Modifies the current transformation matrix (CTM)', numArgs: 6, variableArgs: false, class: 'matrix' }, '13': { name: 'moveTo', keyword: 'm', description: 'Begins a new subpath by moving to coordinates (x, y)', numArgs: 2, variableArgs: false, class: 'path-construct' }, '14': { name: 'lineTo', keyword: 'l', description: 'Adds a straight line segment to the current path', numArgs: 2, variableArgs: false, class: 'path-construct' }, '15': { name: 'curveTo', keyword: 'c', description: 'Adds a Bézier curve segment to the current path using two control points', numArgs: 6, variableArgs: false, class: 'path-construct' }, '16': { name: 'curveTo2', keyword: 'v', description: 'Adds a Bézier curve segment to the current path using one control point', numArgs: 4, variableArgs: false, class: 'path-construct' }, '17': { name: 'curveTo3', keyword: 'y', description: 'Adds a Bézier curve segment to the current path using one control point', numArgs: 4, variableArgs: false, class: 'path-construct' }, '18': { name: 'closePath', keyword: 'h', description: 'Closes the current subpath', numArgs: 0, variableArgs: false, class: 'path-construct' }, '19': { name: 'rectangle', keyword: 're', description: 'Adds a rectangle to the current path', numArgs: 4, variableArgs: false, class: 'path-construct' }, '20': { name: 'stroke', keyword: 'S', description: 'Strokes the current path', numArgs: 0, variableArgs: false, class: 'path-paint' }, '21': { name: 'closeStroke', keyword: 's', description: 'Closes and strokes the current path', numArgs: 0, variableArgs: false, class: 'path-paint' }, '22': { name: 'fill', keyword: 'f', description: 'Fills the current path using nonzero winding number rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '23': { name: 'eoFill', keyword: 'f*', description: 'Fills the current path using even-odd rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '24': { name: 'fillStroke', keyword: 'B', description: 'Fills and strokes the current path using nonzero winding number rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '25': { name: 'eoFillStroke', keyword: 'B*', description: 'Fills and strokes the current path using even-odd rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '26': { name: 'closeFillStroke', keyword: 'b', description: 'Closes, fills, and strokes the current path using nonzero winding number rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '27': { name: 'closeEOFillStroke', keyword: 'b*', description: 'Closes, fills, and strokes the current path using even-odd rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '28': { name: 'endPath', keyword: 'n', description: 'Ends the current path without filling or stroking', numArgs: 0, variableArgs: false, class: 'path-paint' }, '29': { name: 'clip', keyword: 'W', description: 'Sets the current path as the clipping path using nonzero winding number rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '30': { name: 'eoClip', keyword: 'W*', description: 'Sets the current path as the clipping path using even-odd rule', numArgs: 0, variableArgs: false, class: 'path-paint' }, '31': { name: 'beginText', keyword: 'BT', description: 'Begins a text object', numArgs: 0, variableArgs: false, class: 'text-render' }, '32': { name: 'endText', keyword: 'ET', description: 'Ends a text object', numArgs: 0, variableArgs: false, class: 'text-render' }, '33': { name: 'setCharSpacing', keyword: 'Tc', description: 'Sets the character spacing', numArgs: 1, variableArgs: false, class: 'text-state' }, '34': { name: 'setWordSpacing', keyword: 'Tw', description: 'Sets the word spacing', numArgs: 1, variableArgs: false, class: 'text-state' }, '35': { name: 'setHScale', keyword: 'Tz', description: 'Sets the horizontal scaling', numArgs: 1, variableArgs: false, class: 'text-state' }, '36': { name: 'setLeading', keyword: 'TL', description: 'Sets the text leading', numArgs: 1, variableArgs: false, class: 'text-state' }, '37': { name: 'setFont', keyword: 'Tf', description: 'Sets the text font and size', numArgs: 2, variableArgs: false, class: 'text-state' }, '38': { name: 'setTextRenderingMode', keyword: 'Tr', description: 'Sets the text rendering mode', numArgs: 1, variableArgs: false, class: 'text-state' }, '39': { name: 'setTextRise', keyword: 'Ts', description: 'Sets the text rise', numArgs: 1, variableArgs: false, class: 'text-state' }, '40': { name: 'moveText', keyword: 'Td', description: 'Moves to the start of the next line using offset coordinates', numArgs: 2, variableArgs: false, class: 'text-positioning' }, '41': { name: 'setLeadingMoveText', keyword: 'TD', description: 'Sets the text leading and moves to the next line', numArgs: 2, variableArgs: false, class: 'text-positioning' }, '42': { name: 'setTextMatrix', keyword: 'Tm', description: 'Sets the text matrix and text line matrix', numArgs: 6, variableArgs: false, class: 'matrix' }, '43': { name: 'nextLine', keyword: 'T*', description: 'Moves to the start of the next line', numArgs: 0, variableArgs: false, class: 'text-positioning' }, '44': { name: 'showText', keyword: 'Tj', description: 'Shows a text string', numArgs: 1, variableArgs: false, class: 'text-render' }, '45': { name: 'showSpacedText', keyword: 'TJ', description: 'Shows a text string with individual glyph positioning', numArgs: 1, variableArgs: false, class: 'text-render' }, '46': { name: 'nextLineShowText', keyword: '\'', description: 'Moves to the next line and shows a text string', numArgs: 1, variableArgs: false, class: 'text-render' }, '47': { name: 'nextLineSetSpacingShowText', keyword: '"', description: 'Sets word and character spacing, moves to next line, and shows text', numArgs: 3, variableArgs: false, class: 'text-render' }, '48': { name: 'setCharWidth', keyword: 'd0', description: 'Sets the character width information for Type 3 fonts', numArgs: 2, variableArgs: false, class: 'text-state' }, '49': { name: 'setCharWidthAndBounds', keyword: 'd1', description: 'Sets the character width and bounding box for Type 3 fonts', numArgs: 6, variableArgs: false, class: 'text-state' }, '50': { name: 'setStrokeColorSpace', keyword: 'CS', description: 'Sets the color space for stroking operations', numArgs: 1, variableArgs: false, class: 'color-operator' }, '51': { name: 'setFillColorSpace', keyword: 'cs', description: 'Sets the color space for nonstroking operations', numArgs: 1, variableArgs: false, class: 'color-operator' }, '52': { name: 'setStrokeColor', keyword: 'SC', description: 'Sets the color for stroking operations', numArgs: 4, variableArgs: true, class: 'color-operator' }, '53': { name: 'setStrokeColorN', keyword: 'SCN', description: 'Sets the color for stroking operations (ICCBased and special color spaces)', numArgs: 33, variableArgs: true, class: 'color-operator' }, '54': { name: 'setFillColor', keyword: 'sc', description: 'Sets the color for nonstroking operations', numArgs: 4, variableArgs: true, class: 'color-operator' }, '55': { name: 'setFillColorN', keyword: 'scn', description: 'Sets the color for nonstroking operations (ICCBased and special color spaces)', numArgs: 33, variableArgs: true, class: 'color-operator' }, '56': { name: 'setStrokeGray', keyword: 'G', description: 'Sets the gray level for stroking operations', numArgs: 1, variableArgs: false, class: 'color-operator' }, '57': { name: 'setFillGray', keyword: 'g', description: 'Sets the gray level for nonstroking operations', numArgs: 1, variableArgs: false, class: 'color-operator' }, '58': { name: 'setStrokeRGBColor', keyword: 'RG', description: 'Sets the RGB color for stroking operations', numArgs: 3, variableArgs: false, class: 'color-operator' }, '59': { name: 'setFillRGBColor', keyword: 'rg', description: 'Sets the RGB color for nonstroking operations', numArgs: 3, variableArgs: false, class: 'color-operator' }, '60': { name: 'setStrokeCMYKColor', keyword: 'K', description: 'Sets the CMYK color for stroking operations', numArgs: 4, variableArgs: false, class: 'color-operator' }, '61': { name: 'setFillCMYKColor', keyword: 'k', description: 'Sets the CMYK color for nonstroking operations', numArgs: 4, variableArgs: false, class: 'color-operator' }, '62': { name: 'shadingFill', keyword: 'sh', description: 'Fills the current path using a shading pattern', numArgs: 1, variableArgs: false, class: 'path-paint' }, '63': { name: 'beginInlineImage', keyword: 'BI', description: 'Begins an inline image object', numArgs: 0, variableArgs: false, class: 'named-element' }, '64': { name: 'beginImageData', keyword: 'ID', description: 'Begins the inline image data', numArgs: 0, variableArgs: false, class: 'named-element' }, '65': { name: 'endInlineImage', keyword: 'EI', description: 'Ends an inline image object', numArgs: 1, variableArgs: false, class: 'named-element' }, '66': { name: 'paintXObject', keyword: 'Do', description: 'Paints the specified XObject', numArgs: 1, variableArgs: false, class: 'named-element' }, '67': { name: 'markPoint', keyword: 'MP', description: 'Marks a point in the content stream', numArgs: 1, variableArgs: false, class: 'marked-content' }, '68': { name: 'markPointProps', keyword: 'DP', description: 'Marks a point in the content stream with properties', numArgs: 2, variableArgs: false, class: 'marked-content' }, '69': { name: 'beginMarkedContent', keyword: 'BMC', description: 'Begins a marked-content sequence', numArgs: 1, variableArgs: false, class: 'marked-content' }, '70': { name: 'beginMarkedContentProps', keyword: 'BDC', description: 'Begins a marked-content sequence with properties', numArgs: 2, variableArgs: false, class: 'marked-content' }, '71': { name: 'endMarkedContent', keyword: 'EMC', description: 'Ends a marked-content sequence', numArgs: 0, variableArgs: false, class: 'marked-content' }, '72': { name: 'beginCompat', keyword: 'BX', description: 'Begins a compatibility section', numArgs: 0, variableArgs: false, class: 'operator' }, '73': { name: 'endCompat', keyword: 'EX', description: 'Ends a compatibility section', numArgs: 0, variableArgs: false, class: 'operator' }, '74': { name: 'paintFormXObjectBegin', keyword: null, description: 'Begins painting a form XObject', class: 'named-element' }, '75': { name: 'paintFormXObjectEnd', keyword: null, description: 'Ends painting a form XObject', class: 'named-element' }, '76': { name: 'beginGroup', keyword: null, description: 'Begins a transparency group', class: 'operator' }, '77': { name: 'endGroup', keyword: null, description: 'Ends a transparency group', class: 'operator' }, '80': { name: 'beginAnnotation', keyword: null, description: 'Begins an annotation', class: 'named-element' }, '81': { name: 'endAnnotation', keyword: null, description: 'Ends an annotation', class: 'named-element' }, '83': { name: 'paintImageMaskXObject', keyword: null, description: 'Paints an image mask XObject', class: 'named-element' }, '84': { name: 'paintImageMaskXObjectGroup', keyword: null, description: 'Paints an image mask XObject group', class: 'named-element' }, '85': { name: 'paintImageXObject', keyword: null, description: 'Paints an image XObject', class: 'named-element' }, '86': { name: 'paintInlineImageXObject', keyword: null, description: 'Paints an inline image XObject', class: 'named-element' }, '87': { name: 'paintInlineImageXObjectGroup', keyword: null, description: 'Paints an inline image XObject group', class: 'named-element' }, '88': { name: 'paintImageXObjectRepeat', keyword: null, description: 'Paints a repeated image XObject', class: 'named-element' }, '89': { name: 'paintImageMaskXObjectRepeat', keyword: null, description: 'Paints a repeated image mask XObject', class: 'named-element' }, '90': { name: 'paintSolidColorImageMask', keyword: null, description: 'Paints a solid color image mask', class: 'named-element' }, '91': { name: 'constructPath', keyword: null, description: 'Constructs a path from the specified segments', class: 'path-construct' }, '92': { name: 'setStrokeTransparent', keyword: null, description: 'Sets the stroke transparency', class: 'operator' }, '93': { name: 'setFillTransparent', keyword: null, description: 'Sets the fill transparency', class: 'operator' } };