82 const char *p=str.
data();
107 case '^': *
m_t <<
"\\string^";
111 case '`': *
m_t <<
"\\`{}";
116 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
117 while (spacesToNextTabStop--)
128 case '\n': *
m_t <<
'\n';
138#define COPYCHAR() do { \
139 int bytes = getUTF8CharNumBytes(c); \
140 if (lresult < (i + bytes + 1)) \
143 result = static_cast<char *>(realloc(result, lresult)); \
145 for (int j=0; j<bytes && *p; j++) \
155 c!=0x0c && c!=
'\t' && c!=
'\n' && c!=
' ' && c!=
'^'
205 if (ref.
empty() && usePDFLatex && pdfHyperlinks)
207 *
m_t <<
"\\doxymbox{\\hyperlink{";
210 if (!anchor.
empty()) *
m_t << anchor;
229 *
m_t <<
"\\DoxyCodeLine{";
240 lineAnchor.
sprintf(
"_l%05d",l);
243 bool showTarget = usePDFLatex && pdfHyperlinks && !lineAnchor.
empty() && writeLineAnchor;
246 *
m_t <<
"\\Hypertarget{" <<
stripPath(lineAnchor) <<
"}";
248 if (!fileName.
empty())
275 *
m_t <<
"\\DoxyCodeLine{";
294 *
m_t <<
"\\textcolor{" << name <<
"}{";
316 *
m_t <<
"\\end{" << style <<
"}\n";
374 term(
"Could not open file {} for writing\n",fileName);
380 DString bibtex_command =
"bibtex";
381 DString manual_file =
"refman";
382 const int latex_count = 8;
384 t <<
"LATEX_CMD?=" << latex_command <<
"\n"
385 <<
"MKIDX_CMD?=" << mkidx_command <<
"\n"
386 <<
"BIBTEX_CMD?=" << bibtex_command <<
"\n"
387 <<
"LATEX_COUNT?=" << latex_count <<
"\n"
388 <<
"MANUAL_FILE?=" << manual_file <<
"\n"
392 t <<
"all: $(MANUAL_FILE).dvi\n"
394 <<
"ps: $(MANUAL_FILE).ps\n"
396 <<
"pdf: $(MANUAL_FILE).pdf\n"
398 <<
"ps_2on1: $(MANUAL_FILE).ps\n"
400 <<
"pdf_2on1: $(MANUAL_FILE).pdf\n"
402 <<
"$(MANUAL_FILE).ps: $(MANUAL_FILE).dvi\n"
403 <<
"\tdvips -o $(MANUAL_FILE).ps $(MANUAL_FILE).dvi\n"
405 t <<
"$(MANUAL_FILE).pdf: $(MANUAL_FILE).ps\n";
406 t <<
"\tps2pdf $(MANUAL_FILE).ps $(MANUAL_FILE).pdf\n\n";
407 t <<
"$(MANUAL_FILE).dvi: clean $(MANUAL_FILE).tex doxygen.sty\n"
408 <<
"\techo \"Running latex...\"\n"
409 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
410 <<
"\tif [ $$? != 0 ] ; then \\\n"
411 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
414 <<
"\techo \"Running makeindex...\"\n"
415 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n";
418 t <<
"\techo \"Running bibtex...\"\n";
419 t <<
"\t$(BIBTEX_CMD) $(MANUAL_FILE)\n";
420 t <<
"\techo \"Rerunning latex....\"\n";
421 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
422 <<
"\tif [ $$? != 0 ] ; then \\\n"
423 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
427 t <<
"\techo \"Rerunning latex....\"\n"
428 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex\n"
429 <<
"\tlatex_count=$(LATEX_COUNT) ; \\\n"
430 <<
"\twhile grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\\\n"
432 <<
"\t echo \"Rerunning latex....\" ;\\\n"
433 <<
"\t $(LATEX_CMD) $(MANUAL_FILE).tex ; \\\n"
434 <<
"\t $(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
435 <<
"\t if [ $$? != 0 ] ; then \\\n"
436 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
439 <<
"\t latex_count=`expr $$latex_count - 1` ;\\\n"
441 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n"
442 <<
"\t$(LATEX_CMD) $(MANUAL_FILE).tex || \\\n"
443 <<
"\tif [ $$? != 0 ] ; then \\\n"
444 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
447 <<
"$(MANUAL_FILE).ps: $(MANUAL_FILE).ps\n"
448 <<
"\tpsnup -2 $(MANUAL_FILE).ps >$(MANUAL_FILE).ps\n"
450 <<
"$(MANUAL_FILE).pdf: $(MANUAL_FILE).ps\n"
451 <<
"\tps2pdf $(MANUAL_FILE).ps $(MANUAL_FILE).pdf\n";
455 t <<
"all: $(MANUAL_FILE).pdf\n\n"
456 <<
"pdf: $(MANUAL_FILE).pdf\n\n";
457 t <<
"$(MANUAL_FILE).pdf: clean $(MANUAL_FILE).tex\n";
458 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
459 <<
"\tif [ $$? != 0 ] ; then \\\n"
460 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
463 t <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n";
466 t <<
"\t$(BIBTEX_CMD) $(MANUAL_FILE)\n";
467 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
468 <<
"\tif [ $$? != 0 ] ; then \\\n"
469 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
473 t <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
474 <<
"\tif [ $$? != 0 ] ; then \\\n"
475 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
478 <<
"\tlatex_count=$(LATEX_COUNT) ; \\\n"
479 <<
"\twhile grep -E -s 'Rerun (LaTeX|to get cross-references right|to get bibliographical references right)' $(MANUAL_FILE).log && [ $$latex_count -gt 0 ] ;\\\n"
481 <<
"\t echo \"Rerunning latex....\" ;\\\n"
482 <<
"\t $(LATEX_CMD) $(MANUAL_FILE) || \\\n"
483 <<
"\t if [ $$? != 0 ] ; then \\\n"
484 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
487 <<
"\t latex_count=`expr $$latex_count - 1` ;\\\n"
489 <<
"\t$(MKIDX_CMD) $(MANUAL_FILE).idx\n"
490 <<
"\t$(LATEX_CMD) $(MANUAL_FILE) || \\\n"
491 <<
"\tif [ $$? != 0 ] ; then \\\n"
492 <<
"\t \\echo \"Please consult $(MANUAL_FILE).log to see the error messages\" ; \\\n"
500 <<
"*.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl $(MANUAL_FILE).pdf\n";
507 DString fileName=dir+
"/make.bat";
510 DString bibtex_command =
"bibtex";
511 DString manual_file =
"refman";
512 const int latex_count = 8;
517 term(
"Could not open file {} for writing\n",fileName);
519 t <<
"pushd %~dp0\r\n";
520 t <<
"if not %errorlevel% == 0 goto :end1\r\n";
522 t <<
"set ORG_LATEX_CMD=%LATEX_CMD%\r\n";
523 t <<
"set ORG_MKIDX_CMD=%MKIDX_CMD%\r\n";
524 t <<
"set ORG_BIBTEX_CMD=%BIBTEX_CMD%\r\n";
525 t <<
"set ORG_LATEX_COUNT=%LATEX_COUNT%\r\n";
526 t <<
"set ORG_MANUAL_FILE=%MANUAL_FILE%\r\n";
527 t <<
"if \"X\"%LATEX_CMD% == \"X\" set LATEX_CMD=" << latex_command <<
"\r\n";
528 t <<
"if \"X\"%MKIDX_CMD% == \"X\" set MKIDX_CMD=" << mkidx_command <<
"\r\n";
529 t <<
"if \"X\"%BIBTEX_CMD% == \"X\" set BIBTEX_CMD=" << bibtex_command <<
"\r\n";
530 t <<
"if \"X\"%LATEX_COUNT% == \"X\" set LATEX_COUNT=" << latex_count <<
"\r\n";
531 t <<
"if \"X\"%MANUAL_FILE% == \"X\" set MANUAL_FILE=" << manual_file <<
"\r\n";
533 t <<
"del /s /f *.ps *.dvi *.aux *.toc *.idx *.ind *.ilg *.log *.out *.brf *.blg *.bbl %MANUAL_FILE%.pdf\r\n\r\n";
537 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
538 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
539 t <<
"echo ----\r\n";
540 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
543 t <<
"%BIBTEX_CMD% %MANUAL_FILE%\r\n";
544 t <<
"echo ----\r\n";
545 t <<
"\t%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
546 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
548 t <<
"setlocal enabledelayedexpansion\r\n";
549 t <<
"set count=%LAT#EX_COUNT%\r\n";
551 t <<
"set content=X\r\n";
552 t <<
"for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
553 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";
554 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";
555 t <<
"if !content! == X goto :skip\r\n";
556 t <<
"set /a count-=1\r\n";
557 t <<
"if !count! EQU 0 goto :skip\r\n\r\n";
558 t <<
"echo ----\r\n";
559 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
560 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
561 t <<
"goto :repeat\r\n";
564 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
565 t <<
"%LATEX_CMD% %MANUAL_FILE%.tex\r\n";
566 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
567 t <<
"dvips -o %MANUAL_FILE%.ps %MANUAL_FILE%.dvi\r\n";
569 t <<
" -q -dNOPAUSE -dBATCH -sDEVICE=pdfwrite "
570 "-sOutputFile=%MANUAL_FILE%.pdf -c save pop -f %MANUAL_FILE%.ps\r\n";
574 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
575 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
576 t <<
"echo ----\r\n";
577 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
580 t <<
"%BIBTEX_CMD% %MANUAL_FILE%\r\n";
581 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
582 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
584 t <<
"echo ----\r\n";
585 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
586 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
588 t <<
"setlocal enabledelayedexpansion\r\n";
589 t <<
"set count=%LATEX_COUNT%\r\n";
591 t <<
"set content=X\r\n";
592 t <<
"for /F \"tokens=*\" %%T in ( 'findstr /C:\"Rerun LaTeX\" %MANUAL_FILE%.log' ) do set content=\"%%~T\"\r\n";
593 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";
594 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";
595 t <<
"if !content! == X goto :skip\r\n";
596 t <<
"set /a count-=1\r\n";
597 t <<
"if !count! EQU 0 goto :skip\r\n\r\n";
598 t <<
"echo ----\r\n";
599 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
600 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
601 t <<
"goto :repeat\r\n";
604 t <<
"%MKIDX_CMD% %MANUAL_FILE%.idx\r\n";
605 t <<
"%LATEX_CMD% %MANUAL_FILE%\r\n";
606 t <<
"@if ERRORLEVEL 1 goto :error\r\n";
609 t <<
"goto :end\r\n";
611 t <<
"@echo ===============\r\n";
612 t <<
"@echo Please consult %MANUAL_FILE%.log to see the error messages\r\n";
613 t <<
"@echo ===============\r\n";
616 t<<
"@REM reset environment\r\n";
618 t<<
"set LATEX_CMD=%ORG_LATEX_CMD%\r\n";
619 t<<
"set ORG_LATEX_CMD=\r\n";
620 t<<
"set MKIDX_CMD=%ORG_MKIDX_CMD%\r\n";
621 t<<
"set ORG_MKIDX_CMD=\r\n";
622 t<<
"set BIBTEX_CMD=%ORG_BIBTEX_CMD%\r\n";
623 t<<
"set ORG_BIBTEX_CMD=\r\n";
624 t<<
"set MANUAL_FILE=%ORG_MANUAL_FILE%\r\n";
625 t<<
"set ORG_MANUAL_FILE=\r\n";
626 t<<
"set LATEX_COUNT=%ORG_LATEX_COUNT%\r\n";
627 t<<
"set ORG_LATEX_COUNT=\r\n";
639 term(
"Could not create output directory {}\n",dname);
693 t <<
"% Latex header for doxygen " << getDoxygenVersion() <<
"\n";
699 t <<
"% Latex footer for doxygen " << getDoxygenVersion() <<
"\n";
705 t <<
"% stylesheet for doxygen " << getDoxygenVersion() <<
"\n";
736 m_t <<
"\\\\[1ex]\\large ";
743 for (
const auto &fileName : extraLatexStyles)
745 if (!fileName.empty())
750 result +=
"\\usepackage{";
772 if (!latex_mkidx_command.
empty())
774 if (latex_mkidx_command[0] ==
'\\')
775 result += latex_mkidx_command;
777 result +=
"\\"+latex_mkidx_command;
781 result +=
"\\makeindex";
790 case LATEX_BATCHMODE_t::NO:
return "";
791 case LATEX_BATCHMODE_t::YES:
return "\\batchmode";
792 case LATEX_BATCHMODE_t::BATCH:
return "\\batchmode";
793 case LATEX_BATCHMODE_t::NON_STOP:
return "\\nonstopmode";
794 case LATEX_BATCHMODE_t::SCROLL:
return "\\scrollmode";
795 case LATEX_BATCHMODE_t::ERROR_STOP:
return "\\errorstopmode";
820 case TIMESTAMP_t::YES:
821 case TIMESTAMP_t::DATETIME:
825 case TIMESTAMP_t::DATE:
829 case TIMESTAMP_t::NO:
840 generatedBy = tg.
str();
845 if (latexEmojiDirectory.
empty()) latexEmojiDirectory =
".";
846 latexEmojiDirectory =
substitute(latexEmojiDirectory,
"\\",
"/");
858 if (!formulaMacrofile.
empty())
874 {
"$title", [&]() {
return !title.
empty() ? title : projName; } },
875 {
"$doxygenversion", [&]() {
return getDoxygenVersion(); } },
876 {
"$projectname", [&]() {
return projName; } },
877 {
"$projectnumber", [&]() {
return convertToLaTeX(projectNumber,
false); } },
878 {
"$projectbrief", [&]() {
return projBrief; } },
892 {
"$generatedby", [&]() {
return generatedBy; } },
893 {
"$latexbibstyle", [&]() {
return style; } },
896 {
"$papertype", [&]() {
return paperType+
"paper"; } },
899 {
"$latexfontenc", [&]() {
return latexFontenc; } },
901 {
"$latexemojidirectory", [&]() {
return latexEmojiDirectory; } },
902 {
"$makeindex", [&]() {
return makeIndex(); } },
903 {
"$extralatexpackages", [&]() {
return extraLatexPackages; } },
904 {
"$latexspecialformulachars", [&]() {
return latexSpecialFormulaChars; } },
905 {
"$formulamacrofile", [&]() {
return stripMacroFile; } },
914 {
"COMPACT_LATEX", compactLatex },
915 {
"PDF_HYPERLINKS", pdfHyperlinks },
916 {
"USE_PDFLATEX", usePdfLatex },
917 {
"TIMESTAMP", timeStamp!=TIMESTAMP_t::NO },
918 {
"LATEX_FONTENC", !latexFontenc.
empty() },
919 {
"FORMULA_MACROFILE", !formulaMacrofile.
empty() },
920 {
"PROJECT_NUMBER", !projectNumber.
empty() }
941 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
945 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
949 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
953 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
957 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
961 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
965 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
969 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
973 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
980 if (!gd->isReference())
982 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
993 if (!mod->isReference() && mod->isPrimaryInterface())
995 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1006 if (dd->isLinkableInProject())
1008 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1019 if (nd->isLinkableInProject() && !nd->isAlias())
1021 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1032 if (cd->isLinkableInProject() && !cd->isAlias())
1034 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1045 if (cd->isLinkableInProject() &&
1046 !cd->isImplicitTemplateInstance() &&
1047 !cd->isEmbeddedInOuterScope() &&
1051 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1063 for (
const auto &fd : *fn)
1065 if (fd->isLinkableInProject() || fd->generateSourceFile())
1069 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1081 if (compactLatex)
m_t <<
"\\doxysection";
else m_t <<
"\\chapter";
1111 m_t <<
"}\n\\input{modules}\n";
1114 m_t <<
"}\n\\input{topics}\n";
1117 m_t <<
"}\n\\input{dirs}\n";
1120 m_t <<
"}\n\\input{namespaces}\n";
1123 m_t <<
"}\n\\input{concepts}\n";
1126 m_t <<
"}\n\\input{hierarchy}\n";
1129 m_t <<
"}\n\\input{annotated}\n";
1132 m_t <<
"}\n\\input{files}\n";
1135 m_t <<
"}\n\\input{pages}\n";
1142 if (!gd->isReference() && !gd->isASubGroup())
1154 if (!mod->isReference() && mod->isPrimaryInterface())
1166 if (dd->isLinkableInProject())
1173 m_t <<
"\\input{" << dd->getOutputFileBase() <<
"}\n";
1183 if (nd->isLinkableInProject() && !nd->isAlias())
1190 m_t <<
"\\input{" << nd->getOutputFileBase() <<
"}\n";
1200 if (cd->isLinkableInProject() && !cd->isAlias())
1207 m_t <<
"\\input{" << cd->getOutputFileBase() <<
"}\n";
1217 if (cd->isLinkableInProject() &&
1218 !cd->isImplicitTemplateInstance() &&
1219 !cd->isEmbeddedInOuterScope() &&
1228 m_t <<
"\\input{" << cd->getOutputFileBase() <<
"}\n";
1238 for (
const auto &fd : *fn)
1240 if (fd->isLinkableInProject())
1247 m_t <<
"\\input{" << fd->getOutputFileBase() <<
"}\n";
1249 if (fd->generateSourceFile())
1256 m_t <<
"\\input{" << fd->getSourceFileBase() <<
"}\n";
1267 m_t <<
"\\input{" << pd->getOutputFileBase() <<
"}\n";
1275 if (!pd->getGroupDef() && !pd->isReference() && !pd->hasParentPage()
1297 m_t <<
"{" << name <<
"}\n";
1319 m_t <<
"\n" <<
"\n";
1324 m_t <<
"\n" <<
"\n";
1337 m_t <<
"\\contentsline{section}{";
1352 m_t <<
"\\item\\contentsline{section}\\textbf{ ";
1360 m_t <<
"\\item\\contentsline{section}{";
1370 if (hasBrief)
m_t <<
"\\\\*";
1392 m_t <<
"\\doxymbox{\\hyperlink{";
1394 if (!anchor.
empty())
m_t <<
"_" << anchor;
1399 m_t <<
"\\textbf{ ";
1415 bool insideTabbing,
bool disableLinks)
1419 if (!disableLinks && ref.
empty() && pdfHyperlinks)
1421 result +=
"\\doxymbox{\\hyperlink{";
1423 if (!f.
empty() && !anchor.
empty()) result +=
"_";
1424 if (!anchor.
empty()) result += anchor;
1431 result +=
"\\textbf{ ";
1442 t <<
"\\texorpdfstring{";
1447 t <<
"}{" << strRepl <<
"}";
1459 m_t <<
" \\doxyref{}{";
1465 if (!clname.
empty())
m_t << clname;
1466 if (!anchor.
empty())
m_t <<
"_" << anchor;
1479 if (hierarchyLevel < 0)
1480 m_t <<
"\\chapter{";
1482 m_t <<
"\\doxy" <<
DString(
"sub").repeat(hierarchyLevel) <<
"section{";
1499 m_t <<
"\\label{" << fn <<
"}";
1514 if (extraIndentLevel>=3)
1516 m_t <<
"\\doxysubparagraph*{";
1518 else if (extraIndentLevel==2)
1520 m_t <<
"\\doxyparagraph{";
1525 m_t <<
"\\doxy" <<
DString(
"sub").repeat(extraIndentLevel) <<
"section{";
1544 m_t <<
"\\doxysub" <<
DString(
"sub").repeat(l) <<
"section*{";
1562 if (!memname.
empty() && memname[0]!=
'@')
1571 m_t <<
"\\doxysubparagraph";
1573 else if (compactLatex)
1575 m_t <<
"\\doxyparagraph";
1585 m_t <<
"\\texorpdfstring{";
1594 m_t <<
"\\hspace{0.1cm}{\\footnotesize\\ttfamily [" << memCount <<
"/" << memTotal <<
"]}";
1597 m_t <<
"\n{\\footnotesize\\ttfamily ";
1615 if (usePDFLatex && pdfHyperlinks)
1617 m_t <<
"\\Hypertarget{";
1619 if (!anchor.
empty())
m_t <<
"_" << anchor;
1632 if (!anchor.
empty())
m_t <<
"_" << anchor;
1650 if (usePDFLatex && pdfHyperlinks)
1682 if (usePDFLatex && pdfHyperlinks)
1698 default:
ASSERT(0);
break;
1713 default:
ASSERT(0);
break;
1721 m_t <<
"}\\label{" << lab <<
"}\n";
1761 m_t <<
"\\begin{tabbing}\n";
1762 m_t <<
"xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=xx\\=\\kill\n";
1772 m_t <<
"\n" <<
"\\end{tabbing}";
1782 m_t <<
"{\\footnotesize ";
1818 m_t <<
"\\begin{DoxyCompactList}\\small\\item\\em ";
1832 m_t <<
"\\end{DoxyCompactList}";
1871 m_t <<
"\\begin{DoxyEnumFields}[" << (hasInits?3:2) <<
"]{" << title <<
"}\n";
1877 m_t <<
"\\end{DoxyEnumFields}\n";
1884 m_t <<
"\\raisebox{\\heightof{T}}[0pt][0pt]{";
1916 m_t <<
"\\\\\n\\hline\n\n";
1928 m_t <<
"\\begin{DoxyCompactItemize}\n";
1937 m_t <<
"\\end{DoxyCompactItemize}\n";
1946 m_t <<
"\\begin{Indent}";
1947 m_t <<
"\\textbf{ ";
1963 if (hasHeader)
m_t <<
"}\\par\n";
1983 if (hasHeader)
m_t <<
"\\end{Indent}";
1989 m_t <<
"\n" <<
"\n";
2035 m_t <<
"\\begin{Desc}\n\\item[";
2042 m_t <<
"\\end{Desc}\n";
2048 if (openBracket)
m_t <<
"(";
2049 m_t <<
"\\begin{DoxyParamCaption}";
2087 m_t <<
"\\end{DoxyParamCaption}";
2088 if (closeBracket)
m_t <<
")";
2098 else if (closeBracket)
2113 std::visit(visitor,astImpl->
root);
2119 m_t <<
"\\begin{Desc}\n\\item[";
2122 m_t <<
"\\begin{description}\n";
2127 m_t <<
"\\item[{\\em ";
2136 m_t <<
"} : {\\em ";
2154 m_t <<
"\\end{description}\n";
2155 m_t <<
"\\end{Desc}\n";
2162 m_t <<
"\\doxyparagraph*{";
2183 m_t <<
"\\newline\n";
2192 m_t <<
"\\begin{DoxyEnumFields}{";
2197 m_t <<
"\\begin{DoxyFields}{";
2210 m_t <<
"\\end{DoxyEnumFields}\n";
2214 m_t <<
"\\end{DoxyFields}\n";
2246 m_t <<
"\\\\\n\\hline\n\n";
2251 m_t <<
"\\hspace{0.3cm}";
2256 m_t <<
"{\\ttfamily [" << l <<
"]}";
2257 if (!isLast)
m_t <<
", ";
2271 m_t <<
"\\doxyparagraph*{";
2285 m_t <<
"\\etocsetnexttocdepth{" << maxLevel <<
"}\n";
2286 m_t <<
"\\localtableofcontents\n";
2291 m_t <<
"\\begin{DoxyEmbeddedDoc}[" << indent <<
"]\n";
2296 m_t <<
"\\end{DoxyEmbeddedDoc}\n";
2305 if (!extraPackages.empty())
2307 t <<
"% Packages requested by user\n";
2308 for (
const auto &pkgName : extraPackages)
2310 if ((pkgName[0] ==
'[') || (pkgName[0] ==
'{'))
2311 t <<
"\\usepackage" << pkgName <<
"\n";
2313 t <<
"\\usepackage{" << pkgName <<
"}\n";
2321 unsigned char minus[4];
2322 unsigned char sup2[3];
2323 unsigned char sup3[3];
2335 t <<
"\\ifPDFTeX\n";
2336 t <<
"\\usepackage{newunicodechar}\n";
2339 t <<
" \\makeatletter\n"
2340 " \\def\\doxynewunicodechar#1#2{%\n"
2341 " \\@tempswafalse\n"
2342 " \\edef\\nuc@tempa{\\detokenize{#1}}%\n"
2343 " \\if\\relax\\nuc@tempa\\relax\n"
2344 " \\nuc@emptyargerr\n"
2346 " \\edef\\@tempb{\\expandafter\\@car\\nuc@tempa\\@nil}%\n"
2349 " \\@namedef{u8:\\nuc@tempa}{#2}%\n"
2355 t <<
" \\doxynewunicodechar{" << minus <<
"}{${}^{-}$}% Superscript minus\n"
2356 " \\doxynewunicodechar{" << sup2 <<
"}{${}^{2}$}% Superscript two\n"
2357 " \\doxynewunicodechar{" << sup3 <<
"}{${}^{3}$}% Superscript three\n"
2363 bool insideTabbing,
bool insidePre,
bool insideItem,
bool insideTable,
bool keepSpaces,
const bool retainNewline)
2365 if (str.
empty())
return;
2368 const char *p = str.
data();
2369 unsigned char pc=
'\0';
2373 unsigned char c=
static_cast<unsigned char>(*p++);
2381 if (
static_cast<unsigned char>(*(p)) == 0xbf &&
static_cast<unsigned char>(*(p+1)) == 0xbd)
2387 t << static_cast<char>(c);
2389 case '\\': t <<
"\\(\\backslash\\)";
break;
2390 case '{': t <<
"\\{";
break;
2391 case '}': t <<
"\\}";
break;
2392 case '_': t <<
"\\_";
break;
2393 case '&': t <<
"\\&";
break;
2394 case '%': t <<
"\\%";
break;
2395 case '#': t <<
"\\#";
break;
2396 case '$': t <<
"\\$";
break;
2397 case '"': t <<
"\"{}";
break;
2398 case '-': t <<
"-\\/";
break;
2399 case '^':
insideTable ? t <<
"\\string^" : t << static_cast<char>(c);
break;
2400 case '~': t <<
"\\string~";
break;
2401 case '\n':
if (retainNewline) t <<
"\\newline";
else t <<
' ';
2403 case ' ':
if (keepSpaces) t <<
"~";
else t <<
' ';
2407 else t << static_cast<char>(c);
2417 if (
static_cast<unsigned char>(*(p)) == 0xbf &&
static_cast<unsigned char>(*(p+1)) == 0xbd)
2423 t << static_cast<char>(c);
2425 case '#': t <<
"\\+\\#";
break;
2426 case '$': t <<
"\\$";
break;
2427 case '%': t <<
"\\%";
break;
2428 case '^':
processEntity(t,pdfHyperlinks,
"$^\\wedge$",
"\\string^");
break;
2438 case '*':
processEntity(t,pdfHyperlinks,
"$\\ast$",
"*");
break;
2439 case '_':
if (!insideTabbing && *p) t <<
"\\+";
2441 if (!insideTabbing && *p) t <<
"\\+";
2443 case '{': t <<
"\\{";
break;
2444 case '}': t <<
"\\}";
break;
2445 case '<': t <<
"$<$";
break;
2446 case '>': t <<
"$>$";
break;
2447 case '|':
processEntity(t,pdfHyperlinks,
"$\\vert$",
"|");
break;
2448 case '~':
processEntity(t,pdfHyperlinks,
"$\\sim$",
"\\string~");
break;
2454 case ']':
if (pc==
'[') t <<
"$\\,$";
2460 case '-': t <<
"-\\/";
2462 case '\\': t <<
"\\textbackslash{}";
2464 case '"': t <<
"\"{}";
2466 case '`': t <<
"\\`{}";
2468 case '\'': t <<
"\\textquotesingle{}";
2470 case '\n':
if (retainNewline)
2480 case ' ':
if (keepSpaces) {
if (insideTabbing) t <<
"\\>";
else t <<
'~'; }
else t <<
' ';
2485 if (!insideTabbing &&
2486 ((c>=
'A' && c<=
'Z' && pc!=
' ' && !(pc>=
'A' && pc <=
'Z') && pc!=
'\0' && *p) || (pc==
'.' &&
isId(c)))
2497 t << static_cast<char>(c);
2499 if (!insideTabbing && *p && ((c==
':' && *p!=
':') || c==
'/'))
2519 if (s.
empty())
return s;
2522 const char *p=s.
data();
2528 case '|': t <<
"\\texttt{\"|}";
break;
2529 case '!': t <<
"\"!";
break;
2530 case '@': t <<
"\"@";
break;
2531 case '%': t <<
"\\%";
break;
2532 case '{': t <<
"\\lcurly{}";
break;
2533 case '}': t <<
"\\rcurly{}";
break;
2534 case '~': t <<
"````~";
break;
2541 while ((c=*p) && c!=
'@' && c!=
'[' && c!=
']' && c!=
'!' && c!=
'{' && c!=
'}' && c!=
'|')
2564 if (s.
empty())
return s;
2567 const char *p=s.
data();
2573 case '!': t <<
"\"!";
break;
2574 case '"': t <<
"\"\"";
break;
2575 case '@': t <<
"\"@";
break;
2576 case '|': t <<
"\\texttt{\"|}";
break;
2577 case '[': t <<
"[";
break;
2578 case ']': t <<
"]";
break;
2579 case '{': t <<
"\\lcurly{}";
break;
2580 case '}': t <<
"\\rcurly{}";
break;
2587 while ((c=*p) && c!=
'"' && c!=
'@' && c!=
'[' && c!=
']' && c!=
'!' && c!=
'{' && c!=
'}' && c!=
'|')
2609 if (s.
empty())
return s;
2611 const char *p=s.
data();
2617 case '\\': t <<
"\\textbackslash{}";
break;
2618 case '{': t <<
"\\{";
break;
2619 case '}': t <<
"\\}";
break;
2620 case '_': t <<
"\\_";
break;
2621 case '%': t <<
"\\%";
break;
2622 case '&': t <<
"\\&";
break;
2623 case '#': t <<
"\\#";
break;
2624 case '$': t <<
"\\$";
break;
2625 case '^': t <<
"\\string^";
break;
2626 case '~': t <<
"\\string~";
break;
2637 constexpr auto hex =
"0123456789ABCDEF";
2638 if (s.
empty())
return s;
2640 const char *p=s.
data();
2646 case '#': t <<
"\\#";
break;
2647 case '%': t <<
"\\%";
break;
2648 case '\\': t <<
"\\\\";
break;
2653 unsigned char id =
static_cast<unsigned char>(c);
2654 t <<
"\\%" << hex[
id>>4] << hex[
id&0xF];
static CitationManager & instance()
bool empty() const
return true if there are no citations.
DString latexBibFiles()
lists the bibtex cite files in a comma separated list
Class representing a built-in class diagram.
void writeFigure(TextStream &t, const DString &path, const DString &file) const
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
DString & prepend(const char *s)
DString & sprintf(const char *format,...)
const std::string & str() const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
bool endsWith(const char *s) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
The common base class of all entity definitions found in the sources.
virtual DString 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.
DString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1)
Representation of a class inheritance or dependency graph.
DString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool TBRank=true, bool imageMap=true, int graphId=-1)
Representation of an directory dependency graph.
DString writeGraph(TextStream &out, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1, bool linkRelations=true)
Representation of a group collaboration graph.
DString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &relPath, bool writeImageMap=true, int graphId=-1)
Representation of an include dependency graph.
DString writeGraph(TextStream &t, GraphOutputFormat gf, EmbeddedOutputFormat ef, const DString &path, const DString &fileName, const DString &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.
const char * writeHtmlEntity(T &result, const char *s, HtmlEntityMapperFunc &&mapper, const char *fallback)
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
opaque representation of the abstract syntax tree (AST)
Generator for LaTeX code fragments.
int usedTableLevel() const
void startCodeFragment(const DString &style) override
LatexCodeGenerator(TextStream *t, const DString &relPath, const DString &sourceFile)
void setStripIndentAmount(size_t amount) override
void setInsideTabbing(bool b)
void endFontClass() override
bool insideTabbing() const
void codify(const DString &text) override
void writeCodeLink(CodeSymbolType type, const DString &ref, const DString &file, const DString &anchor, const DString &name, const DString &tooltip) override
void setTextStream(TextStream *t)
void endSpecialComment() override
void stripCodeComments(bool b) override
size_t m_stripIndentAmount
void startCodeLine(int) override
void startSpecialComment() override
void startFontClass(const DString &) override
void writeLineNumber(const DString &, const DString &, const DString &, int, bool) override
void setRelativePath(const DString &path)
void endCodeFragment(const DString &style) override
void endCodeLine() override
void setSourceFileName(const DString &sourceFileName)
Concrete visitor implementation for LaTeX output.
void endMemberItem(MemberItemType) override
void addCodeGen(OutputCodeList &list) override
void endIndexKey() override
void endInlineMemberDoc() override
void startMemberHeader(const DString &, int) override
void startProjectNumber() override
void startIndexSection(IndexSection) override
void writeInheritedSectionTitle(const DString &, const DString &, const DString &, const DString &, const DString &, const DString &) override
void endParameterList() override
void endMemberDescription() override
std::unique_ptr< OutputCodeList > m_codeList
void endDirDepGraph(DotDirDeps &g) override
void endDescTable() override
void startMemberGroup() override
void endInlineHeader() override
void endGroupHeader(int) override
void writeAnchor(const DString &fileName, const DString &name) override
void startTextLink(const DString &, const DString &) override
void writeChar(char c) override
void endDescTableInit() override
void docify(const DString &text) override
void startParameterName(bool) override
void writePageLink(const DString &, bool) override
void endParameterType() override
void startPageRef() override
void startFile(const DString &name, bool isSource, const DString &manName, const DString &title, int id, int hierarchyLevel) override
void endLabels() override
void endIndexValue(const DString &, bool) override
void endSection(const DString &, SectionType) override
void endIndexSection(IndexSection) override
void startMemberDoc(const DString &, const DString &, const DString &, const DString &, int, int, bool) override
void exceptionEntry(const DString &, bool) override
void startConstraintType() override
void startClassDiagram() override
void endInlineMemberType() override
void startDescTableTitle() override
void endInclDepGraph(DotInclDepGraph &) override
void writeNonBreakableSpace(int) override
void startTitleHead(const DString &) override
void startMemberGroupDocs() override
void startDescTable(const DString &title, const bool hasInits) override
void endDescTableTitle() override
void startMemberDescription(const DString &, const DString &, bool) override
void startInclDepGraph() override
void lastIndexPage() override
void endExamples() override
void startLocalToc(int level) override
void startAnonTypeScope(int) override
void endPlainFile() override
void endTitleHead(const DString &, const DString &name) 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 endConstraintList() override
void startDotGraph() override
void endParameterExtra(bool last, bool one, bool bracket) override
void startSection(const DString &, const DString &, SectionType) override
void startConstraintList(const DString &) override
void endDescTableData() override
void endIndexItem(const DString &ref, const DString &file) override
void startGroupCollaboration() override
void startLabels() override
void endMemberGroupHeader(bool) override
static void writeStyleSheetFile(TextStream &t)
void endMemberHeader() override
OutputType type() const override
void lineBreak(const DString &style=DString()) override
void endConstraintDocs() override
void startIndexKey() override
void startMemberGroupHeader(const DString &, bool) override
void startConstraintParam() override
void endInlineMemberName() override
void startMemberTemplateParams() override
void startInlineMemberType() override
void writeStartAnnoItem(const DString &type, const DString &file, const DString &path, const DString &name) override
void startPlainFile(const DString &name) override
void startInlineMemberDoc() override
void addLabel(const DString &, const DString &) override
void startCallGraph() override
void endMemberList() override
void startExamples() override
void startIndexItem(const DString &ref, const DString &file) override
LatexGenerator & operator=(const LatexGenerator &)
void startDirDepGraph() override
void endTextLink() override
void endEmbeddedDoc() override
void startMemberList() override
void startDescTableData() override
void endDescTableRow() override
void startConstraintDocs() override
void endMemberGroupDocs() override
void endMemberTemplateParams(const DString &, const DString &) override
void startDescTableInit() override
void addIndexItem(const DString &, const DString &) override
void endMemberDocSimple(bool) override
void endParameterName() override
void startGroupHeader(const DString &, int) override
void startMemberDocSimple(bool) override
void endCallGraph(DotCallGraph &) override
void endGroupCollaboration(DotGroupCollaboration &g) override
void startParagraph(const DString &classDef) override
void startInlineHeader() override
void endConstraintParam() override
void endDotGraph(DotClassGraph &) override
void writeString(const DString &text) override
void startParameterExtra() override
LatexCodeGenerator * m_codeGen
void endMemberGroup(bool) override
static void writeHeaderFile(TextStream &t)
void startEmbeddedDoc(size_t) override
void endParagraph() override
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name) override
void endClassDiagram(const ClassDiagram &, const DString &, const DString &) override
void writeStyleInfo(int part) override
void endDoxyAnchor(const DString &, const DString &) override
void startIndexValue(bool) override
void writeLabel(const DString &l, bool isLast) override
void startInlineMemberName() override
void startDoxyAnchor(const DString &, const DString &, const DString &, const DString &, const DString &) override
void writeDoc(const IDocNodeAST *node, const Definition *ctx, const MemberDef *, int id, int sectionLevel) override
void startMemberItem(const DString &, MemberItemType, const DString &) override
void startParameterType(bool, const DString &) override
void endPageRef(const DString &, const DString &) 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.
static ResourceMgr & instance()
Returns the one and only instance of this class.
DString getAsString(const DString &name) const
Gets the resource data as a C string.
static constexpr int Section
static constexpr int Subsection
static constexpr int Subsubsection
constexpr int level() const
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.
virtual DString trCompoundMembers()=0
virtual DString latexDocumentPost()
virtual DString trGeneratedAt(const DString &date, const DString &projName)=0
virtual DString latexFontenc()
virtual DString trInheritedFrom(const DString &members, const DString &what)=0
virtual DString trCiteReferences()=0
virtual DString latexLanguageSupportCommand()=0
virtual DString trISOLang()=0
virtual DString latexFont()
virtual DString latexDocumentPre()
virtual DString trGeneratedBy()=0
virtual DString trEnumerationValues()=0
virtual DString latexCommandName()
virtual DString trExamples()=0
#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
DString yearToString()
Returns the current year as a string.
DString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
bool insideTable(const DocNodeVariant *n)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
bool isId(int c)
Returns true if c is a valid character for an identifier.
@ isNamespaceDocumentation
Translator * theTranslator
static DString extraLatexStyleSheet()
static DString substituteLatexKeywords(const DString &file, const DString &str, const DString &title)
static void writeLatexMakefile()
static DString latex_batchmode()
DString latexFilterURL(const DString &s)
DString latexEscapePDFString(const DString &s)
static const SelectionMarkerInfo latexMarkerInfo
DString latexEscapeIndexChars(const DString &s)
DString latexEscapeLabelName(const DString &s)
static void processEntity(TextStream &t, bool pdfHyperlinks, const char *strForm, const char *strRepl)
static void writeMakeBat()
static void writeDefaultStyleSheet(TextStream &t)
void filterLatexString(TextStream &t, const DString &str, bool insideTabbing, bool insidePre, bool insideItem, bool insideTable, bool keepSpaces, const bool retainNewline)
void writeExtraLatexPackages(TextStream &t)
static DString g_header_file
static DString makeIndex()
void latexWriteIndexItem(TextStream &m_t, const DString &s1, const DString &s2)
static DString objectLinkToString(const DString &ref, const DString &f, const DString &anchor, const DString &text, bool insideTabbing, bool disableLinks)
void writeLatexSpecialFormulaChars(TextStream &t)
static DString g_footer_file
DString convertToLaTeX(const DString &s, bool insideTabbing, bool keepSpaces)
void latexWriteIndexItem(TextStream &t, const DString &r1, const DString &s2="")
#define LATEX_STYLE_EXTENSION
DString latexEscapePDFString(const DString &s)
DString latexEscapeIndexChars(const DString &s)
DString convertToLaTeX(const DString &s, bool insideTabbing, bool keepSpaces=false)
void filterLatexString(TextStream &t, const DString &str, bool insideTabbing, bool insidePre, bool insideItem, bool insideTable, bool keepSpaces, const bool retainNewline=false)
const char * ghostScriptCommand()
std::ofstream openOutputStream(const DString &name, bool append=false)
OutputCodeDefer< LatexCodeGenerator > LatexCodeGeneratorDefer
Portable versions of functions that are platform dependent.
Some helper functions for std::string.
std::string removeEmptyLines(const std::string &s)
Various UTF8 related helper functions.
size_t updateColumnCount(const char *s, size_t col)
DString selectBlocks(const DString &s, const SelectionBlockList &blockList, const SelectionMarkerInfo &markerInfo)
remove disabled blocks and all block markers from s and return the result as a string
bool checkExtension(const DString &fName, const DString &ext)
DString showDate(const DString &fmt)
DString stripExtensionGeneral(const DString &fName, const DString &ext)
void clearSubDirs(const Dir &d)
void createSubDirs(const Dir &d)
void checkBlocks(const DString &s, const DString fileName, const SelectionMarkerInfo &markerInfo)
DString fileToString(const DString &name, bool filter, bool isSourceCode)
DString substituteKeywords(const DString &file, const DString &s, const KeywordSubstitutionList &keywords)
DString relativePathToRoot(const DString &name)
DString projectLogoFile()
bool copyFile(const DString &src, const DString &dest)
Copies the contents of file with name src to the newly created file with name dest.
DString projectLogoSize()
DString stripPath(const DString &s)
A bunch of utility functions.