Grantlee  5.1.0
textdocument/lib/markupdirector.h
00001 /*
00002   This file is part of the Grantlee template system.
00003 
00004   Copyright (c) 2008 Stephen Kelly <steveire@gmail.com>
00005 
00006   This library is free software; you can redistribute it and/or
00007   modify it under the terms of the GNU Lesser General Public
00008   License as published by the Free Software Foundation; either version
00009   2.1 of the Licence, or (at your option) any later version.
00010 
00011   This library is distributed in the hope that it will be useful,
00012   but WITHOUT ANY WARRANTY; without even the implied warranty of
00013   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00014   Lesser General Public License for more details.
00015 
00016   You should have received a copy of the GNU Lesser General Public
00017   License along with this library.  If not, see <http://www.gnu.org/licenses/>.
00018 
00019 */
00020 
00021 #ifndef GRANTLEE_MARKUPDIRECTOR_H
00022 #define GRANTLEE_MARKUPDIRECTOR_H
00023 
00024 #include "abstractmarkupbuilder.h"
00025 #include "grantlee_textdocument_export.h"
00026 
00027 #include <QtGui/QTextDocument>
00028 #include <QtGui/QTextFrame>
00029 
00030 class QTextTable;
00031 class QTextTableCell;
00032 class QTextList;
00033 class QTextCharFormat;
00034 
00035 namespace Grantlee
00036 {
00037 
00038 class MarkupDirectorPrivate;
00039 
00041 
00095 class GRANTLEE_TEXTDOCUMENT_EXPORT MarkupDirector
00096 {
00097 public:
00101   MarkupDirector(AbstractMarkupBuilder *builder);
00102 
00106   virtual ~MarkupDirector();
00107 
00111   virtual void processDocument(QTextDocument *doc);
00112 
00117   virtual QTextFrame::iterator processFrame(QTextFrame::iterator it,
00118                                             QTextFrame *frame);
00119 
00127   virtual QTextFrame::iterator processBlock(QTextFrame::iterator it,
00128                                             const QTextBlock &block);
00129 
00136   virtual QTextFrame::iterator processObject(QTextFrame::iterator it,
00137                                              const QTextBlock &block,
00138                                              QTextObject *textObject);
00139 
00146   virtual QPair<QTextFrame::iterator, QTextBlock>
00147   processBlockGroup(QTextFrame::iterator it, const QTextBlock &block,
00148                     QTextBlockGroup *textBlockGroup);
00149 
00157   virtual QPair<QTextFrame::iterator, QTextBlock>
00158   processList(QTextFrame::iterator it, const QTextBlock &block,
00159               QTextList *textList);
00160 
00167   virtual QTextFrame::iterator processBlockContents(QTextFrame::iterator it,
00168                                                     const QTextBlock &block);
00169 
00175   virtual void processCustomFragment(const QTextFragment &fragment,
00176                                      QTextDocument const *doc);
00177 
00183   virtual QTextBlock::iterator processFragment(QTextBlock::iterator it,
00184                                                const QTextFragment &fragment,
00185                                                QTextDocument const *doc);
00186 
00195   virtual QTextBlock::iterator
00196   processCharTextObject(QTextBlock::iterator it, const QTextFragment &fragment,
00197                         QTextObject *textObject);
00198 
00206   virtual QTextBlock::iterator processImage(QTextBlock::iterator it,
00207                                             const QTextImageFormat &imageFormat,
00208                                             QTextDocument *doc);
00209 
00217   virtual QTextFrame::iterator processTable(QTextFrame::iterator it,
00218                                             QTextTable *table);
00219 
00224   virtual void processTableCell(const QTextTableCell &tableCell,
00225                                 QTextTable *table);
00226 
00227 protected:
00231   void processDocumentContents(QTextFrame::iterator begin,
00232                                QTextFrame::iterator end);
00233 
00242   QPair<QTextFrame::iterator, QTextBlock>
00243   skipBlockGroup(QTextFrame::iterator it, const QTextBlock &_block,
00244                  QTextBlockGroup *blockGroup);
00245 
00254   QList<int> sortOpeningOrder(QSet<int> openingTags,
00255                               QTextBlock::iterator it) const;
00256 
00261   virtual void processClosingElements(QTextBlock::iterator it);
00262 
00266   virtual void processOpeningElements(QTextBlock::iterator it);
00267 
00271   virtual QSet<int> getElementsToClose(QTextBlock::iterator it) const;
00272 
00276   virtual QList<int> getElementsToOpen(QTextBlock::iterator it);
00277 
00281   enum OpenElementValues {
00282     None = 0x0,               
00283     SuperScript = 0x01,       
00284     SubScript = 0x02,         
00285     Anchor = 0x04,            
00286     SpanForeground = 0x08,    
00287     SpanBackground = 0x10,    
00288     SpanFontFamily = 0x20,    
00289     SpanFontPointSize = 0x40, 
00290     Strong = 0x80,            
00291     Emph = 0x100,             
00292     Underline = 0x200,        
00293     StrikeOut = 0x400         
00294   };
00295 
00296 protected:
00297 #ifndef Q_QDOC
00298   MarkupDirectorPrivate *const d_ptr;
00299 #endif
00300 
00305   AbstractMarkupBuilder *m_builder;
00306 
00307 #ifndef Q_QDOC
00308 private:
00309   Q_DECLARE_PRIVATE(MarkupDirector)
00310 #endif
00311 };
00312 }
00313 
00314 #endif