Subversion Repositories planix.SVN

Rev

Rev 2 | Blame | Compare with Previous | Last modification | View Log | RSS feed

/*
 * wordconst.h
 * Copyright (C) 1998-2004 A.J. van Os; Released under GNU GPL
 *
 * Description:
 * Constants and macros for the interpretation of MS Word files
 */

#if !defined(__wordconst_h)
#define __wordconst_h 1

/*
 * A bit odd definition of the type Boolean, but RISC OS insists
 * on this and Linux/Unix doesn't mind.
 */
#if !defined(BOOL)
#define BOOL int
#define TRUE 1
#define FALSE 0
#endif /* !BOOL */

/* Block sizes */
#define HEADER_SIZE                     768
#define BIG_BLOCK_SIZE                  512
#define PROPERTY_SET_STORAGE_SIZE       128
#define SMALL_BLOCK_SIZE                 64
/* Switch size of Depot use */
#define MIN_SIZE_FOR_BBD_USE            0x1000
/* Table sizes */
#define TABLE_COLUMN_MAX                 31
/* Maximum number of tabs positions in a paragraph */
#define NUMBER_OF_TABS_MAX               64
/* Font sizes (in half-points) */
#define MIN_FONT_SIZE                     8
#define DEFAULT_FONT_SIZE                20
#define MAX_FONT_SIZE                   240
#define MIN_TABLEFONT_SIZE               16
#define MAX_TABLEFONT_SIZE               20
/* Font styles */
#define FONT_REGULAR                    0x0000
#define FONT_BOLD                       0x0001
#define FONT_ITALIC                     0x0002
#define FONT_UNDERLINE                  0x0004
#define FONT_CAPITALS                   0x0008
#define FONT_SMALL_CAPITALS             0x0010
#define FONT_STRIKE                     0x0020
#define FONT_HIDDEN                     0x0040
#define FONT_MARKDEL                    0x0080
#define FONT_SUPERSCRIPT                0x0100
#define FONT_SUBSCRIPT                  0x0200
/* Font colors */
#define FONT_COLOR_DEFAULT               0
#define FONT_COLOR_BLACK                 1
#define FONT_COLOR_BLUE                  2
#define FONT_COLOR_CYAN                  3
#define FONT_COLOR_GREEN                 4
#define FONT_COLOR_MAGENTA               5
#define FONT_COLOR_RED                   6
#define FONT_COLOR_YELLOW                7
#define FONT_COLOR_WHITE                 8
/* Special block numbers */
#define END_OF_CHAIN                    0xfffffffeUL
#define UNUSED_BLOCK                    0xffffffffUL
/* Blocksize (512 bytes) and maximum filesize (4 GB) gives 0..7fffff */
#define MAX_BLOCKNUMBER                 0x007fffffUL
/* Invalid character position */
#define CP_INVALID                      0xffffffffUL
/* Invalid file offset */
#define FC_INVALID                      0xffffffffUL
/* Special istd values */
#define ISTD_INVALID                    USHRT_MAX
#define ISTD_NORMAL                     0
/* Properties modifier without value */
#define IGNORE_PROPMOD                  0
/* Types of lists */
#define LIST_ARABIC_NUM                 0x00
#define LIST_UPPER_ROMAN                0x01
#define LIST_LOWER_ROMAN                0x02
#define LIST_UPPER_ALPHA                0x03
#define LIST_LOWER_ALPHA                0x04
#define LIST_ORDINAL_NUM                0x05
#define LIST_NUMBER_TXT                 0x06
#define LIST_ORDINAL_TXT                0x07
#define LIST_OUTLINE_NUM                0x16
#define LIST_SPECIAL                    0x17
#define LIST_SPECIAL2                   0x19
#define LIST_BULLETS                    0xff
/* Types of paragraph alignment */
#define ALIGNMENT_LEFT                  0x00
#define ALIGNMENT_CENTER                0x01
#define ALIGNMENT_RIGHT                 0x02
#define ALIGNMENT_JUSTIFY               0x03
/* Minimum vertical space before and after a heading line */
#define HEADING_GAP                     120     /* twips */
/* Style identifier */
#define STI_USER                        0xffe
#define STI_NIL                         0xfff
/* Table border style codes */
#define TABLE_BORDER_TOP                0x01
#define TABLE_BORDER_LEFT               0x02
#define TABLE_BORDER_BOTTOM             0x04
#define TABLE_BORDER_RIGHT              0x08

/* Macros */
        /* Get macros */
#define ucGetByte(i,a)          ((unsigned char)(a[i]))
#define usGetWord(i,a)          ((unsigned short)\
                                        ((unsigned int)(a[(i)+1])<<8|\
                                         (unsigned int)(a[i])))
