⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dochandler.cpp

📁 Doxygen的词根来源于Document(文档)和Oxygen(氧气)
💻 CPP
📖 第 1 页 / 共 4 页
字号:
/****************************************************************************** * * $Id: dochandler.cpp,v 1.33 2002/10/13 21:01:58 dimitri Exp $ * * * Copyright (C) 1997-2006 by Dimitri van Heesch. * * Permission to use, copy, modify, and distribute this software and its * documentation under the terms of the GNU General Public License is hereby  * granted. No representations are made about the suitability of this software  * for any purpose. It is provided "as is" without express or implied warranty. * See the GNU General Public License for more details. * */#include <qmap.h>#include "dochandler.h"#include "debug.h"#include "linkedtexthandler.h"//----------------------------------------------------------------------class TypeNameMapper{  public:    TypeNameMapper()    {      m_map.insert("see",       SimpleSectHandler::See);      m_map.insert("return",    SimpleSectHandler::Return);      m_map.insert("author",    SimpleSectHandler::Author);      m_map.insert("version",   SimpleSectHandler::Version);      m_map.insert("since",     SimpleSectHandler::Since);      m_map.insert("date",      SimpleSectHandler::Date);      m_map.insert("bug",       SimpleSectHandler::Bug);      m_map.insert("note",      SimpleSectHandler::Note);      m_map.insert("warning",   SimpleSectHandler::Warning);      m_map.insert("par",       SimpleSectHandler::Par);      m_map.insert("deprecated",SimpleSectHandler::Deprecated);      m_map.insert("pre",       SimpleSectHandler::Pre);      m_map.insert("post",      SimpleSectHandler::Post);      m_map.insert("invariant", SimpleSectHandler::Invar);      m_map.insert("remark",    SimpleSectHandler::Remark);      m_map.insert("attention", SimpleSectHandler::Attention);      m_map.insert("todo",      SimpleSectHandler::Todo);      m_map.insert("test",      SimpleSectHandler::Test);      m_map.insert("rcs",       SimpleSectHandler::RCS);      m_map.insert("enumvalues",SimpleSectHandler::EnumValues);      m_map.insert("examples",  SimpleSectHandler::Examples);    }    SimpleSectHandler::Types stringToType(const QString &typeStr)    {      return m_map[typeStr];    }  private:    QMap<QString,SimpleSectHandler::Types> m_map;};class HighlightMapper{  public:    HighlightMapper()    {      m_map.insert("comment",        HighlightHandler::Comment);      m_map.insert("keyword",        HighlightHandler::Keyword);      m_map.insert("keywordtype",    HighlightHandler::KeywordType);      m_map.insert("keywordflow",    HighlightHandler::KeywordFlow);      m_map.insert("charliteral",    HighlightHandler::CharLiteral);      m_map.insert("stringliteral",  HighlightHandler::StringLiteral);      m_map.insert("preprocessor",   HighlightHandler::Preprocessor);    }    HighlightHandler::HighlightKind stringToKind(const QString &kindStr)    {      return m_map[kindStr];    }  private:    QMap<QString,HighlightHandler::HighlightKind> m_map;};static TypeNameMapper *s_typeMapper;static HighlightMapper *s_highlightMapper;void dochandler_init(){  s_typeMapper = new TypeNameMapper;  s_highlightMapper = new HighlightMapper;}void dochandler_exit(){  delete s_typeMapper;  delete s_highlightMapper;}  //----------------------------------------------------------------------// MarkupHandler//----------------------------------------------------------------------MarkupHandler::MarkupHandler(QList<DocImpl> &children,QString &curString)  : m_children(children), m_curString(curString),     m_curMarkup(IDocMarkup::Normal), m_headingLevel(0){  addStartHandler("bold",this,&MarkupHandler::startBold);  addEndHandler("bold",this,&MarkupHandler::endBold);    addStartHandler("emphasis",this,&MarkupHandler::startEmphasis);  addEndHandler("emphasis",this,&MarkupHandler::endEmphasis);    addStartHandler("computeroutput",this,&MarkupHandler::startComputerOutput);  addEndHandler("computeroutput",this,&MarkupHandler::endComputerOutput);  addStartHandler("center",this,&MarkupHandler::startCenter);  addEndHandler("center",this,&MarkupHandler::endCenter);  addStartHandler("small",this,&MarkupHandler::startSmallFont);  addEndHandler("small",this,&MarkupHandler::endSmallFont);  addStartHandler("subscript",this,&MarkupHandler::startSubscript);  addEndHandler("subscript",this,&MarkupHandler::endSubscript);  addStartHandler("superscript",this,&MarkupHandler::startSuperscript);  addEndHandler("superscript",this,&MarkupHandler::endSuperscript);  addStartHandler("preformatted",this,&MarkupHandler::startPreformatted);  addEndHandler("preformatted",this,&MarkupHandler::endPreformatted);  addStartHandler("heading1",this,&MarkupHandler::startHeading1);  addEndHandler("heading1",this,&MarkupHandler::endHeading1);    addStartHandler("heading2",this,&MarkupHandler::startHeading2);  addEndHandler("heading2",this,&MarkupHandler::endHeading2);  addStartHandler("heading3",this,&MarkupHandler::startHeading3);  addEndHandler("heading3",this,&MarkupHandler::endHeading3);  addStartHandler("heading4",this,&MarkupHandler::startHeading4);  addEndHandler("heading4",this,&MarkupHandler::endHeading4);  addStartHandler("heading5",this,&MarkupHandler::startHeading5);  addEndHandler("heading5",this,&MarkupHandler::endHeading5);  addStartHandler("heading6",this,&MarkupHandler::startHeading6);  addEndHandler("heading6",this,&MarkupHandler::endHeading6);}MarkupHandler::~MarkupHandler(){}void MarkupHandler::addTextNode(){  if (!m_curString.isEmpty())  {    m_children.append(new TextNode(m_curString,m_curMarkup,m_headingLevel));    debug(2,"addTextNode() text=%s markup=%x\n",m_curString.data(),m_curMarkup);    m_curString="";  }}void MarkupHandler::startBold(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Bold,TRUE));  m_curMarkup |= IDocMarkup::Bold;}void MarkupHandler::endBold(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Bold,FALSE));  m_curMarkup &= ~IDocMarkup::Bold;}void MarkupHandler::startEmphasis(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Emphasis,TRUE));  m_curMarkup |= IDocMarkup::Emphasis;}void MarkupHandler::endEmphasis(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Emphasis,FALSE));  m_curMarkup &= ~IDocMarkup::Emphasis;}void MarkupHandler::startComputerOutput(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::ComputerOutput,TRUE));  m_curMarkup |= IDocMarkup::ComputerOutput;}void MarkupHandler::endComputerOutput(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::ComputerOutput,FALSE));  m_curMarkup &= ~IDocMarkup::ComputerOutput;}void MarkupHandler::startCenter(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Center,TRUE));  m_curMarkup |= IDocMarkup::Center;}void MarkupHandler::endCenter(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Center,FALSE));  m_curMarkup &= ~IDocMarkup::Center;}void MarkupHandler::startSmallFont(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::SmallFont,TRUE));  m_curMarkup |= IDocMarkup::SmallFont;}void MarkupHandler::endSmallFont(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::SmallFont,FALSE));  m_curMarkup &= ~IDocMarkup::SmallFont;}void MarkupHandler::startSubscript(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Subscript,TRUE));  m_curMarkup |= IDocMarkup::Subscript;}void MarkupHandler::endSubscript(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Subscript,FALSE));  m_curMarkup &= ~IDocMarkup::Subscript;}void MarkupHandler::startSuperscript(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Superscript,TRUE));  m_curMarkup |= IDocMarkup::Superscript;}void MarkupHandler::endSuperscript(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Superscript,FALSE));  m_curMarkup &= ~IDocMarkup::Superscript;}void MarkupHandler::startPreformatted(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Preformatted,TRUE));  m_curMarkup |= IDocMarkup::Preformatted;}void MarkupHandler::endPreformatted(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Preformatted,FALSE));  m_curMarkup &= ~IDocMarkup::Preformatted;}void MarkupHandler::startHeading1(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,1));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=1;}void MarkupHandler::endHeading1(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,1));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}void MarkupHandler::startHeading2(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,2));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=2;}void MarkupHandler::endHeading2(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,2));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}void MarkupHandler::startHeading3(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,3));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=3;}void MarkupHandler::endHeading3(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,3));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}void MarkupHandler::startHeading4(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,4));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=4;}void MarkupHandler::endHeading4(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,4));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}void MarkupHandler::startHeading5(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,5));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=5;}void MarkupHandler::endHeading5(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,5));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}void MarkupHandler::startHeading6(const QXmlAttributes & /*attrib*/){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,TRUE,6));  m_curMarkup |= IDocMarkup::Heading;  m_headingLevel=6;}void MarkupHandler::endHeading6(){  addTextNode();  m_children.append(new MarkupModifierNode(IDocMarkup::Heading,FALSE,6));  m_curMarkup &= ~IDocMarkup::Heading;  m_headingLevel=0;}//----------------------------------------------------------------------// ListItemHandler//----------------------------------------------------------------------ListItemHandler::ListItemHandler(IBaseHandler *parent)   : m_parent(parent){  m_children.setAutoDelete(TRUE);    addEndHandler("listitem",this,&ListItemHandler::endListItem);  addStartHandler("para",this,&ListItemHandler::startParagraph);}ListItemHandler::~ListItemHandler(){}void ListItemHandler::startListItem(const QXmlAttributes& /*attrib*/){  m_parent->setDelegate(this);  debug(2,"start list item handler\n");}void ListItemHandler::endListItem(){  debug(2,"end list item handler\n");  m_parent->setDelegate(0);}void ListItemHandler::startParagraph(const QXmlAttributes& attrib){  ParagraphHandler *parHandler = new ParagraphHandler(this);  parHandler->startParagraph(attrib);  m_children.append(parHandler);}IDocIterator *ListItemHandler::contents() const{  return new ListItemIterator(*this);}//----------------------------------------------------------------------// OrderedListHandler//----------------------------------------------------------------------OrderedListHandler::OrderedListHandler(IBaseHandler *parent) : m_parent(parent){  m_children.setAutoDelete(TRUE);  addEndHandler("orderedlist",this,&OrderedListHandler::endOrderedList);  addStartHandler("listitem",this,&OrderedListHandler::startOrderedListItem);}OrderedListHandler::~OrderedListHandler(){}void OrderedListHandler::startOrderedList(const QXmlAttributes& /*attrib*/){  m_parent->setDelegate(this);}void OrderedListHandler::endOrderedList(){  m_parent->setDelegate(0);}void OrderedListHandler::startOrderedListItem(const QXmlAttributes& attrib){  ListItemHandler *liHandler = new ListItemHandler(this);  liHandler->startListItem(attrib);  m_children.append(liHandler);}IDocIterator *OrderedListHandler::elements() const{  return new OrderedListIterator(*this);}//----------------------------------------------------------------------// ItemizedListHandler//----------------------------------------------------------------------ItemizedListHandler::ItemizedListHandler(IBaseHandler *parent) : m_parent(parent){  m_children.setAutoDelete(TRUE);  addEndHandler("itemizedlist",this,&ItemizedListHandler::endItemizedList);  addStartHandler("listitem",this,&ItemizedListHandler::startItemizedListItem);}ItemizedListHandler::~ItemizedListHandler(){}void ItemizedListHandler::startItemizedList(const QXmlAttributes& /*attrib*/){  m_parent->setDelegate(this);}void ItemizedListHandler::endItemizedList(){  m_parent->setDelegate(0);}void ItemizedListHandler::startItemizedListItem(const QXmlAttributes& attrib){  ListItemHandler *liHandler = new ListItemHandler(this);  liHandler->startListItem(attrib);  m_children.append(liHandler);}IDocIterator *ItemizedListHandler::elements() const{  return new ItemizedListIterator(*this);}//----------------------------------------------------------------------// TocListHandler//----------------------------------------------------------------------TocListHandler::TocListHandler(IBaseHandler *parent) : m_parent(parent){  m_children.setAutoDelete(TRUE);  addEndHandler("toclist",this,&TocListHandler::endTocList);  addStartHandler("tocitem",this,&TocListHandler::startTocItem);}TocListHandler::~TocListHandler(){}void TocListHandler::startTocList(const QXmlAttributes& /*attrib*/){  m_parent->setDelegate(this);}void TocListHandler::endTocList(){  m_parent->setDelegate(0);}void TocListHandler::startTocItem(const QXmlAttributes& attrib){  TocItemHandler *tiHandler = new TocItemHandler(this);  tiHandler->startTocItem(attrib);  m_children.append(tiHandler);}IDocIterator *TocListHandler::elements() const{  return new TocListIterator(*this);}//----------------------------------------------------------------------// TocItemHandler//----------------------------------------------------------------------TocItemHandler::TocItemHandler(IBaseHandler *parent) : m_parent(parent){  addEndHandler("tocitem",this,&TocItemHandler::endTocItem);}TocItemHandler::~TocItemHandler(){}void TocItemHandler::startTocItem(const QXmlAttributes& attrib){  m_parent->setDelegate(this);  m_id = attrib.value("id");  m_curString="";}void TocItemHandler::endTocItem(){  m_title = m_curString;  m_parent->setDelegate(0);}//----------------------------------------------------------------------// ParameterHandler//----------------------------------------------------------------------ParameterHandler::ParameterHandler(IBaseHandler *parent) :   m_parent(parent){  addEndHandler("parametername",this,&ParameterHandler::endParameterName);}ParameterHandler::~ParameterHandler(){}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -