Blame src/mandocvisitor.cpp

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
#include <qfileinfo.h> 
Packit 1c1d7e
Packit 1c1d7e
#include "mandocvisitor.h"
Packit 1c1d7e
#include "docparser.h"
Packit 1c1d7e
#include "language.h"
Packit 1c1d7e
#include "doxygen.h"
Packit 1c1d7e
#include "outputgen.h"
Packit 1c1d7e
#include "code.h"
Packit 1c1d7e
#include "dot.h"
Packit 1c1d7e
#include "util.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
#include "parserintf.h"
Packit 1c1d7e
#include "filedef.h"
Packit 1c1d7e
#include "htmlentity.h"
Packit 1c1d7e
Packit 1c1d7e
ManDocVisitor::ManDocVisitor(FTextStream &t,CodeOutputInterface &ci,
Packit 1c1d7e
                             const char *langExt) 
Packit 1c1d7e
  : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(FALSE),
Packit 1c1d7e
    m_indent(0), m_langExt(langExt)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
  //--------------------------------------
Packit 1c1d7e
  // visitor functions for leaf nodes
Packit 1c1d7e
  //--------------------------------------
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocWord *w)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  filter(w->word());
Packit 1c1d7e
  m_firstCol=FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocLinkedWord *w)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  filter(w->word());
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
  m_firstCol=FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocWhiteSpace *w)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (m_insidePre)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << w->chars();
Packit 1c1d7e
    m_firstCol=w->chars().at(w->chars().length()-1)=='\n';
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << " ";
Packit 1c1d7e
    m_firstCol=FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocSymbol *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  const char *res = HtmlEntityMapper::instance()->man(s->symbol());
Packit 1c1d7e
  if (res)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << res;
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    // no error or warning to be supplied
Packit 1c1d7e
    // err("man: non supported HTML-entity found: &%;;\n",get_symbol_item(s->symbol()));
Packit 1c1d7e
  }
Packit 1c1d7e
  m_firstCol=FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocURL *u)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << u->url();
Packit 1c1d7e
  m_firstCol=FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocLineBreak *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << endl << ".br" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocHorRuler *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocStyleChange *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  switch (s->style())
