81 const char *p=str.
data();
106 case '^': *
m_t <<
"\\string^";
110 case '`': *
m_t <<
"\\`{}";
115 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
116 while (spacesToNextTabStop--)
127 case '\n': *
m_t <<
'\n';
137#define COPYCHAR() do { \
138 int bytes = getUTF8CharNumBytes(c); \
139 if (lresult < (i + bytes + 1)) \
142 result = static_cast<char *>(realloc(result, lresult)); \
144 for (int j=0; j<bytes && *p; j++) \
154 c!=0x0c && c!=
'\t' && c!=
'\n' && c!=
' ' && c!=
'^'
204 if (ref.
isEmpty() && usePDFLatex && pdfHyperlinks)
206 *
m_t <<
"\\doxymbox{\\hyperlink{";
228 *
m_t <<
"\\DoxyCodeLine{";
239 lineAnchor.
sprintf(
"_l%05d",l);
242 bool showTarget = usePDFLatex && pdfHyperlinks && !lineAnchor.
isEmpty() && writeLineAnchor;
245 *
m_t <<
"\\Hypertarget{" <<
stripPath(lineAnchor) <<
"}";
274 *
m_t <<
"\\DoxyCodeLine{";
293 *
m_t <<
"\\textcolor{" << name <<
"}{";
315 *
m_t <<
"\\end{" << style <<
"}\n";
373 term(
"Could not open file {} for writing\n",fileName);
381 const int latex_count = 8;
383 t <<
"LATEX_CMD?=" << latex_command <<
"\n"
384 <<
"MKIDX_CMD?=" << mkidx_command <<
"\n"
385 <<
"BIBTEX_CMD?=" << bibtex_command <<
"\n"
386 <<
"LATEX_COUNT?=" << latex_count <<
"\n"
387 <<
"MANUAL_FILE?=" << manual_file <<
"\n"
391 t <<
"all: $(MANUAL_FILE).dvi\n"
393 <<
"ps: $(MANUAL_FILE).ps\n"
395 <<
"pdf: $(MANUAL_FILE).pdf\n"
397 <<
"ps_2on1: $(MANUAL_FILE).ps\n"
399 <<
"pdf_2on1: $(MANUAL_FILE).pdf\n"
401 <<
"$(MANUAL_FILE).ps: $(MANUAL_FILE).dvi\n"
402 <<
"\tdvips -o $(MANUAL_FILE).ps $(MANUAL_FILE).dvi\n"
404 t <<
"$(MANUAL_FILE).pdf: $(MANUAL_FILE).ps\n";
405 t <<
"\tps2pdf $(MANUAL_FILE).ps $(MANUAL_FILE).pdf\n\n";
406 t <<
"$(MANUAL_FILE).dvi: clean $(MANUAL_FILE).tex doxygen.sty\n"
407 <<
"\techo \"Running latex...\"\n"
408 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
409 <<
"\tif [ $$? != 0 ] ; then \\\n"
410 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
413 <<
"\techo \"Running makeindex...\"\n"
414 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n";
417 t <<
"\techo \"Running bibtex...\"\n";
418 t <<
"\t$(BIBTEX_CMD) $(MANUAL_FILE)\n";
419 t <<
"\techo \"Rerunning latex....\"\n";
420 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
421 <<
"\tif [ $$? != 0 ] ; then \\\n"
422 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
426 t <<
"\techo \"Rerunning latex....\"\n"
427 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex\n"
428 <<
"\tlatex_count=$(LATEX_COUNT) ; \\\n"
429 <<
"\twhile grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\\\n"
431 <<
"\t echo \"Rerunning latex....\" ;\\\n"
432 <<
"\t $(LATEX_CMD) $(MANUAL_FILE).tex ; \\\n"
433 <<
"\t $(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
434 <<
"\t if [ $$? != 0 ] ; then \\\n"
435 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
438 <<
"\t latex_count=`expr $$latex_count - 1` ;\\\n"
440 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n"
441 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
442 <<
"\tif [ $$? != 0 ] ; then \\\n"
443 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
446 <<
"$(MANUAL_FILE).ps: $(MANUAL_FILE).ps\n"
447 <<
"\tpsnup -2 $(MANUAL_FILE).ps >$(MANUAL_FILE).ps\n"
449 <<
"$(MANUAL_FILE).pdf: $(MANUAL_FILE).ps\n"
450 <<
"\tps2pdf $(MANUAL_FILE).ps $(MANUAL_FILE).pdf\n";
454 t <<
"all: $(MANUAL_FILE).pdf\n\n"
455 <<
"pdf: $(MANUAL_FILE).pdf\n\n";
456 t <<
"$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex\n";
457 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
458 <<
"\tif [ $$? != 0 ] ; then \\\n"
459 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
462 t <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n";
465 t <<
"\t$(BIBTEX_CMD) $(MANUAL_FILE)\n";
466 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
467 <<
"\tif [ $$? != 0 ] ; then \\\n"
468 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
472 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
473 <<
"\tif [ $$? != 0 ] ; then \\\n"
474 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
477 <<
"\tlatex_count=$(LATEX_COUNT) ; \\\n"
478 <<
"\twhile grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\\\n"
480 <<
"\t echo \"Rerunning latex....\" ;\\\n"
481 <<
"\t $(LATEX_CMD) $(MANUAL_FILE) || \\\n"
482 <<
"\t if [ $$? != 0 ] ; then \\\n"
483 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
486 <<
"\t latex_count=`expr $$latex_count - 1` ;\\\n"
488 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n"
489 <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
490 <<
"\tif [ $$? != 0 ] ; then \\\n"
491 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
499 <<
"*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf\n";
511 const int latex_count = 8;
516 term(
"Could not open file {} for writing\n",fileName);
518 t <<
"pushd %~dp0\r\n";
519 t <<
"if not %errorlevel% == 0 goto :end1\r\n";
521 t <<
"set ORG_LATEX_CMD=%LATEX_CMD%\r\n";
522 t <<
"set ORG_MKIDX_CMD=%MKIDX_CMD%\r\n";
523 t <<
"set ORG_BIBTEX_CMD=%BIBTEX_CMD%\r\n";
524 t <<
"set ORG_LATEX_COUNT=%LATEX_COUNT%\r\n";
525 t <<
"set ORG_MANUAL_FILE=%MANUAL_FILE%\r\n";
526 t <<
"if \"X\"%LATEX_CMD% == \"X\" set LATEX_CMD=" << latex_command <<
"\r\n";
527 t <<
"if \"X\"%MKIDX_CMD% == \"X\" set MKIDX_CMD=" << mkidx_command <<
"\r\n";
528 t <<
"if \"X\"%BIBTEX_CMD% == \"X\" set BIBTEX_CMD=" << bibtex_command <<
"\r\n";
529 t <<
"if \"X\"%LATEX_COUNT% == \"X\" set LATEX_COUNT=" << latex_count <<
"\r\n";
530 t <<
"if \"X\"%MANUAL_FILE% == \"X\" set MANUAL_FILE=" << manual_file <<
"\r\n";
532 t <<
"del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl %MANUAL_FILE%.pdf\r\n\r\n";
536 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
537 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
538 t <<
"echo ----\r\n";
539 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
542 t <<
"%BIBTEX_CMD% %MANUAL_FILE%\r\n";
543 t <<
"echo ----\r\n";
544 t <<
"\t%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
545 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
547 t <<
"setlocal enabledelayedexpansion\r\n";
548 t <<
"set count=%LAT#EX_COUNT%\r\n";
550 t <<
"set content=X\r\n";
551 t <<
"for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
552 t <<
"if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
553 t <<
"if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get bibliographical references right\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
554 t <<
"if !content! == X goto :skip\r\n";
555 t <<
"set /a count-=1\r\n";
556 t <<
"if !count! EQU 0 goto :skip\r\n\r\n";
557 t <<
"echo ----\r\n";
558 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
559 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
560 t <<
"goto :repeat\r\n";
563 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
564 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
565 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
566 t <<
"dvips -o %MANUAL_FILE%.ps %MANUAL_FILE%.dvi\r\n";
568 t <<
" -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
569 "-sOutputFile=%MANUAL_FILE%.pdf -c save pop -f %MANUAL_FILE%.ps\r\n";
573 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
574 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
575 t <<
"echo ----\r\n";
576 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
579 t <<
"%BIBTEX_CMD% %MANUAL_FILE%\r\n";
580 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
581 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
583 t <<
"echo ----\r\n";
584 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
585 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
587 t <<
"setlocal enabledelayedexpansion\r\n";
588 t <<
"set count=%LATEX_COUNT%\r\n";
590 t <<
"set content=X\r\n";
591 t <<
"for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
592 t <<
"if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get cross-references right\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
593 t <<
"if !content! == X for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun to get bibliographical references right\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
594 t <<
"if !content! == X goto :skip\r\n";
595 t <<
"set /a count-=1\r\n";
596 t <<
"if !count! EQU 0 goto :skip\r\n\r\n";
597 t <<
"echo ----\r\n";
598 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
599 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
600 t <<
"goto :repeat\r\n";
603 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
604 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
605 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
608 t <<
"goto :end\r\n";
610 t <<
"@echo ===============\r\n";
611 t <<
"@echo Please consult %MANUAL_FILE%.log to see the error messages\r\n";
612 t <<
"@echo ===============\r\n";
615 t<<
"@REM reset environment\r\n";
617 t<<
"set LATEX_CMD=%ORG_LATEX_CMD%\r\n";
618 t<<
"set ORG_LATEX_CMD=\r\n";
619 t<<
"set MKIDX_CMD=%ORG_MKIDX_CMD%\r\n";
620 t<<
"set ORG_MKIDX_CMD=\r\n";
621 t<<
"set BIBTEX_CMD=%ORG_BIBTEX_CMD%\r\n";
622 t<<
"set ORG_BIBTEX_CMD=\r\n";
623 t<<
"set MANUAL_FILE=%ORG_MANUAL_FILE%\r\n";
624 t<<
"set ORG_MANUAL_FILE=\r\n";
625 t<<
"set LATEX_COUNT=%ORG_LATEX_COUNT%\r\n";
626 t<<
"set ORG_LATEX_COUNT=\r\n";
638 term(
"Could not create output directory {}\n",dname);
692 t <<
"% Latex header for doxygen " << getDoxygenVersion() <<
"\n";
698 t <<
"% Latex footer for doxygen " << getDoxygenVersion() <<
"\n";
704 t <<
"% stylesheet for doxygen " << getDoxygenVersion() <<
"\n";
735 m_t <<
"\\\\[1ex]\\large ";
742 for (
const auto &fileName : extraLatexStyles)
744 if (!fileName.empty())
749 result +=
"\\usepackage{";
771 if (!latex_mkidx_command.
isEmpty())
773 if (latex_mkidx_command[0] ==
'\\')
774 result += latex_mkidx_command;
776 result +=
"\\"+latex_mkidx_command;
780 result +=
"\\makeindex";
789 case LATEX_BATCHMODE_t::NO:
return "";
790 case LATEX_BATCHMODE_t::YES:
return "\\batchmode";
791 case LATEX_BATCHMODE_t::BATCH:
return "\\batchmode";
792 case LATEX_BATCHMODE_t::NON_STOP:
return "\\nonstopmode";
793 case LATEX_BATCHMODE_t::SCROLL:
return "\\scrollmode";
794 case LATEX_BATCHMODE_t::ERROR_STOP:
return "\\errorstopmode";
819 case TIMESTAMP_t::YES:
820 case TIMESTAMP_t::DATETIME:
824 case TIMESTAMP_t::DATE:
828 case TIMESTAMP_t::NO:
839 generatedBy = tg.
str();
844 if (latexEmojiDirectory.
isEmpty()) latexEmojiDirectory =
".";
845 latexEmojiDirectory =
substitute(latexEmojiDirectory,
"\\",
"/");
857 if (!formulaMacrofile.
isEmpty())
881 {
"$latexdocumentpre", [&]() {
return theTranslator->latexDocumentPre(); } },
882 {
"$latexdocumentpost", [&]() {
return theTranslator->latexDocumentPost(); } },
883 {
"$generatedby", [&]() {
return generatedBy; } },
884 {
"$latexbibstyle", [&]() {
return style; } },
885 {
"$latexcitereference", [&]() {
return theTranslator->trCiteReferences(); } },
887 {
"$papertype", [&]() {
return paperType+
"paper"; } },
889 {
"$languagesupport", [&]() {
return theTranslator->latexLanguageSupportCommand(); } },
890 {
"$latexfontenc", [&]() {
return latexFontenc; } },
891 {
"$latexfont", [&]() {
return theTranslator->latexFont(); } },
892 {
"$latexemojidirectory", [&]() {
return latexEmojiDirectory; } },
893 {
"$makeindex", [&]() {
return makeIndex(); } },
894 {
"$extralatexpackages", [&]() {
return extraLatexPackages; } },
895 {
"$latexspecialformulachars", [&]() {
return latexSpecialFormulaChars; } },
896 {
"$formulamacrofile", [&]() {
return stripMacroFile; } },
905 {
"COMPACT_LATEX", compactLatex },
906 {
"PDF_HYPERLINKS", pdfHyperlinks },
907 {
"USE_PDFLATEX", usePdfLatex },
908 {
"TIMESTAMP", timeStamp!=TIMESTAMP_t::NO },
909 {
"LATEX_FONTENC", !latexFontenc.
isEmpty() },
910 {
"FORMULA_MACROFILE", !formulaMacrofile.
isEmpty() },
911 {
"PROJECT_NUMBER", !projectNumber.
isEmpty() }
932 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
936 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
940 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
944 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
948 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
952 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
956 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
960 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
964 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
971 if (!gd->isReference())
973 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
984 if (!mod->isReference() && mod->isPrimaryInterface())
986 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
997 if (dd->isLinkableInProject())
999 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1010 if (nd->isLinkableInProject() && !nd->isAlias())
1012 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1023 if (cd->isLinkableInProject() && !cd->isAlias())
1025 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1036 if (cd->isLinkableInProject() &&
1037 !cd->isImplicitTemplateInstance() &&
1038 !cd->isEmbeddedInOuterScope() &&
1042 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1054 for (
const auto &fd : *fn)
1056 if (fd->isLinkableInProject() || fd->generateSourceFile())
1060 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1072 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1102 m_t <<
"}\n\\input{modules}\n";
1105 m_t <<
"}\n\\input{topics}\n";
1108 m_t <<
"}\n\\input{dirs}\n";
1111 m_t <<
"}\n\\input{namespaces}\n";
1114 m_t <<
"}\n\\input{concepts}\n";
1117 m_t <<
"}\n\\input{hierarchy}\n";
1120 m_t <<
"}\n\\input{annotated}\n";
1123 m_t <<
"}\n\\input{files}\n";
1126 m_t <<
"}\n\\input{pages}\n";
1133 if (!gd->isReference() && !gd->isASubGroup())
1145 if (!mod->isReference() && mod->isPrimaryInterface())
1157 if (dd->isLinkableInProject())
1164 m_t <<
"\\input{" << dd->getOutputFileBase() <<
"}\n";
1174 if (nd->isLinkableInProject() && !nd->isAlias())
1181 m_t <<
"\\input{" << nd->getOutputFileBase() <<
"}\n";
1191 if (cd->isLinkableInProject() && !cd->isAlias())
1198 m_t <<
"\\input{" << cd->getOutputFileBase() <<
"}\n";
1208 if (cd->isLinkableInProject() &&
1209 !cd->isImplicitTemplateInstance() &&
1210 !cd->isEmbeddedInOuterScope() &&
1219 m_t <<
"\\input{" << cd->getOutputFileBase() <<
"}\n";
1229 for (
const auto &fd : *fn)
1231 if (fd->isLinkableInProject())
1238 m_t <<
"\\input{" << fd->getOutputFileBase() <<
"}\n";
1240 if (fd->generateSourceFile())
1247 m_t <<
"\\input{" << fd->getSourceFileBase() <<
"}\n";
1258 m_t <<
"\\input{" << pd->getOutputFileBase() <<
"}\n";
1266 if (!pd->getGroupDef() && !pd->isReference() && !pd->hasParentPage()
1288 m_t <<
"{" << name <<
"}\n";
1310 m_t <<
"\n" <<
"\n";
1315 m_t <<
"\n" <<
"\n";
1328 m_t <<
"\\contentsline{section}{";
1343 m_t <<
"\\item\\contentsline{section}\\textbf{ ";
1351 m_t <<
"\\item\\contentsline{section}{";
1361 if (hasBrief)
m_t <<
"\\\\*";
1383 m_t <<
"\\doxymbox{\\hyperlink{";
1390 m_t <<
"\\textbf{ ";
1406 bool insideTabbing,
bool disableLinks)
1410 if (!disableLinks && ref.
isEmpty() && pdfHyperlinks)
1412 result +=
"\\doxymbox{\\hyperlink{";
1415 if (!anchor.
isEmpty()) result += anchor;
1422 result +=
"\\textbf{ ";
1433 t <<
"\\texorpdfstring{";
1438 t <<
"}{" << strRepl <<
"}";
1450 m_t <<
" \\doxyref{}{";
1470 if (hierarchyLevel < 0)
1471 m_t <<
"\\chapter{";
1482 if (usePDFLatex && pdfHyperlinks && !
fileName.isEmpty())
1490 m_t <<
"\\label{" << fn <<
"}";
1505 if (extraIndentLevel>=3)
1507 m_t <<
"\\doxysubparagraph*{";
1509 else if (extraIndentLevel==2)
1511 m_t <<
"\\doxyparagraph{";
1553 if (!memname.
isEmpty() && memname[0]!=
'@')
1562 m_t <<
"\\doxysubparagraph";
1564 else if (compactLatex)
1566 m_t <<
"\\doxyparagraph";
1576 m_t <<
"\\texorpdfstring{";
1585 m_t <<
"\\hspace{0.1cm}{\\footnotesize\\ttfamily [" << memCount <<
"/" << memTotal <<
"]}";
1588 m_t <<
"\n{\\footnotesize\\ttfamily ";
1606 if (usePDFLatex && pdfHyperlinks)
1608 m_t <<
"\\Hypertarget{";
1634 if (usePDFLatex && pdfHyperlinks)
1666 if (usePDFLatex && pdfHyperlinks)
1673 switch(
type.level())
1682 default:
ASSERT(0);
break;
1688 switch(
type.level())
1697 default:
ASSERT(0);
break;
1705 m_t <<
"}\\label{" << lab <<
"}\n";
1745 m_t <<
"\\begin{tabbing}\n";
1746 m_t <<
"xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill\n";
1756 m_t <<
"\n" <<
"\\end{tabbing}";
1766 m_t <<
"{\\footnotesize ";
1802 m_t <<
"\\begin{DoxyCompactList}\\small\\item\\em ";
1816 m_t <<
"\\end{DoxyCompactList}";
1855 m_t <<
"\\begin{DoxyEnumFields}[" << (hasInits?3:2) <<
"]{" << title <<
"}\n";
1861 m_t <<
"\\end{DoxyEnumFields}\n";
1868 m_t <<
"\\raisebox{\\heightof{T}}[0pt][0pt]{";
1900 m_t <<
"\\\\\n\\hline\n\n";
1912 m_t <<
"\\begin{DoxyCompactItemize}\n";
1921 m_t <<
"\\end{DoxyCompactItemize}\n";
1930 m_t <<
"\\begin{Indent}";
1931 m_t <<
"\\textbf{ ";
1947 if (hasHeader)
m_t <<
"}\\par\n";
1967 if (hasHeader)
m_t <<
"\\end{Indent}";
1973 m_t <<
"\n" <<
"\n";
2019 m_t <<
"\\begin{Desc}\n\\item[";
2026 m_t <<
"\\end{Desc}\n";
2032 if (openBracket)
m_t <<
"(";
2033 m_t <<
"\\begin{DoxyParamCaption}";
2071 m_t <<
"\\end{DoxyParamCaption}";
2072 if (closeBracket)
m_t <<
")";
2082 else if (closeBracket)
2097 std::visit(visitor,astImpl->
root);
2103 m_t <<
"\\begin{Desc}\n\\item[";
2106 m_t <<
"\\begin{description}\n";
2111 m_t <<
"\\item[{\\em ";
2120 m_t <<
"} : {\\em ";
2138 m_t <<
"\\end{description}\n";
2139 m_t <<
"\\end{Desc}\n";
2146 m_t <<
"\\doxyparagraph*{";
2167 m_t <<
"\\newline\n";
2176 m_t <<
"\\begin{DoxyEnumFields}{";
2181 m_t <<
"\\begin{DoxyFields}{";
2194 m_t <<
"\\end{DoxyEnumFields}\n";
2198 m_t <<
"\\end{DoxyFields}\n";
2230 m_t <<
"\\\\\n\\hline\n\n";
2235 m_t <<
"\\hspace{0.3cm}";
2240 m_t <<
"{\\ttfamily [" << l <<
"]}";
2241 if (!isLast)
m_t <<
", ";
2255 m_t <<
"\\doxyparagraph*{";
2269 m_t <<
"\\etocsetnexttocdepth{" << maxLevel <<
"}\n";
2270 m_t <<
"\\localtableofcontents\n";
2275 m_t <<
"\\begin{DoxyEmbeddedDoc}[" << indent <<
"]\n";
2280 m_t <<
"\\end{DoxyEmbeddedDoc}\n";
2289 if (!extraPackages.empty())
2291 t <<
"% Packages requested by user\n";
2292 for (
const auto &pkgName : extraPackages)
2294 if ((pkgName[0] ==
'[') || (pkgName[0] ==
'{'))
2295 t <<
"\\usepackage" << pkgName <<
"\n";
2297 t <<
"\\usepackage{" << pkgName <<
"}\n";
2305 unsigned char minus[4];
2306 unsigned char sup2[3];
2307 unsigned char sup3[3];
2319 t <<
"\\ifPDFTeX\n";
2320 t <<
"\\usepackage{newunicodechar}\n";
2323 t <<
" \\makeatletter\n"
2324 " \\def\\doxynewunicodechar#1#2{%\n"
2325 " \\@tempswafalse\n"
2326 " \\edef\\nuc@tempa{\\detokenize{#1}}%\n"
2327 " \\if\\relax\\nuc@tempa\\relax\n"
2328 " \\nuc@emptyargerr\n"
2330 " \\edef\\@tempb{\\expandafter\\@car\\nuc@tempa\\@nil}%\n"
2333 " \\@namedef{u8:\\nuc@tempa}{#2}%\n"
2339 t <<
" \\doxynewunicodechar{" << minus <<
"}{${}^{-}$}% Superscript minus\n"
2340 " \\doxynewunicodechar{" << sup2 <<
"}{${}^{2}$}% Superscript two\n"
2341 " \\doxynewunicodechar{" << sup3 <<
"}{${}^{3}$}% Superscript three\n"
2347 bool insideTabbing,
bool insidePre,
bool insideItem,
bool insideTable,
bool keepSpaces,
const bool retainNewline)
2352 const char *p = str.
data();
2353 const char *q =
nullptr;
2354 unsigned char pc=
'\0';
2358 unsigned char c=
static_cast<unsigned char>(*p++);
2366 if (
static_cast<unsigned char>(*(p)) == 0xbf &&
static_cast<unsigned char>(*(p+1)) == 0xbd)
2372 t << static_cast<char>(c);
2374 case '\\': t <<
"\\(\\backslash\\)";
break;
2375 case '{': t <<
"\\{";
break;
2376 case '}': t <<
"\\}";
break;
2377 case '_': t <<
"\\_";
break;
2378 case '&': t <<
"\\&";
break;
2379 case '%': t <<
"\\%";
break;
2380 case '#': t <<
"\\#";
break;
2381 case '$': t <<
"\\$";
break;
2382 case '"': t <<
"\"{}";
break;
2383 case '-': t <<
"-\\/";
break;
2384 case '^':
insideTable ? t <<
"\\string^" : t << static_cast<char>(c);
break;
2385 case '~': t <<
"\\string~";
break;
2386 case '\n':
if (retainNewline) t <<
"\\newline";
else t <<
' ';
2388 case ' ':
if (keepSpaces) t <<
"~";
else t <<
' ';
2392 else t << static_cast<char>(c);
2402 if (
static_cast<unsigned char>(*(p)) == 0xbf &&
static_cast<unsigned char>(*(p+1)) == 0xbd)
2408 t << static_cast<char>(c);
2410 case '#': t <<
"\\+\\#";
break;
2411 case '$': t <<
"\\$";
break;
2412 case '%': t <<
"\\%";
break;
2413 case '^':
processEntity(t,pdfHyperlinks,
"$^\\wedge$",
"\\string^");
break;
2418 while ((*q >=
'a' && *q <=
'z') || (*q >=
'A' && *q <=
'Z') || (*q >=
'0' && *q <=
'9'))
2445 case '*':
processEntity(t,pdfHyperlinks,
"$\\ast$",
"*");
break;
2446 case '_':
if (!insideTabbing) t <<
"\\+";
2448 if (!insideTabbing) t <<
"\\+";
2450 case '{': t <<
"\\{";
break;
2451 case '}': t <<
"\\}";
break;
2452 case '<': t <<
"$<$";
break;
2453 case '>': t <<
"$>$";
break;
2454 case '|':
processEntity(t,pdfHyperlinks,
"$\\vert$",
"|");
break;
2455 case '~':
processEntity(t,pdfHyperlinks,
"$\\sim$",
"\\string~");
break;
2461 case ']':
if (pc==
'[') t <<
"$\\,$";
2467 case '-': t <<
"-\\/";
2469 case '\\': t <<
"\\textbackslash{}";
2471 case '"': t <<
"\"{}";
2473 case '`': t <<
"\\`{}";
2475 case '\'': t <<
"\\textquotesingle{}";
2477 case '\n':
if (retainNewline)
2487 case ' ':
if (keepSpaces) {
if (insideTabbing) t <<
"\\>";
else t <<
'~'; }
else t <<
' ';
2492 if (!insideTabbing &&
2493 ((c>=
'A' && c<=
'Z' && pc!=
' ' && !(pc>=
'A' && pc <=
'Z') && pc!=
'\0' && *p) || (pc==
'.' &&
isId(c)))
2504 t << static_cast<char>(c);
2506 if (!insideTabbing && ((c==
':' && *p!=
':') || c==
'/'))
2529 const char *p=s.
data();
2535 case '|': t <<
"\\texttt{\"|}";
break;
2536 case '!': t <<
"\"!";
break;
2537 case '@': t <<
"\"@";
break;
2538 case '%': t <<
"\\%";
break;
2539 case '{': t <<
"\\lcurly{}";
break;
2540 case '}': t <<
"\\rcurly{}";
break;
2541 case '~': t <<
"````~";
break;
2548 while ((c=*p) && c!=
'@' && c!=
'[' && c!=
']' && c!=
'!' && c!=
'{' && c!=
'}' && c!=
'|')
2574 const char *p=s.
data();
2580 case '!': t <<
"\"!";
break;
2581 case '"': t <<
"\"\"";
break;
2582 case '@': t <<
"\"@";
break;
2583 case '|': t <<
"\\texttt{\"|}";
break;
2584 case '[': t <<
"[";
break;
2585 case ']': t <<
"]";
break;
2586 case '{': t <<
"\\lcurly{}";
break;
2587 case '}': t <<
"\\rcurly{}";
break;
2594 while ((c=*p) && c!=
'"' && c!=
'@' && c!=
'[' && c!=
']' && c!=
'!' && c!=
'{' && c!=
'}' && c!=
'|')
2618 const char *p=s.
data();
2624 case '\\': t <<
"\\textbackslash{}";
break;
2625 case '{': t <<
"\\{";
break;
2626 case '}': t <<
"\\}";
break;
2627 case '_': t <<
"\\_";
break;
2628 case '%': t <<
"\\%";
break;
2629 case '&': t <<
"\\&";
break;
2630 case '#': t <<
"\\#";
break;
2631 case '$': t <<
"\\$";
break;
2632 case '^': t <<
"\\string^";
break;
2633 case '~': t <<
"\\string~";
break;
2644 constexpr auto hex =
"0123456789ABCDEF";
2647 const char *p=s.
data();
2653 case '#': t <<
"\\#";
break;
2654 case '%': t <<
"\\%";
break;
2655 case '\\': t <<
"\\\\";
break;
2660 unsigned char id =
static_cast<unsigned char>(c);
2661 t <<
"\\%" <<
hex[
id>>4] <<
hex[
id&0xF];
QCString latexBibFiles()
lists the bibtex cite files in a comma separated list
static CitationManager & instance()
bool isEmpty() const
return TRUE if there are no citations.
Class representing a built-in class diagram.
void writeFigure(TextStream &t, const QCString &path, const QCString &file) const
The common base class of all entity definitions found in the sources.
virtual QCString getDefFileExtension() const =0
Class representing a directory in the file system.
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Class representing the abstract syntax tree of a documentation block.
Representation of an call graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of a class inheritance or dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool TBRank=TRUE, bool imageMap=TRUE, int graphId=-1)
Representation of an directory dependency graph.
QCString writeGraph(TextStream &out, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1, bool linkRelations=TRUE)
Representation of a group collaboration graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
Representation of an include dependency graph.
QCString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const QCString &path, const QCString &fileName, const QCString &relPath, bool writeImageMap=TRUE, int graphId=-1)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
Minimal replacement for QFileInfo.
std::string fileName() const
std::string absFilePath() const
const char * latex(SymType symb) const
Access routine to the LaTeX code of the HTML entity.
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
SymType name2sym(const QCString &symName) const
Give code of the requested HTML entity name.
opaque representation of the abstract syntax tree (AST)
Generator for LaTeX code fragments.
void setStripIndentAmount(size_t amount) override
void endFontClass() override
void writeLineNumber(const QCString &, const QCString &, const QCString &, int, bool) override
void setSourceFileName(const QCString &sourceFileName)
void setRelativePath(const QCString &path)
void startFontClass(const QCString &) override
void endSpecialComment() override
void stripCodeComments(bool b) override
void startCodeFragment(const QCString &style) override
size_t m_stripIndentAmount
void startCodeLine(int) override
LatexCodeGenerator(TextStream *t, const QCString &relPath, const QCString &sourceFile)
void startSpecialComment() override
void endCodeFragment(const QCString &style) override
QCString m_sourceFileName
void codify(const QCString &text) override
void endCodeLine() override
void writeCodeLink(CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip) override
Concrete visitor implementation for LaTeX output.
void endMemberItem(MemberItemType) override
void addCodeGen(OutputCodeList &list) override
void endIndexKey() override
void endInlineMemberDoc() override
void startProjectNumber() override
void endPageRef(const QCString &, const QCString &) override
void endSection(const QCString &, SectionType) override
void startIndexSection(IndexSection) override
void endParameterList() override
void endMemberDescription() override
std::unique_ptr< OutputCodeList > m_codeList
void endDirDepGraph(DotDirDeps &g) override
void endDescTable() override
void startParameterType(bool, const QCString &) override
void startMemberGroup() override
void endInlineHeader() override
void endGroupHeader(int) override
void startMemberDoc(const QCString &, const QCString &, const QCString &, const QCString &, int, int, bool) override
void writeChar(char c) override
void endDescTableInit() override
void startParameterName(bool) override
void endMemberTemplateParams(const QCString &, const QCString &) override
void endParameterType() override
void startPageRef() override
void writeInheritedSectionTitle(const QCString &, const QCString &, const QCString &, const QCString &, const QCString &, const QCString &) override
void endLabels() override
void startParagraph(const QCString &classDef) override
void endIndexSection(IndexSection) override
void startConstraintType() override
void startClassDiagram() override
void endInlineMemberType() override
void startDescTableTitle() override
void startSection(const QCString &, const QCString &, SectionType) override
void writeString(const QCString &text) override
void endInclDepGraph(DotInclDepGraph &) override
void writeNonBreakableSpace(int) override
void startMemberGroupDocs() override
void endDescTableTitle() override
void startInclDepGraph() override
void lastIndexPage() override
void endExamples() override
void startLocalToc(int level) override
void startFile(const QCString &name, bool isSource, const QCString &manName, const QCString &title, int id, int hierarchyLevel) override
void docify(const QCString &text) override
void startAnonTypeScope(int) override
void endPlainFile() override
void startDoxyAnchor(const QCString &, const QCString &, const QCString &, const QCString &, const QCString &) override
static void writeFooterFile(TextStream &t)
void startParameterList(bool) override
void endMemberDoc(bool) override
void endConstraintType() override
void startDescTableRow() override
void endAnonTypeScope(int) override
void startMemberHeader(const QCString &, int) override
void endConstraintList() override
void startDotGraph() override
void endParameterExtra(bool last, bool one, bool bracket) override
void endDescTableData() override
void writeLabel(const QCString &l, bool isLast) override
void startTextLink(const QCString &, const QCString &) override
void startConstraintList(const QCString &) override
void startGroupCollaboration() override
void startLabels() override
void endMemberGroupHeader(bool) override
static void writeStyleSheetFile(TextStream &t)
void endTitleHead(const QCString &, const QCString &name) override
void endMemberHeader() override
OutputType type() const override
void endIndexItem(const QCString &ref, const QCString &file) override
void startGroupHeader(const QCString &, int) override
void startDescTable(const QCString &title, const bool hasInits) override
void endConstraintDocs() override
void startIndexKey() override
void startConstraintParam() override
void lineBreak(const QCString &style=QCString()) override
void endInlineMemberName() override
void startMemberTemplateParams() override
void startInlineMemberType() override
void startInlineMemberDoc() override
void writeAnchor(const QCString &fileName, const QCString &name) override
void startCallGraph() override
void endMemberList() override
void startEmbeddedDoc(int) override
void startExamples() override
LatexGenerator & operator=(const LatexGenerator &)
void startDirDepGraph() override
void endTextLink() override
void endEmbeddedDoc() override
void writeStartAnnoItem(const QCString &type, const QCString &file, const QCString &path, const QCString &name) override
void startMemberList() override
void startDescTableData() override
void endDescTableRow() override
void startConstraintDocs() override
void endMemberGroupDocs() override
void endClassDiagram(const ClassDiagram &, const QCString &, const QCString &) override
void startDescTableInit() override
void endMemberDocSimple(bool) override
void addIndexItem(const QCString &, const QCString &) override
void endParameterName() override
void endIndexValue(const QCString &, bool) override
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name) override
void startMemberDocSimple(bool) override
void startPlainFile(const QCString &name) override
void exceptionEntry(const QCString &, bool) override
void endCallGraph(DotCallGraph &) override
void endGroupCollaboration(DotGroupCollaboration &g) override
void startIndexItem(const QCString &ref, const QCString &file) override
void startTitleHead(const QCString &) override
void startInlineHeader() override
void endConstraintParam() override
void endDotGraph(DotClassGraph &) override
void writePageLink(const QCString &, bool) override
void startParameterExtra() override
LatexCodeGenerator * m_codeGen
void endMemberGroup(bool) override
void startMemberGroupHeader(const QCString &, bool) override
void startMemberDescription(const QCString &, const QCString &, bool) override
void startMemberItem(const QCString &, MemberItemType, const QCString &) override
static void writeHeaderFile(TextStream &t)
void endParagraph() override
void addLabel(const QCString &, const QCString &) override
void writeStyleInfo(int part) override
void endDoxyAnchor(const QCString &, const QCString &) override
void startIndexValue(bool) override
void startInlineMemberName() override
void writeDoc(const IDocNodeAST *node, const Definition *ctx, const MemberDef *, int id, int sectionLevel) override
bool m_templateMemberItem
A model of a class/file/namespace member symbol.
static ModuleManager & instance()
Class representing a list of different code generators.
void add(OutputCodeIntfPtr &&p)
Abstract interface for output generators.
QCString fileName() const
This is an alternative implementation of QCString.
QCString & prepend(const char *s)
size_t length() const
Returns the length of the string, not counting the 0-terminator.
bool isEmpty() const
Returns TRUE iff the string is empty.
QCString repeat(unsigned int n) const
const std::string & str() const
QCString & sprintf(const char *format,...)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
static ResourceMgr & instance()
Returns the one and only instance of this class.
QCString getAsString(const QCString &name) const
Gets the resource data as a C string.
static constexpr int Section
static constexpr int Subsection
static constexpr int Subsubsection
static constexpr int Page
static constexpr int Paragraph
static constexpr int Subsubparagraph
static constexpr int Subparagraph
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
#define Config_getInt(name)
#define Config_getList(name)
#define Config_getEnumAsString(name)
#define Config_getBool(name)
#define Config_getString(name)
#define Config_getEnum(name)
std::vector< std::string > StringVector
QCString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
QCString yearToString()
Returns the current year as a string.
static constexpr auto hex
static QCString objectLinkToString(const QCString &, const QCString &f, const QCString &anchor, const QCString &text)
bool insideTable(const DocNodeVariant *n)
static QCString g_header_file
static QCString g_footer_file
static void writeDefaultStyleSheet(TextStream &t)
@ isNamespaceDocumentation
Translator * theTranslator
static QCString latex_batchmode()
QCString latexEscapePDFString(const QCString &s)
QCString convertToLaTeX(const QCString &s, bool insideTabbing, bool keepSpaces)
static QCString makeIndex()
QCString latexFilterURL(const QCString &s)
static void writeLatexMakefile()
static const SelectionMarkerInfo latexMarkerInfo
static QCString extraLatexStyleSheet()
void filterLatexString(TextStream &t, const QCString &str, bool insideTabbing, bool insidePre, bool insideItem, bool insideTable, bool keepSpaces, const bool retainNewline)
static void processEntity(TextStream &t, bool pdfHyperlinks, const char *strForm, const char *strRepl)
static void writeMakeBat()
static void writeDefaultStyleSheet(TextStream &t)
void writeExtraLatexPackages(TextStream &t)
static QCString substituteLatexKeywords(const QCString &file, const QCString &str, const QCString &title)
QCString latexEscapeIndexChars(const QCString &s)
static QCString objectLinkToString(const QCString &ref, const QCString &f, const QCString &anchor, const QCString &text, bool insideTabbing, bool disableLinks)
void latexWriteIndexItem(TextStream &m_t, const QCString &s1, const QCString &s2)
void writeLatexSpecialFormulaChars(TextStream &t)
QCString latexEscapeLabelName(const QCString &s)
QCString latexEscapePDFString(const QCString &s)
void filterLatexString(TextStream &t, const QCString &str, bool insideTabbing, bool insidePre, bool insideItem, bool insideTable, bool keepSpaces, const bool retainNewline=false)
#define LATEX_STYLE_EXTENSION
QCString convertToLaTeX(const QCString &s, bool insideTabbing, bool keepSpaces=FALSE)
void latexWriteIndexItem(TextStream &t, const QCString &r1, const QCString &s2="")
QCString latexEscapeIndexChars(const QCString &s)
std::ofstream openOutputStream(const QCString &name, bool append=false)
const char * ghostScriptCommand()
OutputCodeDefer< LatexCodeGenerator > LatexCodeGeneratorDefer
Portable versions of functions that are platform dependent.
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Various UTF8 related helper functions.
size_t updateColumnCount(const char *s, size_t col)
void checkBlocks(const QCString &s, const QCString fileName, const SelectionMarkerInfo &markerInfo)
QCString stripPath(const QCString &s)
QCString removeEmptyLines(const QCString &s)
QCString selectBlocks(const QCString &s, const SelectionBlockList &blockList, const SelectionMarkerInfo &markerInfo)
remove disabled blocks and all block markers from s and return the result as a string
QCString substituteKeywords(const QCString &file, const QCString &s, const KeywordSubstitutionList &keywords)
QCString relativePathToRoot(const QCString &name)
void clearSubDirs(const Dir &d)
QCString fileToString(const QCString &name, bool filter, bool isSourceCode)
QCString stripExtensionGeneral(const QCString &fName, const QCString &ext)
void createSubDirs(const Dir &d)
bool checkExtension(const QCString &fName, const QCString &ext)
bool copyFile(const QCString &src, const QCString &dest)
Copies the contents of file with name src to the newly created file with name dest.
A bunch of utility functions.