diff -r 932c358ece3e -r d8fccb2cd802 Orb/Doxygen/src/printdocvisitor.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orb/Doxygen/src/printdocvisitor.h Fri Apr 23 20:47:58 2010 +0100 @@ -0,0 +1,681 @@ +/****************************************************************************** + * + * + * + * + * Copyright (C) 1997-2008 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. + * + * Documents produced by Doxygen are derivative works derived from the + * input used in their production; they are not affected by this license. + * + */ + +#ifndef _PRINTDOCVISITOR_H +#define _PRINTDOCVISITOR_H + +#include "docvisitor.h" + +/*! Concrete visitor implementation for pretty printing */ +class PrintDocVisitor : public DocVisitor +{ + public: + PrintDocVisitor() : DocVisitor(DocVisitor_Other), m_indent(0), + m_needsEnter(FALSE), m_insidePre(FALSE) {} + + //-------------------------------------- + + void visit(DocWord *w) + { + indent_leaf(); + printf("%s",w->word().data()); + } + void visit(DocLinkedWord *w) + { + indent_leaf(); + printf("%s",w->word().data()); + } + void visit(DocWhiteSpace *w) + { + indent_leaf(); + if (m_insidePre) + { + printf("%s",w->chars().data()); + } + else + { + printf(" "); + } + } + void visit(DocSymbol *s) + { + indent_leaf(); + switch(s->symbol()) + { + case DocSymbol::BSlash: printf("\\"); break; + case DocSymbol::At: printf("@"); break; + case DocSymbol::Less: printf("<"); break; + case DocSymbol::Greater: printf(">"); break; + case DocSymbol::Amp: printf("&"); break; + case DocSymbol::Dollar: printf("$"); break; + case DocSymbol::Hash: printf("#"); break; + case DocSymbol::Percent: printf("%%"); break; + case DocSymbol::Copy: printf("©"); break; + case DocSymbol::Apos: printf("'"); break; + case DocSymbol::Quot: printf("\""); break; + case DocSymbol::Lsquo: printf("‘"); break; + case DocSymbol::Rsquo: printf("’"); break; + case DocSymbol::Ldquo: printf("“"); break; + case DocSymbol::Rdquo: printf("”"); break; + case DocSymbol::Ndash: printf("–"); break; + case DocSymbol::Mdash: printf("—"); break; + case DocSymbol::Uml: printf("&%cuml;",s->letter()); break; + case DocSymbol::Acute: printf("&%cacute;",s->letter()); break; + case DocSymbol::Grave: printf("&%cgrave;",s->letter()); break; + case DocSymbol::Circ: printf("&%ccirc;",s->letter()); break; + case DocSymbol::Tilde: printf("&%ctilde;",s->letter()); break; + case DocSymbol::Szlig: printf("ß"); break; + case DocSymbol::Cedil: printf("&%ccedul;",s->letter()); break; + case DocSymbol::Ring: printf("&%cring;",s->letter()); break; + case DocSymbol::Nbsp: printf(" "); break; + case DocSymbol::Aelig: printf("æ"); break; + case DocSymbol::AElig: printf("Æ"); break; + default: + printf("Error: unknown symbol found\n"); + } + } + void visit(DocURL *u) + { + indent_leaf(); + printf("%s",u->url().data()); + } + void visit(DocLineBreak *) + { + indent_leaf(); + printf("
"); + } + void visit(DocHorRuler *) + { + indent_leaf(); + printf("
"); + } + void visit(DocStyleChange *s) + { + indent_leaf(); + switch (s->style()) + { + case DocStyleChange::Bold: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Italic: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Code: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Subscript: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Superscript: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Center: + if (s->enable()) printf("
"); else printf("
"); + break; + case DocStyleChange::Small: + if (s->enable()) printf(""); else printf(""); + break; + case DocStyleChange::Preformatted: + if (s->enable()) printf("
"); else printf("
"); + break; + case DocStyleChange::Div: + if (s->enable()) printf("
"); else printf("
"); + break; + case DocStyleChange::Span: + if (s->enable()) printf(""); else printf(""); + break; + } + } + void visit(DocVerbatim *s) + { + indent_leaf(); + switch(s->type()) + { + case DocVerbatim::Code: printf(""); break; + case DocVerbatim::Verbatim: printf(""); break; + case DocVerbatim::HtmlOnly: printf(""); break; + case DocVerbatim::ManOnly: printf(""); break; + case DocVerbatim::LatexOnly: printf(""); break; + case DocVerbatim::XmlOnly: printf(""); break; + case DocVerbatim::Dot: printf(""); break; + case DocVerbatim::Msc: printf(""); break; + } + printf("%s",s->text().data()); + switch(s->type()) + { + case DocVerbatim::Code: printf(""); break; + case DocVerbatim::Verbatim: printf(""); break; + case DocVerbatim::HtmlOnly: printf(""); break; + case DocVerbatim::ManOnly: printf(""); break; + case DocVerbatim::LatexOnly: printf(""); break; + case DocVerbatim::XmlOnly: printf(""); break; + case DocVerbatim::Dot: printf(""); break; + case DocVerbatim::Msc: printf(""); break; + } + } + void visit(DocAnchor *a) + { + indent_leaf(); + printf("",a->anchor().data()); + } + void visit(DocInclude *inc) + { + indent_leaf(); + printf("file().data()); + switch(inc->type()) + { + case DocInclude::Include: printf("include"); break; + case DocInclude::IncWithLines: printf("incwithlines"); break; + case DocInclude::DontInclude: printf("dontinclude"); break; + case DocInclude::HtmlInclude: printf("htmlinclude"); break; + case DocInclude::VerbInclude: printf("verbinclude"); break; + } + printf("\"/>"); + } + void visit(DocIncOperator *op) + { + indent_leaf(); + printf("pattern().data()); + switch(op->type()) + { + case DocIncOperator::Line: printf("line"); break; + case DocIncOperator::Skip: printf("skip"); break; + case DocIncOperator::SkipLine: printf("skipline"); break; + case DocIncOperator::Until: printf("until"); break; + } + printf("\"/>"); + } + void visit(DocFormula *f) + { + indent_leaf(); + printf("",f->name().data(),f->text().data()); + } + void visit(DocIndexEntry *i) + { + indent_leaf(); + printf("%sentry().data()); + } + void visit(DocSimpleSectSep *) + { + indent_leaf(); + printf(""); + } + + //-------------------------------------- + + void visitPre(DocAutoList *l) + { + indent_pre(); + if (l->isEnumList()) + { + printf("
    \n"); + } + else + { + printf("
      \n"); + } + } + void visitPost(DocAutoList *l) + { + indent_post(); + if (l->isEnumList()) + { + printf("
\n"); + } + else + { + printf("\n"); + } + } + void visitPre(DocAutoListItem *) + { + indent_pre(); + printf("
  • \n"); + } + void visitPost(DocAutoListItem *) + { + indent_post(); + printf("
  • \n"); + } + void visitPre(DocPara *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocPara *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocRoot *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocRoot *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocSimpleSect *s) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocSimpleSect *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocTitle *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocTitle *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocSimpleList *) + { + indent_pre(); + printf("
      \n"); + } + void visitPost(DocSimpleList *) + { + indent_post(); + printf("
    \n"); + } + void visitPre(DocSimpleListItem *) + { + indent_pre(); + printf("
  • \n"); + } + void visitPost(DocSimpleListItem *) + { + indent_post(); + printf("
  • \n"); + } + void visitPre(DocSection *s) + { + indent_pre(); + printf("\n",s->level()); + } + void visitPost(DocSection *s) + { + indent_post(); + printf("\n",s->level()); + } + void visitPre(DocHtmlList *s) + { + indent_pre(); + if (s->type()==DocHtmlList::Ordered) printf("
      \n"); else printf("
        \n"); + } + void visitPost(DocHtmlList *s) + { + indent_post(); + if (s->type()==DocHtmlList::Ordered) printf("
    \n"); else printf("\n"); + } + void visitPre(DocHtmlListItem *) + { + indent_pre(); + printf("
  • \n"); + } + void visitPost(DocHtmlListItem *) + { + indent_post(); + printf("
  • \n"); + } + //void visitPre(DocHtmlPre *) + //{ + // indent_pre(); + // printf("
    \n");
    +    //  m_insidePre=TRUE;
    +    //}
    +    //void visitPost(DocHtmlPre *) 
    +    //{
    +    //  m_insidePre=FALSE;
    +    //  indent_post();
    +    //  printf("
    \n"); + //} + void visitPre(DocHtmlDescList *) + { + indent_pre(); + printf("
    \n"); + } + void visitPost(DocHtmlDescList *) + { + indent_post(); + printf("
    \n"); + } + void visitPre(DocHtmlDescTitle *) + { + indent_pre(); + printf("
    \n"); + } + void visitPost(DocHtmlDescTitle *) + { + indent_post(); + printf("
    \n"); + } + void visitPre(DocHtmlDescData *) + { + indent_pre(); + printf("
    \n"); + } + void visitPost(DocHtmlDescData *) + { + indent_post(); + printf("
    \n"); + } + void visitPre(DocHtmlTable *t) + { + indent_pre(); + printf("\n", + t->numRows(),t->numCols()); + } + void visitPost(DocHtmlTable *) + { + indent_post(); + printf("
    \n"); + } + void visitPre(DocHtmlRow *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocHtmlRow *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocHtmlCell *c) + { + indent_pre(); + printf("\n",c->isHeading()?'h':'d'); + } + void visitPost(DocHtmlCell *c) + { + indent_post(); + printf("\n",c->isHeading()?'h':'d'); + } + void visitPre(DocHtmlCaption *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocHtmlCaption *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocInternal *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocInternal *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocHRef *href) + { + indent_pre(); + printf("\n",href->url().data()); + } + void visitPost(DocHRef *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocHtmlHeader *header) + { + indent_pre(); + printf("\n",header->level()); + } + void visitPost(DocHtmlHeader *header) + { + indent_post(); + printf("\n",header->level()); + } + void visitPre(DocImage *img) + { + indent_pre(); + printf("name().data()); + switch(img->type()) + { + case DocImage::Html: printf("html"); break; + case DocImage::Latex: printf("latex"); break; + case DocImage::Rtf: printf("rtf"); break; + } + printf("\" width=%s height=%s>\n",img->width().data(),img->height().data()); + } + void visitPost(DocImage *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocDotFile *df) + { + indent_pre(); + printf("\n",df->name().data()); + } + void visitPost(DocDotFile *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocLink *lnk) + { + indent_pre(); + printf("\n", + lnk->ref().data(),lnk->file().data(),lnk->anchor().data()); + } + void visitPost(DocLink *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocRef *ref) + { + indent_pre(); + printf("\n", + ref->ref().data(),ref->file().data(),ref->anchor().data(), + ref->targetTitle().data(),ref->hasLinkText()?"yes":"no", + ref->refToAnchor()?"yes":"no", ref->refToSection()?"yes":"no"); + } + void visitPost(DocRef *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocSecRefItem *ref) + { + indent_pre(); + printf("\n",ref->target().data()); + } + void visitPost(DocSecRefItem *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocSecRefList *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocSecRefList *) + { + indent_post(); + printf("\n"); + } + //void visitPre(DocLanguage *l) + //{ + // indent_pre(); + // printf("\n",l->id().data()); + //} + //void visitPost(DocLanguage *) + //{ + // indent_post(); + // printf("\n"); + //} + void visitPre(DocParamList *pl) + { + indent_pre(); + //QStrListIterator sli(pl->parameters()); + QListIterator sli(pl->parameters()); + //const char *s; + DocNode *param; + printf(""); + for (sli.toFirst();(param=sli.current());++sli) + { + printf(""); + if (param->kind()==DocNode::Kind_Word) + { + visit((DocWord*)param); + } + else if (param->kind()==DocNode::Kind_LinkedWord) + { + visit((DocLinkedWord*)param); + } + printf(""); + } + printf("\n"); + } + void visitPost(DocParamList *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocParamSect *ps) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocParamSect *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocXRefItem *x) + { + indent_pre(); + printf("\n", + x->file().data(),x->anchor().data(),x->title().data()); + } + void visitPost(DocXRefItem *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocInternalRef *r) + { + indent_pre(); + printf("\n",r->file().data(),r->anchor().data()); + } + void visitPost(DocInternalRef *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocCopy *c) + { + indent_pre(); + printf("\n",c->link().data()); + } + void visitPost(DocCopy *) + { + indent_post(); + printf("\n"); + } + void visitPre(DocText *) + { + indent_pre(); + printf("\n"); + } + void visitPost(DocText *) + { + indent_post(); + printf("\n"); + } + + private: + // helper functions + void indent() + { + if (m_needsEnter) printf("\n"); + for (int i=0;i