Blame src/latexgen.cpp

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 <stdlib.h>
Packit 1c1d7e
Packit 1c1d7e
#include <qdir.h>
Packit 1c1d7e
#include "latexgen.h"
Packit 1c1d7e
#include "config.h"
Packit 1c1d7e
#include "message.h"
Packit 1c1d7e
#include "doxygen.h"
Packit 1c1d7e
#include "util.h"
Packit 1c1d7e
#include "diagram.h"
Packit 1c1d7e
#include "language.h"
Packit 1c1d7e
#include "version.h"
Packit 1c1d7e
#include "dot.h"
Packit 1c1d7e
#include "pagedef.h"
Packit 1c1d7e
#include "docparser.h"
Packit 1c1d7e
#include "latexdocvisitor.h"
Packit 1c1d7e
#include "dirdef.h"
Packit 1c1d7e
#include "cite.h"
Packit 1c1d7e
#include "groupdef.h"
Packit 1c1d7e
#include "classlist.h"
Packit 1c1d7e
#include "namespacedef.h"
Packit 1c1d7e
#include "filename.h"
Packit 1c1d7e
#include "resourcemgr.h"
Packit 1c1d7e
Packit 1c1d7e
//-------------------------------
Packit 1c1d7e
Packit 1c1d7e
LatexCodeGenerator::LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFileName)
Packit 1c1d7e
  : m_relPath(relPath), m_sourceFileName(sourceFileName), m_col(0)
