typedef struct
{
    const char *op;
    const char *description;
} OperatorMapping;

OperatorMapping op_mapping[] = {
    { "b", "Close, fill, and stroke path using nonzero winding number rule" },
    { "B", "Fill and stroke path using nonzero winding number rule" },
    { "b*", "Close, fill, and stroke path using even-odd rule" },
    { "B*", "Fill and stroke path using even-odd rule" },
    { "BDC", "(PDF 1.2) Begin marked-content sequence with property list" },
    { "BI", "Begin inline image object" },
    { "BMC", "(PDF 1.2) Begin marked-content sequence" },
    { "BT", "Begin text object" },
    { "BX", "(PDF 1.1) Begin compatibility section" },
    { "c", "Append curved segment to path (three control points)" },
    { "cm", "Concatenate matrix to current transformation matrix" },
    { "CS", "(PDF 1.1) Set color space for stroking operations" },
    { "cs", "(PDF 1.1) Set color space for nonstroking operations" },
    { "d", "Set line dash pattern" },
    { "d0", "Set glyph width in Type 3 font" },
    { "d1", "Set glyph width and bounding box in Type 3 font" },
    { "Do", "Invoke named XObject" },
    { "DP", "(PDF 1.2) Define marked-content point with property list" },
    { "EI", "End inline image object" },
    { "EMC", "(PDF 1.2) End marked-content sequence" },
    { "ET", "End text object" },
    { "EX", "(PDF 1.1) End compatibility section" },
    { "f", "Fill path using nonzero winding number rule" },
    { "F", "Fill path using nonzero winding number rule (obsolete)" },
    { "f*", "Fill path using even-odd rule" },
    { "G", "Set gray level for stroking operations" },
    { "g", "Set gray level for nonstroking operations" },
    { "gs", "(PDF 1.2) Set parameters from graphics state parameter dictionary" },
    { "h", "Close subpath" },
    { "i", "Set flatness tolerance" },
    { "ID", "Begin inline image data" },
    { "j", "Set line join style" },
    { "J", "Set line cap style" },
    { "K", "Set CMYK color for stroking operations" },
    { "k", "Set CMYK color for nonstroking operations" },
    { "l", "Append straight line segment to path" },
    { "m", "Begin new subpath" },
    { "M", "Set miter limit" },
    { "MP", "(PDF 1.2) Define marked-content point" },
    { "n", "End path without filling or stroking" },
    { "q", "Save graphics state" },
    { "Q", "Restore graphics state" },
    { "re", "Append rectangle to path" },
    { "RG", "Set RGB color for stroking operations" },
    { "rg", "Set RGB color for nonstroking operations" },
    { "ri", "Set color rendering intent" },
    { "s", "Close and stroke path" },
    { "S", "Stroke path" },
    { "SC", "(PDF 1.1) Set color for stroking operations" },
    { "sc", "(PDF 1.1) Set color for nonstroking operations" },
    { "SCN", "(PDF 1.2) Set color for stroking operations (ICCBased and special color spaces)" },
    { "scn", "(PDF 1.2) Set color for nonstroking operations (ICCBased and special color spaces)" },
    { "sh", "(PDF 1.3) Paint area defined by shading pattern" },
    { "T*", "Move to start of next text line" },
    { "Tc", "Set character spacing" },
    { "Td", "Move text position" },
    { "TD", "Move text position and set leading" },
    { "Tf", "Set text font and size" },
    { "Tj", "Show text" },
    { "TJ", "Show text, allowing individual glyph positioning" },
    { "TL", "Set text leading" },
    { "Tm", "Set text matrix and text line matrix" },
    { "Tr", "Set text rendering mode" },
    { "Ts", "Set text rise" },
    { "Tw", "Set word spacing" },
    { "Tz", "Set horizontal text scaling" },
    { "v", "Append curved segment to path (initial point replicated)" },
    { "w", "Set line width" },
    { "W", "Set clipping path using nonzero winding number rule" },
    { "W*", "Set clipping path using even-odd rule" },
    { "y", "Append curved segment to path (final point replicated)" },
    { "'", "Move to next line and show text" },
    { "\"", "Set word and character spacing, move to next line, and show text" },
};
