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