Packit 1c1d7e
{
Packit 1c1d7e
  m_prettyCode=Config_getBool(LATEX_SOURCE_CODE);
Packit 1c1d7e
  setTextStream(t);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
LatexCodeGenerator::LatexCodeGenerator() : m_streamSet(FALSE), m_col(0)
Packit 1c1d7e
{
Packit 1c1d7e
  m_prettyCode=Config_getBool(LATEX_SOURCE_CODE);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::setTextStream(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  m_streamSet = t.device()!=0;
Packit 1c1d7e
  m_t.setDevice(t.device());
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::setRelativePath(const QCString &path)
Packit 1c1d7e
{
Packit 1c1d7e
  m_relPath = path;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::setSourceFileName(const QCString &name)
Packit 1c1d7e
{
Packit 1c1d7e
  m_sourceFileName = name;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::codify(const char *str)
Packit 1c1d7e
{
Packit 1c1d7e
  if (str)
Packit 1c1d7e
  {
Packit 1c1d7e
    const char *p=str;
Packit 1c1d7e
    char c;
Packit 1c1d7e
    //char cs[5];
Packit 1c1d7e
    int spacesToNextTabStop;
Packit 1c1d7e
    static int tabSize = Config_getInt(TAB_SIZE);
Packit 1c1d7e
    const int maxLineLen = 108;
Packit 1c1d7e
    QCString result(4*maxLineLen+1); // worst case for 1 line of 4-byte chars
Packit 1c1d7e
    int i;
Packit 1c1d7e
    while ((c=*p))
Packit 1c1d7e
    {
Packit 1c1d7e
      switch(c)
Packit 1c1d7e
      {
Packit 1c1d7e
        case 0x0c: p++;  // remove ^L
Packit 1c1d7e
                   break;
Packit 1c1d7e
        case '\t': spacesToNextTabStop =
Packit 1c1d7e
                         tabSize - (m_col%tabSize);
Packit 1c1d7e
                   m_t << Doxygen::spaces.left(spacesToNextTabStop);
Packit 1c1d7e
                   m_col+=spacesToNextTabStop;
Packit 1c1d7e
                   p++;
Packit 1c1d7e
                   break;
Packit 1c1d7e
        case '\n': m_t << '\n'; m_col=0; p++;
Packit 1c1d7e
                   break;
Packit 1c1d7e
        default:
Packit 1c1d7e
                   i=0;
Packit 1c1d7e
Packit 1c1d7e
#undef  COPYCHAR
Packit 1c1d7e
// helper macro to copy a single utf8 character, dealing with multibyte chars.
Packit 1c1d7e
#define COPYCHAR() do {                                           \
Packit 1c1d7e
                     result[i++]=c; p++;                          \
Packit 1c1d7e
                     if (c<0) /* multibyte utf-8 character */     \
Packit 1c1d7e
                     {                                            \
Packit 1c1d7e
                       /* 1xxx.xxxx: >=2 byte character */        \
Packit 1c1d7e
                       result[i++]=*p++;                          \
Packit 1c1d7e
                       if (((uchar)c&0xE0)==0xE0)                 \
Packit 1c1d7e
                       {                                          \
Packit 1c1d7e
                         /* 111x.xxxx: >=3 byte character */      \
Packit 1c1d7e
                         result[i++]=*p++;                        \
Packit 1c1d7e
                       }                                          \
Packit 1c1d7e
                       if (((uchar)c&0xF0)==0xF0)                 \
Packit 1c1d7e
                       {                                          \
Packit 1c1d7e
                         /* 1111.xxxx: 4 byte character */        \
Packit 1c1d7e
                         result[i++]=*p++;                        \
Packit 1c1d7e
                       }                                          \
Packit 1c1d7e
                     }                                            \
Packit 1c1d7e
                     m_col++;                                       \
Packit 1c1d7e
                   } while(0)
Packit 1c1d7e
Packit 1c1d7e
                   // gather characters until we find whitespace or are at
Packit 1c1d7e
                   // the end of a line
Packit 1c1d7e
                   COPYCHAR();
Packit 1c1d7e
                   if (m_col>=maxLineLen) // force line break
Packit 1c1d7e
                   {
Packit 1c1d7e
                     m_t << "\n      ";
Packit 1c1d7e
                     m_col=0;
Packit 1c1d7e
                   }
Packit 1c1d7e
                   else // copy more characters
Packit 1c1d7e
                   {
Packit 1c1d7e
                     while (m_col
Packit 1c1d7e
                            c!=0x0c && c!='\t' && c!='\n' && c!=' '
Packit 1c1d7e
                           )
Packit 1c1d7e
                     {
Packit 1c1d7e
                       COPYCHAR();
Packit 1c1d7e
                     }
Packit 1c1d7e
                     if (m_col>=maxLineLen) // force line break
Packit 1c1d7e
                     {
Packit 1c1d7e
                       m_t << "\n      ";
Packit 1c1d7e
                       m_col=0;
Packit 1c1d7e
                     }
Packit 1c1d7e
                   }
Packit 1c1d7e
                   result[i]=0; // add terminator
Packit 1c1d7e
                   //if (m_prettyCode)
Packit 1c1d7e
                   //{
Packit 1c1d7e
                     filterLatexString(m_t,result,FALSE,TRUE);
Packit 1c1d7e
                   //}
Packit 1c1d7e
                   //else
Packit 1c1d7e
                   //{
Packit 1c1d7e
                   //  t << result;
Packit 1c1d7e
                   //}
Packit 1c1d7e
                   break;
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::writeCodeLink(const char *ref,const char *f,
Packit 1c1d7e
                                   const char *anchor,const char *name,
Packit 1c1d7e
                                   const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  static bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  int l = qstrlen(name);
Packit 1c1d7e
  if (m_col+l>80)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << "\n      ";
Packit 1c1d7e
    m_col=0;
Packit 1c1d7e
  }
Packit 1c1d7e
  if (!ref && usePDFLatex && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << "\\mbox{\\hyperlink{";
Packit 1c1d7e
    if (f) m_t << stripPath(f);
Packit 1c1d7e
    if (f && anchor) m_t << "_"; 
Packit 1c1d7e
    if (anchor) m_t << anchor; 
Packit 1c1d7e
    m_t << "}{";
Packit 1c1d7e
    codify(name);
Packit 1c1d7e
    m_t << "}}";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << name;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_col+=l;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,const char *anchor,int l)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool usePDFLatex = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  if (m_prettyCode)
Packit 1c1d7e
  {
Packit 1c1d7e
    QCString lineNumber;
Packit 1c1d7e
    lineNumber.sprintf("%05d",l);
Packit 1c1d7e
Packit 1c1d7e
    if (fileName && !m_sourceFileName.isEmpty())
Packit 1c1d7e
    {
Packit 1c1d7e
      QCString lineAnchor;
Packit 1c1d7e
      lineAnchor.sprintf("_l%05d",l);
Packit 1c1d7e
      lineAnchor.prepend(stripExtensionGeneral(m_sourceFileName, ".tex"));
Packit 1c1d7e
      //if (!m_prettyCode) return;
Packit 1c1d7e
      if (usePDFLatex && pdfHyperlinks)
Packit 1c1d7e
      {
Packit 1c1d7e
        m_t << "\\Hypertarget{" << stripPath(lineAnchor) << "}";
Packit 1c1d7e
      }
Packit 1c1d7e
      writeCodeLink(ref,fileName,anchor,lineNumber,0);
Packit 1c1d7e
    }
Packit 1c1d7e
    else
Packit 1c1d7e
    {
Packit 1c1d7e
      codify(lineNumber);
Packit 1c1d7e
    }
Packit 1c1d7e
    m_t << " ";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    m_t << l << " ";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::startCodeLine(bool)
Packit 1c1d7e
{
Packit 1c1d7e
  m_col=0;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::endCodeLine()
Packit 1c1d7e
{
Packit 1c1d7e
  codify("\n");
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::startFontClass(const char *name)
Packit 1c1d7e
{
Packit 1c1d7e
  m_t << "\\textcolor{" << name << "}{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexCodeGenerator::endFontClass()
Packit 1c1d7e
{
Packit 1c1d7e
  m_t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
//-------------------------------
Packit 1c1d7e
Packit 1c1d7e
LatexGenerator::LatexGenerator() : OutputGenerator()
Packit 1c1d7e
{
Packit 1c1d7e
  dir=Config_getString(LATEX_OUTPUT);
Packit 1c1d7e
  //printf("LatexGenerator::LatexGenerator() insideTabbing=FALSE\n");
Packit 1c1d7e
  insideTabbing=FALSE;
Packit 1c1d7e
  firstDescItem=TRUE;
Packit 1c1d7e
  disableLinks=FALSE;
Packit 1c1d7e
  m_indent=0;
Packit 1c1d7e
  templateMemberItem = FALSE;
Packit 1c1d7e
  m_prettyCode=Config_getBool(LATEX_SOURCE_CODE);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
LatexGenerator::~LatexGenerator()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeLatexMakefile()
Packit 1c1d7e
{
Packit 1c1d7e
  bool generateBib = !Doxygen::citeDict->isEmpty();
Packit 1c1d7e
  QCString dir=Config_getString(LATEX_OUTPUT);
Packit 1c1d7e
  QCString fileName=dir+"/Makefile";
Packit 1c1d7e
  QFile file(fileName);
Packit 1c1d7e
  if (!file.open(IO_WriteOnly))
Packit 1c1d7e
  {
Packit 1c1d7e
    err("Could not open file %s for writing\n",fileName.data());
Packit 1c1d7e
    exit(1);
Packit 1c1d7e
  }
Packit 1c1d7e
  // inserted by KONNO Akihisa <konno@researchers.jp> 2002-03-05
Packit 1c1d7e
  QCString latex_command = Config_getString(LATEX_CMD_NAME);
Packit 1c1d7e
  QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME);
Packit 1c1d7e
  // end insertion by KONNO Akihisa <konno@researchers.jp> 2002-03-05
Packit 1c1d7e
  FTextStream t(&file;;
Packit 1c1d7e
  if (!Config_getBool(USE_PDFLATEX)) // use plain old latex
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "all: refman.dvi" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "ps: refman.ps" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "pdf: refman.pdf" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "ps_2on1: refman_2on1.ps" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "pdf_2on1: refman_2on1.pdf" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "refman.ps: refman.dvi" << endl
Packit 1c1d7e
      << "\tdvips -o refman.ps refman.dvi" << endl
Packit 1c1d7e
      << endl;
Packit 1c1d7e
    t << "refman.pdf: refman.ps" << endl;
Packit 1c1d7e
    t << "\tps2pdf refman.ps refman.pdf" << endl << endl;
Packit 1c1d7e
    t << "refman.dvi: clean refman.tex doxygen.sty" << endl
Packit 1c1d7e
      << "\techo \"Running latex...\"" << endl
Packit 1c1d7e
      << "\t" << latex_command << " refman.tex" << endl
Packit 1c1d7e
      << "\techo \"Running makeindex...\"" << endl
Packit 1c1d7e
      << "\t" << mkidx_command << " refman.idx" << endl;
Packit 1c1d7e
    if (generateBib)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "\techo \"Running bibtex...\"" << endl;
Packit 1c1d7e
      t << "\tbibtex refman" << endl;
Packit 1c1d7e
      t << "\techo \"Rerunning latex....\"" << endl;
Packit 1c1d7e
      t << "\t" << latex_command << " refman.tex" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "\techo \"Rerunning latex....\"" << endl
Packit 1c1d7e
      << "\t" << latex_command << " refman.tex" << endl
Packit 1c1d7e
      << "\tlatex_count=8 ; \\" << endl
Packit 1c1d7e
      << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
Packit 1c1d7e
      << "\t    do \\" << endl
Packit 1c1d7e
      << "\t      echo \"Rerunning latex....\" ;\\" << endl
Packit 1c1d7e
      << "\t      " << latex_command << " refman.tex ;\\" << endl
Packit 1c1d7e
      << "\t      latex_count=`expr $$latex_count - 1` ;\\" << endl
Packit 1c1d7e
      << "\t    done" << endl
Packit 1c1d7e
      << "\t" << mkidx_command << " refman.idx" << endl
Packit 1c1d7e
      << "\t" << latex_command << " refman.tex" << endl << endl
Packit 1c1d7e
      << "refman_2on1.ps: refman.ps" << endl
Packit 1c1d7e
      << "\tpsnup -2 refman.ps >refman_2on1.ps" << endl
Packit 1c1d7e
      << endl
Packit 1c1d7e
      << "refman_2on1.pdf: refman_2on1.ps" << endl
Packit 1c1d7e
      << "\tps2pdf refman_2on1.ps refman_2on1.pdf" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  else // use pdflatex for higher quality output
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "all: refman.pdf" << endl << endl
Packit 1c1d7e
      << "pdf: refman.pdf" << endl << endl;
Packit 1c1d7e
    t << "refman.pdf: clean refman.tex" << endl;
Packit 1c1d7e
    t << "\tpdflatex refman" << endl;
Packit 1c1d7e
    t << "\t" << mkidx_command << " refman.idx" << endl;
Packit 1c1d7e
    if (generateBib)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "\tbibtex refman" << endl;
Packit 1c1d7e
      t << "\tpdflatex refman" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "\tpdflatex refman" << endl
Packit 1c1d7e
      << "\tlatex_count=8 ; \\" << endl
Packit 1c1d7e
      << "\twhile egrep -s 'Rerun (LaTeX|to get cross-references right)' refman.log && [ $$latex_count -gt 0 ] ;\\" << endl
Packit 1c1d7e
      << "\t    do \\" << endl
Packit 1c1d7e
      << "\t      echo \"Rerunning latex....\" ;\\" << endl
Packit 1c1d7e
      << "\t      pdflatex refman ;\\" << endl
Packit 1c1d7e
      << "\t      latex_count=`expr $$latex_count - 1` ;\\" << endl
Packit 1c1d7e
      << "\t    done" << endl
Packit 1c1d7e
      << "\t" << mkidx_command << " refman.idx" << endl
Packit 1c1d7e
      << "\tpdflatex refman" << endl << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  t << endl
Packit 1c1d7e
    << "clean:" << endl
Packit 1c1d7e
    << "\trm -f " 
Packit 1c1d7e
    << "*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeMakeBat()
Packit 1c1d7e
{
Packit 1c1d7e
#if defined(_MSC_VER)
Packit 1c1d7e
  QCString dir=Config_getString(LATEX_OUTPUT);
Packit 1c1d7e
  QCString fileName=dir+"/make.bat";
Packit 1c1d7e
  QCString latex_command = Config_getString(LATEX_CMD_NAME);
Packit 1c1d7e
  QCString mkidx_command = Config_getString(MAKEINDEX_CMD_NAME);
Packit 1c1d7e
  QFile file(fileName);
Packit 1c1d7e
  bool generateBib = !Doxygen::citeDict->isEmpty();
Packit 1c1d7e
  if (!file.open(IO_WriteOnly))
Packit 1c1d7e
  {
Packit 1c1d7e
    err("Could not open file %s for writing\n",fileName.data());
Packit 1c1d7e
    exit(1);
Packit 1c1d7e
  }
Packit 1c1d7e
  FTextStream t(&file;;
Packit 1c1d7e
  t << "set Dir_Old=%cd%\n";
Packit 1c1d7e
  t << "cd /D %~dp0\n\n";
Packit 1c1d7e
  t << "del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl refman.pdf\n\n";
Packit 1c1d7e
  if (!Config_getBool(USE_PDFLATEX)) // use plain old latex
Packit 1c1d7e
  {
Packit 1c1d7e
    t << latex_command << " refman.tex\n";
Packit 1c1d7e
    t << "echo ----\n";
Packit 1c1d7e
    t << mkidx_command << " refman.idx\n";
Packit 1c1d7e
    if (generateBib)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "bibtex refman\n";
Packit 1c1d7e
      t << "echo ----\n";
Packit 1c1d7e
      t << latex_command << " refman.tex\n";
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "setlocal enabledelayedexpansion\n";
Packit 1c1d7e
    t << "set count=8\n";
Packit 1c1d7e
    t << ":repeat\n";
Packit 1c1d7e
    t << "set content=X\n";
Packit 1c1d7e
    t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
Packit 1c1d7e
    t << "if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" refman.log' ) do set content=\"%%~T\"\n";
Packit 1c1d7e
    t << "if !content! == X goto :skip\n";
Packit 1c1d7e
    t << "set /a count-=1\n";
Packit 1c1d7e
    t << "if !count! EQU 0 goto :skip\n\n";
Packit 1c1d7e
    t << "echo ----\n";
Packit 1c1d7e
    t << latex_command << " refman.tex\n";
Packit 1c1d7e
    t << "goto :repeat\n";
Packit 1c1d7e
    t << ":skip\n";
Packit 1c1d7e
    t << "endlocal\n";
Packit 1c1d7e
    t << mkidx_command << " refman.idx\n";
Packit 1c1d7e
    t << latex_command << " refman.tex\n";
Packit 1c1d7e
    t << "dvips -o refman.ps refman.dvi\n";
Packit 1c1d7e
    t << "gswin32c -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
Packit 1c1d7e
         "-sOutputFile=refman.pdf -c save pop -f refman.ps\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  else // use pdflatex
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "pdflatex refman\n";
Packit 1c1d7e
    t << "echo ----\n";
Packit 1c1d7e
    t << mkidx_command << " refman.idx\n";
Packit 1c1d7e
    if (generateBib)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "bibtex refman" << endl;
Packit 1c1d7e
      t << "pdflatex refman" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "echo ----\n";
Packit 1c1d7e
    t << "pdflatex refman\n\n";
Packit 1c1d7e
    t << "setlocal enabledelayedexpansion\n";
Packit 1c1d7e
    t << "set count=8\n";
Packit 1c1d7e
    t << ":repeat\n";
Packit 1c1d7e
    t << "set content=X\n";
Packit 1c1d7e
    t << "for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" refman.log' ) do set content=\"%%~T\"\n";
Packit 1c1d7e
    t << "if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" refman.log' ) do set content=\"%%~T\"\n";
Packit 1c1d7e
    t << "if !content! == X goto :skip\n";
Packit 1c1d7e
    t << "set /a count-=1\n";
Packit 1c1d7e
    t << "if !count! EQU 0 goto :skip\n\n";
Packit 1c1d7e
    t << "echo ----\n";
Packit 1c1d7e
    t << "pdflatex refman\n";
Packit 1c1d7e
    t << "goto :repeat\n";
Packit 1c1d7e
    t << ":skip\n";
Packit 1c1d7e
    t << "endlocal\n";
Packit 1c1d7e
    t << mkidx_command << " refman.idx\n";
Packit 1c1d7e
    t << "pdflatex refman\n";
Packit 1c1d7e
    t << "cd /D %Dir_Old%\n";
Packit 1c1d7e
    t << "set Dir_Old=\n";
Packit 1c1d7e
  }
Packit 1c1d7e
#endif
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::init()
Packit 1c1d7e
{
Packit 1c1d7e
Packit 1c1d7e
  QCString dir=Config_getString(LATEX_OUTPUT);
Packit 1c1d7e
  QDir d(dir);
Packit 1c1d7e
  if (!d.exists() && !d.mkdir(dir))
Packit 1c1d7e
  {
Packit 1c1d7e
    err("Could not create output directory %s\n",dir.data());
Packit 1c1d7e
    exit(1);
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  writeLatexMakefile();
Packit 1c1d7e
  writeMakeBat();
Packit 1c1d7e
Packit 1c1d7e
  createSubDirs(d);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeDefaultHeaderPart1(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  // part 1
Packit 1c1d7e
Packit 1c1d7e
  // Handle batch mode
Packit 1c1d7e
  if (Config_getBool(LATEX_BATCHMODE))
Packit 1c1d7e
    t << "\\batchmode\n";
Packit 1c1d7e
Packit 1c1d7e
  // Set document class depending on configuration
Packit 1c1d7e
  QCString documentClass;
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX))
Packit 1c1d7e
    documentClass = "article";
Packit 1c1d7e
  else
Packit 1c1d7e
    documentClass = "book";
Packit 1c1d7e
  t << "\\documentclass[twoside]{" << documentClass << "}\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Load required packages
Packit 1c1d7e
  t << "% Packages required by doxygen\n"
Packit 1c1d7e
       "\\usepackage{fixltx2e}\n" // for \textsubscript
Packit 1c1d7e
       "\\usepackage{calc}\n"
Packit 1c1d7e
       "\\usepackage{doxygen}\n"
Packit 1c1d7e
       "\\usepackage[export]{adjustbox} % also loads graphicx\n";
Packit 1c1d7e
  QStrList extraLatexStyle = Config_getList(LATEX_EXTRA_STYLESHEET);
Packit 1c1d7e
  for (uint i=0; i
Packit 1c1d7e
  {
Packit 1c1d7e
    QCString fileName(extraLatexStyle.at(i));
Packit 1c1d7e
    if (!fileName.isEmpty())
Packit 1c1d7e
    {
Packit 1c1d7e
      QFileInfo fi(fileName);
Packit 1c1d7e
      if (fi.exists())
Packit 1c1d7e
      {
Packit 1c1d7e
        if (checkExtension(fi.fileName().data(), latexStyleExtension))
Packit 1c1d7e
        {
Packit 1c1d7e
          // strip the extension, it will be added by the usepackage in the tex conversion process
Packit 1c1d7e
          t << "\\usepackage{" << stripExtensionGeneral(fi.fileName().data(), latexStyleExtension) << "}\n";
Packit 1c1d7e
        }
Packit 1c1d7e
        else
Packit 1c1d7e
        {
Packit 1c1d7e
          t << "\\usepackage{" << fi.fileName().utf8() << "}\n";
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\usepackage{graphicx}\n"
Packit 1c1d7e
       "\\usepackage[utf8]{inputenc}\n"
Packit 1c1d7e
       "\\usepackage{makeidx}\n"
Packit 1c1d7e
       "\\usepackage{multicol}\n"
Packit 1c1d7e
       "\\usepackage{multirow}\n"
Packit 1c1d7e
       "\\PassOptionsToPackage{warn}{textcomp}\n"
Packit 1c1d7e
       "\\usepackage{textcomp}\n"
Packit 1c1d7e
       "\\usepackage[nointegrals]{wasysym}\n"
Packit 1c1d7e
       "\\usepackage[table]{xcolor}\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Language support
Packit 1c1d7e
  QCString languageSupport = theTranslator->latexLanguageSupportCommand();
Packit 1c1d7e
  if (!languageSupport.isEmpty())
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "% NLS support packages\n"
Packit 1c1d7e
      << languageSupport
Packit 1c1d7e
      << "\n";
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  // Define default fonts
Packit 1c1d7e
  t << "% Font selection\n"
Packit 1c1d7e
       "\\usepackage[T1]{fontenc}\n"
Packit 1c1d7e
       "\\usepackage[scaled=.90]{helvet}\n"
Packit 1c1d7e
       "\\usepackage{courier}\n"
Packit 1c1d7e
       "\\usepackage{amssymb}\n"
Packit 1c1d7e
       "\\usepackage{sectsty}\n"
Packit 1c1d7e
       "\\renewcommand{\\familydefault}{\\sfdefault}\n"
Packit 1c1d7e
       "\\allsectionsfont{%\n"
Packit 1c1d7e
       "  \\fontseries{bc}\\selectfont%\n"
Packit 1c1d7e
       "  \\color{darkgray}%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\\renewcommand{\\DoxyLabelFont}{%\n"
Packit 1c1d7e
       "  \\fontseries{bc}\\selectfont%\n"
Packit 1c1d7e
       "  \\color{darkgray}%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\\newcommand{\\+}{\\discretionary{\\mbox{\\scriptsize$\\hookleftarrow$}}{}{}}\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Define page & text layout
Packit 1c1d7e
  QCString paperName=Config_getEnum(PAPER_TYPE);
Packit 1c1d7e
  // "a4wide" package is obsolete (see bug 563698)
Packit 1c1d7e
  t << "% Page & text layout\n"
Packit 1c1d7e
       "\\usepackage{geometry}\n"
Packit 1c1d7e
       "\\geometry{%\n"
Packit 1c1d7e
       "  " << paperName << "paper,%\n"
Packit 1c1d7e
       "  top=2.5cm,%\n"
Packit 1c1d7e
       "  bottom=2.5cm,%\n"
Packit 1c1d7e
       "  left=2.5cm,%\n"
Packit 1c1d7e
       "  right=2.5cm%\n"
Packit 1c1d7e
       "}\n";
Packit 1c1d7e
  // \sloppy is obsolete (see bug 563698)
Packit 1c1d7e
  // Allow a bit of overflow to go unnoticed by other means
Packit 1c1d7e
  t << "\\tolerance=750\n"
Packit 1c1d7e
       "\\hfuzz=15pt\n"
Packit 1c1d7e
       "\\hbadness=750\n"
Packit 1c1d7e
       "\\setlength{\\emergencystretch}{15pt}\n"
Packit 1c1d7e
       "\\setlength{\\parindent}{0cm}\n"
Packit 1c1d7e
       "\\setlength{\\parskip}{3ex plus 2ex minus 2ex}\n";
Packit 1c1d7e
  // Redefine paragraph/subparagraph environments, using sectsty fonts
Packit 1c1d7e
  t << "\\makeatletter\n"
Packit 1c1d7e
       "\\renewcommand{\\paragraph}{%\n"
Packit 1c1d7e
       "  \\@startsection{paragraph}{4}{0ex}{-1.0ex}{1.0ex}{%\n"
Packit 1c1d7e
       "    \\normalfont\\normalsize\\bfseries\\SS@parafont%\n"
Packit 1c1d7e
       "  }%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\\renewcommand{\\subparagraph}{%\n"
Packit 1c1d7e
       "  \\@startsection{subparagraph}{5}{0ex}{-1.0ex}{1.0ex}{%\n"
Packit 1c1d7e
       "    \\normalfont\\normalsize\\bfseries\\SS@subparafont%\n"
Packit 1c1d7e
       "  }%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\\makeatother\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Headers & footers
Packit 1c1d7e
  QGString genString;
Packit 1c1d7e
  QCString generatedBy;
Packit 1c1d7e
  static bool timeStamp = Config_getBool(LATEX_TIMESTAMP);
Packit 1c1d7e
  FTextStream tg(&genString);
Packit 1c1d7e
  if (timeStamp)
Packit 1c1d7e
  {
Packit 1c1d7e
    generatedBy = theTranslator->trGeneratedAt(dateToString(TRUE), Config_getString(PROJECT_NAME));
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    generatedBy = theTranslator->trGeneratedBy();
Packit 1c1d7e
  }
Packit 1c1d7e
  filterLatexString(tg, generatedBy, FALSE,FALSE,FALSE);
Packit 1c1d7e
  t << "% Headers & footers\n"
Packit 1c1d7e
       "\\usepackage{fancyhdr}\n"
Packit 1c1d7e
       "\\pagestyle{fancyplain}\n"
Packit 1c1d7e
       "\\fancyhead[LE]{\\fancyplain{}{\\bfseries\\thepage}}\n"
Packit 1c1d7e
       "\\fancyhead[CE]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\fancyhead[RE]{\\fancyplain{}{\\bfseries\\leftmark}}\n"
Packit 1c1d7e
       "\\fancyhead[LO]{\\fancyplain{}{\\bfseries\\rightmark}}\n"
Packit 1c1d7e
       "\\fancyhead[CO]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\fancyhead[RO]{\\fancyplain{}{\\bfseries\\thepage}}\n"
Packit 1c1d7e
       "\\fancyfoot[LE]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\fancyfoot[CE]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\fancyfoot[RE]{\\fancyplain{}{\\bfseries\\scriptsize " << genString << " Doxygen }}\n"
Packit 1c1d7e
       "\\fancyfoot[LO]{\\fancyplain{}{\\bfseries\\scriptsize " << genString << " Doxygen }}\n"
Packit 1c1d7e
       "\\fancyfoot[CO]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\fancyfoot[RO]{\\fancyplain{}{}}\n"
Packit 1c1d7e
       "\\renewcommand{\\footrulewidth}{0.4pt}\n";
Packit 1c1d7e
  if (!Config_getBool(COMPACT_LATEX))
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\renewcommand{\\chaptermark}[1]{%\n"
Packit 1c1d7e
         "  \\markboth{#1}{}%\n"
Packit 1c1d7e
         "}\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\renewcommand{\\sectionmark}[1]{%\n"
Packit 1c1d7e
       "  \\markright{\\thesection\\ #1}%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // ToC, LoF, LoT, bibliography, and index
Packit 1c1d7e
  t << "% Indices & bibliography\n"
Packit 1c1d7e
       "\\usepackage{natbib}\n"
Packit 1c1d7e
       "\\usepackage[titles]{tocloft}\n"
Packit 1c1d7e
       "\\setcounter{tocdepth}{3}\n"
Packit 1c1d7e
       "\\setcounter{secnumdepth}{5}\n"
Packit 1c1d7e
       "\\makeindex\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  writeExtraLatexPackages(t);
Packit 1c1d7e
Packit 1c1d7e
  // Hyperlinks
Packit 1c1d7e
  bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  if (pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "% Hyperlinks (required, but should be loaded last)\n"
Packit 1c1d7e
         "\\usepackage{ifpdf}\n"
Packit 1c1d7e
         "\\ifpdf\n"
Packit 1c1d7e
         "  \\usepackage[pdftex,pagebackref=true]{hyperref}\n"
Packit 1c1d7e
         "\\else\n"
Packit 1c1d7e
         "  \\usepackage[ps2pdf,pagebackref=true]{hyperref}\n"
Packit 1c1d7e
         "\\fi\n"
Packit 1c1d7e
         "\\hypersetup{%\n"
Packit 1c1d7e
         "  colorlinks=true,%\n"
Packit 1c1d7e
         "  linkcolor=blue,%\n"
Packit 1c1d7e
         "  citecolor=blue,%\n"
Packit 1c1d7e
         "  unicode%\n"
Packit 1c1d7e
         "}\n"
Packit 1c1d7e
         "\n";
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  // Custom commands used by the header
Packit 1c1d7e
  t << "% Custom commands\n"
Packit 1c1d7e
       "\\newcommand{\\clearemptydoublepage}{%\n"
Packit 1c1d7e
       "  \\newpage{\\pagestyle{empty}\\cleardoublepage}%\n"
Packit 1c1d7e
       "}\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // caption style definition
Packit 1c1d7e
  t << "\\usepackage{caption}\n"
Packit 1c1d7e
    << "\\captionsetup{labelsep=space,justification=centering,font={bf},singlelinecheck=off,skip=4pt,position=top}\n\n";
Packit 1c1d7e
Packit 1c1d7e
  // End of preamble, now comes the document contents
Packit 1c1d7e
  t << "%===== C O N T E N T S =====\n"
Packit 1c1d7e
       "\n"
Packit 1c1d7e
       "\\begin{document}\n";
Packit 1c1d7e
  if (theTranslator->idLanguage()=="greek")
Packit 1c1d7e
    t << "\\selectlanguage{greek}\n";
Packit 1c1d7e
  t << "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Front matter
Packit 1c1d7e
  t << "% Titlepage & ToC\n";
Packit 1c1d7e
  bool usePDFLatex = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  if (pdfHyperlinks && usePDFLatex)
Packit 1c1d7e
  {
Packit 1c1d7e
    // To avoid duplicate page anchors due to reuse of same numbers for
Packit 1c1d7e
    // the index (be it as roman numbers)
Packit 1c1d7e
    t << "\\hypersetup{pageanchor=false,\n"
Packit 1c1d7e
    //  << "             bookmarks=true,\n" // commented out to prevent warning
Packit 1c1d7e
      << "             bookmarksnumbered=true,\n"
Packit 1c1d7e
      << "             pdfencoding=unicode\n"
Packit 1c1d7e
      << "            }\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\pagenumbering{alph}\n"
Packit 1c1d7e
       "\\begin{titlepage}\n"
Packit 1c1d7e
       "\\vspace*{7cm}\n"
Packit 1c1d7e
       "\\begin{center}%\n"
Packit 1c1d7e
       "{\\Large ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeDefaultHeaderPart2(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  // part 2
Packit 1c1d7e
  // Finalize project name
Packit 1c1d7e
  t << "}\\\\\n"
Packit 1c1d7e
       "\\vspace*{1cm}\n"
Packit 1c1d7e
       "{\\large ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeDefaultHeaderPart3(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  // part 3
Packit 1c1d7e
  // Finalize project number
Packit 1c1d7e
  t << " Doxygen " << versionString << "}\\\\\n";
Packit 1c1d7e
  if (Config_getBool(LATEX_TIMESTAMP))
Packit 1c1d7e
    t << "\\vspace*{0.5cm}\n"
Packit 1c1d7e
         "{\\small " << dateToString(TRUE) << "}\\\\\n";
Packit 1c1d7e
  t << "\\end{center}\n"
Packit 1c1d7e
       "\\end{titlepage}\n";
Packit 1c1d7e
  bool compactLatex = Config_getBool(COMPACT_LATEX);
Packit 1c1d7e
  if (!compactLatex)
Packit 1c1d7e
    t << "\\clearemptydoublepage\n";
Packit 1c1d7e
  t << "\\pagenumbering{roman}\n";
Packit 1c1d7e
Packit 1c1d7e
  // ToC
Packit 1c1d7e
  t << "\\tableofcontents\n";
Packit 1c1d7e
  if (!compactLatex)
Packit 1c1d7e
    t << "\\clearemptydoublepage\n";
Packit 1c1d7e
  t << "\\pagenumbering{arabic}\n";
Packit 1c1d7e
  bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  if (pdfHyperlinks && usePDFLatex)
Packit 1c1d7e
  {
Packit 1c1d7e
    // re-enable anchors again
Packit 1c1d7e
    t << "\\hypersetup{pageanchor=true}\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\n"
Packit 1c1d7e
       "%--- Begin generated contents ---\n";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeDefaultStyleSheet(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  t << ResourceMgr::instance().getAsString("doxygen.sty");
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
static void writeDefaultFooter(FTextStream &t)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "%--- End generated contents ---\n"
Packit 1c1d7e
       "\n";
Packit 1c1d7e
Packit 1c1d7e
  // Bibliography
Packit 1c1d7e
  Doxygen::citeDict->writeLatexBibliography(t);
Packit 1c1d7e
Packit 1c1d7e
  // Index
Packit 1c1d7e
  t << "% Index\n";
Packit 1c1d7e
  QCString unit;
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX))
Packit 1c1d7e
  {
Packit 1c1d7e
    unit = "section";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    unit = "chapter";
Packit 1c1d7e
    t << "\\backmatter\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\newpage\n"
Packit 1c1d7e
       "\\phantomsection\n"
Packit 1c1d7e
       "\\clearemptydoublepage\n"
Packit 1c1d7e
       "\\addcontentsline{toc}{" << unit << "}{" << theTranslator->trRTFGeneralIndex() << "}\n"
Packit 1c1d7e
       "\\printindex\n"
Packit 1c1d7e
       "\n"
Packit 1c1d7e
       "\\end{document}\n";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeHeaderFile(QFile &f)
Packit 1c1d7e
{
Packit 1c1d7e
  FTextStream t(&f);
Packit 1c1d7e
  t << "% Latex header for doxygen " << versionString << endl;
Packit 1c1d7e
  writeDefaultHeaderPart1(t);
Packit 1c1d7e
  t << "Your title here";
Packit 1c1d7e
  writeDefaultHeaderPart2(t);
Packit 1c1d7e
  t << "Generated by";
Packit 1c1d7e
  writeDefaultHeaderPart3(t);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeFooterFile(QFile &f)
Packit 1c1d7e
{
Packit 1c1d7e
  FTextStream t(&f);
Packit 1c1d7e
  t << "% Latex footer for doxygen " << versionString << endl;
Packit 1c1d7e
  writeDefaultFooter(t);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeStyleSheetFile(QFile &f)
Packit 1c1d7e
{
Packit 1c1d7e
  FTextStream t(&f);
Packit 1c1d7e
  t << "% stylesheet for doxygen " << versionString << endl;
Packit 1c1d7e
  writeDefaultStyleSheet(t);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startFile(const char *name,const char *,const char *)
Packit 1c1d7e
{
Packit 1c1d7e
#if 0
Packit 1c1d7e
  setEncoding(Config_getString(LATEX_OUTPUT_ENCODING));
Packit 1c1d7e
#endif
Packit 1c1d7e
  QCString fileName=name;
Packit 1c1d7e
  relPath = relativePathToRoot(fileName);
Packit 1c1d7e
  if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex";
Packit 1c1d7e
  startPlainFile(fileName);
Packit 1c1d7e
  m_codeGen.setTextStream(t);
Packit 1c1d7e
  m_codeGen.setRelativePath(relPath);
Packit 1c1d7e
  m_codeGen.setSourceFileName(stripPath(fileName));
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endFile()
Packit 1c1d7e
{
Packit 1c1d7e
  endPlainFile();
Packit 1c1d7e
  m_codeGen.setSourceFileName("");
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void LatexGenerator::writeIndex()
Packit 1c1d7e
//{
Packit 1c1d7e
//  startFile("refman.tex");
Packit 1c1d7e
//} 
Packit 1c1d7e
  
Packit 1c1d7e
void LatexGenerator::startProjectNumber()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\\\[1ex]\\large "; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startIndexSection(IndexSections is)
Packit 1c1d7e
{
Packit 1c1d7e
  bool &compactLatex = Config_getBool(COMPACT_LATEX);
Packit 1c1d7e
  QCString &latexHeader = Config_getString(LATEX_HEADER);
Packit 1c1d7e
  switch (is)
Packit 1c1d7e
  {
Packit 1c1d7e
    case isTitlePageStart:
Packit 1c1d7e
      {
Packit 1c1d7e
        if (latexHeader.isEmpty())
Packit 1c1d7e
        {
Packit 1c1d7e
          writeDefaultHeaderPart1(t);
Packit 1c1d7e
        }
Packit 1c1d7e
        else
Packit 1c1d7e
        {
Packit 1c1d7e
          QCString header = fileToString(latexHeader);
Packit 1c1d7e
          t << substituteKeywords(header,"",
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_NAME)),
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_NUMBER)),
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_BRIEF)));
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isTitlePageAuthor:
Packit 1c1d7e
      if (latexHeader.isEmpty())
Packit 1c1d7e
      {
Packit 1c1d7e
        writeDefaultHeaderPart2(t);
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isMainPage:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Introduction}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    //case isPackageIndex:
Packit 1c1d7e
    //  if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
    //  t << "{"; //Package Index}\n"
Packit 1c1d7e
    //  break;
Packit 1c1d7e
    case isModuleIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Module Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isDirIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Directory Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isNamespaceIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Namespace Index}\"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isClassHierarchyIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Hierarchical Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isCompoundIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Annotated Compound Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isFileIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Annotated File Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageIndex:
Packit 1c1d7e
      if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
      t << "{"; //Annotated Page Index}\n"
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isModuleDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        GroupSDict::Iterator gli(*Doxygen::groupSDict);
Packit 1c1d7e
        GroupDef *gd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (gli.toFirst();(gd=gli.current()) && !found;++gli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (!gd->isReference())
Packit 1c1d7e
          {
Packit 1c1d7e
            if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
            t << "{"; //Module Documentation}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isDirDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        SDict<DirDef>::Iterator dli(*Doxygen::directories);
Packit 1c1d7e
        DirDef *dd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (dli.toFirst();(dd=dli.current()) && !found;++dli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (dd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
            t << "{"; //Module Documentation}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isNamespaceDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
Packit 1c1d7e
        NamespaceDef *nd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (nli.toFirst();(nd=nli.current()) && !found;++nli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (nd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
            t << "{"; // Namespace Documentation}\n":
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        } 
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isClassDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        ClassSDict::Iterator cli(*Doxygen::classSDict);
Packit 1c1d7e
        ClassDef *cd=0;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (cli.toFirst();(cd=cli.current()) && !found;++cli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (cd->isLinkableInProject() && 
Packit 1c1d7e
              cd->templateMaster()==0 &&
Packit 1c1d7e
              !cd->isEmbeddedInOuterScope()
Packit 1c1d7e
             )
Packit 1c1d7e
          {
Packit 1c1d7e
            if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
            t << "{"; //Compound Documentation}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isFileDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        bool isFirst=TRUE;
Packit 1c1d7e
        FileNameListIterator fnli(*Doxygen::inputNameList); 
Packit 1c1d7e
        FileName *fn;
Packit 1c1d7e
        for (fnli.toFirst();(fn=fnli.current());++fnli)
Packit 1c1d7e
        {
Packit 1c1d7e
          FileNameIterator fni(*fn);
Packit 1c1d7e
          FileDef *fd;
Packit 1c1d7e
          for (;(fd=fni.current());++fni)
Packit 1c1d7e
          {
Packit 1c1d7e
            if (fd->isLinkableInProject())
Packit 1c1d7e
            {
Packit 1c1d7e
              if (isFirst)
Packit 1c1d7e
              {
Packit 1c1d7e
                if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
                t << "{"; //File Documentation}\n";
Packit 1c1d7e
                isFirst=FALSE;
Packit 1c1d7e
                break;
Packit 1c1d7e
              }
Packit 1c1d7e
            }
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isExampleDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
        t << "{"; //Example Documentation}\n";
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
        t << "{"; //Page Documentation}\n";
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageDocumentation2:
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isEndIndex:
Packit 1c1d7e
      break;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endIndexSection(IndexSections is)
Packit 1c1d7e
{
Packit 1c1d7e
  //static bool compactLatex = Config_getBool(COMPACT_LATEX);
Packit 1c1d7e
  static bool sourceBrowser = Config_getBool(SOURCE_BROWSER);
Packit 1c1d7e
  static QCString latexHeader = Config_getString(LATEX_HEADER);
Packit 1c1d7e
  static QCString latexFooter = Config_getString(LATEX_FOOTER);
Packit 1c1d7e
  switch (is)
Packit 1c1d7e
  {
Packit 1c1d7e
    case isTitlePageStart:
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isTitlePageAuthor:
Packit 1c1d7e
      if (latexHeader.isEmpty())
Packit 1c1d7e
      {
Packit 1c1d7e
        writeDefaultHeaderPart3(t);
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isMainPage:
Packit 1c1d7e
      {
Packit 1c1d7e
        //QCString indexName=Config_getBool(GENERATE_TREEVIEW)?"main":"index";
Packit 1c1d7e
        QCString indexName="index";
Packit 1c1d7e
        t << "}\n\\label{index}";
Packit 1c1d7e
        if (Config_getBool(PDF_HYPERLINKS)) t << "\\hypertarget{index}{}";
Packit 1c1d7e
        t << "\\input{" << indexName << "}\n";
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isModuleIndex:
Packit 1c1d7e
      t << "}\n\\input{modules}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isDirIndex:
Packit 1c1d7e
      t << "}\n\\input{dirs}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isNamespaceIndex:
Packit 1c1d7e
      t << "}\n\\input{namespaces}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isClassHierarchyIndex:
Packit 1c1d7e
      t << "}\n\\input{hierarchy}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isCompoundIndex:
Packit 1c1d7e
      t << "}\n\\input{annotated}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isFileIndex:
Packit 1c1d7e
      t << "}\n\\input{files}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageIndex:
Packit 1c1d7e
      t << "}\n\\input{pages}\n";
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isModuleDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        GroupSDict::Iterator gli(*Doxygen::groupSDict);
Packit 1c1d7e
        GroupDef *gd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (gli.toFirst();(gd=gli.current()) && !found;++gli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (!gd->isReference())
Packit 1c1d7e
          {
Packit 1c1d7e
            t << "}\n\\input{" << gd->getOutputFileBase() << "}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        for (;(gd=gli.current());++gli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (!gd->isReference())
Packit 1c1d7e
          {
Packit 1c1d7e
            //if (compactLatex) t << "\\input"; else t << "\\include";
Packit 1c1d7e
            t << "\\include"; 
Packit 1c1d7e
            t << "{" << gd->getOutputFileBase() << "}\n";
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isDirDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        SDict<DirDef>::Iterator dli(*Doxygen::directories);
Packit 1c1d7e
        DirDef *dd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (dli.toFirst();(dd=dli.current()) && !found;++dli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (dd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            t << "}\n\\input{" << dd->getOutputFileBase() << "}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        for (;(dd=dli.current());++dli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (dd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            //if (compactLatex) t << "\\input"; else t << "\\include";
Packit 1c1d7e
            t << "\\input"; 
Packit 1c1d7e
            t << "{" << dd->getOutputFileBase() << "}\n";
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isNamespaceDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        NamespaceSDict::Iterator nli(*Doxygen::namespaceSDict);
Packit 1c1d7e
        NamespaceDef *nd;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (nli.toFirst();(nd=nli.current()) && !found;++nli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (nd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            t << "}\n\\input{" << nd->getOutputFileBase() << "}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        while ((nd=nli.current()))
Packit 1c1d7e
        {
Packit 1c1d7e
          if (nd->isLinkableInProject())
Packit 1c1d7e
          {
Packit 1c1d7e
            //if (compactLatex) t << "\\input"; else t << "\\include";
Packit 1c1d7e
            t << "\\input"; 
Packit 1c1d7e
            t << "{" << nd->getOutputFileBase() << "}\n";
Packit 1c1d7e
          }
Packit 1c1d7e
          ++nli;
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isClassDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        ClassSDict::Iterator cli(*Doxygen::classSDict);
Packit 1c1d7e
        ClassDef *cd=0;
Packit 1c1d7e
        bool found=FALSE;
Packit 1c1d7e
        for (cli.toFirst();(cd=cli.current()) && !found;++cli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (cd->isLinkableInProject() && 
Packit 1c1d7e
              cd->templateMaster()==0 &&
Packit 1c1d7e
             !cd->isEmbeddedInOuterScope()
Packit 1c1d7e
             )
Packit 1c1d7e
          {
Packit 1c1d7e
            t << "}\n\\input{" << cd->getOutputFileBase() << "}\n";
Packit 1c1d7e
            found=TRUE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
        for (;(cd=cli.current());++cli)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (cd->isLinkableInProject() && 
Packit 1c1d7e
              cd->templateMaster()==0 &&
Packit 1c1d7e
             !cd->isEmbeddedInOuterScope()
Packit 1c1d7e
             )
Packit 1c1d7e
          {
Packit 1c1d7e
            //if (compactLatex) t << "\\input"; else t << "\\include";
Packit 1c1d7e
            t << "\\input"; 
Packit 1c1d7e
            t << "{" << cd->getOutputFileBase() << "}\n";
Packit 1c1d7e
          } 
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isFileDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        bool isFirst=TRUE;
Packit 1c1d7e
        FileNameListIterator fnli(*Doxygen::inputNameList); 
Packit 1c1d7e
        FileName *fn;
Packit 1c1d7e
        for (fnli.toFirst();(fn=fnli.current());++fnli)
Packit 1c1d7e
        {
Packit 1c1d7e
          FileNameIterator fni(*fn);
Packit 1c1d7e
          FileDef *fd;
Packit 1c1d7e
          for (;(fd=fni.current());++fni)
Packit 1c1d7e
          {
Packit 1c1d7e
            if (fd->isLinkableInProject())
Packit 1c1d7e
            {
Packit 1c1d7e
              if (isFirst)
Packit 1c1d7e
              {
Packit 1c1d7e
                t << "}\n\\input{" << fd->getOutputFileBase() << "}\n";
Packit 1c1d7e
                if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
Packit 1c1d7e
                {
Packit 1c1d7e
                  //t << "\\include{" << fd->getSourceFileBase() << "}\n";
Packit 1c1d7e
                  t << "\\input{" << fd->getSourceFileBase() << "}\n";
Packit 1c1d7e
                }
Packit 1c1d7e
                isFirst=FALSE;
Packit 1c1d7e
              }
Packit 1c1d7e
              else
Packit 1c1d7e
              {
Packit 1c1d7e
                //if (compactLatex) t << "\\input" ; else t << "\\include";
Packit 1c1d7e
                t << "\\input" ; 
Packit 1c1d7e
                t << "{" << fd->getOutputFileBase() << "}\n";
Packit 1c1d7e
                if (sourceBrowser && m_prettyCode && fd->generateSourceFile())
Packit 1c1d7e
                {
Packit 1c1d7e
                  //t << "\\include{" << fd->getSourceFileBase() << "}\n";
Packit 1c1d7e
                  t << "\\input{" << fd->getSourceFileBase() << "}\n";
Packit 1c1d7e
                }
Packit 1c1d7e
              }
Packit 1c1d7e
            }
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isExampleDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        t << "}\n";
Packit 1c1d7e
        PageSDict::Iterator pdi(*Doxygen::exampleSDict);
Packit 1c1d7e
        PageDef *pd=pdi.toFirst();
Packit 1c1d7e
        if (pd)
Packit 1c1d7e
        {
Packit 1c1d7e
          t << "\\input{" << pd->getOutputFileBase() << "}\n";
Packit 1c1d7e
        }
Packit 1c1d7e
        for (++pdi;(pd=pdi.current());++pdi)
Packit 1c1d7e
        {
Packit 1c1d7e
          //if (compactLatex) t << "\\input" ; else t << "\\include";
Packit 1c1d7e
          t << "\\input"; 
Packit 1c1d7e
          t << "{" << pd->getOutputFileBase() << "}\n";
Packit 1c1d7e
        }
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageDocumentation:
Packit 1c1d7e
      {
Packit 1c1d7e
        t << "}\n";
Packit 1c1d7e
#if 0
Packit 1c1d7e
        PageSDict::Iterator pdi(*Doxygen::pageSDict);
Packit 1c1d7e
        PageDef *pd=pdi.toFirst();
Packit 1c1d7e
        bool first=TRUE;
Packit 1c1d7e
        for (pdi.toFirst();(pd=pdi.current());++pdi)
Packit 1c1d7e
        {
Packit 1c1d7e
          if (!pd->getGroupDef() && !pd->isReference())
Packit 1c1d7e
          {
Packit 1c1d7e
             if (compactLatex) t << "\\section"; else t << "\\chapter";
Packit 1c1d7e
             t << "{" << pd->title();
Packit 1c1d7e
             t << "}\n";
Packit 1c1d7e
            
Packit 1c1d7e
            if (compactLatex || first) t << "\\input" ; else t << "\\include";
Packit 1c1d7e
            t << "{" << pd->getOutputFileBase() << "}\n";
Packit 1c1d7e
            first=FALSE;
Packit 1c1d7e
          }
Packit 1c1d7e
        }
Packit 1c1d7e
#endif
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isPageDocumentation2:
Packit 1c1d7e
      break;
Packit 1c1d7e
    case isEndIndex:
Packit 1c1d7e
      if (latexFooter.isEmpty())
Packit 1c1d7e
      {
Packit 1c1d7e
        writeDefaultFooter(t);
Packit 1c1d7e
      }
Packit 1c1d7e
      else
Packit 1c1d7e
      {
Packit 1c1d7e
        QCString footer = fileToString(latexFooter);
Packit 1c1d7e
        t << substituteKeywords(footer,"",
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_NAME)),
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_NUMBER)),
Packit 1c1d7e
                   convertToLaTeX(Config_getString(PROJECT_BRIEF)));
Packit 1c1d7e
      }
Packit 1c1d7e
      break;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writePageLink(const char *name, bool /*first*/)
Packit 1c1d7e
{
Packit 1c1d7e
  //bool &compactLatex = Config_getBool(COMPACT_LATEX);
Packit 1c1d7e
  // next is remove for bug615957
Packit 1c1d7e
  //if (compactLatex || first) t << "\\input" ; else t << "\\include";
Packit 1c1d7e
  t << "\\input" ; 
Packit 1c1d7e
  t << "{" << name << "}\n";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeStyleInfo(int part)
Packit 1c1d7e
{
Packit 1c1d7e
  if (part > 0)
Packit 1c1d7e
    return;
Packit 1c1d7e
Packit 1c1d7e
  startPlainFile("doxygen.sty");
Packit 1c1d7e
  writeDefaultStyleSheet(t);
Packit 1c1d7e
  endPlainFile();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::newParagraph()
Packit 1c1d7e
{
Packit 1c1d7e
  t << endl << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startParagraph(const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  t << endl << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endParagraph()
Packit 1c1d7e
{
Packit 1c1d7e
  t << endl << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeString(const char *text)
Packit 1c1d7e
{
Packit 1c1d7e
  t << text;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startIndexItem(const char *ref,const char *fn)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\item ";
Packit 1c1d7e
  if (!ref && fn)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\contentsline{section}{";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endIndexItem(const char *ref,const char *fn)
Packit 1c1d7e
{
Packit 1c1d7e
  if (!ref && fn)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "}{\\pageref{" << stripPath(fn) << "}}{}" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void LatexGenerator::writeIndexFileItem(const char *,const char *text)
Packit 1c1d7e
//{
Packit 1c1d7e
//  t << "\\item\\contentsline{section}{";
Packit 1c1d7e
//  docify(text);
Packit 1c1d7e
//  t << "}{\\pageref{" << stripPath(text) << "}}" << endl;
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startHtmlLink(const char *url)
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(PDF_HYPERLINKS))
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\href{";
Packit 1c1d7e
    t << url;
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "{\\tt ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endHtmlLink()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void LatexGenerator::writeMailLink(const char *url)
Packit 1c1d7e
//{
Packit 1c1d7e
//  if (Config_getBool(PDF_HYPERLINKS))
Packit 1c1d7e
//  {
Packit 1c1d7e
//    t << "\\href{mailto:";
Packit 1c1d7e
//    t << url;
Packit 1c1d7e
//    t << "}";
Packit 1c1d7e
//  }
Packit 1c1d7e
//  t << "{\\tt "; 
Packit 1c1d7e
//  docify(url);
Packit 1c1d7e
//  t << "}";
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeStartAnnoItem(const char *,const char *,
Packit 1c1d7e
                                        const char *path,const char *name)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\item\\contentsline{section}{\\bf ";
Packit 1c1d7e
  if (path) docify(path);
Packit 1c1d7e
  docify(name); 
Packit 1c1d7e
  t << "} ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeEndAnnoItem(const char *name)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startIndexKey()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\item\\contentsline{section}{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endIndexKey()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startIndexValue(bool hasBrief)
Packit 1c1d7e
{
Packit 1c1d7e
  t << " ";
Packit 1c1d7e
  if (hasBrief) t << "\\\\*";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endIndexValue(const char *name,bool /*hasBrief*/)
Packit 1c1d7e
{
Packit 1c1d7e
  //if (hasBrief) t << ")";
Packit 1c1d7e
  t << "}{\\pageref{" << stripPath(name) << "}}{}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
//void LatexGenerator::writeClassLink(const char *,const char *,
Packit 1c1d7e
//                                    const char *,const char *name)
Packit 1c1d7e
//{
Packit 1c1d7e
//  t << "{\\bf ";
Packit 1c1d7e
//  docify(name);
Packit 1c1d7e
//  t << "}"; 
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startTextLink(const char *f,const char *anchor)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  if (!disableLinks && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\mbox{\\hyperlink{";
Packit 1c1d7e
    if (f) t << stripPath(f);
Packit 1c1d7e
    if (anchor) t << "_" << anchor; 
Packit 1c1d7e
    t << "}{";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\textbf{ ";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endTextLink()
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  if (!disableLinks && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeObjectLink(const char *ref, const char *f,
Packit 1c1d7e
                                     const char *anchor, const char *text)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  if (!disableLinks && !ref && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\mbox{\\hyperlink{";
Packit 1c1d7e
    if (f) t << stripPath(f);
Packit 1c1d7e
    if (f && anchor) t << "_"; 
Packit 1c1d7e
    if (anchor) t << anchor; 
Packit 1c1d7e
    t << "}{";
Packit 1c1d7e
    docify(text);
Packit 1c1d7e
    t << "}}";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\textbf{ ";
Packit 1c1d7e
    docify(text);
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
  } 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startPageRef()
Packit 1c1d7e
{
Packit 1c1d7e
  t << " \\doxyref{}{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endPageRef(const char *clname, const char *anchor)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}{";
Packit 1c1d7e
  if (clname) t << clname; 
Packit 1c1d7e
  if (anchor) t << "_" << anchor;
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startTitleHead(const char *fileName)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  static bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  if (usePDFLatex && pdfHyperlinks && fileName)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\hypertarget{" << stripPath(fileName) << "}{}";
Packit 1c1d7e
  }
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsection{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\section{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endTitleHead(const char *fileName,const char *name)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}" << endl;
Packit 1c1d7e
  if (name)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\label{" << stripPath(fileName) << "}\\index{";
Packit 1c1d7e
    t << latexEscapeLabelName(name,insideTabbing);
Packit 1c1d7e
    t << "@{";
Packit 1c1d7e
    t << latexEscapeIndexChars(name,insideTabbing);
Packit 1c1d7e
    t << "}}" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startTitle()
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsection{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\section{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startGroupHeader(int extraIndentLevel)
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    extraIndentLevel++;
Packit 1c1d7e
  }
Packit 1c1d7e
Packit 1c1d7e
  if (extraIndentLevel==3)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subparagraph*{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (extraIndentLevel==2)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\paragraph{";
Packit 1c1d7e
  }
Packit 1c1d7e
  else if (extraIndentLevel==1)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsubsection{";
Packit 1c1d7e
  }
Packit 1c1d7e
  else // extraIndentLevel==0
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsection{";
Packit 1c1d7e
  }
Packit 1c1d7e
  disableLinks=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endGroupHeader(int)
Packit 1c1d7e
{
Packit 1c1d7e
  disableLinks=FALSE;
Packit 1c1d7e
  t << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberHeader(const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsubsection*{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsection*{";
Packit 1c1d7e
  }
Packit 1c1d7e
  disableLinks=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberHeader()
Packit 1c1d7e
{
Packit 1c1d7e
  disableLinks=FALSE;
Packit 1c1d7e
  t << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberDoc(const char *clname,
Packit 1c1d7e
                                    const char *memname,
Packit 1c1d7e
                                    const char *,
Packit 1c1d7e
                                    const char *title,
Packit 1c1d7e
                                    int memCount,
Packit 1c1d7e
                                    int memTotal,
Packit 1c1d7e
                                    bool showInline)
Packit 1c1d7e
{
Packit 1c1d7e
  if (memname && memname[0]!='@')
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\index{";
Packit 1c1d7e
    if (clname)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << latexEscapeLabelName(clname,insideTabbing);
Packit 1c1d7e
      t << "@{";
Packit 1c1d7e
      t << latexEscapeIndexChars(clname,insideTabbing);
Packit 1c1d7e
      t << "}!";
Packit 1c1d7e
    }
Packit 1c1d7e
    t << latexEscapeLabelName(memname,insideTabbing);
Packit 1c1d7e
    t << "@{";
Packit 1c1d7e
    t << latexEscapeIndexChars(memname,insideTabbing);
Packit 1c1d7e
    t << "}}" << endl;
Packit 1c1d7e
Packit 1c1d7e
    t << "\\index{";
Packit 1c1d7e
    t << latexEscapeLabelName(memname,insideTabbing);
Packit 1c1d7e
    t << "@{";
Packit 1c1d7e
    t << latexEscapeIndexChars(memname,insideTabbing);
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
    if (clname)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "!";
Packit 1c1d7e
      t << latexEscapeLabelName(clname,insideTabbing);
Packit 1c1d7e
      t << "@{";
Packit 1c1d7e
      t << latexEscapeIndexChars(clname,insideTabbing);
Packit 1c1d7e
      t << "}";
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "}" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  static const char *levelLab[] = { "subsubsection","paragraph","subparagraph", "subparagraph" };
Packit 1c1d7e
  static bool compactLatex = Config_getBool(COMPACT_LATEX);
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  int level=0;
Packit 1c1d7e
  if (showInline) level+=2;
Packit 1c1d7e
  if (compactLatex) level++;
Packit 1c1d7e
  t << "\\" << levelLab[level];
Packit 1c1d7e
Packit 1c1d7e
  t << "{";
Packit 1c1d7e
  if (pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\texorpdfstring{";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << latexEscapeIndexChars(title,insideTabbing);
Packit 1c1d7e
  if (pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "}{" << latexEscapePDFString(title) << "}";
Packit 1c1d7e
  }
Packit 1c1d7e
  if (memTotal>1)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\hspace{0.1cm}{\\footnotesize\\ttfamily [" << memCount << "/" << memTotal << "]}";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
  t << "\n{\\footnotesize\\ttfamily ";
Packit 1c1d7e
  //disableLinks=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberDoc(bool)
Packit 1c1d7e
{
Packit 1c1d7e
  disableLinks=FALSE;
Packit 1c1d7e
  t << "}\n\n";
Packit 1c1d7e
  //if (Config_getBool(COMPACT_LATEX)) t << "\\hfill";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDoxyAnchor(const char *fName,const char *,
Packit 1c1d7e
                                     const char *anchor, const char *,
Packit 1c1d7e
                                     const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  static bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  t << "\\mbox{";
Packit 1c1d7e
  if (usePDFLatex && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\Hypertarget{";
Packit 1c1d7e
    if (fName) t << stripPath(fName);
Packit 1c1d7e
    if (anchor) t << "_" << anchor;
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\label{";
Packit 1c1d7e
  if (fName) t << stripPath(fName);
Packit 1c1d7e
  if (anchor) t << "_" << anchor;
Packit 1c1d7e
  t << "}} " << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDoxyAnchor(const char *fName,const char *anchor)
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeAnchor(const char *fName,const char *name)
Packit 1c1d7e
{ 
Packit 1c1d7e
  //printf("LatexGenerator::writeAnchor(%s,%s)\n",fName,name);
Packit 1c1d7e
  t << "\\label{" << stripPath(name) << "}" << endl; 
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  static bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  if (usePDFLatex && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    if (fName)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "\\Hypertarget{" << stripPath(fName) << "_" << stripPath(name) << "}" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
    else
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "\\Hypertarget{" << stripPath(name) << "}" << endl;
Packit 1c1d7e
    }
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
//void LatexGenerator::writeLatexLabel(const char *clName,const char *anchor)
Packit 1c1d7e
//{
Packit 1c1d7e
//  writeDoxyAnchor(0,clName,anchor,0);
Packit 1c1d7e
//}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::addIndexItem(const char *s1,const char *s2)
Packit 1c1d7e
{
Packit 1c1d7e
  if (s1)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\index{";
Packit 1c1d7e
    t << latexEscapeLabelName(s1,insideTabbing);
Packit 1c1d7e
    t << "@{";
Packit 1c1d7e
    t << latexEscapeIndexChars(s1,insideTabbing);
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
    if (s2)
Packit 1c1d7e
    {
Packit 1c1d7e
      t << "!";
Packit 1c1d7e
      t << latexEscapeLabelName(s2,insideTabbing);
Packit 1c1d7e
      t << "@{";
Packit 1c1d7e
      t << latexEscapeIndexChars(s2,insideTabbing);
Packit 1c1d7e
      t << "}";
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "}";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startSection(const char *lab,const char *,SectionInfo::SectionType type)
Packit 1c1d7e
{
Packit 1c1d7e
  static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
Packit 1c1d7e
  static bool usePDFLatex   = Config_getBool(USE_PDFLATEX);
Packit 1c1d7e
  if (usePDFLatex && pdfHyperlinks)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\hypertarget{" << stripPath(lab) << "}{}";
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "\\";
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX))
Packit 1c1d7e
  {
Packit 1c1d7e
    switch(type)
Packit 1c1d7e
    {
Packit 1c1d7e
      case SectionInfo::Page:          t << "subsection"; break;
Packit 1c1d7e
      case SectionInfo::Section:       t << "subsubsection"; break;
Packit 1c1d7e
      case SectionInfo::Subsection:    t << "paragraph"; break;
Packit 1c1d7e
      case SectionInfo::Subsubsection: t << "subparagraph"; break;
Packit 1c1d7e
      case SectionInfo::Paragraph:     t << "subparagraph"; break;
Packit 1c1d7e
      default: ASSERT(0); break;
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "{";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    switch(type)
Packit 1c1d7e
    {
Packit 1c1d7e
      case SectionInfo::Page:          t << "section"; break;
Packit 1c1d7e
      case SectionInfo::Section:       t << "subsection"; break;
Packit 1c1d7e
      case SectionInfo::Subsection:    t << "subsubsection"; break;
Packit 1c1d7e
      case SectionInfo::Subsubsection: t << "paragraph"; break;
Packit 1c1d7e
      case SectionInfo::Paragraph:     t << "subparagraph"; break;
Packit 1c1d7e
      default: ASSERT(0); break;
Packit 1c1d7e
    }
Packit 1c1d7e
    t << "{";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endSection(const char *lab,SectionInfo::SectionType)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}\\label{" << lab << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::docify(const char *str)
Packit 1c1d7e
{
Packit 1c1d7e
  filterLatexString(t,str,insideTabbing,FALSE,FALSE);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeChar(char c)
Packit 1c1d7e
{
Packit 1c1d7e
  char cs[2];
Packit 1c1d7e
  cs[0]=c;
Packit 1c1d7e
  cs[1]=0;
Packit 1c1d7e
  docify(cs);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startClassDiagram()
Packit 1c1d7e
{
Packit 1c1d7e
  //if (Config_getBool(COMPACT_LATEX)) t << "\\subsubsection"; else t << "\\subsection";
Packit 1c1d7e
  //t << "{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endClassDiagram(const ClassDiagram &d,
Packit 1c1d7e
                                       const char *fileName,const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  d.writeFigure(t,dir,fileName);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startAnonTypeScope(int indent)
Packit 1c1d7e
{
Packit 1c1d7e
  if (indent==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\begin{tabbing}" << endl;
Packit 1c1d7e
    t << "xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill" << endl;
Packit 1c1d7e
    insideTabbing=TRUE;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_indent=indent;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endAnonTypeScope(int indent)
Packit 1c1d7e
{
Packit 1c1d7e
  if (indent==0)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << endl << "\\end{tabbing}";
Packit 1c1d7e
    insideTabbing=FALSE;
Packit 1c1d7e
  }
Packit 1c1d7e
  m_indent=indent;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberTemplateParams()
Packit 1c1d7e
{
Packit 1c1d7e
  if (templateMemberItem)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "{\\footnotesize ";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberTemplateParams(const char *,const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (templateMemberItem)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "}\\\\";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberItem(const char *,int annoType,const char *) 
Packit 1c1d7e
{ 
Packit 1c1d7e
  //printf("LatexGenerator::startMemberItem(%d)\n",annType);
Packit 1c1d7e
  if (!insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\item " << endl; 
Packit 1c1d7e
    templateMemberItem = (annoType == 3);
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberItem() 
Packit 1c1d7e
{
Packit 1c1d7e
  if (insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\\\";
Packit 1c1d7e
  } 
Packit 1c1d7e
  templateMemberItem = FALSE;
Packit 1c1d7e
  t << endl; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberDescription(const char *,const char *) 
Packit 1c1d7e
{
Packit 1c1d7e
  if (!insideTabbing)
Packit 1c1d7e
  { 
Packit 1c1d7e
    t << "\\begin{DoxyCompactList}\\small\\item\\em "; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    for (int i=0;i<m_indent+2;i++) t << "\\>";
Packit 1c1d7e
    t << "{\\em ";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberDescription() 
Packit 1c1d7e
{ 
Packit 1c1d7e
  if (!insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    //t << "\\item\\end{DoxyCompactList}"; 
Packit 1c1d7e
    t << "\\end{DoxyCompactList}"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "}\\\\\n";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeNonBreakableSpace(int) 
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("writeNonBreakbleSpace()\n");
Packit 1c1d7e
  if (insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\>";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "~"; 
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
// ----------------------------------------------
Packit 1c1d7e
// nesting of functions below:
Packit 1c1d7e
// startDescTable()
Packit 1c1d7e
// - startDescTableRow()
Packit 1c1d7e
//   - startDescTableTitle()
Packit 1c1d7e
//   - endDescTabelTitle()
Packit 1c1d7e
//   - startDescTableData()
Packit 1c1d7e
//   - endDescTableData()
Packit 1c1d7e
// - endDescTableRow()
Packit 1c1d7e
// - startDescTableRow()
Packit 1c1d7e
//   - ...
Packit 1c1d7e
// - endDescTableRow()
Packit 1c1d7e
// endDescTable()
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescTable(const char *title)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\begin{DoxyEnumFields}{" << title << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescTable()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\end{DoxyEnumFields}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescTableRow()
Packit 1c1d7e
{
Packit 1c1d7e
  // this is needed to prevent the \hypertarget, \label, and \index commands from messing up
Packit 1c1d7e
  // the row height (based on http://tex.stackexchange.com/a/186102)
Packit 1c1d7e
  t << "\\raisebox{\\heightof{T}}[0pt][0pt]{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescTableRow()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescTableTitle()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescTableTitle()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescTableData()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "&";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescTableData()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\\\\n\\hline\n" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::lastIndexPage() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberList()  
Packit 1c1d7e
{ 
Packit 1c1d7e
  if (!insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\begin{DoxyCompactItemize}" << endl; 
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberList()    
Packit 1c1d7e
{
Packit 1c1d7e
  //printf("LatexGenerator::endMemberList(%d)\n",insideTabbing);
Packit 1c1d7e
  if (!insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\end{DoxyCompactItemize}"   << endl; 
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberGroupHeader(bool hasHeader)
Packit 1c1d7e
{
Packit 1c1d7e
  if (hasHeader) t << "\\begin{Indent}";
Packit 1c1d7e
  t << "\\textbf{ ";
Packit 1c1d7e
  // changed back to rev 756 due to bug 660501
Packit 1c1d7e
  //if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  //{
Packit 1c1d7e
  //  t << "\\subparagraph*{";
Packit 1c1d7e
  //}
Packit 1c1d7e
  //else
Packit 1c1d7e
  //{
Packit 1c1d7e
  //  t << "\\paragraph*{";
Packit 1c1d7e
  //}
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberGroupHeader()
Packit 1c1d7e
{
Packit 1c1d7e
  // changed back to rev 756 due to bug 660501
Packit 1c1d7e
  t << "}\\par" << endl;
Packit 1c1d7e
  //t << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberGroupDocs()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "{\\em ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberGroupDocs()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberGroup()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberGroup(bool hasHeader)
Packit 1c1d7e
{
Packit 1c1d7e
  if (hasHeader)t << "\\end{Indent}"; 
Packit 1c1d7e
  t << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDotGraph() 
Packit 1c1d7e
{
Packit 1c1d7e
  newParagraph();
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDotGraph(const DotClassGraph &g) 
Packit 1c1d7e
{
Packit 1c1d7e
  g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startInclDepGraph() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endInclDepGraph(const DotInclDepGraph &g) 
Packit 1c1d7e
{
Packit 1c1d7e
  g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startGroupCollaboration() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endGroupCollaboration(const DotGroupCollaboration &g) 
Packit 1c1d7e
{
Packit 1c1d7e
  g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startCallGraph() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endCallGraph(const DotCallGraph &g) 
Packit 1c1d7e
{
Packit 1c1d7e
  g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDirDepGraph() 
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDirDepGraph(const DotDirDeps &g) 
Packit 1c1d7e
{
Packit 1c1d7e
  g.writeGraph(t,GOF_EPS,EOF_LaTeX,Config_getString(LATEX_OUTPUT),fileName,relPath);
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescription() 
Packit 1c1d7e
{ 
Packit 1c1d7e
  t << "\\begin{description}" << endl; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescription()   
Packit 1c1d7e
{ 
Packit 1c1d7e
  t << "\\end{description}" << endl; 
Packit 1c1d7e
  firstDescItem=TRUE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startDescItem()    
Packit 1c1d7e
{ 
Packit 1c1d7e
  firstDescItem=TRUE;
Packit 1c1d7e
  t << "\\item["; 
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endDescItem()      
Packit 1c1d7e
{ 
Packit 1c1d7e
  if (firstDescItem) 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "]" << endl;
Packit 1c1d7e
    firstDescItem=FALSE;
Packit 1c1d7e
  } 
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    lineBreak();
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startSimpleSect(SectionTypes,const char *file,
Packit 1c1d7e
                                     const char *anchor,const char *title)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\begin{Desc}\n\\item[";
Packit 1c1d7e
  if (file)
Packit 1c1d7e
  {
Packit 1c1d7e
    writeObjectLink(0,file,anchor,title);
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    docify(title);
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "]";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endSimpleSect()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\end{Desc}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startParamList(ParamListTypes,const char *title)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\begin{Desc}\n\\item[";
Packit 1c1d7e
  docify(title);
Packit 1c1d7e
  t << "]";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endParamList()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\end{Desc}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startParameterList(bool openBracket)
Packit 1c1d7e
{
Packit 1c1d7e
  /* start of ParameterType ParameterName list */
Packit 1c1d7e
  if (openBracket) t << "(";
Packit 1c1d7e
  t << "\\begin{DoxyParamCaption}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endParameterList()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startParameterType(bool first,const char *key)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\item[{";
Packit 1c1d7e
  if (!first && key) t << key;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endParameterType()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}]";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startParameterName(bool /*oneArgOnly*/)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "{";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endParameterName(bool last,bool /*emptyList*/,bool closeBracket)
Packit 1c1d7e
{
Packit 1c1d7e
  t << " }";
Packit 1c1d7e
  if (last)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\end{DoxyParamCaption}";
Packit 1c1d7e
    if (closeBracket) t << ")";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::exceptionEntry(const char* prefix,bool closeBracket)
Packit 1c1d7e
{
Packit 1c1d7e
  if (prefix)
Packit 1c1d7e
      t << " " << prefix;
Packit 1c1d7e
  else if (closeBracket)
Packit 1c1d7e
      t << ")";
Packit 1c1d7e
  t << " ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeDoc(DocNode *n,Definition *ctx,MemberDef *)
Packit 1c1d7e
{
Packit 1c1d7e
  LatexDocVisitor *visitor =
Packit 1c1d7e
    new LatexDocVisitor(t,*this,ctx?ctx->getDefFileExtension():QCString(""),insideTabbing);
Packit 1c1d7e
  n->accept(visitor);
Packit 1c1d7e
  delete visitor;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startConstraintList(const char *header)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\begin{Desc}\n\\item[";
Packit 1c1d7e
  docify(header);
Packit 1c1d7e
  t << "]";
Packit 1c1d7e
  t << "\\begin{description}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startConstraintParam()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\item[{\\em ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endConstraintParam()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startConstraintType()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "} : {\\em ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endConstraintType()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}]";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startConstraintDocs()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endConstraintDocs()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endConstraintList()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\end{description}" << endl;
Packit 1c1d7e
  t << "\\end{Desc}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startCodeFragment()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\n\\begin{DoxyCode}\n";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endCodeFragment()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\end{DoxyCode}\n";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startInlineHeader()
Packit 1c1d7e
{
Packit 1c1d7e
  if (Config_getBool(COMPACT_LATEX)) 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\paragraph*{"; 
Packit 1c1d7e
  }
Packit 1c1d7e
  else 
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\subsubsection*{";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endInlineHeader()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::lineBreak(const char *)
Packit 1c1d7e
{
Packit 1c1d7e
  if (insideTabbing)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\\\\n";
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\newline\n";
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startMemberDocSimple(bool isEnum)
Packit 1c1d7e
{
Packit 1c1d7e
  if (isEnum)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\begin{DoxyEnumFields}{";
Packit 1c1d7e
    docify(theTranslator->trEnumerationValues());
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\begin{DoxyFields}{";
Packit 1c1d7e
    docify(theTranslator->trCompoundMembers());
Packit 1c1d7e
  }
Packit 1c1d7e
  t << "}" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endMemberDocSimple(bool isEnum)
Packit 1c1d7e
{
Packit 1c1d7e
  if (isEnum)
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\end{DoxyEnumFields}" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
  else
Packit 1c1d7e
  {
Packit 1c1d7e
    t << "\\end{DoxyFields}" << endl;
Packit 1c1d7e
  }
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startInlineMemberType()
Packit 1c1d7e
{
Packit 1c1d7e
  insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endInlineMemberType()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "&" << endl;
Packit 1c1d7e
  insideTabbing = FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startInlineMemberName()
Packit 1c1d7e
{
Packit 1c1d7e
  insideTabbing = TRUE; // to prevent \+ from causing unwanted breaks
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endInlineMemberName()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "&" << endl;
Packit 1c1d7e
  insideTabbing = FALSE;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startInlineMemberDoc()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endInlineMemberDoc()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\\\\n\\hline\n" << endl;
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::startLabels()
Packit 1c1d7e
{
Packit 1c1d7e
  t << "\\hspace{0.3cm}";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::writeLabel(const char *l,bool isLast)
Packit 1c1d7e
{
Packit 1c1d7e
  t << "{\\ttfamily [" << l << "]}";
Packit 1c1d7e
  if (!isLast) t << ", ";
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e
void LatexGenerator::endLabels()
Packit 1c1d7e
{
Packit 1c1d7e
}
Packit 1c1d7e
Packit 1c1d7e