Cutelee  6.1.0
markupdirector.h
1 /*
2  This file is part of the Cutelee template system.
3 
4  Copyright (c) 2008 Stephen Kelly <steveire@gmail.com>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either version
9  2.1 of the Licence, or (at your option) any later version.
10 
11  This library is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14  Lesser General Public License for more details.
15 
16  You should have received a copy of the GNU Lesser General Public
17  License along with this library. If not, see <http://www.gnu.org/licenses/>.
18 
19 */
20 
21 #ifndef CUTELEE_MARKUPDIRECTOR_H
22 #define CUTELEE_MARKUPDIRECTOR_H
23 
24 #include "abstractmarkupbuilder.h"
25 #include "cutelee_textdocument_export.h"
26 
27 #include <QtGui/QTextDocument>
28 #include <QtGui/QTextFrame>
29 
30 class QTextTable;
31 class QTextTableCell;
32 class QTextList;
33 class QTextCharFormat;
34 
35 namespace Cutelee
36 {
37 
38 class MarkupDirectorPrivate;
39 
41 
92 class CUTELEE_TEXTDOCUMENT_EXPORT MarkupDirector
93 {
94 public:
99 
103  virtual ~MarkupDirector();
104 
108  virtual void processDocument(QTextDocument *doc);
109 
114  virtual QTextFrame::iterator processFrame(QTextFrame::iterator it,
115  QTextFrame *frame);
116 
124  virtual QTextFrame::iterator processBlock(QTextFrame::iterator it,
125  const QTextBlock &block);
126 
133  virtual QTextFrame::iterator processObject(QTextFrame::iterator it,
134  const QTextBlock &block,
135  QTextObject *textObject);
136 
143  virtual std::pair<QTextFrame::iterator, QTextBlock>
144  processBlockGroup(QTextFrame::iterator it, const QTextBlock &block,
145  QTextBlockGroup *textBlockGroup);
146 
153  virtual std::pair<QTextFrame::iterator, QTextBlock>
154  processList(QTextFrame::iterator it, const QTextBlock &block,
155  QTextList *textList);
156 
162  virtual QTextFrame::iterator processBlockContents(QTextFrame::iterator it,
163  const QTextBlock &block);
164 
169  virtual void processCustomFragment(const QTextFragment &fragment,
170  QTextDocument const *doc);
171 
177  virtual QTextBlock::iterator processFragment(QTextBlock::iterator it,
178  const QTextFragment &fragment,
179  QTextDocument const *doc);
180 
189  virtual QTextBlock::iterator
190  processCharTextObject(QTextBlock::iterator it, const QTextFragment &fragment,
191  QTextObject *textObject);
192 
200  virtual QTextBlock::iterator processImage(QTextBlock::iterator it,
201  const QTextImageFormat &imageFormat,
202  QTextDocument *doc);
203 
211  virtual QTextFrame::iterator processTable(QTextFrame::iterator it,
212  QTextTable *table);
213 
218  virtual void processTableCell(const QTextTableCell &tableCell,
219  QTextTable *table);
220 
221 protected:
225  void processDocumentContents(QTextFrame::iterator begin,
226  QTextFrame::iterator end);
227 
235  std::pair<QTextFrame::iterator, QTextBlock>
236  skipBlockGroup(QTextFrame::iterator it, const QTextBlock &_block,
237  QTextBlockGroup *blockGroup);
238 
246  QList<int> sortOpeningOrder(QSet<int> openingTags,
247  QTextBlock::iterator it) const;
248 
253  virtual void processClosingElements(QTextBlock::iterator it);
254 
258  virtual void processOpeningElements(QTextBlock::iterator it);
259 
263  virtual QSet<int> getElementsToClose(QTextBlock::iterator it) const;
264 
268  virtual QList<int> getElementsToOpen(QTextBlock::iterator it);
269 
274  None = 0x0,
275  SuperScript = 0x01,
276  SubScript = 0x02,
277  Anchor = 0x04,
278  SpanForeground = 0x08,
279  SpanBackground = 0x10,
280  SpanFontFamily = 0x20,
281  SpanFontPointSize = 0x40,
282  Strong = 0x80,
283  Emph = 0x100,
284  Underline = 0x200,
285  StrikeOut = 0x400
286  };
287 
288 protected:
289 #ifndef Q_QDOC
290  MarkupDirectorPrivate *const d_ptr;
291 #endif
292 
298 
299 #ifndef Q_QDOC
300 private:
301  Q_DECLARE_PRIVATE(MarkupDirector)
302 #endif
303 };
304 }
305 
306 #endif
Interface for creating marked-up text output.
Instructs a builder object to create markup output.
AbstractMarkupBuilder * m_builder
The Cutelee namespace holds all public Cutelee API.
Definition: Mainpage.dox:8