⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 docdecoder.h

📁 此文件为Word 格式文件.DOC转换为TXT文件的源代码。
💻 H
📖 第 1 页 / 共 2 页
字号:
#pragma once
#include "..\include\decoderbase.h"
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <string.h>

/* 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
/* Font styles */
#define FONT_REGULAR			0x00
/* Font colours */
#define FONT_COLOUR_DEFAULT		 0
/* End of a block chain */
#define END_OF_CHAIN			(-2)
/* Types of lists */
#define LIST_ARABIC_NUM			0x00
#define LIST_ROMAN_NUM_UPPER		0x01
#define LIST_ROMAN_NUM_LOWER		0x02
#define LIST_UPPER_ALPHA		0x03
#define LIST_LOWER_ALPHA		0x04
#define LIST_BULLETS			0xff
/* Types of paragraph alignment */
#define ALIGNMENT_LEFT			0x00

/* Macros */
	/* Get macros */
#define ucGetByte(i,a)		((unsigned char)(a[i]))
#define usGetWord(i,a)		((unsigned short)(a[i+1])<<8|\
					(unsigned short)(a[i]))
#define ulGetLong(i,a)		((unsigned long)(a[i+3])<<24|\
					(unsigned long)(a[i+2])<<16|\
					(unsigned long)(a[i+1])<<8|\
					(unsigned long)(a[i]))
	/* Computation macros */
/* From twips (1/20 of a point) to millipoints */
#define iTwips2MilliPoints(x)	((int)(x) * 50)
/* From default characters (16 OS units wide) to millipoints */
#define iDrawUnits2Char(x)	(((int)(x) + 2048) / 4096)
/* From draw units (1/180*256 inch) to millipoints (1/72*1000 inch) */
#define iDrawUnits2MilliPoints(x)	(((int)(x) * 25 +  8) / 16)
#define iMilliPoints2DrawUnits(x)	(((int)(x) * 16 + 12) / 25)

/* Special characters */
#define IGNORE_CHAR		0x00	/* ^@ */
#define PICTURE			0x01	/* ^A */
#define FOOTNOTE_OR_ENDNOTE	0x02	/* ^B */
#define ANNOTATION		0x05	/* ^E */
#define TABLE_SEPARATOR		0x07	/* ^G */
#define FRAME			0x08	/* ^H */
#define TAB			0x09	/* ^I */
/* End of line characters */
#define HARD_RETURN		0x0b	/* ^K */
#define FORM_FEED		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 */
#define FILLER_CHAR		' '
#define TABLE_SEPARATOR_CHAR	'|'
/* Pseudo characters. Tese must be outside the Unicode range */
#define FOOTNOTE_CHAR		((int)USHRT_MAX + 1)
#define ENDNOTE_CHAR		((int)USHRT_MAX + 2)
#define UNKNOWN_NOTE_CHAR	((int)USHRT_MAX + 3)

/* Charactercodes as used by Word */
#define WORD_UNBREAKABLE_JOIN		0x1e
#define WORD_SOFT_HYPHEN		0x1f
/* Characters with non-standard values (0x80-0x9f) */
#define WORD_EURO_SIGN			0x80
#define WORD_CEDILLA			0x82
#define WORD_DUTCH_GUILDER_SIGN		0x83
#define WORD_LOW_DOUBLE_QUOTE		0x84
#define WORD_ELLIPSIS			0x85
#define WORD_DAGGER			0x86
#define WORD_DOUBLE_DAGGER		0x87
#define WORD_NON_SPACING_CIRCUMFLEX_ACCENT	0x88
#define WORD_PER_MILLE_SIGN		0x89
#define	WORD_LEFT_SINGLE_QMARK		0x8b
#define WORD_CAPITAL_LIGATURE_OE	0x8c
#define WORD_LEFT_SINGLE_QUOTE		0x91
#define WORD_RIGHT_SINGLE_QUOTE		0x92
#define WORD_OPENING_DOUBLE_QUOTE	0x93
#define WORD_CLOSING_DOUBLE_QUOTE	0x94
#define WORD_BULLET			0x95
#define WORD_EN_DASH			0x96
#define WORD_EM_DASH			0x97
#define WORD_NON_SPACING_TILDE		0x98
#define WORD_TRADEMARK			0x99
#define	WORD_RIGHT_SINGLE_QMARK		0x9b
#define WORD_SMALL_LIGATURE_OE		0x9c

