mirror of
https://github.com/simon987/antiword.git
synced 2025-04-10 13:06:41 +00:00
199 lines
5.8 KiB
C
199 lines
5.8 KiB
C
/*
|
|
* 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
|
|
*/
|
|
void
|
|
vGetPropertyInfo(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_enum
|
|
ePropMod2RowInfo(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 */
|