#define ulGetLong(i,a)          ((unsigned long)(a[i])|\
                                        (unsigned long)(a[(i)+1])<<8|\
                                        (unsigned long)(a[(i)+2])<<16|\
                                        (unsigned long)(a[(i)+3])<<24)
#define usGetWordBE(i,a)        ((unsigned short)\
                                        ((unsigned int)(a[i])<<8|\
                                         (unsigned int)(a[(i)+1])))
#define ulGetLongBE(i,a)        ((unsigned long)(a[(i)+3])|\
                                        (unsigned long)(a[(i)+2])<<8|\
                                        (unsigned long)(a[(i)+1])<<16|\
                                        (unsigned long)(a[i])<<24)
        /* Font style macros */
#define bIsBold(x)              (((x) & FONT_BOLD) == FONT_BOLD)
#define bIsItalic(x)            (((x) & FONT_ITALIC) == FONT_ITALIC)
#define bIsUnderline(x)         (((x) & FONT_UNDERLINE) == FONT_UNDERLINE)
#define bIsCapitals(x)          (((x) & FONT_CAPITALS) == FONT_CAPITALS)
#define bIsSmallCapitals(x)     (((x) & FONT_SMALL_CAPITALS) == FONT_SMALL_CAPITALS)
#define bIsStrike(x)            (((x) & FONT_STRIKE) == FONT_STRIKE)
#define bIsHidden(x)            (((x) & FONT_HIDDEN) == FONT_HIDDEN)
#define bIsMarkDel(x)           (((x) & FONT_MARKDEL) == FONT_MARKDEL)
#define bIsSuperscript(x)       (((x) & FONT_SUPERSCRIPT) == FONT_SUPERSCRIPT)
#define bIsSubscript(x)         (((x) & FONT_SUBSCRIPT) == FONT_SUBSCRIPT)
        /* Table border style code macros */
#define bIsTableBorderTop(x)    (((x) & TABLE_BORDER_TOP) == TABLE_BORDER_TOP)
#define bIsTableBorderLeft(x)   (((x) & TABLE_BORDER_LEFT) == TABLE_BORDER_LEFT)
#define bIsTableBorderBottom(x) (((x) & TABLE_BORDER_BOTTOM) == TABLE_BORDER_BOTTOM)
#define bIsTableBorderRight(x)  (((x) & TABLE_BORDER_RIGHT) == TABLE_BORDER_RIGHT)
        /* Computation macros */
#if defined(__riscos)
/* From Words half-points to draw units (plus a percentage) */
#define lWord2DrawUnits00(x)    ((long)(x) * 320)
#define lWord2DrawUnits20(x)    ((long)(x) * 384)
#define lToBaseLine(x)          ((long)(x) *  45)
#endif /* __riscos */
/* From twips (1/20 of a point) to millipoints */
#define lTwips2MilliPoints(x)   ((long)(x) * 50)
/* From twips (1/20 of a point) to points */
#define dTwips2Points(x)        ((double)(x) / 20.0)
/* From default characters (16 OS units wide) to millipoints */
#define lChar2MilliPoints(x)    ((long)(x) * 6400)
#define iMilliPoints2Char(x)    (int)(((long)(x) + 3200) / 6400)
#define iDrawUnits2Char(x)      (int)(((long)(x) + 2048) / 4096)
/* From draw units (1/180*256 inch) to millipoints (1/72*1000 inch) */
#define lDrawUnits2MilliPoints(x)       (((long)(x) * 25 +  8) / 16)
#define lMilliPoints2DrawUnits(x)       (((long)(x) * 16 + 12) / 25)
#define lPoints2DrawUnits(x)            ((long)(x) * 640)
#define dDrawUnits2Points(x)            ((double)(x) / 640.0)

/* Special characters */
#define IGNORE_CHARACTER        0x00    /* ^@ */
#define PICTURE                 0x01    /* ^A */
#define FOOTNOTE_OR_ENDNOTE     0x02    /* ^B */
#define FOOTNOTE_SEPARATOR      0x03    /* ^C */
#define FOOTNOTE_CONTINUATION   0x04    /* ^D */
#define ANNOTATION              0x05    /* ^E */
#define TABLE_SEPARATOR         0x07    /* ^G */
#define FRAME                   0x08    /* ^H */
#define TAB                     0x09    /* ^I */
/* End of line characters */
#define LINE_FEED               0x0a    /* ^J */
#define HARD_RETURN             0x0b    /* ^K */
#define PAGE_BREAK              0x0c    /* ^L */
#define PAR_END                 0x0d    /* ^M */
#define COLUMN_FEED             0x0e    /* ^N */
/* Embedded stuff */
#define START_EMBEDDED          0x13    /* ^S */
#define END_IGNORE              0x14    /* ^T */
#define END_EMBEDDED            0x15    /* ^U */
/* Special characters */
#if defined(DEBUG)
#define FILLER_CHAR             '~'
#else
#define FILLER_CHAR             ' '
#endif /* DEBUG */
#define TABLE_SEPARATOR_CHAR    '|'
/* Pseudo characters. These must be outside the Unicode range */
#define FOOTNOTE_CHAR           ((unsigned long)0xffff + 1)
#define ENDNOTE_CHAR            ((unsigned long)0xffff + 2)
#define UNKNOWN_NOTE_CHAR       ((unsigned long)0xffff + 3)

