Blame src/printdocvisitor.h

Packit 1c1d7e
/******************************************************************************
Packit 1c1d7e
 *
Packit 1c1d7e
 * 
Packit 1c1d7e
 *
Packit 1c1d7e
 *
Packit 1c1d7e
 * Copyright (C) 1997-2015 by Dimitri van Heesch.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Permission to use, copy, modify, and distribute this software and its
Packit 1c1d7e
 * documentation under the terms of the GNU General Public License is hereby 
Packit 1c1d7e
 * granted. No representations are made about the suitability of this software 
Packit 1c1d7e
 * for any purpose. It is provided "as is" without express or implied warranty.
Packit 1c1d7e
 * See the GNU General Public License for more details.
Packit 1c1d7e
 *
Packit 1c1d7e
 * Documents produced by Doxygen are derivative works derived from the
Packit 1c1d7e
 * input used in their production; they are not affected by this license.
Packit 1c1d7e
 *
Packit 1c1d7e
 */
Packit 1c1d7e
Packit 1c1d7e
#ifndef _PRINTDOCVISITOR_H
Packit 1c1d7e
#define _PRINTDOCVISITOR_H
Packit 1c1d7e
Packit 1c1d7e
#include <qglobal.h>
Packit 1c1d7e
#include "docvisitor.h"
Packit 1c1d7e
#include "htmlentity.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
Packit 1c1d7e
/*! Concrete visitor implementation for pretty printing */
Packit 1c1d7e
class PrintDocVisitor : public DocVisitor
Packit 1c1d7e
{
Packit 1c1d7e
  public:
Packit 1c1d7e
    PrintDocVisitor() : DocVisitor(DocVisitor_Other), m_indent(0), 
Packit 1c1d7e
                        m_needsEnter(FALSE), m_insidePre(FALSE) {}
Packit 1c1d7e
    
Packit 1c1d7e
    //--------------------------------------
Packit 1c1d7e
    
Packit 1c1d7e
    void visit(DocWord *w)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("%s",w->word().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocLinkedWord *w)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("%s",w->word().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocWhiteSpace *w)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      if (m_insidePre)
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("%s",w->chars().data());
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        printf(" ");
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocSymbol *s)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      const char *res = HtmlEntityMapper::instance()->utf8(s->symbol(),TRUE);
Packit 1c1d7e
      if (res)
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("%s",res);
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("print: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE));
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocURL *u)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("%s",u->url().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocLineBreak *)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("
");
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocHorRuler *)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("
");
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocStyleChange *s)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      switch (s->style())
Packit 1c1d7e
      {
Packit 1c1d7e
        case DocStyleChange::Bold:
Packit 1c1d7e
          if (s->enable()) printf("<bold>"); else printf("</bold>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Italic:
Packit 1c1d7e
          if (s->enable()) printf("<italic>"); else printf("</italic>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Code:
Packit 1c1d7e
          if (s->enable()) printf(""); else printf("");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Subscript:
Packit 1c1d7e
          if (s->enable()) printf("<sub>"); else printf("</sub>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Superscript:
Packit 1c1d7e
          if (s->enable()) printf("<sup>"); else printf("</sup>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Center:
Packit 1c1d7e
          if (s->enable()) printf("<center>"); else printf("</center>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Small:
Packit 1c1d7e
          if (s->enable()) printf("<small>"); else printf("</small>");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Preformatted:
Packit 1c1d7e
          if (s->enable()) printf("
"); else printf("
");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Div:
Packit 1c1d7e
          if (s->enable()) printf("
"); else printf("
");
Packit 1c1d7e
          break;
Packit 1c1d7e
        case DocStyleChange::Span:
Packit 1c1d7e
          if (s->enable()) printf(""); else printf("");
Packit 1c1d7e
          break;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocVerbatim *s)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      switch(s->type())
Packit 1c1d7e
      {
Packit 1c1d7e
        case DocVerbatim::Code: printf(""); break;
Packit 1c1d7e
        case DocVerbatim::Verbatim: printf("<verbatim>"); break;
Packit 1c1d7e
        case DocVerbatim::HtmlOnly: printf("<htmlonly>"); break;
Packit 1c1d7e
        case DocVerbatim::RtfOnly: printf("<rtfonly>"); break;
Packit 1c1d7e
        case DocVerbatim::ManOnly: printf("<manonly>"); break;
Packit 1c1d7e
        case DocVerbatim::LatexOnly: printf("<latexonly>"); break;
Packit 1c1d7e
        case DocVerbatim::XmlOnly: printf("<xmlonly>"); break;
Packit 1c1d7e
        case DocVerbatim::DocbookOnly: printf("<docbookonly>"); break;
Packit 1c1d7e
        case DocVerbatim::Dot: printf("<dot>"); break;
Packit 1c1d7e
        case DocVerbatim::Msc: printf("<msc>"); break;
Packit 1c1d7e
        case DocVerbatim::PlantUML: printf("<plantuml>"); break;
Packit 1c1d7e
      }
Packit 1c1d7e
      printf("%s",s->text().data());
Packit 1c1d7e
      switch(s->type())
Packit 1c1d7e
      {
Packit 1c1d7e
        case DocVerbatim::Code: printf(""); break;
Packit 1c1d7e
        case DocVerbatim::Verbatim: printf("</verbatim>"); break;
Packit 1c1d7e
        case DocVerbatim::HtmlOnly: printf("</htmlonly>"); break;
Packit 1c1d7e
        case DocVerbatim::RtfOnly: printf("</rtfonly>"); break;
Packit 1c1d7e
        case DocVerbatim::ManOnly: printf("</manonly>"); break;
Packit 1c1d7e
        case DocVerbatim::LatexOnly: printf("</latexonly>"); break;
Packit 1c1d7e
        case DocVerbatim::XmlOnly: printf("</xmlonly>"); break;
Packit 1c1d7e
        case DocVerbatim::DocbookOnly: printf("</docbookonly>"); break;
Packit 1c1d7e
        case DocVerbatim::Dot: printf("</dot>"); break;
Packit 1c1d7e
        case DocVerbatim::Msc: printf("</msc>"); break;
Packit 1c1d7e
        case DocVerbatim::PlantUML: printf("</plantuml>"); break;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocAnchor *a)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<anchor name=\"%s\"/>",a->anchor().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocInclude *inc)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<include file=\"%s\" type=\"",inc->file().data());
Packit 1c1d7e
      switch(inc->type())
Packit 1c1d7e
      {
Packit 1c1d7e
        case DocInclude::Include: printf("include"); break;
Packit 1c1d7e
        case DocInclude::IncWithLines: printf("incwithlines"); break;
Packit 1c1d7e
        case DocInclude::DontInclude: printf("dontinclude"); break;
Packit 1c1d7e
        case DocInclude::HtmlInclude: printf("htmlinclude"); break;
Packit 1c1d7e
        case DocInclude::LatexInclude: printf("latexinclude"); break;
Packit 1c1d7e
        case DocInclude::VerbInclude: printf("verbinclude"); break;
Packit 1c1d7e
        case DocInclude::Snippet: printf("snippet"); break;
Packit 1c1d7e
        case DocInclude::SnipWithLines: printf("snipwithlines"); break;
Packit 1c1d7e
        case DocInclude::SnippetDoc: 
Packit 1c1d7e
        case DocInclude::IncludeDoc: 
Packit 1c1d7e
          err("Internal inconsistency: found switch SnippetDoc / IncludeDoc in file: %s"
Packit 1c1d7e
              "Please create a bug report\n",__FILE__);
Packit 1c1d7e
          break;
Packit 1c1d7e
      }
Packit 1c1d7e
      printf("\"/>");
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocIncOperator *op)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<incoperator pattern=\"%s\" type=\"",op->pattern().data());
Packit 1c1d7e
      switch(op->type())
Packit 1c1d7e
      {
Packit 1c1d7e
        case DocIncOperator::Line:     printf("line");     break;
Packit 1c1d7e
        case DocIncOperator::Skip:     printf("skip");     break;
Packit 1c1d7e
        case DocIncOperator::SkipLine: printf("skipline"); break;
Packit 1c1d7e
        case DocIncOperator::Until:    printf("until");    break;
Packit 1c1d7e
      }
Packit 1c1d7e
      printf("\"/>");
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocFormula *f)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<formula name=%s text=%s/>",f->name().data(),f->text().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocIndexEntry *i)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<indexentry>%s</indexentry\n",i->entry().data());
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocSimpleSectSep *)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("<simplesectsep/>");
Packit 1c1d7e
    }
