Skip to content

Commit

Permalink
Problem with code inside a Doxy table in LaTeX
Browse files Browse the repository at this point in the history
When code is used inside a problem occurs with \discretionary
- Inside a table \discretionary is disabled when code is used.
- \newline should not be appended to a code line (is already implicitly done by the command).
  • Loading branch information
albert-github committed May 26, 2018
1 parent 63696c0 commit ed86c70
Show file tree
Hide file tree
Showing 4 changed files with 45 additions and 18 deletions.
25 changes: 19 additions & 6 deletions src/latexdocvisitor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
#include "htmlattrib.h"
#include <qfileinfo.h>
#include "latexdocvisitor.h"
#include "latexgen.h"
#include "docparser.h"
#include "language.h"
#include "doxygen.h"
Expand Down Expand Up @@ -291,10 +292,12 @@ void LatexDocVisitor::visit(DocVerbatim *s)
{
case DocVerbatim::Code:
{
m_t << "\n\\begin{DoxyCode}\n";
m_t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(lang)
->parseCode(m_ci,s->context(),s->text(),langExt,
s->isExample(),s->exampleFile());
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCode}\n";
}
break;
Expand Down Expand Up @@ -399,7 +402,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
{
case DocInclude::IncWithLines:
{
m_t << "\n\\begin{DoxyCodeInclude}\n";
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
Expand All @@ -415,11 +419,13 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
TRUE // show line numbers
);
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
case DocInclude::Include:
m_t << "\n\\begin{DoxyCodeInclude}\n";
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,inc->context(),
inc->text(),langExt,inc->isExample(),
Expand All @@ -431,6 +437,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
FALSE
);
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}\n";
break;
case DocInclude::DontInclude:
Expand All @@ -447,7 +454,8 @@ void LatexDocVisitor::visit(DocInclude *inc)
break;
case DocInclude::Snippet:
{
m_t << "\n\\begin{DoxyCodeInclude}\n";
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
Expand All @@ -456,14 +464,16 @@ void LatexDocVisitor::visit(DocInclude *inc)
inc->isExample(),
inc->exampleFile()
);
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
case DocInclude::SnipWithLines:
{
QFileInfo cfi( inc->file() );
FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
m_t << "\n\\begin{DoxyCodeInclude}\n";
m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
Expand All @@ -478,6 +488,7 @@ void LatexDocVisitor::visit(DocInclude *inc)
0, // memberDef
TRUE // show line number
);
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
m_t << "\\end{DoxyCodeInclude}" << endl;
}
break;
Expand All @@ -495,7 +506,8 @@ void LatexDocVisitor::visit(DocIncOperator *op)
// op->type(),op->isFirst(),op->isLast(),op->text().data());
if (op->isFirst())
{
if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}\n";
if (!m_hide) m_t << "\n\\begin{DoxyCodeInclude}{" << usedTableLevels() << "}\n";
LatexCodeGenerator::setDoxyCodeOpen(TRUE);
pushEnabled();
m_hide = TRUE;
}
Expand All @@ -515,6 +527,7 @@ void LatexDocVisitor::visit(DocIncOperator *op)
if (op->isLast())
{
popEnabled();
LatexCodeGenerator::setDoxyCodeOpen(FALSE);
if (!m_hide) m_t << "\n\\end{DoxyCodeInclude}\n";
}
else
Expand Down
23 changes: 15 additions & 8 deletions src/latexgen.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "resourcemgr.h"

static bool DoxyCodeOpen = FALSE;
static bool DoxyCodeLineOpen = FALSE;
//-------------------------------