/* Charactercodes as used by Word */
#define WORD_UNBREAKABLE_JOIN           0x1e
#define WORD_SOFT_HYPHEN                0x1f

/* Unicode characters */
#define UNICODE_DOUBLE_LEFT_ANGLE_QMARK 0x00ab
#define UNICODE_MIDDLE_DOT              0x00b7
#define UNICODE_DOUBLE_RIGHT_ANGLE_QMARK        0x00bb
#define UNICODE_CAPITAL_D_WITH_STROKE   0x0110
#define UNICODE_SMALL_D_WITH_STROKE     0x0111
#define UNICODE_CAPITAL_LIGATURE_OE     0x0152
#define UNICODE_SMALL_LIGATURE_OE       0x0153
#define UNICODE_SMALL_F_HOOK            0x0192
#define UNICODE_GREEK_CAPITAL_CHI       0x03a7
#define UNICODE_GREEK_SMALL_UPSILON     0x03c5
#define UNICODE_MODIFIER_CIRCUMFLEX     0x02c6
#define UNICODE_SMALL_TILDE             0x02dc
#define UNICODE_SMALL_LETTER_OMEGA      0x03c9
#define UNICODE_EN_QUAD                 0x2000
#define UNICODE_EM_QUAD                 0x2001
#define UNICODE_EN_SPACE                0x2002
#define UNICODE_EM_SPACE                0x2003
#define UNICODE_THREE_PER_EM_SPACE      0x2004
#define UNICODE_FOUR_PER_EM_SPACE       0x2005
#define UNICODE_SIX_PER_EM_SPACE        0x2006
#define UNICODE_FIGURE_SPACE            0x2007
#define UNICODE_PUNCTUATION_SPACE       0x2008
#define UNICODE_THIN_SPACE              0x2009
#define UNICODE_HAIR_SPACE              0x200a
#define UNICODE_ZERO_WIDTH_SPACE        0x200b
#define UNICODE_ZERO_WIDTH_NON_JOINER   0x200c
#define UNICODE_ZERO_WIDTH_JOINER       0x200d
#define UNICODE_LEFT_TO_RIGHT_MARK      0x200e
#define UNICODE_RIGHT_TO_LEFT_MARK      0x200f
#define UNICODE_HYPHEN                  0x2010
#define UNICODE_NON_BREAKING_HYPHEN     0x2011
#define UNICODE_FIGURE_DASH             0x2012
#define UNICODE_EN_DASH                 0x2013
#define UNICODE_EM_DASH                 0x2014
#define UNICODE_HORIZONTAL_BAR          0x2015
#define UNICODE_DOUBLE_VERTICAL_LINE    0x2016
#define UNICODE_DOUBLE_LOW_LINE         0x2017
#define UNICODE_LEFT_SINGLE_QMARK       0x2018
#define UNICODE_RIGHT_SINGLE_QMARK      0x2019
#define UNICODE_SINGLE_LOW_9_QMARK      0x201a
#define UNICODE_SINGLE_HIGH_REV_9_QMARK 0x201b
#define UNICODE_LEFT_DOUBLE_QMARK       0x201c
#define UNICODE_RIGHT_DOUBLE_QMARK      0x201d
#define UNICODE_DOUBLE_LOW_9_QMARK      0x201e
#define UNICODE_DOUBLE_HIGH_REV_9_QMARK 0x201f
#define UNICODE_DAGGER                  0x2020
#define UNICODE_DOUBLE_DAGGER           0x2021
#define UNICODE_BULLET                  0x2022
#define UNICODE_TRIANGULAR_BULLET       0x2023
#define UNICODE_ONE_DOT_LEADER          0x2024
#define UNICODE_TWO_DOT_LEADER          0x2025
#define UNICODE_ELLIPSIS                0x2026
#define UNICODE_HYPHENATION_POINT       0x2027
#define UNICODE_LEFT_TO_RIGHT_EMBEDDING 0x202a
#define UNICODE_RIGHT_TO_LEFT_EMBEDDING 0x202b
#define UNICODE_POP_DIRECTIONAL_FORMATTING      0x202c
#define UNICODE_LEFT_TO_RIGHT_OVERRIDE  0x202d
#define UNICODE_RIGHT_TO_LEFT_OVERRIDE  0x202e
#define UNICODE_NARROW_NO_BREAK_SPACE   0x202f
#define UNICODE_PER_MILLE_SIGN          0x2030
#define UNICODE_PRIME                   0x2032
#define UNICODE_DOUBLE_PRIME            0x2033
#define UNICODE_SINGLE_LEFT_ANGLE_QMARK 0x2039
#define UNICODE_SINGLE_RIGHT_ANGLE_QMARK        0x203a
#define UNICODE_UNDERTIE                0x203f
#define UNICODE_FRACTION_SLASH          0x2044
#define UNICODE_EURO_SIGN               0x20ac
#define UNICODE_CIRCLE                  0x20dd
#define UNICODE_SQUARE                  0x20de
#define UNICODE_DIAMOND                 0x20df
#define UNICODE_NUMERO_SIGN             0x2116
#define UNICODE_TRADEMARK_SIGN          0x2122
#define UNICODE_KELVIN_SIGN             0x212a
#define UNICODE_LEFTWARDS_ARROW         0x2190
#define UNICODE_UPWARDS_ARROW           0x2191
#define UNICODE_RIGHTWARDS_ARROW        0x2192
#define UNICODE_DOWNWARDS_ARROW         0x2193
#define UNICODE_N_ARY_SUMMATION         0x2211
#define UNICODE_MINUS_SIGN              0x2212
#define UNICODE_DIVISION_SLASH          0x2215
#define UNICODE_ASTERISK_OPERATOR       0x2217
#define UNICODE_BULLET_OPERATOR         0x2219
#define UNICODE_RATIO                   0x2236
#define UNICODE_TILDE_OPERATOR          0x223c
#define UNICODE_BD_LIGHT_HORIZONTAL     0x2500
#define UNICODE_BD_LIGHT_VERTICAL       0x2502
#define UNICODE_BD_LIGHT_DOWN_RIGHT     0x250c
#define UNICODE_BD_LIGHT_DOWN_AND_LEFT  0x2510
#define UNICODE_BD_LIGHT_UP_AND_RIGHT   0x2514
#define UNICODE_BD_LIGHT_UP_AND_LEFT    0x2518
#define UNICODE_BD_LIGHT_VERTICAL_AND_RIGHT     0x251c
#define UNICODE_BD_LIGHT_VERTICAL_AND_LEFT      0x2524
#define UNICODE_BD_LIGHT_DOWN_AND_HORIZONTAL    0x252c
#define UNICODE_BD_LIGHT_UP_AND_HORIZONTAL      0x2534
#define UNICODE_BD_LIGHT_VERTICAL_AND_HORIZONTAL        0x253c
#define UNICODE_BD_DOUBLE_HORIZONTAL    0x2550
#define UNICODE_BD_DOUBLE_VERTICAL      0x2551
#define UNICODE_BD_DOUBLE_DOWN_AND_RIGHT        0x2554
#define UNICODE_BD_DOUBLE_DOWN_AND_LEFT 0x2557
#define UNICODE_BD_DOUBLE_UP_AND_RIGHT  0x255a
#define UNICODE_BD_DOUBLE_UP_AND_LEFT   0x255d
#define UNICODE_BD_DOUBLE_VERTICAL_AND_RIGHT    0x2560
#define UNICODE_BD_DOUBLE_VERTICAL_AND_LEFT     0x2563
#define UNICODE_BD_DOUBLE_DOWN_AND_HORIZONTAL   0x2566
#define UNICODE_BD_DOUBLE_UP_AND_HORIZONTAL     0x2569
#define UNICODE_BD_DOUBLE_VERTICAL_AND_HORIZONTAL       0x256c
#define UNICODE_LIGHT_SHADE             0x2591
#define UNICODE_MEDIUM_SHADE            0x2592
#define UNICODE_DARK_SHADE              0x2593
#define UNICODE_BLACK_SQUARE            0x25a0
#define UNICODE_BLACK_CLUB_SUIT         0x2663
#define UNICODE_SMALL_LIGATURE_FI       0xfb01
#define UNICODE_SMALL_LIGATURE_FL       0xfb02
#define UNICODE_ZERO_WIDTH_NO_BREAK_SPACE       0xfeff

#if defined(__riscos)
#define OUR_ELLIPSIS                    0x8c
#define OUR_EM_DASH                     0x98
#define OUR_UNBREAKABLE_JOIN            0x99
#else
#define OUR_ELLIPSIS                    '.'
#define OUR_EM_DASH                     '-'
#define OUR_UNBREAKABLE_JOIN            '-'
#endif /* __riscos */
#define OUR_DIAMOND                     '-'

#endif /* __wordconst_h */