/* Some Unicode characters that can be translated into ISO-8859-1 */
#define UNICODE_CAPITAL_W_CIRCUMFLEX_ACCENT	0x0174
#define UNICODE_SMALL_W_CIRCUMFLEX_ACCENT	0x0175
#define UNICODE_CAPITAL_Y_CIRCUMFLEX_ACCENT	0x0176
#define UNICODE_SMALL_Y_CIRCUMFLEX_ACCENT	0x0177
#define UNICODE_LEFT_SINGLE_QUOTE_ALT	0x1091
#define UNICODE_RIGHT_SINGLE_QUOTE_ALT	0x1092
#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_QUOTE	0x2018
#define UNICODE_RIGHT_SINGLE_QUOTE	0x2019
#define UNICODE_OPENING_DOUBLE_QUOTE	0x201c
#define UNICODE_CLOSING_DOUBLE_QUOTE	0x201d
#define UNICODE_LOW_DOUBLE_QUOTE	0x201e
#define UNICODE_DAGGER			0x2020
#define UNICODE_DOUBLE_DAGGER		0x2021
#define UNICODE_BULLET			0x2022
#define UNICODE_ELLIPSIS		0x2026
#define UNICODE_HYPHENATION_POINT	0x2027
#define UNICODE_PER_MILLE_SIGN		0x2030
#define	UNICODE_LEFT_SINGLE_QMARK	0x2039
#define	UNICODE_RIGHT_SINGLE_QMARK	0x203a
#define UNICODE_FRACTION_SLASH		0x2044
#define UNICODE_EURO_SIGN		0x20ac
#define UNICODE_TRADEMARK		0x2122
#define UNICODE_WHITE_SMILING_FACE	0x263a
#define UNICODE_BLACK_SMILING_FACE	0x263b
#define UNICODE_DIAMOND			0xf075
#define UNICODE_BULLET_ALT		0xf0b7
#define UNICODE_COPYRIGHT		0xf0d3

/* Some Mac characters that can be translated into ISO-8859-1 */
#define MAC_CAPTAL_A_DIAERESIS		0x80
#define MAC_CAPTAL_A_RING_ABOVE		0x81
#define MAC_CAPTAL_C_CEDILLA		0x82
#define MAC_CAPTAL_O_ACUTE_ACCENT	0x83
#define MAC_CAPTAL_N_TILDE		0x84
#define MAC_CAPTAL_O_DIAERESIS		0x85
#define MAC_CAPTAL_U_DIAERESIS		0x86
#define MAC_SMALL_A_ACUTE_ACCENT	0x87
#define MAC_SMALL_A_GRAVE_ACCENT	0x88
#define MAC_SMALL_A_CIRCUMFLEX_ACCENT	0x89
#define MAC_SMALL_A_DIAERESIS		0x8a
#define MAC_SMALL_A_TILDE		0x8b
#define MAC_SMALL_A_RING_ABOVE		0x8c
#define MAC_SMALL_C_CEDILLA		0x8d
#define MAC_SMALL_E_ACUTE_ACCENT	0x8e
#define MAC_SMALL_E_GRAVE_ACCENT	0x8f
#define MAC_SMALL_E_CIRCUMFLEX_ACCENT	0x90
#define MAC_SMALL_E_DIAERESIS		0x91
#define MAC_SMALL_I_ACUTE_ACCENT	0x92
#define MAC_SMALL_I_GRAVE_ACCENT	0x93
#define MAC_SMALL_I_CIRCUMFLEX_ACCENT	0x94
#define MAC_SMALL_I_DIAERESIS		0x95
#define MAC_SMALL_N_TILDE		0x96
#define MAC_SMALL_O_ACUTE_ACCENT	0x97
#define MAC_SMALL_O_GRAVE_ACCENT	0x98
#define MAC_SMALL_O_CIRCUMFLEX_ACCENT	0x99
#define MAC_SMALL_O_DIAERESIS		0x9a
#define MAC_SMALL_O_TILDE		0x9b
#define MAC_SMALL_U_ACUTE_ACCENT	0x9c
#define MAC_SMALL_U_GRAVE_ACCENT	0x9d
#define MAC_SMALL_U_CIRCUMFLEX_ACCENT	0x9e
#define MAC_SMALL_U_DIAERESIS		0x9f
#define MAC_SMALL_SHARP_S		0xa7
#define	MAC_LEFT_DOUBLE_QMARK		0xc7
#define	MAC_RIGHT_DOUBLE_QMARK		0xc8
#define MAC_EN_DASH			0xd0
#define MAC_EM_DASH			0xd1
#define MAC_OPENING_DOUBLE_QUOTE	0xd2
#define MAC_CLOSING_DOUBLE_QUOTE	0xd3
#define MAC_LEFT_SINGLE_QUOTE		0xd4
#define MAC_RIGHT_SINGLE_QUOTE		0xd5