LatexCodeGenerator::LatexCodeGenerator(FTextStream &t,const QCString &relPath,const QCString &sourceFileName)
Expand Down Expand Up @@ -101,7 +102,7 @@ void LatexCodeGenerator::codify(const char *str)
m_col+=spacesToNextTabStop;
p++;
break;
case '\n': (usedTableLevels()>0) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++;
case '\n': (usedTableLevels()>0 && !DoxyCodeOpen) ? m_t << "\\newline\n" : m_t << '\n'; m_col=0; p++;
break;
default:
i=0;
Expand Down Expand Up @@ -190,10 +191,10 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co
{
static bool usePDFLatex = Config_getBool(USE_PDFLATEX);
static bool pdfHyperlinks = Config_getBool(PDF_HYPERLINKS);
if (!DoxyCodeOpen)
if (!DoxyCodeLineOpen)
{
m_t << "\\DoxyCodeLine{";
DoxyCodeOpen = TRUE;
DoxyCodeLineOpen = TRUE;
}
if (m_prettyCode)
{
Expand Down Expand Up @@ -228,19 +229,19 @@ void LatexCodeGenerator::writeLineNumber(const char *ref,const char *fileName,co
void LatexCodeGenerator::startCodeLine(bool)
{
m_col=0;
if (!DoxyCodeOpen)
if (!DoxyCodeLineOpen)
{
m_t << "\\DoxyCodeLine{";
DoxyCodeOpen = TRUE;
DoxyCodeLineOpen = TRUE;
}
}

void LatexCodeGenerator::endCodeLine()
{
if (DoxyCodeOpen)
if (DoxyCodeLineOpen)
{
m_t << "}";
DoxyCodeOpen = FALSE;
DoxyCodeLineOpen = FALSE;
}
codify("\n");
}
Expand All @@ -255,6 +256,10 @@ void LatexCodeGenerator::endFontClass()
m_t << "}";
}

void LatexCodeGenerator::setDoxyCodeOpen(bool val)
{
DoxyCodeOpen = val;
}

//-------------------------------

Expand Down Expand Up @@ -2228,12 +2233,14 @@ void LatexGenerator::endConstraintList()

void LatexGenerator::startCodeFragment()
{
t << "\n\\begin{DoxyCode}\n";
t << "\n\\begin{DoxyCode}{" << usedTableLevels() << "}\n";
DoxyCodeOpen = TRUE;
}

void LatexGenerator::endCodeFragment()
{
t << "\\end{DoxyCode}\n";
DoxyCodeOpen = FALSE;
}

void LatexGenerator::startInlineHeader()
Expand Down
1 change: 1 addition & 0 deletions src/latexgen.h
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,7 @@ class LatexCodeGenerator : public CodeOutputInterface
void writeCodeAnchor(const char *) {}
void setCurrentDoc(Definition *,const char *,bool) {}
void addWord(const char *,bool) {}
static void setDoxyCodeOpen(bool val);

private:
void _writeCodeLink(const char *className,
Expand Down
14 changes: 10 additions & 4 deletions templates/latex/doxygen.sty
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@
}

% Used by @code ... @endcode
\newenvironment{DoxyCode}{%
\newenvironment{DoxyCode}[1]{%
\par%
\scriptsize%
\normalfont\ttfamily%
Expand All @@ -106,7 +106,13 @@
\settowidth{\CodeWidthChar}{?}%
\settoheight{\CodeHeightChar}{?}%
\setlength{\parskip}{0ex plus 0ex minus 0ex}%
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
\ifthenelse{\equal{#1}{0}}
{
{\lccode`~32 \lowercase{\global\let~}\NiceSpace}\obeyspaces%
}
{
{\lccode`~32 \lowercase{\global\let~}}\obeyspaces%
}

}{%
\normalfont%
Expand All @@ -128,8 +134,8 @@
\fi

% Used by @example, @include, @includelineno and @dontinclude
\newenvironment{DoxyCodeInclude}{%
\DoxyCode%
\newenvironment{DoxyCodeInclude}[1]{%
\DoxyCode{#1}%
}{%
\endDoxyCode%
}
Expand Down

0 comments on commit ed86c70

Please sign in to comment.