Packit 1c1d7e
    void visit(DocCite *cite)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_leaf();
Packit 1c1d7e
      printf("
Packit 1c1d7e
             "anchor=\"%s\" text=\"%s\""
Packit 1c1d7e
             "/>\n",
Packit 1c1d7e
             cite->ref().data(),cite->file().data(),cite->anchor().data(),
Packit 1c1d7e
             cite->text().data());
Packit 1c1d7e
    }
Packit 1c1d7e
Packit 1c1d7e
    //--------------------------------------
Packit 1c1d7e
    
Packit 1c1d7e
    void visitPre(DocAutoList *l)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_pre();
Packit 1c1d7e
      if (l->isEnumList())
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("
    \n");
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("
    \n");
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visitPost(DocAutoList *l)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_post();
Packit 1c1d7e
      if (l->isEnumList())
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("\n");
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        printf("\n");
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
    void visitPre(DocAutoListItem *)
Packit 1c1d7e
    {
Packit 1c1d7e
      indent_pre();
Packit 1c1d7e
      printf("
  • \n");
  • Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocAutoListItem *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocPara *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<para>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocPara *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</para>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocRoot *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<root>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocRoot *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</root>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSimpleSect *s)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    Packit 1c1d7e
          switch(s->type())
    Packit 1c1d7e
          {
    Packit 1c1d7e
    	case DocSimpleSect::See: printf("see"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Return: printf("return"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Author: printf("author"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Authors: printf("authors"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Version: printf("version"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Since: printf("since"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Date: printf("date"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Note: printf("note"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Warning: printf("warning"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Pre: printf("pre"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Post: printf("post"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Copyright: printf("copyright"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Invar: printf("invar"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Remark: printf("remark"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Attention: printf("attention"); break;
    Packit 1c1d7e
    	case DocSimpleSect::User: printf("user"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Rcs: printf("rcs"); break;
    Packit 1c1d7e
    	case DocSimpleSect::Unknown: printf("unknown"); break;
    Packit 1c1d7e
          }
    Packit 1c1d7e
          printf(">\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSimpleSect *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</simplesect>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocTitle *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<title>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocTitle *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</title>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSimpleList *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
      \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSimpleList *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSimpleListItem *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
  • \n");
  • Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSimpleListItem *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSection *s)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<sect%d>\n",s->level());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSection *s) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</sect%d>\n",s->level());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlList *s)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          if (s->type()==DocHtmlList::Ordered) printf("
      \n"); else printf("
        \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlList *s) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          if (s->type()==DocHtmlList::Ordered) printf("\n"); else printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlListItem *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
  • \n");
  • Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlListItem *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        //void visitPre(DocHtmlPre *)
    Packit 1c1d7e
        //{
    Packit 1c1d7e
        //  indent_pre();
    Packit 1c1d7e
        //  printf("
    \n");
    Packit 1c1d7e
        //  m_insidePre=TRUE;
    Packit 1c1d7e
        //}
    Packit 1c1d7e
        //void visitPost(DocHtmlPre *) 
    Packit 1c1d7e
        //{
    Packit 1c1d7e
        //  m_insidePre=FALSE;
    Packit 1c1d7e
        //  indent_post();
    Packit 1c1d7e
        //  printf("\n");
    Packit 1c1d7e
        //}
    Packit 1c1d7e
        void visitPre(DocHtmlDescList *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlDescList *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlDescTitle *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlDescTitle *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlDescData *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlDescData *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlTable *t)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("\n",
    Packit 1c1d7e
              t->numRows(),t->numColumns());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlTable *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlRow *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlRow *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlCell *c)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<t%c>\n",c->isHeading()?'h':'d');
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlCell *c) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</t%c>\n",c->isHeading()?'h':'d');
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlCaption *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<caption>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlCaption *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</caption>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocInternal *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<internal>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocInternal *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</internal>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHRef *href)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("\n",href->url().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHRef *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlHeader *header)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<h%d>\n",header->level());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlHeader *header) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</h%d>\n",header->level());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocImage *img)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<image src=\"%s\" type=\"",img->name().data());
    Packit 1c1d7e
          switch(img->type())
    Packit 1c1d7e
          {
    Packit 1c1d7e
            case DocImage::Html:    printf("html"); break;
    Packit 1c1d7e
            case DocImage::Latex:   printf("latex"); break;
    Packit 1c1d7e
            case DocImage::Rtf:     printf("rtf"); break;
    Packit 1c1d7e
            case DocImage::DocBook: printf("docbook"); break;
    Packit 1c1d7e
          }
    Packit 1c1d7e
          printf("\" %s %s>\n",img->width().data(),img->height().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocImage *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</image>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocDotFile *df)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<dotfile src=\"%s\">\n",df->name().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocDotFile *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</dotfile>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocMscFile *df)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<mscfile src=\"%s\">\n",df->name().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocMscFile *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</mscfile>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocDiaFile *df)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<diafile src=\"%s\">\n",df->name().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocDiaFile *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</diafile>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocLink *lnk)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<link ref=\"%s\" file=\"%s\" anchor=\"%s\">\n",
    Packit 1c1d7e
              lnk->ref().data(),lnk->file().data(),lnk->anchor().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocLink *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</link>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocRef *ref)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    Packit 1c1d7e
                 "anchor=\"%s\" targetTitle=\"%s\""
    Packit 1c1d7e
                 " hasLinkText=\"%s\" refToAnchor=\"%s\" refToSection=\"%s\" refToTable=\"%s\">\n",
    Packit 1c1d7e
                 ref->ref().data(),ref->file().data(),ref->anchor().data(),
    Packit 1c1d7e
                 ref->targetTitle().data(),ref->hasLinkText()?"yes":"no",
    Packit 1c1d7e
                 ref->refToAnchor()?"yes":"no", ref->refToSection()?"yes":"no",
    Packit 1c1d7e
                 ref->refToTable()?"yes":"no");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocRef *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</ref>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSecRefItem *ref)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<secrefitem target=\"%s\">\n",ref->target().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSecRefItem *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</secrefitem>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocSecRefList *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<secreflist>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocSecRefList *) 
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</secreflist>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        //void visitPre(DocLanguage *l)
    Packit 1c1d7e
        //{
    Packit 1c1d7e
        //  indent_pre();
    Packit 1c1d7e
        //  printf("<language id=%s>\n",l->id().data());
    Packit 1c1d7e
        //}
    Packit 1c1d7e
        //void visitPost(DocLanguage *) 
    Packit 1c1d7e
        //{
    Packit 1c1d7e
        //  indent_post();
    Packit 1c1d7e
        //  printf("</language>\n");
    Packit 1c1d7e
        //}
    Packit 1c1d7e
        void visitPre(DocParamList *pl)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          //QStrListIterator sli(pl->parameters());
    Packit 1c1d7e
          QListIterator<DocNode> sli(pl->parameters());
    Packit 1c1d7e
          //const char *s;
    Packit 1c1d7e
          DocNode *param;
    Packit 1c1d7e
          printf("<parameters>");
    Packit 1c1d7e
          for (sli.toFirst();(param=sli.current());++sli)
    Packit 1c1d7e
          {
    Packit 1c1d7e
            printf("<param>");
    Packit 1c1d7e
            if (param->kind()==DocNode::Kind_Word)
    Packit 1c1d7e
            {
    Packit 1c1d7e
              visit((DocWord*)param); 
    Packit 1c1d7e
            }
    Packit 1c1d7e
            else if (param->kind()==DocNode::Kind_LinkedWord)
    Packit 1c1d7e
            {
    Packit 1c1d7e
              visit((DocLinkedWord*)param); 
    Packit 1c1d7e
            }
    Packit 1c1d7e
            printf("</param>");
    Packit 1c1d7e
          }
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocParamList *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</parameters>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocParamSect *ps)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    Packit 1c1d7e
          switch (ps->type())
    Packit 1c1d7e
          {
    Packit 1c1d7e
    	case DocParamSect::Param: printf("param"); break;
    Packit 1c1d7e
    	case DocParamSect::RetVal: printf("retval"); break;
    Packit 1c1d7e
    	case DocParamSect::Exception: printf("exception"); break;
    Packit 1c1d7e
    	case DocParamSect::TemplateParam: printf("templateparam"); break;
    Packit 1c1d7e
    	case DocParamSect::Unknown: printf("unknown"); break;
    Packit 1c1d7e
          }
    Packit 1c1d7e
          printf(">\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocParamSect *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</paramsect>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocXRefItem *x)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<xrefitem file=\"%s\" anchor=\"%s\" title=\"%s\"/>\n",
    Packit 1c1d7e
              x->file().data(),x->anchor().data(),x->title().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocXRefItem *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("<xrefitem/>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocInternalRef *r)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<internalref file=%s anchor=%s>\n",r->file().data(),r->anchor().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocInternalRef *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</internalref>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocCopy *c)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<copy link=\"%s\">\n",c->link().data());
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocCopy *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</copy>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocText *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<text>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocText *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</text>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocHtmlBlockQuote *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("
    \n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocHtmlBlockQuote *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocVhdlFlow *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<vhdlflow>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocVhdlFlow *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</vhdlflow>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPre(DocParBlock *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_pre();
    Packit 1c1d7e
          printf("<parblock>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void visitPost(DocParBlock *)
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent_post();
    Packit 1c1d7e
          printf("</parblock>\n");
    Packit 1c1d7e
        }
    Packit 1c1d7e
    Packit 1c1d7e
      private:
    Packit 1c1d7e
        // helper functions
    Packit 1c1d7e
        void indent() 
    Packit 1c1d7e
        { 
    Packit 1c1d7e
          if (m_needsEnter) printf("\n");
    Packit 1c1d7e
          for (int i=0;i
    Packit 1c1d7e
          m_needsEnter=FALSE;
    Packit 1c1d7e
        } 
    Packit 1c1d7e
        void indent_leaf()
    Packit 1c1d7e
        {
    Packit 1c1d7e
          if (!m_needsEnter) indent();
    Packit 1c1d7e
          m_needsEnter=TRUE;
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void indent_pre()
    Packit 1c1d7e
        {
    Packit 1c1d7e
          indent();
    Packit 1c1d7e
          m_indent++;
    Packit 1c1d7e
        }
    Packit 1c1d7e
        void indent_post()
    Packit 1c1d7e
        {
    Packit 1c1d7e
          m_indent--;
    Packit 1c1d7e
          indent();
    Packit 1c1d7e
        }
    Packit 1c1d7e
        
    Packit 1c1d7e
        // member variables
    Packit 1c1d7e
        int m_indent;
    Packit 1c1d7e
        bool m_needsEnter;
    Packit 1c1d7e
        bool m_insidePre;
    Packit 1c1d7e
    };
    Packit 1c1d7e
    Packit 1c1d7e
    #endif