/* Local characters */
#define OUR_CAPITAL_W_CIRCUMFLEX_ACCENT	'W'
#define OUR_SMALL_W_CIRCUMFLEX_ACCENT	'w'
#define OUR_CAPITAL_Y_CIRCUMFLEX_ACCENT	'Y'
#define OUR_SMALL_Y_CIRCUMFLEX_ACCENT	'y'
#define OUR_ELLIPSIS			'.'
#define OUR_TRADEMARK			'?'
#define OUR_PER_MILLE_SIGN		'?'
#define OUR_BULLET			'+'
#define OUR_LEFT_SINGLE_QUOTE		'\''
#define OUR_RIGHT_SINGLE_QUOTE		'\''
#define OUR_LEFT_SINGLE_QMARK		'\''
#define OUR_RIGHT_SINGLE_QMARK		'\''
#define OUR_OPENING_DOUBLE_QUOTE	'"'
#define OUR_CLOSING_DOUBLE_QUOTE	'"'
#define OUR_LOW_DOUBLE_QUOTE		'"'
#define OUR_EN_DASH			'-'
#define OUR_EM_DASH			'-'
#define OUR_UNBREAKABLE_JOIN		'-'
#define OUR_CAPITAL_LIGATURE_OE		'?'
#define OUR_SMALL_LIGATURE_OE		'?'
#define OUR_DAGGER			'-'
#define OUR_DOUBLE_DAGGER		'='
#define OUR_CEDILLA			','

#define OUR_NON_SPACING_CIRCUMFLEX_ACCENT	'^'
#define OUR_EURO_SIGN			'E'	/* For the time being */
#define OUR_DUTCH_GUILDER_SIGN		'f'
#define OUR_NON_SPACING_TILDE		'~'
#define OUR_HYPHEN			'-'
#define OUR_DOUBLE_VERTICAL_LINE	'|'
#define OUR_DOUBLE_LOW_LINE		'_'
#define OUR_FRACTION_SLASH		'/'
#define OUR_DIAMOND			'-'
#define OUR_WHITE_SMILING_FACE		'#'
#define OUR_BLACK_SMILING_FACE		'#'

