1
/****************************************************************************
3
** Copyright (C) 1992-2005 Trolltech AS. All rights reserved.
5
** This file is part of the text module of the Qt Toolkit.
7
** This file may be distributed under the terms of the Q Public License
8
** as defined by Trolltech AS of Norway and appearing in the file
9
** LICENSE.QPL included in the packaging of this file.
11
** This file may be distributed and/or modified under the terms of the
12
** GNU General Public License version 2 as published by the Free Software
13
** Foundation and appearing in the file LICENSE.GPL included in the
14
** packaging of this file.
16
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
17
** information about Qt Commercial License Agreements.
18
** See http://www.trolltech.com/qpl/ for QPL licensing information.
19
** See http://www.trolltech.com/gpl/ for GPL licensing information.
21
** Contact info@trolltech.com if any conditions of this licensing are
24
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
25
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
27
****************************************************************************/
29
#ifndef QTEXTDOCUMENTFRAGMENT_P_H
30
#define QTEXTDOCUMENTFRAGMENT_P_H
36
// This file is not part of the Qt API. It exists purely as an
37
// implementation detail. This header file may change from version to
38
// version without notice, or even be removed.
43
#include "qtextdocument.h"
44
#include "qtexthtmlparser_p.h"
45
#include "qtextdocument_p.h"
50
#include <qvarlengtharray.h>
51
#include <qdatastream.h>
53
class QTextDocumentFragmentPrivate;
55
class QTextImportHelper
58
QTextImportHelper(QTextDocumentFragmentPrivate *docFragment, QTextDocumentPrivate *priv);
60
void appendFragments(int pos, int endPos);
61
int appendFragment(int pos, int endPos, int objectIndex = -1);
62
int convertFormatIndex(const QTextFormat &oldFormat, int objectIndexToSet = -1);
63
inline int convertFormatIndex(int oldFormatIndex, int objectIndexToSet = -1)
64
{ return convertFormatIndex(priv->formatCollection()->format(oldFormatIndex), objectIndexToSet); }
67
QTextDocumentFragmentPrivate *docFragment;
68
QTextDocumentPrivate *priv;
69
QTextFormatCollection &formatCollection;
70
const QString originalText;
71
QMap<int, int> objectIndexMap;
74
class QTextDocumentFragmentPrivate
77
enum MarkerValues { FragmentStart = 1, FragmentEnd = 2 };
79
QTextDocumentFragmentPrivate() : hasTitle(false), containsCompleteDocument(false), setMarkerForHtmlExport(false) {}
80
QTextDocumentFragmentPrivate(const QTextCursor &cursor);
82
void insert(QTextCursor &cursor) const;
84
void appendText(const QString &text, int formatIdx, int blockIdx = -2);
86
QMap<int, int> fillFormatCollection(QTextFormatCollection *collection) const;
88
// ### TODO: merge back into one big vector.
93
: position(0), size(0),
94
charFormat(-1), blockFormat(-2) {}
100
typedef QVector<TextFragment> FragmentVector;
102
FragmentVector fragments;
106
QTextFormatCollection formatCollection;
111
QTextFrameFormat rootFrameFormat;
113
uint containsCompleteDocument : 1;
114
uint setMarkerForHtmlExport : 1;
117
class QTextHTMLImporter : public QTextHtmlParser
121
QTextHTMLImporter(QTextDocumentFragmentPrivate *d, const QString &html);
126
bool closeTag(int i);
128
bool scanTable(int tableNodeIdx, Table *table);
130
void appendBlock(const QTextBlockFormat &format, QTextCharFormat charFmt = QTextCharFormat(), const QChar &separator = QChar::ParagraphSeparator);
131
void appendText(QString text, QTextCharFormat format);
132
inline void appendImage(const QTextImageFormat &format)
133
{ appendText(QString(QChar::ObjectReplacementCharacter), format); }
135
QTextDocumentFragmentPrivate *d;
136
QVector<int> listReferences;
139
// insert a named anchor the next time we emit a char format,
140
// either in a block or in regular text
141
bool setNamedAnchorInNextOutput;
146
Table() : tableIndex(-1), currentColumnCount(0), currentRow(-1) {}
147
int tableIndex; // objectIndex
148
int currentColumnCount;
150
QVector<int> rowSpanCellsPerRow;
153
QVector<Table> tables;
156
#endif // QTEXTDOCUMENTFRAGMENT_P_H