~ubuntu-branches/ubuntu/precise/koffice/precise

« back to all changes in this revision

Viewing changes to filters/kword/docx/DocxXmlDocumentReader.h

  • Committer: Bazaar Package Importer
  • Author(s): Alessandro Ghersi
  • Date: 2010-10-27 17:52:57 UTC
  • mfrom: (0.12.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20101027175257-s04zqqk5bs8ckm9o
Tags: 1:2.2.83-0ubuntu1
* Merge with Debian git remaining changes:
 - Add build-deps on librcps-dev, opengtl-dev, libqtgtl-dev, freetds-dev,
   create-resources, libspnav-dev
 - Remove needless build-dep on libwv2-dev
 - koffice-libs recommends create-resources
 - krita recommends pstoedit
 - Keep our patches
* New upstream release 2.3 beta 3
  - Remove debian/patches fixed by upstream
  - Update install files

Show diffs side-by-side

added added

removed removed

Lines of Context:
24
24
#ifndef DOCXXMLDOCREADER_H
25
25
#define DOCXXMLDOCREADER_H
26
26
 
 
27
#include <QBuffer>
 
28
#include <QString>
 
29
 
27
30
#include <MsooXmlCommonReader.h>
28
31
#include <MsooXmlThemesReader.h>
29
 
#include "DocxXmlCommentsReader.h"
30
32
#include "DocxXmlNotesReader.h"
31
33
 
 
34
#include <KoXmlWriter.h>
32
35
#include <KoGenStyle.h>
33
36
#include <styles/KoCharacterStyle.h>
34
37
 
67
70
    };
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();
96
115
    enum shdCaller {
97
116
        shd_rPr,
98
 
        shd_pPr
 
117
        shd_pPr,
 
118
        shd_tcPr
99
119
    };
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();
 
153
    int m_gridSpan;
 
154
 
 
155
    KoFilter::ConversionStatus read_oMath();
 
156
    KoFilter::ConversionStatus read_oMathPara();
 
157
    KoFilter::ConversionStatus read_r_m();
 
158
    KoFilter::ConversionStatus read_t_m();
126
159
 
127
160
    enum posOffsetCaller {
128
161
        posOffset_positionH,
135
168
    };
136
169
    KoFilter::ConversionStatus read_align(alignCaller caller);
137
170
 
 
171
    KoFilter::ConversionStatus read_pict();
 
172
 
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();
147
183
 
 
184
    bool m_createSectionStyle;
 
185
    QString m_currentSectionStyleName;
 
186
    bool m_createSectionToNext;
148
187
    KoGenStyle m_currentPageStyle;
149
188
    KoGenStyle m_masterPageStyle;
150
189
 
151
190
    DocxXmlDocumentReaderContext* m_context;
152
191
 
 
192
    KoOdfWriters *m_writers; // Needed to create new relationship for header/footer
 
193
 
 
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;
 
201
 
 
202
    enum BorderSide {
 
203
        TopBorder, BottomBorder, LeftBorder, RightBorder, InsideH, InsideV
 
204
    };
 
205
 
 
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;
 
209
 
 
210
    //! Same as above but for r element
 
211
    QMap<QString, BorderSide> m_textBorderStyles;
 
212
 
 
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;
 
216
 
 
217
    // ! Same as above but for border padding
 
218
    QMap<QString, BorderSide> m_textBorderPaddings;
 
219
 
153
220
private:
154
221
    void init();
155
222
 
157
224
    //! Uses m_currentObjectWidthCm and m_currentObjectHeightCm for size (defaults to 2cm/2cm)
158
225
    void writeRect();
159
226
 
160
 
    enum BorderSide {
161
 
        TopBorder, BottomBorder, LeftBorder, RightBorder
162
 
    };
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
167
228
 
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;
171
 
 
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);
174
231
 
184
241
 
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);
188
245
 
189
246
    enum ComplexFieldCharType {
190
 
       NoComplexFieldCharType, HyperlinkComplexFieldCharType
 
247
       NoComplexFieldCharType, HyperlinkComplexFieldCharType, ReferenceComplexFieldCharType,
 
248
       ReferenceNextComplexFieldCharType, InternalHyperlinkComplexFieldCharType,
 
249
       CurrentPageComplexFieldCharType, NumberOfPagesComplexFieldCharType
191
250
    };
192
251
    //! Type of complex field characters we have
193
252
    ComplexFieldCharType m_complexCharType;
196
255
    QString m_complexCharValue;
197
256
 
198
257
    enum ComplexCharStatus {
199
 
       NoneAllowed, InstrAllowed, InstrExecute
 
258
        NoneAllowed, InstrAllowed, InstrExecute, ExecuteInstrNow
200
259
    };
201
260
    //! State of fldChar
202
261
    ComplexCharStatus m_complexCharStatus;
203
262
 
 
263
    enum DropCapStatus {
 
264
        NoDropCap, DropCapRead, DropCapDone
 
265
    };
 
266
    //! State of dropCap
 
267
    DropCapStatus m_dropCapStatus;
 
268
 
 
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;
 
274
 
 
275
    QMap<QString, QString> m_bookmarks; //!< Bookmarks
 
276
 
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
212
 
 
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;
219
 
 
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;
223
 
 
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
 
284
 
 
285
    bool m_closeHyperlink; // should read_r close hyperlink
 
286
    bool m_listFound; // was there numPr element in ppr
 
287
    QString m_currentListStyleName;
 
288
 
 
289
    QMap<QString, QString> m_headers;
 
290
    QMap<QString, QString> m_footers;
227
291
 
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
245
309
    );
246
310
    DocxImport* import;
247
311
    const QString path;
248
312
    const QString file;
249
313
 
250
 
    //! @return comment for identifier @a id. Use Comment::isNull() to check if the item was found.
251
 
    DocxComment comment(KoOdfWriters *writers, int id);
252
 
 
253
 
    //! @return endnote for identifier @a id. Use Comment::isNull() to check if the item was found.
254
 
    DocxNote endnote(KoOdfWriters *writers, int id);
255
 
 
256
 
    //! @return footnote for identifier @a id. Use Comment::isNull() to check if the item was found.
257
 
    DocxNote footnote(KoOdfWriters *writers, int id);
258
 
 
259
 
    const QMap<QString, MSOOXML::DrawingMLTheme*>* themes;
 
314
    MSOOXML::DrawingMLTheme* themes;
 
315
 
 
316
    // Contains footnotes when read, the styles of footnotes are already put to correct files.
 
317
    QMap<QString, QString> m_footnotes;
 
318
 
 
319
    QMap<QString, QString> m_comments;
 
320
 
 
321
    QMap<QString, QString> m_endnotes;
 
322
 
260
323
private:
261
 
    KoFilter::ConversionStatus loadComments(KoOdfWriters *writers);
262
 
    KoFilter::ConversionStatus loadEndnotes(KoOdfWriters *writers);
263
 
    KoFilter::ConversionStatus loadFootnotes(KoOdfWriters *writers);
264
 
 
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;
271
324
};
272
325
 
273
326
#endif //DOCXXMLDOCREADER_H