summaryrefslogtreecommitdiffstats
path: root/src/latexgen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/latexgen.cpp')
-rw-r--r--src/latexgen.cpp253
1 files changed, 139 insertions, 114 deletions
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 2f2f62b..2f49efa 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -15,6 +15,8 @@
*/
#include <stdlib.h>
+
+#include "qtbc.h"
#include <qdir.h>
#include "latexgen.h"
#include "config.h"
@@ -24,9 +26,9 @@
#include "diagram.h"
#include "language.h"
-//static QString escapeLabelName(const QString &s)
+//static QCString escapeLabelName(const QCString &s)
//{
-// QString result;
+// QCString result;
// uint i;
// for (i=0;i<s.length();i++)
// {
@@ -45,7 +47,7 @@
LatexGenerator::LatexGenerator()
: OutputGenerator()
{
- dir=latexOutputDir;
+ dir=Config::latexOutputDir;
col=0;
}
@@ -68,7 +70,7 @@ void LatexGenerator::append(const OutputGenerator *g)
void LatexGenerator::init()
{
- QString dir=latexOutputDir;
+ QCString dir=Config::latexOutputDir;
QDir d(dir);
if (!d.exists() && !d.mkdir(dir))
{
@@ -76,7 +78,7 @@ void LatexGenerator::init()
exit(1);
}
- QString fileName=dir+"/Makefile";
+ QCString fileName=dir+"/Makefile";
QFile file(fileName);
if (!file.open(IO_WriteOnly))
{
@@ -104,7 +106,7 @@ void LatexGenerator::init()
void LatexGenerator::startFile(const char *name,const char *,bool)
{
- QString fileName=name;
+ QCString fileName=name;
if (fileName.right(4)!=".tex" && fileName.right(4)!=".sty") fileName+=".tex";
startPlainFile(fileName);
}
@@ -126,16 +128,16 @@ void LatexGenerator::startProjectNumber()
void LatexGenerator::startIndexSection(IndexSections is)
{
- QString paperName;
+ QCString paperName;
switch (is)
{
case isTitlePageStart:
{
- if (paperType=="a4wide") paperName="a4"; else paperName=paperType;
+ if (Config::paperType=="a4wide") paperName="a4"; else paperName=Config::paperType;
t << "\\documentclass[" << paperName << "paper]{";
- if (compactLatexFlag) t << "article"; else t << "book";
+ if (Config::compactLatexFlag) t << "article"; else t << "book";
t << "}\n";
- if (paperType=="a4wide") t << "\\usepackage{a4wide}\n";
+ if (Config::paperType=="a4wide") t << "\\usepackage{a4wide}\n";
t << "\\usepackage{makeidx}\n"
"\\usepackage{fancyheadings}\n"
"\\usepackage{epsf}\n"
@@ -145,11 +147,11 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
t << "\\usepackage{" << theTranslator->latexBabelPackage() << "}\n";
}
- const char *s=extraPackageList.first();
+ const char *s=Config::extraPackageList.first();
while (s)
{
t << "\\usepackage{" << s << "}\n";
- s=extraPackageList.next();
+ s=Config::extraPackageList.next();
}
t << "\\makeindex\n"
"\\setcounter{tocdepth}{1}\n"
@@ -169,23 +171,23 @@ void LatexGenerator::startIndexSection(IndexSections is)
t << "}\n\\author{";
break;
case isModuleIndex:
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Module Index}\n"
break;
case isNamespaceIndex:
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Namespace Index}\"
break;
case isClassHierarchyIndex:
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Hierarchical Index}\n"
break;
case isCompoundIndex:
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Annotated Compound Index}\n"
break;
case isFileIndex:
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Annotated File Index}\n"
break;
case isModuleDocumentation:
@@ -196,7 +198,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (gd->hasDocumentation() || gd->countMembers()>0)
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Module Documentation}\n";
found=TRUE;
}
@@ -212,7 +214,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (nd->hasDocumentation())
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; // Namespace Documentation}\n":
found=TRUE;
}
@@ -228,7 +230,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (!cd->isReference() && cd->isVisible())
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Compound Documentation}\n";
found=TRUE;
}
@@ -249,7 +251,7 @@ void LatexGenerator::startIndexSection(IndexSections is)
{
if (isFirst)
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //File Documentation}\n";
isFirst=FALSE;
break;
@@ -263,13 +265,13 @@ void LatexGenerator::startIndexSection(IndexSections is)
break;
case isExampleDocumentation:
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Example Documentation}\n";
}
break;
case isPageDocumentation:
{
- if (compactLatexFlag) t << "\\section"; else t << "\\chapter";
+ if (Config::compactLatexFlag) t << "\\section"; else t << "\\chapter";
t << "{"; //Page Documentation}\n";
}
break;
@@ -289,9 +291,9 @@ void LatexGenerator::endIndexSection(IndexSections is)
"\\date{" << dateToString(TRUE) << "}\n"
"\\maketitle\n"
"\\pagenumbering{roman}\n";
- if (!compactLatexFlag) t << "\\clearemptydoublepage\n";
+ if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
t << "\\tableofcontents\n";
- if (!compactLatexFlag) t << "\\clearemptydoublepage\n";
+ if (!Config::compactLatexFlag) t << "\\clearemptydoublepage\n";
t << "\\pagenumbering{arabic}\n";
break;
case isModuleIndex:
@@ -326,7 +328,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
{
if (gd->hasDocumentation() || gd->countMembers()>0)
{
- if (compactLatexFlag) t << "\\input"; else t << "\\include";
+ if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << gd->getOutputFileBase() << "}\n";
}
gd=groupList.next();
@@ -350,7 +352,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
{
if (nd->hasDocumentation() || nd->countMembers()>0)
{
- if (compactLatexFlag) t << "\\input"; else t << "\\include";
+ if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << nd->getOutputFileBase() << "}\n";
}
nd=namespaceList.next();
@@ -382,7 +384,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
// )
if (!cd->isReference() && cd->isVisible())
{
- if (compactLatexFlag) t << "\\input"; else t << "\\include";
+ if (Config::compactLatexFlag) t << "\\input"; else t << "\\include";
t << "{" << cd->getOutputFileBase() << "}\n";
}
cd=classList.next();
@@ -407,7 +409,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
else
{
- if (compactLatexFlag) t << "\\input" ; else t << "\\include";
+ if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include";
t << "{" << fd->getOutputFileBase() << "}\n";
}
}
@@ -428,7 +430,7 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (pi)
{
- if (compactLatexFlag) t << "\\input" ; else t << "\\include";
+ if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include";
t << "{" << convertSlashes(pi->name,TRUE) << "-example}\n";
pi=exampleList.next();
}
@@ -440,8 +442,8 @@ void LatexGenerator::endIndexSection(IndexSections is)
PageInfo *pi=pageList.first();
if (pi)
{
- QString pageName;
- if (caseSensitiveNames)
+ QCString pageName;
+ if (Config::caseSensitiveNames)
pageName=pi->name.copy();
else
pageName=pi->name.lower();
@@ -450,9 +452,9 @@ void LatexGenerator::endIndexSection(IndexSections is)
}
while (pi)
{
- if (compactLatexFlag) t << "\\input" ; else t << "\\include";
- QString pageName;
- if (caseSensitiveNames)
+ if (Config::compactLatexFlag) t << "\\input" ; else t << "\\include";
+ QCString pageName;
+ if (Config::caseSensitiveNames)
pageName=pi->name.copy();
else
pageName=pi->name.lower();
@@ -473,7 +475,7 @@ void LatexGenerator::writeStyleInfo(int part)
{
case 0:
{
- QString pname=projectName.stripWhiteSpace();
+ QCString pname=Config::projectName.stripWhiteSpace();
startPlainFile("doxygen.sty");
t << "\\NeedsTeXFormat{LaTeX2e}\n";
t << "\\ProvidesPackage{doxygen}\n";
@@ -484,7 +486,7 @@ void LatexGenerator::writeStyleInfo(int part)
t << "\\addtolength{\\headwidth}{\\marginparwidth}\n";
t << "\\newcommand{\\clearemptydoublepage}{\\newpage{\\pagestyle{empty}";
t << "\\cleardoublepage}}\n";
- if (!compactLatexFlag)
+ if (!Config::compactLatexFlag)
t << "\\renewcommand{\\chaptermark}[1]{\\markboth{#1}{}}\n";
t << "\\renewcommand{\\sectionmark}[1]{\\markright{\\thesection\\ #1}}\n";
t << "\\lhead[\\fancyplain{}{\\bfseries\\thepage}]\n";
@@ -501,7 +503,7 @@ void LatexGenerator::writeStyleInfo(int part)
case 2:
{
t << " Dimitri van Heesch \\copyright 1997-1999}]{}\n";
- //QString dtString=dateToString(FALSE);
+ //QCString dtString=dateToString(FALSE);
t << "\\lfoot[]{\\fancyplain{}{\\bfseries\\scriptsize ";
}
break;
@@ -646,7 +648,7 @@ void LatexGenerator::writeObjectLink(const char *, const char *,
void LatexGenerator::writePageRef(const char *clname, const char *anchor)
{
- t << " {\\rm (p. \\pageref{";
+ t << " {\\rm (p.~\\pageref{";
if (clname) t << clname;
if (anchor) t << "_" << anchor;
t << "})}";
@@ -662,12 +664,12 @@ void LatexGenerator::writeCodeLink(const char *,const char *,
void LatexGenerator::startTitle()
{
- if (compactLatexFlag) t << "\\subsection{"; else t << "\\section{";
+ if (Config::compactLatexFlag) t << "\\subsection{"; else t << "\\section{";
}
void LatexGenerator::startGroupHeader()
{
- if (compactLatexFlag) t << "\\subsubsection*{"; else t << "\\subsection*{";
+ if (Config::compactLatexFlag) t << "\\subsubsection*{"; else t << "\\subsection*{";
}
void LatexGenerator::endGroupHeader()
@@ -700,7 +702,7 @@ void LatexGenerator::startMemberDoc(const char *clname,
}
t << "}" << endl;
//
- if (compactLatexFlag) t << "\\subsubsection{"; else t << "\\subsection{";
+ if (Config::compactLatexFlag) t << "\\subsubsection{"; else t << "\\subsection{";
t << "\\setlength{\\rightskip}{0pt plus 5cm}";
}
@@ -762,7 +764,7 @@ void LatexGenerator::writeSectionRefAnchor(const char *,const char *lab,
startBold();
docify(title);
endBold();
- t << " (p. \\pageref{" << lab << "})" << endl;
+ t << " (p.~\\pageref{" << lab << "})" << endl;
}
//void LatexGenerator::docify(const char *str)
@@ -808,78 +810,101 @@ void LatexGenerator::docify(const char *str)
else
{ t << "$\\backslash$"; }
break;
- // the Latin-1 characters
- case 161: t << "!`"; break;
- case 181: t << "$\\mu$"; break;
- case 191: t << "?`"; break;
- case 192: t << "\\`{A}"; break;
- case 193: t << "\\'{A}"; break;
- case 194: t << "\\^{A}"; break;
- case 195: t << "\\~{A}"; break;
- case 196: t << "\\\"{A}"; break;
- case 197: t << "\\AA "; break;
- case 198: t << "\\AE "; break;
- case 199: t << "\\c{C}"; break;
- case 200: t << "\\`{E}"; break;
- case 201: t << "\\'{E}"; break;
- case 202: t << "\\^{E}"; break;
- case 203: t << "\\\"{E}"; break;
- case 204: t << "\\`{I}"; break;
- case 205: t << "\\'{I}"; break;
- case 206: t << "\\^{I}"; break;
- case 207: t << "\\\"{I}"; break;
- case 208: t << "D "; break; // anyone know the real code?
- case 209: t << "\\~{N}"; break;
- case 210: t << "\\`{O}"; break;
- case 211: t << "\\'{O}"; break;
- case 212: t << "\\^{O}"; break;
- case 213: t << "\\~{O}"; break;
- case 214: t << "\\\"{O}"; break;
- case 215: t << "$\\times$"; break;
- case 216: t << "\\O"; break;
- case 217: t << "\\`{U}"; break;
- case 218: t << "\\'{U}"; break;
- case 219: t << "\\^{U}"; break;
- case 220: t << "\\\"{U}"; break;
- case 221: t << "\\'{Y}"; break;
- case 223: t << "\"s "; break; // assumes german package
- case 224: t << "\\`{a}"; break;
- case 225: t << "\\'{a}"; break;
- case 226: t << "\\^{a}"; break;
- case 227: t << "\\~{a}"; break;
- case 228: t << "\\\"{a}"; break;
- case 229: t << "\\aa "; break;
- case 230: t << "\\ae "; break;
- case 231: t << "\\c{c}"; break;
- case 232: t << "\\`{e}"; break;
- case 233: t << "\\'{e}"; break;
- case 234: t << "\\^{e}"; break;
- case 235: t << "\\\"{e}"; break;
- case 236: t << "\\`{\\i}"; break;
- case 237: t << "\\'{\\i}"; break;
- case 238: t << "\\^{\\i}"; break;
- case 239: t << "\\\"{\\i}"; break;
- case 241: t << "\\~{n}"; break;
- case 242: t << "\\`{o}"; break;
- case 243: t << "\\'{o}"; break;
- case 244: t << "\\^{o}"; break;
- case 245: t << "\\~{o}"; break;
- case 246: t << "\\\"{o}"; break;
- case 248: t << "\\o "; break;
- case 249: t << "\\`{u}"; break;
- case 250: t << "\\'{u}"; break;
- case 251: t << "\\^{u}"; break;
- case 252: t << "\\\"{u}"; break;
- case 253: t << "\\'{y}"; break;
- case 255: t << "\\\"{y}"; break;
default:
- if ((isupper(c) && islower(pc))
- // ||
- // (pc!=':' && c==':') ||
- // (pc==':' && c!=':')
- ) t << "\\-";
- t << (char)c;
+ if (theTranslator->latexBabelPackage()=="a4j")
+ { // language is japanese
+ if (c>=128) // wide character
+ {
+ t << (char)c;
+ if (*p)
+ {
+ c = *p++;
+ t << (char)c;
+ }
+ else // ascii char => see if we can insert hypenation hint
+ {
+ if (isupper(c) && islower(pc)) t << "\\-";
+ t << (char)c;
+ }
+ }
+ }
+ else // language is other than japanese
+ {
+ switch(c)
+ {
+ // the Latin-1 characters
+ case 161: t << "!`"; break;
+ case 181: t << "$\\mu$"; break;
+ case 191: t << "?`"; break;
+ case 192: t << "\\`{A}"; break;
+ case 193: t << "\\'{A}"; break;
+ case 194: t << "\\^{A}"; break;
+ case 195: t << "\\~{A}"; break;
+ case 196: t << "\\\"{A}"; break;
+ case 197: t << "\\AA "; break;
+ case 198: t << "\\AE "; break;
+ case 199: t << "\\c{C}"; break;
+ case 200: t << "\\`{E}"; break;
+ case 201: t << "\\'{E}"; break;
+ case 202: t << "\\^{E}"; break;
+ case 203: t << "\\\"{E}"; break;
+ case 204: t << "\\`{I}"; break;
+ case 205: t << "\\'{I}"; break;
+ case 206: t << "\\^{I}"; break;
+ case 207: t << "\\\"{I}"; break;
+ case 208: t << "D "; break; // anyone know the real code?
+ case 209: t << "\\~{N}"; break;
+ case 210: t << "\\`{O}"; break;
+ case 211: t << "\\'{O}"; break;
+ case 212: t << "\\^{O}"; break;
+ case 213: t << "\\~{O}"; break;
+ case 214: t << "\\\"{O}"; break;
+ case 215: t << "$\\times$"; break;
+ case 216: t << "\\O"; break;
+ case 217: t << "\\`{U}"; break;
+ case 218: t << "\\'{U}"; break;
+ case 219: t << "\\^{U}"; break;
+ case 220: t << "\\\"{U}"; break;
+ case 221: t << "\\'{Y}"; break;
+ case 223: t << "\"s "; break; // assumes german package
+ case 224: t << "\\`{a}"; break;
+ case 225: t << "\\'{a}"; break;
+ case 226: t << "\\^{a}"; break;
+ case 227: t << "\\~{a}"; break;
+ case 228: t << "\\\"{a}"; break;
+ case 229: t << "\\aa "; break;
+ case 230: t << "\\ae "; break;
+ case 231: t << "\\c{c}"; break;
+ case 232: t << "\\`{e}"; break;
+ case 233: t << "\\'{e}"; break;
+ case 234: t << "\\^{e}"; break;
+ case 235: t << "\\\"{e}"; break;
+ case 236: t << "\\`{\\i}"; break;
+ case 237: t << "\\'{\\i}"; break;
+ case 238: t << "\\^{\\i}"; break;
+ case 239: t << "\\\"{\\i}"; break;
+ case 241: t << "\\~{n}"; break;
+ case 242: t << "\\`{o}"; break;
+ case 243: t << "\\'{o}"; break;
+ case 244: t << "\\^{o}"; break;
+ case 245: t << "\\~{o}"; break;
+ case 246: t << "\\\"{o}"; break;
+ case 248: t << "\\o "; break;
+ case 249: t << "\\`{u}"; break;
+ case 250: t << "\\'{u}"; break;
+ case 251: t << "\\^{u}"; break;
+ case 252: t << "\\\"{u}"; break;
+ case 253: t << "\\'{y}"; break;
+ case 255: t << "\\\"{y}"; break;
+ default: // normal ascii char
+ {
+ // see if we can insert an hyphenation hint
+ if (isupper(c) && islower(pc)) t << "\\-";
+ t << (char)c;
+ }
+ }
+ }
}
pc = c;
}
@@ -916,7 +941,7 @@ void LatexGenerator::writeChar(char c)
void LatexGenerator::startClassDiagram()
{
- if (compactLatexFlag) t << "\\subsubsection*"; else t << "\\subsection*";
+ if (Config::compactLatexFlag) t << "\\subsubsection*"; else t << "\\subsection*";
t << "{";
}