#define OUR_COPYRIGHT			0xa9
#define	OUR_LEFT_DOUBLE_QMARK		0xab
#define	OUR_RIGHT_DOUBLE_QMARK		0xbb
#define OUR_CAPTAL_A_DIAERESIS		0xc4
#define OUR_CAPTAL_A_RING_ABOVE		0xc5
#define OUR_CAPTAL_C_CEDILLA		0xc7
#define OUR_CAPTAL_O_ACUTE_ACCENT	0xc9
#define OUR_CAPTAL_N_TILDE		0xd1
#define OUR_CAPTAL_O_DIAERESIS		0xd6
#define OUR_CAPTAL_U_DIAERESIS		0xdc
#define OUR_SMALL_SHARP_S		0xdf
#define OUR_SMALL_A_GRAVE_ACCENT	0xe0
#define OUR_SMALL_A_ACUTE_ACCENT	0xe1
#define OUR_SMALL_A_CIRCUMFLEX_ACCENT	0xe2
#define OUR_SMALL_A_TILDE		0xe3
#define OUR_SMALL_A_DIAERESIS		0xe4
#define OUR_SMALL_A_RING_ABOVE		0xe5
#define OUR_SMALL_C_CEDILLA		0xe7
#define OUR_SMALL_E_GRAVE_ACCENT	0xe8
#define OUR_SMALL_E_ACUTE_ACCENT	0xe9
#define OUR_SMALL_E_CIRCUMFLEX_ACCENT	0xea
#define OUR_SMALL_E_DIAERESIS		0xeb
#define OUR_SMALL_I_GRAVE_ACCENT	0xec
#define OUR_SMALL_I_ACUTE_ACCENT	0xed
#define OUR_SMALL_I_CIRCUMFLEX_ACCENT	0xee
#define OUR_SMALL_I_DIAERESIS		0xef
#define OUR_SMALL_N_TILDE		0xf1
#define OUR_SMALL_O_GRAVE_ACCENT	0xf2
#define OUR_SMALL_O_ACUTE_ACCENT	0xf3
#define OUR_SMALL_O_CIRCUMFLEX_ACCENT	0xf4
#define OUR_SMALL_O_DIAERESIS		0xf6
#define OUR_SMALL_O_TILDE		0xf5
#define OUR_SMALL_U_GRAVE_ACCENT	0xf9
#define OUR_SMALL_U_ACUTE_ACCENT	0xfa
#define OUR_SMALL_U_CIRCUMFLEX_ACCENT	0xfb
#define OUR_SMALL_U_DIAERESIS		0xfc

/* Macros */
#define StrEq(x,y)	(*(x) == *(y) && strcmp(x,y) == 0)
#define elementsof(a)	(sizeof(a) / sizeof(a[0]))
#define BIT(x)		((unsigned int)1 << (x))

/* Prototypes */
#define SIZE_RATIO	(BIG_BLOCK_SIZE/SMALL_BLOCK_SIZE)

#define ISSPACE(c)   testspace(c)

#define INITIAL_SIZE		40
#define EXTENTION_SIZE		20
/* Macros to make sure all such statements will be identical */
#define OUTPUT_LINE()		\
	do {\
		vString2Diagram(pDiag, pAnchor);\
		pAnchor = pStartNewOutput(pAnchor, NULL);\
		pOutput = pAnchor;\
	} while(0)

#define RESET_LINE()		\
	do {\
		pAnchor = pStartNewOutput(pAnchor, NULL);\
		pOutput = pAnchor;\
	} while(0)

/* Macro to make sure all such statements will be identical */
#define FREE_ALL()		\
	do {\
		vDestroySmallBlockList();\
		aiRootList = (int *)xfree(aiRootList);\
		aiSbdList = (int *)xfree(aiSbdList);\
		aiBbdList = (int *)xfree(aiBbdList);\
		aiSBD = (int *)xfree(aiSBD);\
		aiBBD = (int *)xfree(aiBBD);\
	} while(0)



typedef struct diagram_tag {
	int		iXleft;			/* In DrawUnits */
	int		iYtop;			/* In DrawUnits */
} diagram_type;
typedef unsigned char	draw_fontref;

typedef struct output_tag {
  	unsigned short	*szStorage;
	int		iStorageSize;
	int		iNextFree;
	int		iStringWidth;	/* In millipoints */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -