Subversion Repositories planix.SVN

Rev

Rev 2 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
2 - 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
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
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 */