24
24
#ifndef DOCXXMLDOCREADER_H
25
25
#define DOCXXMLDOCREADER_H
27
30
#include <MsooXmlCommonReader.h>
28
31
#include <MsooXmlThemesReader.h>
29
#include "DocxXmlCommentsReader.h"
30
32
#include "DocxXmlNotesReader.h"
34
#include <KoXmlWriter.h>
32
35
#include <KoGenStyle.h>
33
36
#include <styles/KoCharacterStyle.h>
68
71
KoFilter::ConversionStatus read_rPr(rPrCaller caller);
69
72
KoFilter::ConversionStatus read_pPr();
73
KoFilter::ConversionStatus read_vanish();
74
KoFilter::ConversionStatus read_numPr();
75
KoFilter::ConversionStatus read_numId();
76
KoFilter::ConversionStatus read_ilvl();
70
77
KoFilter::ConversionStatus read_sectPr();
71
78
KoFilter::ConversionStatus read_footerReference();
72
79
KoFilter::ConversionStatus read_headerReference();
80
KoFilter::ConversionStatus read_cols();
73
81
KoFilter::ConversionStatus read_pgSz();
74
82
KoFilter::ConversionStatus read_textDirection();
75
83
KoFilter::ConversionStatus read_pgMar();
76
84
KoFilter::ConversionStatus read_pgBorders();
77
85
KoFilter::ConversionStatus read_object();
78
86
KoFilter::ConversionStatus read_ind();
87
KoFilter::ConversionStatus read_outline();
79
88
KoFilter::ConversionStatus read_framePr();
80
89
KoFilter::ConversionStatus read_OLEObject();
90
KoFilter::ConversionStatus read_webHidden();
91
KoFilter::ConversionStatus read_bookmarkStart();
92
KoFilter::ConversionStatus read_bookmarkEnd();
81
93
//KoFilter::ConversionStatus read_commentRangeEnd();
82
94
KoFilter::ConversionStatus read_commentRangeStart();
83
95
KoFilter::ConversionStatus read_endnoteReference();
84
96
KoFilter::ConversionStatus read_footnoteReference();
97
KoFilter::ConversionStatus read_footnotePr();
98
KoFilter::ConversionStatus read_endnotePr();
99
KoFilter::ConversionStatus read_lnNumType();
100
KoFilter::ConversionStatus read_numFmt();
101
KoFilter::ConversionStatus read_suppressLineNumbers();
85
102
KoFilter::ConversionStatus read_hyperlink();
86
103
KoFilter::ConversionStatus read_drawing();
87
104
KoFilter::ConversionStatus read_ptab();
93
110
KoFilter::ConversionStatus read_sz();
94
111
KoFilter::ConversionStatus read_jc();
95
112
KoFilter::ConversionStatus read_spacing();
113
KoFilter::ConversionStatus read_trPr();
114
KoFilter::ConversionStatus read_trHeight();
100
120
KoFilter::ConversionStatus read_shd(shdCaller caller);
101
121
KoFilter::ConversionStatus read_rFonts();
102
122
KoFilter::ConversionStatus read_pStyle();
103
123
KoFilter::ConversionStatus read_rStyle();
124
KoFilter::ConversionStatus read_tblStyle();
125
KoFilter::ConversionStatus read_tblBorders();
126
KoFilter::ConversionStatus read_tblCellMar();
104
127
KoFilter::ConversionStatus read_fldSimple();
128
KoFilter::ConversionStatus read_br();
105
129
KoFilter::ConversionStatus read_lastRenderedPageBreak();
106
130
KoFilter::ConversionStatus read_instrText();
107
131
KoFilter::ConversionStatus read_fldChar();
110
134
KoFilter::ConversionStatus read_caps();
111
135
KoFilter::ConversionStatus read_smallCaps();
112
136
KoFilter::ConversionStatus read_w();
137
KoFilter::ConversionStatus read_txbxContent();
113
138
KoFilter::ConversionStatus read_color();
114
139
KoFilter::ConversionStatus read_highlight();
115
140
KoFilter::ConversionStatus read_vertAlign();
116
141
KoFilter::ConversionStatus read_lang();
117
142
KoFilter::ConversionStatus read_background();
118
143
KoFilter::ConversionStatus read_pBdr();
144
KoFilter::ConversionStatus read_bdr();
119
145
KoFilter::ConversionStatus read_tbl();
120
146
KoFilter::ConversionStatus read_tblPr();
121
147
KoFilter::ConversionStatus read_tblGrid();
123
149
KoFilter::ConversionStatus read_tr();
124
150
KoFilter::ConversionStatus read_tc();
125
151
KoFilter::ConversionStatus read_tcPr();
152
KoFilter::ConversionStatus read_gridSpan();
155
KoFilter::ConversionStatus read_oMath();
156
KoFilter::ConversionStatus read_oMathPara();
157
KoFilter::ConversionStatus read_r_m();
158
KoFilter::ConversionStatus read_t_m();
127
160
enum posOffsetCaller {
128
161
posOffset_positionH,
136
169
KoFilter::ConversionStatus read_align(alignCaller caller);
171
KoFilter::ConversionStatus read_pict();
138
173
KoFilter::ConversionStatus read_inline();
174
KoFilter::ConversionStatus read_extent();
139
175
KoFilter::ConversionStatus read_docPr();
140
176
KoFilter::ConversionStatus read_anchor();
141
177
KoFilter::ConversionStatus read_positionH();
145
181
KoFilter::ConversionStatus read_wrapTight();
146
182
KoFilter::ConversionStatus read_wrapThrough();
184
bool m_createSectionStyle;
185
QString m_currentSectionStyleName;
186
bool m_createSectionToNext;
148
187
KoGenStyle m_currentPageStyle;
149
188
KoGenStyle m_masterPageStyle;
151
190
DocxXmlDocumentReaderContext* m_context;
192
KoOdfWriters *m_writers; // Needed to create new relationship for header/footer
194
KoGenStyle m_currentTableCellStyle;
195
KoGenStyle m_currentTableCellStyleLeft;
196
KoGenStyle m_currentTableCellStyleRight;
197
KoGenStyle m_currentTableCellStyleTop;
198
KoGenStyle m_currentTableCellStyleBottom;
199
KoGenStyle m_currentTableCellStyleInsideV;
200
KoGenStyle m_currentTableCellStyleInsideH;
203
TopBorder, BottomBorder, LeftBorder, RightBorder, InsideH, InsideV
206
//! Used for setting up properties for pages and paragraphs.
207
//! It is reversed map, so detecting duplicates is easy in applyBorders().
208
QMap<QString, BorderSide> m_borderStyles;
210
//! Same as above but for r element
211
QMap<QString, BorderSide> m_textBorderStyles;
213
//! Used for setting up properties for pages and paragraphs.
214
//! It is reversed map, so detecting duplicates is easy in applyBorders().
215
QMap<QString, BorderSide> m_borderPaddings;
217
// ! Same as above but for border padding
218
QMap<QString, BorderSide> m_textBorderPaddings;
157
224
//! Uses m_currentObjectWidthCm and m_currentObjectHeightCm for size (defaults to 2cm/2cm)
158
225
void writeRect();
161
TopBorder, BottomBorder, LeftBorder, RightBorder
163
//! Used for setting up properties for pages and paragraphs.
164
//! It is reversed map, so detecting duplicates is easy in applyBorders().
165
QMap<QString, BorderSide> m_borderStyles;
166
227
QColor m_backgroundColor; //Documet background color
168
//! Used for setting up properties for pages and paragraphs.
169
//! It is reversed map, so detecting duplicates is easy in applyBorders().
170
QMap<QString, BorderSide> m_borderPaddings;
172
229
//! Reads CT_Border complex type (p.392), used by children of pgBorders and children of pBdr
173
230
KoFilter::ConversionStatus readBorderElement(BorderSide borderSide, const char *borderSideName);
185
242
//! Applies border styles and paddings obtained in readBorderElement()
186
243
//! to style @a style (paragraph or page...)
187
void applyBorders(KoGenStyle *style);
244
void applyBorders(KoGenStyle *style, QMap<QString, BorderSide> sourceBorder, QMap<QString, BorderSide> sourcePadding);
189
246
enum ComplexFieldCharType {
190
NoComplexFieldCharType, HyperlinkComplexFieldCharType
247
NoComplexFieldCharType, HyperlinkComplexFieldCharType, ReferenceComplexFieldCharType,
248
ReferenceNextComplexFieldCharType, InternalHyperlinkComplexFieldCharType,
249
CurrentPageComplexFieldCharType, NumberOfPagesComplexFieldCharType
192
251
//! Type of complex field characters we have
193
252
ComplexFieldCharType m_complexCharType;
196
255
QString m_complexCharValue;
198
257
enum ComplexCharStatus {
199
NoneAllowed, InstrAllowed, InstrExecute
258
NoneAllowed, InstrAllowed, InstrExecute, ExecuteInstrNow
201
260
//! State of fldChar
202
261
ComplexCharStatus m_complexCharStatus;
264
NoDropCap, DropCapRead, DropCapDone
267
DropCapStatus m_dropCapStatus;
269
//! Buffer where first letters of drop cap are read
270
QBuffer* m_dropCapBuffer;
271
KoXmlWriter* m_dropCapWriter;
272
QString m_dropCapLines;
273
qreal m_dropCapDistance;
275
QMap<QString, QString> m_bookmarks; //!< Bookmarks
204
277
uint m_currentTableNumber; //!< table counter, from 0
205
278
uint m_currentTableRowNumber; //!< row counter, from 0, initialized in read_tbl()
206
279
uint m_currentTableColumnNumber; //!< column counter, from 0, initialized in read_tr()
207
KoGenStyle m_currentTableStyle;
208
280
KoGenStyle m_currentTableRowStyle;
209
KoGenStyle m_currentTableCellStyle;
210
281
QString m_currentTableName;
211
282
qreal m_currentTableWidth; //!< in cm
213
/*! true if w:object/v:shape or w:object/o:OLEObject has been handled, .
214
When w:object/o:OLEObject is visited and m_objectRectInitialized is true, handling
215
w:object/o:OLEObject is (except for copying the OLE binary) skipped because
216
w:object/v:shape is of higher priority.
217
This flag is reset to false each time read_object() is called. */
218
bool m_objectRectInitialized;
220
//!< Width of the object. Set in read_OLEObject() or read_shape(). Used in writeRect().
221
//! If both w:object/v:shape and w:object/o:OLEObject exist, information from v:shape is used.
222
QString m_currentObjectWidthCm;
224
QString m_currentObjectHeightCm; //!< See m_currentObjectWidthCm for description
225
QString m_currentObjectXCm; //!< See m_currentObjectWidthCm for description
226
QString m_currentObjectYCm; //!< See m_currentObjectWidthCm for description
283
bool m_wasCaption; // bookkeeping to ensure next para is suppressed if a caption is encountered
285
bool m_closeHyperlink; // should read_r close hyperlink
286
bool m_listFound; // was there numPr element in ppr
287
QString m_currentListStyleName;
289
QMap<QString, QString> m_headers;
290
QMap<QString, QString> m_footers;
228
292
#include <MsooXmlCommonReaderMethods.h>
229
293
#include <MsooXmlCommonReaderDrawingMLMethods.h>
241
305
DocxImport& _import,
242
306
const QString& _path, const QString& _file,
243
307
MSOOXML::MsooXmlRelationships& _relationships,
244
const QMap<QString, MSOOXML::DrawingMLTheme*>& _themes
308
MSOOXML::DrawingMLTheme* _themes
246
310
DocxImport* import;
247
311
const QString path;
248
312
const QString file;
250
//! @return comment for identifier @a id. Use Comment::isNull() to check if the item was found.
251
DocxComment comment(KoOdfWriters *writers, int id);
253
//! @return endnote for identifier @a id. Use Comment::isNull() to check if the item was found.
254
DocxNote endnote(KoOdfWriters *writers, int id);
256
//! @return footnote for identifier @a id. Use Comment::isNull() to check if the item was found.
257
DocxNote footnote(KoOdfWriters *writers, int id);
259
const QMap<QString, MSOOXML::DrawingMLTheme*>* themes;
314
MSOOXML::DrawingMLTheme* themes;
316
// Contains footnotes when read, the styles of footnotes are already put to correct files.
317
QMap<QString, QString> m_footnotes;
319
QMap<QString, QString> m_comments;
321
QMap<QString, QString> m_endnotes;
261
KoFilter::ConversionStatus loadComments(KoOdfWriters *writers);
262
KoFilter::ConversionStatus loadEndnotes(KoOdfWriters *writers);
263
KoFilter::ConversionStatus loadFootnotes(KoOdfWriters *writers);
265
QMap<int, DocxComment> m_comments;
266
QMap<int, DocxNote> m_endnotes;
267
QMap<int, DocxNote> m_footnotes;
268
bool m_commentsLoaded;
269
bool m_endnotesLoaded;
270
bool m_footnotesLoaded;
273
326
#endif //DOCXXMLDOCREADER_H