mirror of
https://github.com/simon987/antiword.git
synced 2025-04-10 13:06:41 +00:00
322 lines
12 KiB
C
322 lines
12 KiB
C
/*
|
|
* 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 */
|