Appendix D: Miscellaneous Enumerated Types

// MSOSHAPEPATH
typedef enum
   {
   msoshapeLines,        // A line of straight segments
   msoshapeLinesClosed,  // A closed polygonal object
   msoshapeCurves,       // A line of Bezier curve segments
   msoshapeCurvesClosed, // A closed shape with curved edges
   msoshapeComplex,      // pSegmentInfo must be non-empty
   } MSOSHAPEPATH;

// MSOWRAPMODE
typedef enum
   {
   msowrapSquare,
   msowrapByPoints,
   msowrapNone,
   msowrapTopBottom,
   msowrapThrough,
   } MSOWRAPMODE;

// MSOBWMODE
typedef enum
   {
   msobwColor,          // only used for predefined shades
   msobwAutomatic,      // depends on object type
   msobwGrayScale,      // shades of gray only
   msobwLightGrayScale, // shades of light gray only
   msobwInverseGray,    // dark gray mapped to light gray, etc.
   msobwGrayOutline,    // pure gray and white
   msobwBlackTextLine,  // black text and lines, all else grayscale
   msobwHighContrast,   // pure black and white mode (no grays)
   msobwBlack,          // solid black
   msobwWhite,          // solid white
   msobwDontShow,       // object not drawn
   msobwNumModes        // number of Black and white modes
   } MSOBWMODE;

// MSOANCHOR
typedef enum
   {
   msoanchorTop, 
   msoanchorMiddle, 
   msoanchorBottom, 
   msoanchorTopCentered, 
   msoanchorMiddleCentered, 
   msoanchorBottomCentered,
   msoanchorTopBaseline,
   msoanchorBottomBaseline,
   msoanchorTopCenteredBaseline,
   msoanchorBottomCenteredBaseline
   } MSOANCHOR;

// MSOCDIR
typedef enum
   {
   msocdir0,       // Right
   msocdir90,      // Down
   msocdir180,     // Left
   msocdir270      // Up
   } MSOCDIR;

// MSOCXSTYLE – connector style
typedef enum
   {
   msocxstyleStraight = 0,
   msocxstyleBent,
   msocxstyleCurved,
   msocxstyleNone
   } MSOCXSTYLE;

// MSOTXFL -- text flow
typedef enum 
   {
   msotxflHorzN,           // Horizontal non-@
   msotxflTtoBA,           // Top to Bottom @-font
   msotxflBtoT,            // Bottom to Top non-@
   msotxflTtoBN,           // Top to Bottom non-@
   msotxflHorzA,           // Horizontal @-font
   msotxflVertN,           // Vertical, non-@
   } MSOTXFL;

// MSOTXDIR - text direction (needed for Bi-Di support)
typedef enum
   {
   msotxdirLTR,           // left-to-right text direction
   msotxdirRTL,           // right-to-left text direction
    msotxdirContext,      // context text direction
    } MSOTXDIR;

// MSOSPCOT -- Callout Type 
typedef enum
   {
   msospcotRightAngle = 1,
   msospcotOneSegment = 2,
   msospcotTwoSegment = 3,
   msospcotThreeSegment = 4,
   } MSOSPCOT;

// MSOSPCOA -- Callout Angle
typedef enum
   {
   msospcoaAny,
   msospcoa30,
   msospcoa45,
   msospcoa60,
   msospcoa90,
   msospcoa0,
   } MSOSPCOA;

// MSOSPCOD -- Callout Drop
typedef enum
   {
   msospcodTop,
   msospcodCenter,
   msospcodBottom,
   msospcodSpecified,
   } MSOSPCOD;

// MSOGEOTEXTALIGN – WordArt alignment
typedef enum
   {
   msoalignTextStretch,      /* Stretch each line of text to fit width. */
   msoalignTextCenter,       /* Center text on width. */
   msoalignTextLeft,         /* Left justify. */
   msoalignTextRight,        /* Right justify. */
   msoalignTextLetterJust,   /* Spread letters out to fit width. */
   msoalignTextWordJust,     /* Spread words out to fit width. */
   msoalignTextInvalid       /* Invalid */
   } MSOGEOTEXTALIGN;

// MSOBLIPFLAGS – flags for pictures
typedef enum
   {
   msoblipflagDefault = 0,
   msoblipflagComment = 0,   // Blip name is a comment
   msoblipflagFile,          // Blip name is a file name
   msoblipflagURL,           // Blip name is a full URL
   msoblipflagType = 3,      // Mask to extract type
   /* Or the following flags with any of the above. */
   msoblipflagDontSave = 4,  // A "dont" is the depression in the metal
                             // body work of an automobile caused when a
                             // cyclist violently thrusts his or her nose
                             // at it, thus a DontSave is another name for
                             // a cycle lane.
   msoblipflagDoNotSave = 4, // For those who prefer English
   msoblipflagLinkToFile = 8,
   } MSOBLIPFLAGS;

// MSO3DRENDERMODE
typedef enum
   {
   msoFullRender,      // Generate a full rendering
   msoWireframe,       // Generate a wireframe
   msoBoundingCube,    // Generate a bounding cube
   } MSO3DRENDERMODE;

// MSOXFORMTYPE
typedef enum
   {
   msoxformAbsolute,   // Apply transform in absolute space centered on shape
   msoxformShape,      // Apply transform to shape geometry
   msoxformDrawing     // Apply transform in drawing space
   } MSOXFORMTYPE;

// MSOSHADOWTYPE
typedef enum
   {
   msoshadowOffset,    // N pixel offset shadow
   msoshadowDouble,    // Use second offset too
   msoshadowRich,      // Rich perspective shadow (cast relative to shape)
   msoshadowShape,     // Rich perspective shadow (cast in shape space)
   msoshadowDrawing,   // Perspective shadow cast in drawing space
   msoshadowEmbossOrEngrave,
   } MSOSHADOWTYPE;

