properties.c

来自「A free MS Word reader for Linux and RISC」· C语言 代码 · 共 199 行

C
199
字号
/* * properties.c * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL * * Description: * Read the properties information from a MS Word file */#include <stdlib.h>#include <string.h>#include "antiword.h"/* * Build the lists with Property Information */voidvGetPropertyInfo(FILE *pFile, const pps_info_type *pPPS,	const ULONG *aulBBD, size_t tBBDLen,	const ULONG *aulSBD, size_t tSBDLen,	const UCHAR *aucHeader, int iWordVersion){	options_type	tOptions;	TRACE_MSG("vGetPropertyInfo");	fail(pFile == NULL);	fail(pPPS == NULL && iWordVersion >= 6);	fail(aulBBD == NULL && tBBDLen != 0);	fail(aulSBD == NULL && tSBDLen != 0);	fail(aucHeader == NULL);	/* Get the options */	vGetOptions(&tOptions);	/* Get the property information per Word version */	switch (iWordVersion) {	case 0:		vGet0DopInfo(pFile, aucHeader);		vGet0SepInfo(pFile, aucHeader);		vGet0PapInfo(pFile, aucHeader);		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_xml ||		    tOptions.eConversionType == conversion_fmt_text ||		    tOptions.eConversionType == conversion_pdf) {			vGet0ChrInfo(pFile, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vCreate0FontTable();		}		vSet0SummaryInfo(pFile, aucHeader);		break;	case 1:	case 2:		vGet2Stylesheet(pFile, iWordVersion, aucHeader);		vGet2DopInfo(pFile, aucHeader);		vGet2SepInfo(pFile, aucHeader);		vGet2PapInfo(pFile, aucHeader);		if (tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vGet2HdrFtrInfo(pFile, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_xml ||		    tOptions.eConversionType == conversion_fmt_text ||		    tOptions.eConversionType == conversion_pdf) {			vGet2ChrInfo(pFile, iWordVersion, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vCreate2FontTable(pFile, iWordVersion, aucHeader);		}		vSet2SummaryInfo(pFile, iWordVersion, aucHeader);		break;	case 4:	case 5:		break;	case 6:	case 7:		vGet6Stylesheet(pFile, pPPS->tWordDocument.ulSB,			aulBBD, tBBDLen, aucHeader);		vGet6DopInfo(pFile, pPPS->tWordDocument.ulSB,			aulBBD, tBBDLen, aucHeader);		vGet6SepInfo(pFile, pPPS->tWordDocument.ulSB,			aulBBD, tBBDLen, aucHeader);		vGet6PapInfo(pFile, pPPS->tWordDocument.ulSB,			aulBBD, tBBDLen, aucHeader);		if (tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vGet6HdrFtrInfo(pFile, pPPS->tWordDocument.ulSB,				aulBBD, tBBDLen, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_xml ||		    tOptions.eConversionType == conversion_fmt_text ||		    tOptions.eConversionType == conversion_pdf) {			vGet6ChrInfo(pFile, pPPS->tWordDocument.ulSB,				aulBBD, tBBDLen, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vCreate6FontTable(pFile, pPPS->tWordDocument.ulSB,				aulBBD, tBBDLen, aucHeader);		}		vSet6SummaryInfo(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		break;	case 8:		vGet8LstInfo(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		vGet8Stylesheet(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		vGet8DopInfo(pFile, &pPPS->tTable,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		vGet8SepInfo(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		vGet8PapInfo(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		if (tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vGet8HdrFtrInfo(pFile, &pPPS->tTable,				aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_xml ||		    tOptions.eConversionType == conversion_fmt_text ||		    tOptions.eConversionType == conversion_pdf) {			vGet8ChrInfo(pFile, pPPS,				aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		}		if (tOptions.eConversionType == conversion_draw ||		    tOptions.eConversionType == conversion_ps ||		    tOptions.eConversionType == conversion_pdf) {			vCreate8FontTable(pFile, pPPS,				aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		}		vSet8SummaryInfo(pFile, pPPS,			aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);		break;	default:		DBG_DEC(iWordVersion);		DBG_FIXME();		werr(0, "Sorry, no property information");		break;	}	/* Temporarily: Correct the font table */	vCorrectFontTable(tOptions.eConversionType, tOptions.eEncoding);} /* end of vGetPropertyInfo *//* * ePropMod2RowInfo - Turn the Property Modifier into row information * * Returns: the row information */row_info_enumePropMod2RowInfo(USHORT usPropMod, int iWordVersion){	row_block_type	tRow;	const UCHAR	*aucPropMod;	int	iLen;	TRACE_MSG("ePropMod2RowInfo");	aucPropMod = aucReadPropModListItem(usPropMod);	if (aucPropMod == NULL) {		return found_nothing;	}	iLen = (int)usGetWord(0, aucPropMod);	switch (iWordVersion) {	case 0:		return found_nothing;	case 1:	case 2:		return eGet2RowInfo(0, aucPropMod + 2, iLen, &tRow);	case 4:	case 5:		return found_nothing;	case 6:	case 7:		return eGet6RowInfo(0, aucPropMod + 2, iLen, &tRow);	case 8:		return eGet8RowInfo(0, aucPropMod + 2, iLen, &tRow);	default:		DBG_DEC(iWordVersion);		DBG_FIXME();		return found_nothing;	}} /* end of ePropMod2RowInfo */

⌨️ 快捷键说明

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