Packit 1c1d7e
  {
Packit 1c1d7e
    case DocStyleChange::Bold:
Packit 1c1d7e
      if (s->enable()) m_t << "\\fB";      else m_t << "\\fP";
Packit 1c1d7e
      m_firstCol=FALSE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Italic:
Packit 1c1d7e
      if (s->enable()) m_t << "\\fI";     else m_t << "\\fP";
Packit 1c1d7e
      m_firstCol=FALSE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Code:
Packit 1c1d7e
      if (s->enable()) m_t << "\\fC";   else m_t << "\\fP";
Packit 1c1d7e
      m_firstCol=FALSE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Subscript:
Packit 1c1d7e
      if (s->enable()) m_t << "\\*<";    else m_t << "\\*> ";
Packit 1c1d7e
      m_firstCol=FALSE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Superscript:
Packit 1c1d7e
      if (s->enable()) m_t << "\\*{";    else m_t << "\\*} ";
Packit 1c1d7e
      m_firstCol=FALSE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Center:
Packit 1c1d7e
      /* not supported */
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Small:
Packit 1c1d7e
      /* not supported */
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Preformatted:
Packit 1c1d7e
      if (s->enable())
Packit 1c1d7e
      {
Packit 1c1d7e
        if (!m_firstCol) m_t << endl;
Packit 1c1d7e
        m_t << ".PP" << endl;
Packit 1c1d7e
        m_t << ".nf" << endl;
Packit 1c1d7e
        m_insidePre=TRUE;
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        m_insidePre=FALSE;
Packit 1c1d7e
        if (!m_firstCol) m_t << endl;
Packit 1c1d7e
        m_t << ".fi" << endl;
Packit 1c1d7e
        m_t << ".PP" << endl;
Packit 1c1d7e
        m_firstCol=TRUE;
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocStyleChange::Div:  /* HTML only */ break;
Packit 1c1d7e
    case DocStyleChange::Span: /* HTML only */ break;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocVerbatim *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  QCString lang = m_langExt;
Packit 1c1d7e
  if (!s->language().isEmpty()) // explicit language setting
Packit 1c1d7e
  {
Packit 1c1d7e
    lang = s->language();
Packit 1c1d7e
  }
Packit 1c1d7e
  SrcLangExt langExt = getLanguageFromFileName(lang);
Packit 1c1d7e
  switch (s->type())
Packit 1c1d7e
  {
Packit 1c1d7e
    case DocVerbatim::Code: // fall though
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
      Doxygen::parserManager->getParser(lang)
Packit 1c1d7e
                            ->parseCode(m_ci,s->context(),s->text(),
Packit 1c1d7e
                                        langExt,
Packit 1c1d7e
                                        s->isExample(),s->exampleFile());
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocVerbatim::Verbatim: 
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
      m_t << s->text();
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocVerbatim::ManOnly: 
Packit 1c1d7e
      m_t << s->text(); 
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocVerbatim::HtmlOnly: 
Packit 1c1d7e
    case DocVerbatim::XmlOnly: 
Packit 1c1d7e
    case DocVerbatim::LatexOnly: 
Packit 1c1d7e
    case DocVerbatim::RtfOnly:
Packit 1c1d7e
    case DocVerbatim::DocbookOnly:
Packit 1c1d7e
    case DocVerbatim::Dot: 
Packit 1c1d7e
    case DocVerbatim::Msc: 
Packit 1c1d7e
    case DocVerbatim::PlantUML: 
Packit 1c1d7e
      /* nothing */ 
Packit 1c1d7e
      break;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocAnchor *)
Packit 1c1d7e
{
Packit 1c1d7e
  /* no support for anchors in man pages */
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocInclude *inc)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  SrcLangExt langExt = getLanguageFromFileName(inc->extension());
Packit 1c1d7e
  switch(inc->type())
Packit 1c1d7e
  {
Packit 1c1d7e
    case DocInclude::IncWithLines:
Packit 1c1d7e
      { 
Packit 1c1d7e
         if (!m_firstCol) m_t << endl;
Packit 1c1d7e
         m_t << ".PP" << endl;
Packit 1c1d7e
         m_t << ".nf" << endl;
Packit 1c1d7e
         QFileInfo cfi( inc->file() );
Packit 1c1d7e
         FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Packit 1c1d7e
         Doxygen::parserManager->getParser(inc->extension())
Packit 1c1d7e
                               ->parseCode(m_ci,inc->context(),
Packit 1c1d7e
                                           inc->text(),
Packit 1c1d7e
                                           langExt,
Packit 1c1d7e
                                           inc->isExample(),
Packit 1c1d7e
                                           inc->exampleFile(),
Packit 1c1d7e
                                           &fd,   // fileDef,
Packit 1c1d7e
                                           -1,    // start line
Packit 1c1d7e
                                           -1,    // end line
Packit 1c1d7e
                                           FALSE, // inline fragment
Packit 1c1d7e
                                           0,     // memberDef
Packit 1c1d7e
                                           TRUE
Packit 1c1d7e
					   );
Packit 1c1d7e
         if (!m_firstCol) m_t << endl;
Packit 1c1d7e
         m_t << ".fi" << endl;
Packit 1c1d7e
         m_t << ".PP" << endl;
Packit 1c1d7e
         m_firstCol=TRUE;
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::Include: 
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
      Doxygen::parserManager->getParser(inc->extension())
Packit 1c1d7e
                            ->parseCode(m_ci,inc->context(),
Packit 1c1d7e
                                        inc->text(),
Packit 1c1d7e
                                        langExt,
Packit 1c1d7e
                                        inc->isExample(),
Packit 1c1d7e
                                        inc->exampleFile(),
Packit 1c1d7e
                                        0,     // fileDef
Packit 1c1d7e
                                        -1,    // startLine
Packit 1c1d7e
                                        -1,    // endLine
Packit 1c1d7e
                                        TRUE,  // inlineFragment
Packit 1c1d7e
                                        0,     // memberDef
Packit 1c1d7e
                                        FALSE
Packit 1c1d7e
				       );
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::DontInclude: 
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::HtmlInclude: 
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::LatexInclude:
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::VerbInclude: 
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
      m_t << inc->text();
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::Snippet:
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
      Doxygen::parserManager->getParser(inc->extension())
Packit 1c1d7e
                            ->parseCode(m_ci,
Packit 1c1d7e
                                        inc->context(),
Packit 1c1d7e
                                        extractBlock(inc->text(),inc->blockId()),
Packit 1c1d7e
                                        langExt,
Packit 1c1d7e
                                        inc->isExample(),
Packit 1c1d7e
                                        inc->exampleFile()
Packit 1c1d7e
                                       );
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
      break;
Packit 1c1d7e
    case DocInclude::SnipWithLines:
Packit 1c1d7e
      {
Packit 1c1d7e
         if (!m_firstCol) m_t << endl;
Packit 1c1d7e
         m_t << ".PP" << endl;
Packit 1c1d7e
         m_t << ".nf" << endl;
Packit 1c1d7e
         QFileInfo cfi( inc->file() );
Packit 1c1d7e
         FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Packit 1c1d7e
         Doxygen::parserManager->getParser(inc->extension())
Packit 1c1d7e
                               ->parseCode(m_ci,
Packit 1c1d7e
                                           inc->context(),
Packit 1c1d7e
                                           extractBlock(inc->text(),inc->blockId()),
Packit 1c1d7e
                                           langExt,
Packit 1c1d7e
                                           inc->isExample(),
Packit 1c1d7e
                                           inc->exampleFile(), 
Packit 1c1d7e
                                           &fd,
Packit 1c1d7e
                                           lineBlock(inc->text(),inc->blockId()),
Packit 1c1d7e
                                           -1,    // endLine
Packit 1c1d7e
                                           FALSE, // inlineFragment
Packit 1c1d7e
                                           0,     // memberDef
Packit 1c1d7e
                                           TRUE   // show line number
Packit 1c1d7e
                                          );
Packit 1c1d7e
         if (!m_firstCol) m_t << endl;
Packit 1c1d7e
         m_t << ".fi" << endl;
Packit 1c1d7e
         m_t << ".PP" << endl;
Packit 1c1d7e
         m_firstCol=TRUE;
Packit 1c1d7e
      }
Packit 1c1d7e
      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
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocIncOperator *op)
Packit 1c1d7e
{
Packit 1c1d7e
  SrcLangExt langExt = getLanguageFromFileName(m_langExt);
Packit 1c1d7e
  //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
Packit 1c1d7e
  //    op->type(),op->isFirst(),op->isLast(),op->text().data());
Packit 1c1d7e
  if (op->isFirst()) 
Packit 1c1d7e
  {
Packit 1c1d7e
    if (!m_hide)
Packit 1c1d7e
    {
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_t << ".nf" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
    pushEnabled();
Packit 1c1d7e
    m_hide = TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
  if (op->type()!=DocIncOperator::Skip) 
Packit 1c1d7e
  {
Packit 1c1d7e
    popEnabled();
Packit 1c1d7e
    if (!m_hide) 
Packit 1c1d7e
    {
Packit 1c1d7e
      Doxygen::parserManager->getParser(m_langExt)
Packit 1c1d7e
                            ->parseCode(m_ci,op->context(),op->text(),langExt,
Packit 1c1d7e
                                        op->isExample(),op->exampleFile());
Packit 1c1d7e
    }
Packit 1c1d7e
    pushEnabled();
Packit 1c1d7e
    m_hide=TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
  if (op->isLast())  
Packit 1c1d7e
  {
Packit 1c1d7e
    popEnabled();
Packit 1c1d7e
    if (!m_hide)
Packit 1c1d7e
    {
Packit 1c1d7e
      if (!m_firstCol) m_t << endl;
Packit 1c1d7e
      m_t << ".fi" << endl;
Packit 1c1d7e
      m_t << ".PP" << endl;
Packit 1c1d7e
      m_firstCol=TRUE;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    if (!m_hide) m_t << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocFormula *f)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << f->text();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocIndexEntry *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocSimpleSectSep *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visit(DocCite *cite)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  if (cite->file().isEmpty()) m_t << "[";
Packit 1c1d7e
  filter(cite->text());
Packit 1c1d7e
  if (cite->file().isEmpty()) m_t << "]";
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
//--------------------------------------
Packit 1c1d7e
// visitor functions for compound nodes
Packit 1c1d7e
//--------------------------------------
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocAutoList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent+=2;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocAutoList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent-=2;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocAutoListItem *li)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  QCString ws;
Packit 1c1d7e
  ws.fill(' ',m_indent-2);
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".IP \"" << ws; 
Packit 1c1d7e
  if (((DocAutoList *)li->parent())->isEnumList())
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << li->itemNumber() << ".\" " << m_indent+2;
Packit 1c1d7e
  }
Packit 1c1d7e
  else // bullet list
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << "\\(bu\" " << m_indent;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocAutoListItem *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocPara *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocPara *p)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!p->isLast() &&            // omit 

for last paragraph

Packit 1c1d7e
      !(p->parent() &&           // and for parameter sections
Packit 1c1d7e
        p->parent()->kind()==DocNode::Kind_ParamSect
Packit 1c1d7e
       )
Packit 1c1d7e
     ) 
Packit 1c1d7e
  {
Packit 1c1d7e
    if (!m_firstCol) m_t << endl;
Packit 1c1d7e
    m_t << ".PP" << endl;
Packit 1c1d7e
    m_firstCol=TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocRoot *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocRoot *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSimpleSect *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol)
Packit 1c1d7e
  { 
Packit 1c1d7e
    m_t << endl;
Packit 1c1d7e
    m_t << ".PP" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  switch(s->type())
Packit 1c1d7e
  {
Packit 1c1d7e
    case DocSimpleSect::See: 
Packit 1c1d7e
      m_t << theTranslator->trSeeAlso(); break;
Packit 1c1d7e
    case DocSimpleSect::Return: 
Packit 1c1d7e
      m_t << theTranslator->trReturns(); break;
Packit 1c1d7e
    case DocSimpleSect::Author: 
Packit 1c1d7e
      m_t << theTranslator->trAuthor(TRUE,TRUE); break;
Packit 1c1d7e
    case DocSimpleSect::Authors: 
Packit 1c1d7e
      m_t << theTranslator->trAuthor(TRUE,FALSE); break;
Packit 1c1d7e
    case DocSimpleSect::Version: 
Packit 1c1d7e
      m_t << theTranslator->trVersion(); break;
Packit 1c1d7e
    case DocSimpleSect::Since: 
Packit 1c1d7e
      m_t << theTranslator->trSince(); break;
Packit 1c1d7e
    case DocSimpleSect::Date: 
Packit 1c1d7e
      m_t << theTranslator->trDate(); break;
Packit 1c1d7e
    case DocSimpleSect::Note: 
Packit 1c1d7e
      m_t << theTranslator->trNote(); break;
Packit 1c1d7e
    case DocSimpleSect::Warning:
Packit 1c1d7e
      m_t << theTranslator->trWarning(); break;
Packit 1c1d7e
    case DocSimpleSect::Pre:
Packit 1c1d7e
      m_t << theTranslator->trPrecondition(); break;
Packit 1c1d7e
    case DocSimpleSect::Post:
Packit 1c1d7e
      m_t << theTranslator->trPostcondition(); break;
Packit 1c1d7e
    case DocSimpleSect::Copyright:
Packit 1c1d7e
      m_t << theTranslator->trCopyright(); break;
Packit 1c1d7e
    case DocSimpleSect::Invar:
Packit 1c1d7e
      m_t << theTranslator->trInvariant(); break;
Packit 1c1d7e
    case DocSimpleSect::Remark:
Packit 1c1d7e
      m_t << theTranslator->trRemarks(); break;
Packit 1c1d7e
    case DocSimpleSect::Attention:
Packit 1c1d7e
      m_t << theTranslator->trAttention(); break;
Packit 1c1d7e
    case DocSimpleSect::User: break;
Packit 1c1d7e
    case DocSimpleSect::Rcs: break;
Packit 1c1d7e
    case DocSimpleSect::Unknown:  break;
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  // special case 1: user defined title
Packit 1c1d7e
  if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << ":\\fP" << endl;
Packit 1c1d7e
    m_t << ".RS 4" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSimpleSect *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".RE" << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocTitle *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocTitle *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP" << endl;
Packit 1c1d7e
  m_t << ".RS 4" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSimpleList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent+=2;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PD 0" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSimpleList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent-=2;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSimpleListItem *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  QCString ws;
Packit 1c1d7e
  ws.fill(' ',m_indent-2);
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSimpleListItem *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSection *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  if (s->level()==1) m_t << ".SH"; else m_t << ".SS";
Packit 1c1d7e
  m_t << " \"";
Packit 1c1d7e
  filter(s->title());
Packit 1c1d7e
  m_t << "\"" << endl;
Packit 1c1d7e
  if (s->level()==1) m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSection *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent+=2;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PD 0" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlList *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent-=2;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlListItem *li)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  QCString ws;
Packit 1c1d7e
  ws.fill(' ',m_indent-2);
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".IP \"" << ws; 
Packit 1c1d7e
  if (((DocHtmlList *)li->parent())->type()==DocHtmlList::Ordered)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << li->itemNumber() << ".\" " << m_indent+2;
Packit 1c1d7e
  }
Packit 1c1d7e
  else // bullet list
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << "\\(bu\" " << m_indent;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlListItem *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void ManDocVisitor::visitPre(DocHtmlPre *)
Packit 1c1d7e
//{
Packit 1c1d7e
//  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
//  m_t << ".PP" << endl;
Packit 1c1d7e
//  m_t << ".nf" << endl;
Packit 1c1d7e
//  m_insidePre=TRUE;
Packit 1c1d7e
//}
Packit 1c1d7e
//
Packit 1c1d7e
//void ManDocVisitor::visitPost(DocHtmlPre *) 
Packit 1c1d7e
//{
Packit 1c1d7e
//  m_insidePre=FALSE;
Packit 1c1d7e
//  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
//  m_t << ".fi" << endl;
Packit 1c1d7e
//  m_t << ".PP" << endl;
Packit 1c1d7e
//  m_firstCol=TRUE;
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlDescList *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlDescList *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlDescTitle *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".IP \"\\fB";
Packit 1c1d7e
  m_firstCol=FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlDescTitle *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP\" 1c" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlDescData *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlDescData *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlTable *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlTable *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlCaption *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlCaption *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlRow *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlRow *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlCell *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlCell *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocInternal *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  //if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  //m_t << ".PP" << endl;
Packit 1c1d7e
  //m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl;
Packit 1c1d7e
  //m_t << ".RS 4" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocInternal *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  //if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  //m_t << ".RE" << endl;
Packit 1c1d7e
  //m_t << ".PP" << endl;
Packit 1c1d7e
  //m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHRef *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fC";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHRef *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlHeader *header)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  if (header->level()==1) m_t << ".SH"; else m_t << ".SS";
Packit 1c1d7e
  m_t << " \"";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlHeader *header) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\"" << endl;
Packit 1c1d7e
  if (header->level()==1) m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocImage *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocImage *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocDotFile *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocDotFile *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
void ManDocVisitor::visitPre(DocMscFile *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocMscFile *) 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocDiaFile *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocDiaFile *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocLink *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocLink *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocRef *ref)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  if (!ref->hasLinkText()) filter(ref->targetTitle());
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocRef *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSecRefItem *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  QCString ws;
Packit 1c1d7e
  ws.fill(' ',m_indent-2);
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSecRefItem *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocSecRefList *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent+=2;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocSecRefList *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_indent-=2;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void ManDocVisitor::visitPre(DocLanguage *l)
Packit 1c1d7e
//{
Packit 1c1d7e
//  QString langId = Config_getEnum(OUTPUT_LANGUAGE);
Packit 1c1d7e
//  if (l->id().lower()!=langId.lower())
Packit 1c1d7e
//  {
Packit 1c1d7e
//    pushEnabled();
Packit 1c1d7e
//    m_hide = TRUE;
Packit 1c1d7e
//  }
Packit 1c1d7e
//}
Packit 1c1d7e
//
Packit 1c1d7e
//void ManDocVisitor::visitPost(DocLanguage *l) 
Packit 1c1d7e
//{
Packit 1c1d7e
//  QString langId = Config_getEnum(OUTPUT_LANGUAGE);
Packit 1c1d7e
//  if (l->id().lower()!=langId.lower())
Packit 1c1d7e
//  {
Packit 1c1d7e
//    popEnabled();
Packit 1c1d7e
//  }
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocParamSect *s)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol)
Packit 1c1d7e
  { 
Packit 1c1d7e
    m_t << endl;
Packit 1c1d7e
    m_t << ".PP" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  switch(s->type())
Packit 1c1d7e
  {
Packit 1c1d7e
    case DocParamSect::Param: 
Packit 1c1d7e
      m_t << theTranslator->trParameters(); break;
Packit 1c1d7e
    case DocParamSect::RetVal: 
Packit 1c1d7e
      m_t << theTranslator->trReturnValues(); break;
Packit 1c1d7e
    case DocParamSect::Exception: 
Packit 1c1d7e
      m_t << theTranslator->trExceptions(); break;
Packit 1c1d7e
    case DocParamSect::TemplateParam: 
Packit 1c1d7e
      /* TODO: add this 
Packit 1c1d7e
      m_t << theTranslator->trTemplateParam(); break;
Packit 1c1d7e
      */
Packit 1c1d7e
      m_t << "Template Parameters"; break;
Packit 1c1d7e
    default:
Packit 1c1d7e
      ASSERT(0);
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << ":\\fP" << endl;
Packit 1c1d7e
  m_t << ".RS 4" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocParamSect *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".RE" << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocParamList *pl)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fI";
Packit 1c1d7e
  //QStrListIterator li(pl->parameters());
Packit 1c1d7e
  //const char *s;
Packit 1c1d7e
  QListIterator<DocNode> li(pl->parameters());
Packit 1c1d7e
  DocNode *param;
Packit 1c1d7e
  bool first=TRUE;
Packit 1c1d7e
  for (li.toFirst();(param=li.current());++li)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (!first) m_t << ","; else first=FALSE;
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
  }
Packit 1c1d7e
  m_t << "\\fP ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocParamList *pl)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!pl->isLast())
Packit 1c1d7e
  {
Packit 1c1d7e
    if (!m_firstCol) m_t << endl;
Packit 1c1d7e
    m_t << ".br" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocXRefItem *x)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (x->title().isEmpty()) return;
Packit 1c1d7e
  if (!m_firstCol)
Packit 1c1d7e
  { 
Packit 1c1d7e
    m_t << endl;
Packit 1c1d7e
    m_t << ".PP" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
  filter(x->title());
Packit 1c1d7e
  m_t << "\\fP" << endl;
Packit 1c1d7e
  m_t << ".RS 4" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocXRefItem *x)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (x->title().isEmpty()) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".RE" << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocInternalRef *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fB";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocInternalRef *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  m_t << "\\fP";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocCopy *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocCopy *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocText *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocText *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocHtmlBlockQuote *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol)
Packit 1c1d7e
  { 
Packit 1c1d7e
    m_t << endl;
Packit 1c1d7e
    m_t << ".PP" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_t << ".RS 4" << endl; // TODO: add support for nested block quotes
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocHtmlBlockQuote *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (m_hide) return;
Packit 1c1d7e
  if (!m_firstCol) m_t << endl;
Packit 1c1d7e
  m_t << ".RE" << endl;
Packit 1c1d7e
  m_t << ".PP" << endl;
Packit 1c1d7e
  m_firstCol=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocVhdlFlow *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocVhdlFlow *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPre(DocParBlock *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::visitPost(DocParBlock *)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::filter(const char *str)
Packit 1c1d7e
{ 
Packit 1c1d7e
  if (str)
Packit 1c1d7e
  {
Packit 1c1d7e
    const char *p=str;
Packit 1c1d7e
    char c=0;
Packit 1c1d7e
    while ((c=*p++)) 
Packit 1c1d7e
    {
Packit 1c1d7e
      switch(c)
Packit 1c1d7e
      {
Packit 1c1d7e
        case '.':  m_t << "\\&.;; break; // see  bug652277
Packit 1c1d7e
        case '\\': m_t << "\\\\"; break;
Packit 1c1d7e
        case '"':  c = '\''; // fall through
Packit 1c1d7e
        default: m_t << c; break;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::pushEnabled()
Packit 1c1d7e
{
Packit 1c1d7e
  m_enabled.push(new bool(m_hide));
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void ManDocVisitor::popEnabled()
Packit 1c1d7e
{
Packit 1c1d7e
  bool *v=m_enabled.pop();
Packit 1c1d7e
  ASSERT(v!=0);
Packit 1c1d7e
  m_hide = *v;
Packit 1c1d7e
  delete v;
Packit 1c1d7e
}
Packit 1c1d7e