// MSODZTYPE - the type of a (length) measurement
typedef enum
   {
   msodztypeMin          = 0,
   msodztypeDefault      = 0,  // Default size, ignore the values
   msodztypeA            = 1,  // Values are in EMUs
   msodztypeV            = 2,  // Values are in pixels
   msodztypeShape        = 3,  // Values are 16.16 fractions of shape size
   msodztypeFixedAspect  = 4,  // Aspect ratio is fixed
   msodztypeAFixed       = 5,  // EMUs, fixed aspect ratio
   msodztypeVFixed       = 6,  // Pixels, fixed aspect ratio
   msodztypeShapeFixed   = 7,  // Proportion of shape, fixed aspect ratio
   msodztypeFixedAspectEnlarge
                         = 8,  // Aspect ratio is fixed, favor larger size
   msodztypeAFixedBig    = 9,  // EMUs, fixed aspect ratio
   msodztypeVFixedBig    = 10, // Pixels, fixed aspect ratio
   msodztypeShapeFixedBig= 11, // Proportion of shape, fixed aspect ratio
   msodztypeMax         = 11
   } MSODZTYPE;

// MSOFILLTYPE
typedef enum
   {
   msofillSolid,             // Fill with a solid color
   msofillPattern,           // Fill with a pattern (bitmap)
   msofillTexture,           // A texture (pattern with its own color map)
   msofillPicture,           // Center a picture in the shape
   msofillShade,             // Shade from start to end points
   msofillShadeCenter,       // Shade from bounding rectangle to end point
   msofillShadeShape,        // Shade from shape outline to end point
   msofillShadeScale,        // Similar to msofillShade, but the fillAngle
                             // is additionally scaled by the aspect ratio of
                             // the shape. If shape is square, it is the
                             // same as msofillShade.
   msofillShadeTitle,        // special type - shade to title ---  for PP 
   msofillBackground         // Use the background fill color/pattern
   } MSOFILLTYPE;

// MSOSHADETYPE – how to interpret the colors in a shaded fill.
typedef enum
   {
   msoshadeNone  = 0,        // Interpolate without correction between RGBs
   msoshadeGamma = 1,        // Apply gamma correction to colors
   msoshadeSigma = 2,        // Apply a sigma transfer function to position
   msoshadeBand  = 4,        // Add a flat band at the start of the shade
   msoshadeOneColor = 8,     // This is a one color shade

   /* A parameter for the band or sigma function can be stored in the top
      16 bits of the value - this is a proportion of *each* band of the
      shade to make flat (or the approximate equal value for a sigma
      function).  NOTE: the parameter is not used for the sigma function,
      instead a built in value is used.  This value should not be changed
      from the default! */
   msoshadeParameterShift = 16,
   msoshadeParameterMask  = 0xffff0000,

   msoshadeDefault = (msoshadeGamma|msoshadeSigma|
                     (16384<<msoshadeParameterShift))
   } MSOSHADETYPE;

//   MSOLINESTYLE - compound line style
typedef enum
   {
   msolineSimple,            // Single line (of width lineWidth)
   msolineDouble,            // Double lines of equal width
   msolineThickThin,         // Double lines, one thick, one thin
   msolineThinThick,         // Double lines, reverse order
   msolineTriple             // Three lines, thin, thick, thin
   } MSOLINESTYLE;

// MSOLINETYPE - how to "fill" the line contour
typedef enum
   {
   msolineSolidType,         // Fill with a solid color
   msolinePattern,           // Fill with a pattern (bitmap)
   msolineTexture,           // A texture (pattern with its own color map)
   msolinePicture            // Center a picture in the shape
   } MSOLINETYPE;

// MSOLINEDASHING - dashed line style
typedef enum
   {
   msolineSolid,              // Solid (continuous) pen
   msolineDashSys,            // PS_DASH system   dash style
   msolineDotSys,             // PS_DOT system   dash style
   msolineDashDotSys,         // PS_DASHDOT system dash style
   msolineDashDotDotSys,      // PS_DASHDOTDOT system dash style
   msolineDotGEL,             // square dot style
   msolineDashGEL,            // dash style
   msolineLongDashGEL,        // long dash style
   msolineDashDotGEL,         // dash short dash
   msolineLongDashDotGEL,     // long dash short dash
   msolineLongDashDotDotGEL   // long dash short dash short dash
   } MSOLINEDASHING;

// MSOLINEEND - line end effect
typedef enum
   {
   msolineNoEnd,
   msolineArrowEnd,
   msolineArrowStealthEnd,
   msolineArrowDiamondEnd,
   msolineArrowOvalEnd,
   msolineArrowOpenEnd,
   } MSOLINEEND;

// MSOLINEENDWIDTH - size of arrowhead
typedef enum
   {
   msolineNarrowArrow,
   msolineMediumWidthArrow,
   msolineWideArrow
   } MSOLINEENDWIDTH;

//   MSOLINEENDLENGTH - size of arrowhead
typedef enum
   {
   msolineShortArrow,
   msolineMediumLenArrow,
   msolineLongArrow
   } MSOLINEENDLENGTH;

//   MSOLINEJOIN - line join style.
typedef enum
   {
   msolineJoinBevel,     // Join edges by a straight line
   msolineJoinMiter,     // Extend edges until they join
   msolineJoinRound      // Draw an arc between the two edges
   } MSOLINEJOIN;

//   MSOLINECAP - line cap style (applies to ends of dash segments too).
typedef enum
   {
   msolineEndCapRound,   // Rounded ends - the default
   msolineEndCapSquare,  // Square protrudes by half line width
   msolineEndCapFlat     // Line ends at end point
   } MSOLINECAP;