1f5736e95SDavid du Colombier /*
2f5736e95SDavid du Colombier * properties.c
3*25b329d5SDavid du Colombier * Copyright (C) 1998-2005 A.J. van Os; Released under GNU GPL
4f5736e95SDavid du Colombier *
5f5736e95SDavid du Colombier * Description:
6f5736e95SDavid du Colombier * Read the properties information from a MS Word file
7f5736e95SDavid du Colombier */
8f5736e95SDavid du Colombier
9f5736e95SDavid du Colombier #include <stdlib.h>
10f5736e95SDavid du Colombier #include <string.h>
11f5736e95SDavid du Colombier #include "antiword.h"
12f5736e95SDavid du Colombier
13f5736e95SDavid du Colombier
14f5736e95SDavid du Colombier /*
15f5736e95SDavid du Colombier * Build the lists with Property Information
16f5736e95SDavid du Colombier */
17f5736e95SDavid du Colombier 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)18f5736e95SDavid du Colombier vGetPropertyInfo(FILE *pFile, const pps_info_type *pPPS,
19f5736e95SDavid du Colombier const ULONG *aulBBD, size_t tBBDLen,
20f5736e95SDavid du Colombier const ULONG *aulSBD, size_t tSBDLen,
21f5736e95SDavid du Colombier const UCHAR *aucHeader, int iWordVersion)
22f5736e95SDavid du Colombier {
23f5736e95SDavid du Colombier options_type tOptions;
24f5736e95SDavid du Colombier
25*25b329d5SDavid du Colombier TRACE_MSG("vGetPropertyInfo");
26*25b329d5SDavid du Colombier
27f5736e95SDavid du Colombier fail(pFile == NULL);
28f5736e95SDavid du Colombier fail(pPPS == NULL && iWordVersion >= 6);
29f5736e95SDavid du Colombier fail(aulBBD == NULL && tBBDLen != 0);
30f5736e95SDavid du Colombier fail(aulSBD == NULL && tSBDLen != 0);
31f5736e95SDavid du Colombier fail(aucHeader == NULL);
32f5736e95SDavid du Colombier
33*25b329d5SDavid du Colombier /* Get the options */
34f5736e95SDavid du Colombier vGetOptions(&tOptions);
35f5736e95SDavid du Colombier
36*25b329d5SDavid du Colombier /* Get the property information per Word version */
37f5736e95SDavid du Colombier switch (iWordVersion) {
38f5736e95SDavid du Colombier case 0:
39*25b329d5SDavid du Colombier vGet0DopInfo(pFile, aucHeader);
40f5736e95SDavid du Colombier vGet0SepInfo(pFile, aucHeader);
41f5736e95SDavid du Colombier vGet0PapInfo(pFile, aucHeader);
42f5736e95SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
43f5736e95SDavid du Colombier tOptions.eConversionType == conversion_ps ||
44*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_xml ||
45*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_fmt_text ||
46*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
47f5736e95SDavid du Colombier vGet0ChrInfo(pFile, aucHeader);
48*25b329d5SDavid du Colombier }
49*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
50*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_ps ||
51*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
52f5736e95SDavid du Colombier vCreate0FontTable();
53f5736e95SDavid du Colombier }
54f5736e95SDavid du Colombier vSet0SummaryInfo(pFile, aucHeader);
55f5736e95SDavid du Colombier break;
56f5736e95SDavid du Colombier case 1:
57f5736e95SDavid du Colombier case 2:
58f5736e95SDavid du Colombier vGet2Stylesheet(pFile, iWordVersion, aucHeader);
59*25b329d5SDavid du Colombier vGet2DopInfo(pFile, aucHeader);
60f5736e95SDavid du Colombier vGet2SepInfo(pFile, aucHeader);
61f5736e95SDavid du Colombier vGet2PapInfo(pFile, aucHeader);
62*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_ps ||
63*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
64*25b329d5SDavid du Colombier vGet2HdrFtrInfo(pFile, aucHeader);
65*25b329d5SDavid du Colombier }
66f5736e95SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
67f5736e95SDavid du Colombier tOptions.eConversionType == conversion_ps ||
68*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_xml ||
69*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_fmt_text ||
70*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
71f5736e95SDavid du Colombier vGet2ChrInfo(pFile, iWordVersion, aucHeader);
72*25b329d5SDavid du Colombier }
73*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
74*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_ps ||
75*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
76*25b329d5SDavid du Colombier vCreate2FontTable(pFile, iWordVersion, aucHeader);
77f5736e95SDavid du Colombier }
78f5736e95SDavid du Colombier vSet2SummaryInfo(pFile, iWordVersion, aucHeader);
79f5736e95SDavid du Colombier break;
80f5736e95SDavid du Colombier case 4:
81f5736e95SDavid du Colombier case 5:
82f5736e95SDavid du Colombier break;
83f5736e95SDavid du Colombier case 6:
84f5736e95SDavid du Colombier case 7:
85f5736e95SDavid du Colombier vGet6Stylesheet(pFile, pPPS->tWordDocument.ulSB,
86f5736e95SDavid du Colombier aulBBD, tBBDLen, aucHeader);
87*25b329d5SDavid du Colombier vGet6DopInfo(pFile, pPPS->tWordDocument.ulSB,
88*25b329d5SDavid du Colombier aulBBD, tBBDLen, aucHeader);
89f5736e95SDavid du Colombier vGet6SepInfo(pFile, pPPS->tWordDocument.ulSB,
90f5736e95SDavid du Colombier aulBBD, tBBDLen, aucHeader);
91f5736e95SDavid du Colombier vGet6PapInfo(pFile, pPPS->tWordDocument.ulSB,
92f5736e95SDavid du Colombier aulBBD, tBBDLen, aucHeader);
93*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_ps ||
94*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
95*25b329d5SDavid du Colombier vGet6HdrFtrInfo(pFile, pPPS->tWordDocument.ulSB,
96*25b329d5SDavid du Colombier aulBBD, tBBDLen, aucHeader);
97*25b329d5SDavid du Colombier }
98f5736e95SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
99f5736e95SDavid du Colombier tOptions.eConversionType == conversion_ps ||
100*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_xml ||
101*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_fmt_text ||
102*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
103f5736e95SDavid du Colombier vGet6ChrInfo(pFile, pPPS->tWordDocument.ulSB,
104f5736e95SDavid du Colombier aulBBD, tBBDLen, aucHeader);
105*25b329d5SDavid du Colombier }
106*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
107*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_ps ||
108*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
109f5736e95SDavid du Colombier vCreate6FontTable(pFile, pPPS->tWordDocument.ulSB,
110f5736e95SDavid du Colombier aulBBD, tBBDLen, aucHeader);
111f5736e95SDavid du Colombier }
112f5736e95SDavid du Colombier vSet6SummaryInfo(pFile, pPPS,
113f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
114f5736e95SDavid du Colombier break;
115f5736e95SDavid du Colombier case 8:
116f5736e95SDavid du Colombier vGet8LstInfo(pFile, pPPS,
117f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
118f5736e95SDavid du Colombier vGet8Stylesheet(pFile, pPPS,
119f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
120*25b329d5SDavid du Colombier vGet8DopInfo(pFile, &pPPS->tTable,
121*25b329d5SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
122f5736e95SDavid du Colombier vGet8SepInfo(pFile, pPPS,
123f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
124f5736e95SDavid du Colombier vGet8PapInfo(pFile, pPPS,
125f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
126*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_ps ||
127*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
128*25b329d5SDavid du Colombier vGet8HdrFtrInfo(pFile, &pPPS->tTable,
129*25b329d5SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
130*25b329d5SDavid du Colombier }
131f5736e95SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
132f5736e95SDavid du Colombier tOptions.eConversionType == conversion_ps ||
133*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_xml ||
134*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_fmt_text ||
135*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
136f5736e95SDavid du Colombier vGet8ChrInfo(pFile, pPPS,
137f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
138*25b329d5SDavid du Colombier }
139*25b329d5SDavid du Colombier if (tOptions.eConversionType == conversion_draw ||
140*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_ps ||
141*25b329d5SDavid du Colombier tOptions.eConversionType == conversion_pdf) {
142f5736e95SDavid du Colombier vCreate8FontTable(pFile, pPPS,
143f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
144f5736e95SDavid du Colombier }
145f5736e95SDavid du Colombier vSet8SummaryInfo(pFile, pPPS,
146f5736e95SDavid du Colombier aulBBD, tBBDLen, aulSBD, tSBDLen, aucHeader);
147f5736e95SDavid du Colombier break;
148f5736e95SDavid du Colombier default:
149f5736e95SDavid du Colombier DBG_DEC(iWordVersion);
150f5736e95SDavid du Colombier DBG_FIXME();
151f5736e95SDavid du Colombier werr(0, "Sorry, no property information");
152f5736e95SDavid du Colombier break;
153f5736e95SDavid du Colombier }
154*25b329d5SDavid du Colombier
155*25b329d5SDavid du Colombier /* Temporarily: Correct the font table */
156*25b329d5SDavid du Colombier vCorrectFontTable(tOptions.eConversionType, tOptions.eEncoding);
157f5736e95SDavid du Colombier } /* end of vGetPropertyInfo */
158f5736e95SDavid du Colombier
159f5736e95SDavid du Colombier /*
160f5736e95SDavid du Colombier * ePropMod2RowInfo - Turn the Property Modifier into row information
161f5736e95SDavid du Colombier *
162f5736e95SDavid du Colombier * Returns: the row information
163f5736e95SDavid du Colombier */
164f5736e95SDavid du Colombier row_info_enum
ePropMod2RowInfo(USHORT usPropMod,int iWordVersion)165f5736e95SDavid du Colombier ePropMod2RowInfo(USHORT usPropMod, int iWordVersion)
166f5736e95SDavid du Colombier {
167f5736e95SDavid du Colombier row_block_type tRow;
168f5736e95SDavid du Colombier const UCHAR *aucPropMod;
169f5736e95SDavid du Colombier int iLen;
170f5736e95SDavid du Colombier
171*25b329d5SDavid du Colombier TRACE_MSG("ePropMod2RowInfo");
172*25b329d5SDavid du Colombier
173f5736e95SDavid du Colombier aucPropMod = aucReadPropModListItem(usPropMod);
174f5736e95SDavid du Colombier if (aucPropMod == NULL) {
175f5736e95SDavid du Colombier return found_nothing;
176f5736e95SDavid du Colombier }
177f5736e95SDavid du Colombier iLen = (int)usGetWord(0, aucPropMod);
178f5736e95SDavid du Colombier
179f5736e95SDavid du Colombier switch (iWordVersion) {
180f5736e95SDavid du Colombier case 0:
181f5736e95SDavid du Colombier return found_nothing;
182f5736e95SDavid du Colombier case 1:
183f5736e95SDavid du Colombier case 2:
184f5736e95SDavid du Colombier return eGet2RowInfo(0, aucPropMod + 2, iLen, &tRow);
185f5736e95SDavid du Colombier case 4:
186f5736e95SDavid du Colombier case 5:
187f5736e95SDavid du Colombier return found_nothing;
188f5736e95SDavid du Colombier case 6:
189f5736e95SDavid du Colombier case 7:
190f5736e95SDavid du Colombier return eGet6RowInfo(0, aucPropMod + 2, iLen, &tRow);
191f5736e95SDavid du Colombier case 8:
192f5736e95SDavid du Colombier return eGet8RowInfo(0, aucPropMod + 2, iLen, &tRow);
193f5736e95SDavid du Colombier default:
194f5736e95SDavid du Colombier DBG_DEC(iWordVersion);
195f5736e95SDavid du Colombier DBG_FIXME();
196f5736e95SDavid du Colombier return found_nothing;
197f5736e95SDavid du Colombier }
198f5736e95SDavid du Colombier } /* end of ePropMod2RowInfo */
199