Skip to content

Commit c3340d6

Browse files
committed
issue doxygen#11939 LaTeX output does not properly break lines with long doxylink
Some improvements but still problems with (major problems) with `{` and `}` Temporary stalling / withdrawing
1 parent 0e398ae commit c3340d6

File tree

3 files changed

+49
-10
lines changed

3 files changed

+49
-10
lines changed

src/latexgen.cpp

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2405,7 +2405,9 @@ void filterLatexString(TextStream &t,const QCString &str,
24052405
else
24062406
t << static_cast<char>(c);
24072407
break;
2408-
case '#': t << "\\+\\#"; break;
2408+
case '#': if (!insideTabbing) t << "\\+";
2409+
t << "\\#";
2410+
break;
24092411
case '$': t << "\\$"; break;
24102412
case '%': t << "\\%"; break;
24112413
case '^': processEntity(t,pdfHyperlinks,"$^\\wedge$","\\string^"); break;
@@ -2567,6 +2569,7 @@ QCString latexEscapeIndexChars(const QCString &s, bool escapeUnderscore)
25672569
{
25682570
//printf("latexEscapeIndexChars(%s)\n",qPrint(s));
25692571
if (s.isEmpty()) return s;
2572+
bool usePDFHyperLinks = Config_getBool(PDF_HYPERLINKS);
25702573
QCString tmp(s.length(), QCString::ExplicitSize);
25712574
TextStream t;
25722575
const char *p=s.data();
@@ -2577,22 +2580,57 @@ QCString latexEscapeIndexChars(const QCString &s, bool escapeUnderscore)
25772580
{
25782581
case '!': t << "\"!"; break;
25792582
case '"': t << "\"\""; break;
2583+
case '\'': if (!escapeUnderscore) t << "\"'";
2584+
else t << "\\textquotesingle{}";
2585+
break;
25802586
case '@': t << "\"@"; break;
2581-
case '|': t << "\\texttt{\"|}"; break;
2587+
case '|': if (!escapeUnderscore)
2588+
{
2589+
if (usePDFHyperLinks) t << "\"|";
2590+
else t << "||";
2591+
}
2592+
else t << "\\texttt{\"|}";
2593+
break;
25822594
case '[': t << "["; break;
25832595
case ']': t << "]"; break;
2584-
case '{': t << "\\lcurly{}"; break;
2585-
case '}': t << "\\rcurly{}"; break;
2596+
//case '{': t << "\\lcurly{}"; break;
2597+
//case '}': t << "\\rcurly{}"; break;
25862598
case '_': if (!escapeUnderscore) {t << "_"; break;}
2599+
case '<': if (!escapeUnderscore && c=='<') {t << "<"; break;} // due to fall through
2600+
case '>': if (!escapeUnderscore && c=='>') {t << ">"; break;} // due to fall through
2601+
case '$': if (!escapeUnderscore && c=='$') {t << "$"; break;} // due to fall through
2602+
case '{': if (!escapeUnderscore && c=='{') {t << "\\texttt{\\{}"; break;} // due to fall through
2603+
case '}': if (!escapeUnderscore && c=='}') {t << "\\texttt{\\}}"; break;} // due to fall through
2604+
case '~': if (!escapeUnderscore && c=='~') {t << "~"; break;} // due to fall through
2605+
case '-': if (!escapeUnderscore && c=='-') {t << "-"; break;} // due to fall through
2606+
case '#': if (!escapeUnderscore && c=='#') // due to fall through
2607+
{
2608+
t << (usePDFHyperLinks? "\\#": "#");
2609+
break;
2610+
}
2611+
case '\\': if (!escapeUnderscore && c=='\\') // due to fall through
2612+
{
2613+
t << (usePDFHyperLinks? "\\\\": "\\");
2614+
break;
2615+
}
25872616
// NOTE: adding a case here, means adding it to while below as well!
25882617
default:
25892618
{
25902619
int i=0;
25912620
// collect as long string as possible, before handing it to docify
25922621
tmp[i++]=c;
2593-
while ((c=*p) && c!='"' && c!='@' && c!='[' && c!=']' && c!='!' && c!='{' && c!='}' && c!='|')
2622+
while ((c=*p) && c!='"' && c!='@' && c!='[' && c!=']' && c!='!' && c!='{' && c!='}' && c!='|' && c!='\'')
25942623
{
25952624
if (c=='_' && !escapeUnderscore) break;
2625+
if (c=='<' && !escapeUnderscore) break;
2626+
if (c=='>' && !escapeUnderscore) break;
2627+
if (c=='$' && !escapeUnderscore) break;
2628+
if (c=='~' && !escapeUnderscore) break;
2629+
if (c=='{' && !escapeUnderscore) break;
2630+
if (c=='}' && !escapeUnderscore) break;
2631+
if (c=='-' && !escapeUnderscore) break;
2632+
if (c=='#' && !escapeUnderscore) break;
2633+
if (c=='\\' && !escapeUnderscore) break;
25962634
tmp[i++]=c;
25972635
p++;
25982636
}

templates/latex/doxygen.sty

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -896,3 +896,9 @@
896896
\makeatother
897897
\AddEnumerateCounter{\enumalphalphcnt}{\@enumalphalphcnt}{aa}
898898
\AddEnumerateCounter{\enumAlphAlphcnt}{\@enumAlphAlphcnt}{AA}
899+
900+
\usepackage{xurl}
901+
\newcommand{\doxyIndexDescription}[1]{%
902+
\begin{NoHyper}\url{#1}\end{NoHyper}%
903+
}
904+

templates/latex/header.tex

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,6 @@
4242
\newenvironment{NoHyper}{}{}
4343
%%END !PDF_HYPERLINKS
4444
45-
\usepackage{xurl}
46-
\newcommand{\doxyIndexDescription}[1]{%
47-
\begin{NoHyper}\url{#1}\end{NoHyper}%
48-
}
49-
5045
\usepackage{doxygen}
5146
5247
$extralatexstylesheet

0 commit comments

Comments
 (0)