21#include <unordered_map>
65 case TIMESTAMP_t::YES:
66 case TIMESTAMP_t::DATETIME:
67 result.
sprintf(
"\\yr%d\\mo%d\\dy%d\\hr%d\\min%d\\sec%d",
68 tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday,
69 tm.tm_hour, tm.tm_min, tm.tm_sec);
71 case TIMESTAMP_t::DATE:
72 result.
sprintf(
"\\yr%d\\mo%d\\dy%d",
73 tm.tm_year+1900, tm.tm_mon+1, tm.tm_mday);
78 return "{\\creatim " + result +
"}\n";
87 const char *p=str.
data();
94 case '{': result +=
"\\{";
break;
95 case '}': result +=
"\\}";
break;
96 case '\\': result +=
"\\\\";
break;
97 default: result += c;
break;
107 result+=
static_cast<char>(i+
'0');
138 *
m_t <<
"{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
141 *
m_t <<
"}{\\fldrslt {\\cs37\\ul\\cf2 ";
161 const char *p=str.
data();
173 int spacesToNextTabStop = tabSize - (
m_col%tabSize);
174 while (spacesToNextTabStop--)
184 case '\n': *
m_t <<
"\\par\n";
187 case '{': *
m_t <<
"\\{";
m_col++;
break;
188 case '}': *
m_t <<
"\\}";
m_col++;
break;
189 case '\\': *
m_t <<
"\\\\";
m_col++;
break;
219 DBG_RTF(*
m_t <<
"{\\comment (startCodeFragment) }\n")
229 DBG_RTF(*
m_t <<
"{\\comment (endCodeFragment) }\n")
248 lineAnchor.
sprintf(
"_l%05d",l);
251 bool showTarget = rtfHyperlinks && !lineAnchor.
isEmpty() && writeLineAnchor;
254 *
m_t <<
"{\\bkmkstart ";
257 *
m_t <<
"{\\bkmkend ";
296 static const std::unordered_map<std::string,int> map {
298 {
"keywordtype", 18 },
299 {
"keywordflow", 19 },
301 {
"preprocessor", 21 },
302 {
"stringliteral", 22 },
303 {
"charliteral", 23 },
306 {
"vhdlkeyword", 26 },
309 auto it = map.find(name.
str());
314 *
m_t <<
"{\\cf" << cod <<
" ";
393 t <<
"# Generated by doxygen " << getDoxygenVersion() <<
"\n\n";
394 t <<
"# This file describes styles used for generating RTF output.\n";
395 t <<
"# All text after a hash (#) is considered a comment and will be ignored.\n";
396 t <<
"# Remove a hash to activate a line.\n\n";
408 t <<
"# Generated by doxygen " << getDoxygenVersion() <<
"\n\n";
409 t <<
"# This file describes extensions used for generating RTF output.\n";
410 t <<
"# All text after a hash (#) is considered a comment and will be ignored.\n";
411 t <<
"# Remove a hash to activate a line.\n\n";
413 t <<
"# Overrides the project title.\n";
415 t <<
"#Title = \n\n";
417 t <<
"# Name of the company that produced this document.\n";
418 t <<
"#Company = \n\n";
420 t <<
"# Filename of a company or project logo.\n";
421 t <<
"#LogoFilename = \n\n";
423 t <<
"# Author of the document.\n";
424 t <<
"#Author = \n\n";
426 t <<
"# Type of document (e.g. Design Specification, User Manual, etc.).\n";
427 t <<
"#DocumentType = \n\n";
429 t <<
"# Document tracking number.\n";
430 t <<
"#DocumentId = \n\n";
432 t <<
"# Name of the author's manager.\n";
433 t <<
"# This field is not displayed in the document itself, but it is \n";
434 t <<
"# available in the information block of the rtf file. In Microsoft \n";
435 t <<
"# Word, it is available under File:Properties.\n";
436 t <<
"#Manager = \n\n";
438 t <<
"# Subject of the document.\n";
439 t <<
"# This field is not displayed in the document itself, but it is \n";
440 t <<
"# available in the information block of the rtf file. In Microsoft \n";
441 t <<
"# Word, it is available under File:Properties.\n";
442 t <<
"#Subject = \n\n";
444 t <<
"# Comments regarding the document.\n";
445 t <<
"# This field is not displayed in the document itself, but it is \n";
446 t <<
"# available in the information block of the rtf file. In Microsoft \n";
447 t <<
"# Word, it is available under File:Properties.\n";
448 t <<
"#Comments = \n\n";
450 t <<
"# Keywords associated with the document.\n";
451 t <<
"# This field is not displayed in the document itself, but it is \n";
452 t <<
"# available in the information block of the rtf file. In Microsoft \n";
453 t <<
"# Word, it is available under File:Properties.\n";
454 t <<
"#Keywords = \n\n";
473 err(
"Internal: rtf_Style_Default[%s] has no definition.\n", def->
name);
484 if (!rtfStyleSheetFile.
isEmpty())
491 if (!rtfExtensionsFile.
isEmpty())
500 err(
"Logo '%s' specified by 'LogoFilename' in the rtf extension file '%s' does not exist!\n",
529 m_t <<
"\\uc1 \\deff0\\deflang1033\\deflangfe1033\n";
531 DBG_RTF(
m_t <<
"{\\comment Beginning font list}\n")
532 m_t <<
"{\\fonttbl ";
534 m_t <<
"\\fprq2{\\*\\panose 02020603050405020304}Times New Roman;}\n";
536 m_t <<
"\\fprq2{\\*\\panose 020b0604020202020204}Arial;}\n";
538 m_t <<
"\\fprq1{\\*\\panose 02070309020205020404}Courier New;}\n";
539 m_t <<
"{\\f3\\froman\\fcharset2\\fprq2{\\*\\panose 05050102010706020507}Symbol;}\n";
542 m_t <<
"{\\colortbl;";
543 m_t <<
"\\red0\\green0\\blue0;";
544 m_t <<
"\\red0\\green0\\blue255;";
545 m_t <<
"\\red0\\green255\\blue255;";
546 m_t <<
"\\red0\\green255\\blue0;";
547 m_t <<
"\\red255\\green0\\blue255;";
548 m_t <<
"\\red255\\green0\\blue0;";
549 m_t <<
"\\red255\\green255\\blue0;";
550 m_t <<
"\\red255\\green255\\blue255;";
551 m_t <<
"\\red0\\green0\\blue128;";
552 m_t <<
"\\red0\\green128\\blue128;";
553 m_t <<
"\\red0\\green128\\blue0;";
554 m_t <<
"\\red128\\green0\\blue128;";
555 m_t <<
"\\red128\\green0\\blue0;";
556 m_t <<
"\\red128\\green128\\blue0;";
557 m_t <<
"\\red128\\green128\\blue128;";
558 m_t <<
"\\red192\\green192\\blue192;";
561 m_t <<
"\\red0\\green128\\blue0;";
562 m_t <<
"\\red96\\green64\\blue32;";
563 m_t <<
"\\rede0\\green128\\blue0;";
564 m_t <<
"\\red128\\green0\\blue0;";
565 m_t <<
"\\red128\\green96\\blue32;";
566 m_t <<
"\\red0\\green32\\blue128;";
567 m_t <<
"\\red0\\green128\\blue128;";
568 m_t <<
"\\red255\\green0\\blue255;";
569 m_t <<
"\\red0\\green0\\blue0;";
570 m_t <<
"\\red112\\green0\\blue112;";
571 m_t <<
"\\red255\\green0\\blue0;";
575 DBG_RTF(
m_t <<
"{\\comment Beginning style list}\n")
576 m_t <<
"{\\stylesheet\n";
577 m_t <<
"{\\widctlpar\\adjustright \\fs20\\cgrid \\snext0 Normal;}\n";
585 case PAPER_TYPE_t::a4:
m_t <<
"\\paperw11900\\paperh16840";
break;
586 case PAPER_TYPE_t::letter:
m_t <<
"\\paperw12240\\paperh15840";
break;
587 case PAPER_TYPE_t::legal:
m_t <<
"\\paperw12240\\paperh20160";
break;
588 case PAPER_TYPE_t::executive:
m_t <<
"\\paperw10440\\paperh15120";
break;
590 m_t <<
"\\margl1800\\margr1800\\margt1440\\margb1440\\gutter0\\ltrsect}\n";
593 unsigned maxIndex = 0;
594 for (
const auto &[name,data] :
rtf_Style)
596 uint32_t index = data.index();
597 if (index > maxIndex) maxIndex = index;
599 std::vector<const StyleData*> array(maxIndex + 1,
nullptr);
600 ASSERT(maxIndex < array.size());
602 for (
const auto &[name,data] :
rtf_Style)
604 uint32_t index = data.index();
605 if (array[index] !=
nullptr)
607 err(
"Style '%s' redefines \\s%d.\n", name.c_str(), index);
609 array[index] = &data;
613 size_t size = array.size();
614 for(
size_t i = 0; i < size; i++)
616 const StyleData *pStyle = array[i];
627 m_t <<
"{\\*\\listtable" <<
"\n";
634 m_t <<
"\\listid" <<
id <<
"}" <<
"\n";
641 m_t <<
"\\listid" <<
id <<
"}" <<
"\n";
643 m_t <<
"{\\listoverridetable" <<
"\n";
650 m_t <<
"{\\listoverride\\listid" <<
id <<
"\\listoverridecount0\\ls" <<
id <<
"}" <<
"\n";
656 m_t <<
"{\\comment begin body}\n";
663 DBG_RTF(
m_t <<
"{\\comment BeginRTFChapter}\n")
670 m_t <<
"\\sect\\sbknone\n";
674 m_t <<
"\\sect\\sbkpage\n";
683 DBG_RTF(
m_t <<
"{\\comment BeginRTFSection}\n")
689 m_t <<
"\\sect\\sbknone\n";
694 m_t <<
"\\sect\\sbkpage\n";
698 m_t <<
rtf_Style[QCString().sprintf(
"Heading%d", level).str()].reference() <<
"\n";
726 DBG_RTF(
m_t <<
"{\\comment startProjectNumber }\n")
732 DBG_RTF(
m_t <<
"{\\comment endProjectNumber }\n")
748 m_t <<
"{\\title {\\comment ";
759 m_t <<
"{\\comment ";
787 DBG_RTF(
m_t <<
"{\\comment start classhierarchy}\n")
807 if (!gd->isReference())
820 if (!mod->isReference() && mod->isPrimaryInterface())
833 if (dd->isLinkableInProject())
846 if (nd->isLinkableInProject())
859 if (cd->isLinkableInProject())
872 if (cd->isLinkableInProject() &&
873 cd->templateMaster()==
nullptr &&
874 !cd->isEmbeddedInOuterScope() &&
890 for (
const auto &fd : *fn)
892 if (fd->isLinkableInProject() || fd->generateSourceFile())
937 m_t <<
"}" << projectName;
941 m_t <<
" doxygen " << getDoxygenVersion() <<
".}\n";
943 DBG_RTF(
m_t <<
"{\\comment end of infoblock}\n");
947 m_t <<
"\\sectd\\pgnlcrm\n";
948 m_t <<
"{\\footer "<<
rtf_Style[
"Footer"].reference() <<
"{\\chpgn}}\n";
950 DBG_RTF(
m_t <<
"{\\comment begin title page}\n")
955 m_t <<
"\\vertalc\\qc\\par\\par\\par\\par\\par\\par\\par\n";
959 m_t <<
"\" \\\\d \\\\*MERGEFORMAT} {\\fldrslt IMAGE }}\\par\\par\n";
970 m_t <<
"{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt " <<
rtf_title <<
"}}\\par\n";
978 m_t <<
"{\\field\\fldedit {\\*\\fldinst TITLE \\\\*MERGEFORMAT}{\\fldrslt ";
979 writeDoc(ast.get(),
nullptr,
nullptr,0);
994 m_t <<
"\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\\par\n";
999 m_t <<
"{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt "<<
rtf_author <<
" }}\\par\n";
1003 m_t <<
"{\\field\\fldedit {\\*\\fldinst AUTHOR \\\\*MERGEFORMAT}{\\fldrslt AUTHOR}}\\par\n";
1009 case TIMESTAMP_t::YES:
1010 case TIMESTAMP_t::DATETIME:
1011 m_t <<
"{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}"
1014 case TIMESTAMP_t::DATE:
1015 m_t <<
"{\\field\\fldedit {\\*\\fldinst CREATEDATE \\\\*MERGEFORMAT}"
1018 case TIMESTAMP_t::NO:
1021 m_t <<
"\\page\\page";
1022 DBG_RTF(
m_t <<
"{\\comment End title page}\n")
1025 DBG_RTF(
m_t <<
"{\\comment Table of contents}\n")
1026 m_t <<
"\\vertalt\n";
1031 m_t <<
"{\\field\\fldedit {\\*\\fldinst TOC \\\\f \\\\*MERGEFORMAT}{\\fldrslt Table of contents}}\\par\n";
1044 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"topics.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1049 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"modules.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1054 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"dirs.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1067 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"namespaces.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1072 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"concepts.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1077 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"hierarchy.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1093 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"annotated.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1098 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"files.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1103 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"pages.rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1110 if (!gd->isReference() && !gd->isASubGroup())
1122 if (!mod->isReference() && mod->isPrimaryInterface())
1135 if (dd->isLinkableInProject())
1143 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1144 m_t << dd->getOutputFileBase();
1145 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1155 if (nd->isLinkableInProject() && !nd->isAlias())
1163 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1164 m_t << nd->getOutputFileBase();
1165 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1175 if (cd->isLinkableInProject() && !cd->isAlias())
1183 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1184 m_t << cd->getOutputFileBase();
1185 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1203 if (cd->isLinkableInProject() &&
1204 cd->templateMaster()==
nullptr &&
1205 !cd->isEmbeddedInOuterScope() &&
1215 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1216 m_t << cd->getOutputFileBase();
1217 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1229 for (
const auto &fd : *fn)
1231 if (fd->isLinkableInProject())
1239 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1240 m_t << fd->getOutputFileBase();
1241 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1243 if (fd->generateSourceFile())
1251 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1252 m_t << fd->getSourceFileBase();
1253 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1272 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1273 m_t << pd->getOutputFileBase();
1274 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1283 if (!pd->getGroupDef() && !pd->isReference() && !pd->hasParentPage()
1299 m_t <<
"{\\field\\fldedit {\\*\\fldinst INDEX \\\\c2 \\\\*MERGEFORMAT}{\\fldrslt INDEX}}\n";
1308 m_t <<
"{\\field\\fldedit{\\*\\fldinst INCLUDETEXT \"";
1310 m_t <<
".rtf\" \\\\*MERGEFORMAT}{\\fldrslt includedstuff}}\n";
1315 DBG_RTF(
m_t <<
"{\\comment Beginning Body of RTF Document}\n")
1317 m_t <<
"\\sect \\sbkpage \\pgndec \\pgnrestart\n";
1318 m_t <<
"\\sect \\sectd \\sbknone\n";
1321 m_t <<
"{\\footer "<<
rtf_Style[
"Footer"].reference() <<
"{\\chpgn}}\n";
1331 DBG_RTF(
m_t <<
"{\\comment (lineBreak)}" <<
"\n")
1343 DBG_RTF(
m_t <<
"{\\comment (startIndexList)}\n")
1353 DBG_RTF(
m_t <<
"{\\comment (endIndexList)}\n")
1369 DBG_RTF(
m_t <<
"{\\comment (startItemList level=" << level <<
") }\n")
1389 DBG_RTF(
m_t <<
"{\\comment (startItemListItem)}\n")
1408 DBG_RTF(
m_t <<
"{\\comment (endItemListItem)}\n")
1413 DBG_RTF(
m_t <<
"{\\comment (startIndexItem)}\n")
1424 DBG_RTF(
m_t <<
"{\\comment (endIndexItem)}\n")
1441 DBG_RTF(
m_t <<
"{\\comment (writeStartAnnoItem)}\n")
1446 m_t <<
"{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
1449 m_t <<
"}{\\fldrslt {\\cs37\\ul\\cf2 ";
1464 DBG_RTF(
m_t <<
"{\\comment (startIndexKey)}\n")
1470 DBG_RTF(
m_t <<
"{\\comment (endIndexKey)}\n")
1475 DBG_RTF(
m_t <<
"{\\comment (startIndexValue)}\n")
1477 if (hasBrief)
m_t <<
"(";
1482 DBG_RTF(
m_t <<
"{\\comment (endIndexValue)}\n")
1483 if (hasBrief)
m_t <<
")";
1503 DBG_RTF(
m_t <<
"{\\comment Begin SubSubSection}\n")
1530 m_t <<
"{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
1533 m_t <<
"}{\\fldrslt {\\cs37\\ul\\cf2 ";
1562 result +=
"{\\field {\\*\\fldinst { HYPERLINK \\\\l \"";
1565 result +=
"}{\\fldrslt {\\cs37\\ul\\cf2 ";
1611 DBG_RTF(
m_t <<
"{\\comment startTitleHead}\n")
1614 heading.
sprintf(
"Heading%d", level);
1627 m_t <<
"{\\tc\\tcl" << level <<
" \\v ";
1642 DBG_RTF(
m_t <<
"{\\comment startGroupHeader}\n")
1649 else if (extraIndent==1)
1662 DBG_RTF(
m_t <<
"{\\comment endGroupHeader}\n")
1675 DBG_RTF(
m_t <<
"{\\comment startMemberDoc}\n")
1676 if (!memname.
isEmpty() && memname[0]!=
'@')
1713 DBG_RTF(
m_t <<
"{\\comment startDoxyAnchor}\n")
1729 DBG_RTF(
m_t <<
"{\\comment endDoxyAnchor}\n")
1730 m_t <<
"{\\bkmkstart ";
1733 m_t <<
"{\\bkmkend ";
1748 m_t <<
"{\\xe \\v ";
1762 DBG_RTF(
m_t <<
"{\\comment (startIndent) }\n")
1776 DBG_RTF(
m_t <<
"{\\comment (startMemberDescription)}\n")
1785 DBG_RTF(
m_t <<
"{\\comment (endMemberDescription)}\n")
1795 DBG_RTF(
m_t <<
"{\\comment (startDescForItem) }\n")
1800 DBG_RTF(
m_t <<
"{\\comment (endDescForItem) }\n")
1805 DBG_RTF(
m_t <<
"{\\comment (startSection)}\n")
1809 switch(
type.level())
1818 default:
ASSERT(0);
break;
1822 heading.
sprintf(
"Heading%d",num);
1826 m_t <<
"{\\tc\\tcl" << num <<
" \\v ";
1858 DBG_RTF(
m_t <<
"{\\comment startClassDiagram }\n")
1872 m_t <<
"\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
1874 m_t <<
" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par\n";
1880 DBG_RTF(
m_t <<
"{\\comment startMemberItem }\n")
1886 DBG_RTF(
m_t <<
"{\\comment endMemberItem }\n")
1907 DBG_RTF(
m_t <<
"{\\comment writeAnchor (" << anchor <<
")}\n")
1914 m_t <<
"{\\field\\fldedit {\\*\\fldinst PAGEREF ";
1916 m_t <<
" \\\\*MERGEFORMAT}{\\fldrslt pagenum}}";
1928 DBG_RTF(
m_t <<
"{\\comment (startMemberList) }\n")
1932 m_t <<
"\\begin{CompactItemize}\n";
1938 DBG_RTF(
m_t <<
"{\\comment (endMemberList) }\n")
1942 m_t <<
"\\end{CompactItemize}\n";
1948 DBG_RTF(
m_t <<
"{\\comment (startDescTable) }\n")
1950 m_t <<
"{" <<
rtf_Style[
"Heading5"].reference() <<
"\n";
1954 m_t <<
"\\trowd \\trgaph108\\trleft426\\tblind426"
1955 "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
1956 "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 "
1957 "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 "
1958 "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
1959 "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
1960 "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 \n";
1961 int columnPos2[2] = { 25, 100 };
1962 int columnPos3[3] = { 25, 45, 100 };
1963 for (
int i=0;i<(hasInits?3:2);i++)
1965 m_t <<
"\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
1966 "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
1967 "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 "
1968 "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 "
1970 "\\cellx" << (
rtf_pageWidth*(hasInits?columnPos3[i]:columnPos2[i])/100) <<
"\n";
1972 m_t <<
"\\pard \\widctlpar\\intbl\\adjustright\n";
1977 DBG_RTF(
m_t <<
"{\\comment (endDescTable)}\n")
1991 DBG_RTF(
m_t <<
"{\\comment (startDescTableTitle) }\n")
1998 DBG_RTF(
m_t <<
"{\\comment (endDescTableTitle) }\n")
2004 DBG_RTF(
m_t <<
"{\\comment (startDescTableInit) }" << endl)
2012 DBG_RTF(
m_t <<
"{\\comment (endDescTableInit) }" << endl)
2018 DBG_RTF(
m_t <<
"{\\comment (startDescTableData) }\n")
2024 DBG_RTF(
m_t <<
"{\\comment (endDescTableData) }\n")
2025 m_t <<
"\\cell }{\\row }\n";
2041 err(
"Maximum indent level (%d) exceeded while generating RTF output!\n",
maxIndentLevels);
2051 err(
"Negative indent level while generating RTF output!\n");
2093 DBG_RTF(
m_t <<
"{\\comment startTextBlock}\n")
2118 DBG_RTF(
m_t <<
"{\\comment (newParagraph)}\n")
2126 DBG_RTF(
m_t <<
"{\\comment startParagraph}\n")
2129 if (QCString(txt) ==
"reference")
m_t <<
"\\ql\n";
2141 DBG_RTF(
m_t <<
"{\\comment startMemberSubtitle}\n")
2148 DBG_RTF(
m_t <<
"{\\comment endMemberSubtitle}\n")
2159 if (codePage ==
"932")
2161 result = (0x81<=c && c<=0x9f) || (0xe0<=c && c<=0xfc);
2163 else if (codePage ==
"936")
2165 result = 0x81<=c && c<=0xFE;
2167 else if (codePage ==
"949")
2169 result = 0x81<=c && c<=0xFE;
2171 else if (codePage ==
"950")
2173 result = 0x81<=c && c<=0xFE;
2183 if (s==
nullptr)
return;
2185 bool converted=
FALSE;
2187 static std::vector<char> enc;
2188 if (l*4>enc.size()) enc.resize(l*4);
2194 if (cd!=
reinterpret_cast<void *
>(-1))
2197 size_t oLeft=enc.size();
2198 const char *inputPtr = s.
data();
2199 char *outputPtr = &enc[0];
2202 enc.resize(enc.size()-oLeft);
2210 memcpy(enc.data(),s.
data(),l);
2213 bool multiByte =
FALSE;
2215 for (
size_t i=0;i<enc.size();i++)
2217 uint8_t c =
static_cast<uint8_t
>(enc.at(i));
2219 if (c>=0x80 || multiByte)
2251 err(
"problems opening rtf file '%s' for reading\n",infName.
data());
2255 const int maxLineLength = 10240;
2263 while (getline(f,line))
2266 if (line.find(
"\\comment begin body")!=std::string::npos)
break;
2270 std::string prevLine;
2272 while (getline(f,line))
2275 size_t pos=prevLine.find(
"INCLUDETEXT \"");
2276 if (pos!=std::string::npos)
2278 size_t startNamePos = prevLine.find(
'"',pos)+1;
2279 size_t endNamePos = prevLine.find(
'"',startNamePos);
2280 std::string fileName = prevLine.substr(startNamePos,endNamePos-startNamePos);
2281 DBG_RTF(t <<
"{\\comment begin include " << fileName <<
"}\n")
2283 DBG_RTF(t <<
"{\\comment end include " << fileName <<
"}\n")
2292 if (!bIncludeHeader)
2294 size_t pos = line.rfind(
'}');
2295 if (pos==std::string::npos)
2297 err(
"Strange, the last char was not a '}'\n");
2298 pos = line.length();
2314 DBG_RTF(
m_t <<
"{\\comment (startDotGraph)}\n")
2326 m_t <<
"\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
2328 m_t << fn <<
"." << imgExt;
2329 m_t <<
"\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par\n";
2332 DBG_RTF(
m_t <<
"{\\comment (endDotGraph)}\n")
2337 DBG_RTF(
m_t <<
"{\\comment (startInclDepGraph)}\n")
2349 m_t <<
"\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
2351 m_t << fn <<
"." << imgExt;
2352 m_t <<
"\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par\n";
2354 DBG_RTF(
m_t <<
"{\\comment (endInclDepGraph)}\n")
2367 DBG_RTF(
m_t <<
"{\\comment (startCallGraph)}\n")
2379 m_t <<
"\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
2381 m_t << fn <<
"." << imgExt;
2382 m_t <<
"\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par\n";
2384 DBG_RTF(
m_t <<
"{\\comment (endCallGraph)}\n")
2389 DBG_RTF(
m_t <<
"{\\comment (startDirDepGraph)}\n")
2401 m_t <<
"\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
2403 m_t << fn <<
"." << imgExt;
2404 m_t <<
"\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par\n";
2406 DBG_RTF(
m_t <<
"{\\comment (endDirDepGraph)}\n")
2420 while ((c=f.get())!=-1)
2446 if (bcount==0)
return;
2448 err(
"RTF integrity test failed at line %d of %s due to a bracket mismatch.\n"
2449 " Please try to create a small code example that produces this error \n"
2450 " and send that to doxygen@gmail.com.\n",line,
qPrint(
name));
2465 err(
"Output dir %s does not exist!\n",
qPrint(path));
2474 QCString combinedName = path+
"/combined.rtf";
2475 QCString mainRTFName = path+
"/"+name;
2480 err(
"Failed to open %s for writing!\n",combinedName.
data());
2484 TextStream outt(&f);
2505 thisDir.
rename(mainRTFName.
str(),mainRTFName.
str() +
".org");
2514 QCString s1(s.c_str());
2524 DBG_RTF(
m_t <<
"{\\comment startMemberGroupHeader}\n")
2532 DBG_RTF(
m_t <<
"{\\comment endMemberGroupHeader}\n")
2539 DBG_RTF(
m_t <<
"{\\comment startMemberGroupDocs}\n")
2545 DBG_RTF(
m_t <<
"{\\comment endMemberGroupDocs}\n")
2552 DBG_RTF(
m_t <<
"{\\comment startMemberGroup}\n")
2558 DBG_RTF(
m_t <<
"{\\comment endMemberGroup}\n")
2565 DBG_RTF(
m_t <<
"{\\comment (startExamples)}\n")
2580 DBG_RTF(
m_t <<
"{\\comment (endExamples)}\n")
2590 DBG_RTF(
m_t <<
"{\\comment (startParameterType)}\n")
2593 m_t <<
" " << key <<
" ";
2599 DBG_RTF(
m_t <<
"{\\comment (endParameterType)}\n")
2605 DBG_RTF(
m_t <<
"{\\comment (exceptionEntry)}\n")
2610 else if (closeBracket)
2619 auto astImpl =
dynamic_cast<const DocNodeAST*
>(ast);
2623 std::visit(visitor,astImpl->root);
2630 DBG_RTF(
m_t <<
"{\\comment (rtfwriteRuler_doubleline)}\n")
2631 m_t <<
"{\\pard\\widctlpar\\brdrb\\brdrdb\\brdrw15\\brsp20 \\adjustright \\par}\n";
2636 DBG_RTF(
m_t <<
"{\\comment (rtfwriteRuler_emboss)}\n")
2637 m_t <<
"{\\pard\\widctlpar\\brdrb\\brdremboss\\brdrw15\\brsp20 \\adjustright \\par}\n";
2642 DBG_RTF(
m_t <<
"{\\comment (rtfwriteRuler_thick)}\n")
2643 m_t <<
"{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw75\\brsp20 \\adjustright \\par}\n";
2648 DBG_RTF(
m_t <<
"{\\comment (rtfwriteRuler_thin)}\n")
2649 m_t <<
"{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}\n";
2654 DBG_RTF(
m_t <<
"{\\comment (startConstraintList)}\n")
2669 DBG_RTF(
m_t <<
"{\\comment (startConstraintParam)}\n")
2675 DBG_RTF(
m_t <<
"{\\comment (endConstraintParam)}\n")
2682 DBG_RTF(
m_t <<
"{\\comment (startConstraintType)}\n")
2688 DBG_RTF(
m_t <<
"{\\comment (endConstraintType)}\n")
2695 DBG_RTF(
m_t <<
"{\\comment (startConstraintDocs)}\n")
2700 DBG_RTF(
m_t <<
"{\\comment (endConstraintDocs)}\n")
2706 DBG_RTF(
m_t <<
"{\\comment (endConstraintList)}\n")
2715 DBG_RTF(
m_t <<
"{\\comment (startIndexListItem)}\n")
2720 DBG_RTF(
m_t <<
"{\\comment (endIndexListItem)}\n")
2726 DBG_RTF(
m_t <<
"{\\comment (startInlineHeader)}\n")
2734 DBG_RTF(
m_t <<
"{\\comment (endInlineHeader)}\n")
2742 DBG_RTF(
m_t <<
"{\\comment (startMemberDocSimple)}\n")
2744 m_t <<
"{" <<
rtf_Style[
"Heading5"].reference() <<
"\n";
2755 m_t <<
"\\trowd \\trgaph108\\trleft426\\tblind426"
2756 "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 "
2757 "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 "
2758 "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 "
2759 "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 "
2760 "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 "
2761 "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 \n";
2762 int n=3,columnPos[3] = { 25, 50, 100 };
2769 for (
int i=0;i<n;i++)
2771 m_t <<
"\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 "
2772 "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 "
2773 "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 "
2774 "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 "
2778 m_t <<
"\\pard \\widctlpar\\intbl\\adjustright\n";
2783 DBG_RTF(
m_t <<
"{\\comment (endMemberDocSimple)}\n")
2789 DBG_RTF(
m_t <<
"{\\comment (startInlineMemberType)}\n")
2795 DBG_RTF(
m_t <<
"{\\comment (endInlineMemberType)}\n")
2801 DBG_RTF(
m_t <<
"{\\comment (startInlineMemberName)}\n")
2807 DBG_RTF(
m_t <<
"{\\comment (endInlineMemberName)}\n")
2813 DBG_RTF(
m_t <<
"{\\comment (startInlineMemberDoc)}\n")
2819 DBG_RTF(
m_t <<
"{\\comment (endInlineMemberDoc)}\n")
2820 m_t <<
"\\cell }{\\row }\n";
2829 m_t <<
"{\\f2 [" << l <<
"]}";
2830 if (!isLast)
m_t <<
", ";
2852 if (openBracket)
m_t <<
"(";
2857 if (last && closeBracket)
2866static std::unordered_map<std::string,std::string>
g_tagMap;
2891 for (
unsigned int i = 0; i <
g_nextTag.length(); ++i, --nxtTag )
2893 if ( ( ++(*nxtTag) ) >
'Z' )
Class representing a built-in class diagram.
void writeImage(TextStream &t, const QCString &path, const QCString &relPath, const QCString &file, bool generateMap=true) const
static void print(DebugMask mask, int prio, const char *fmt,...)
static bool isFlagSet(const DebugMask mask)
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.
static std::string currentDirPath()
std::string absPath() const
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
bool remove(const std::string &path, bool acceptsAbsPath=true) const
std::string filePath(const std::string &path, bool acceptsAbsPath=true) const
bool rename(const std::string &orgName, const std::string &newName, bool acceptsAbsPath=true) const
static bool setCurrent(const std::string &path)
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.
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
opaque representation of the abstract syntax tree (AST)
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 startsWith(const char *s) const
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
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.
void startSpecialComment() override
void endCodeLine() override
void startFontClass(const QCString &) override
size_t m_stripIndentAmount
void writeCodeLink(CodeSymbolType type, const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name, const QCString &tooltip) override
void endFontClass() override
void endCodeFragment(const QCString &) override
QCString rtf_Code_DepthStyle()
QCString m_sourceFileName
RTFCodeGenerator(TextStream *t)
void endSpecialComment() override
void stripCodeComments(bool b) override
void setSourceFileName(const QCString &name)
void codify(const QCString &text) override
void startCodeFragment(const QCString &style) override
void writeLineNumber(const QCString &, const QCString &, const QCString &, int l, bool) override
void setStripIndentAmount(size_t amount) override
void startCodeLine(int) override
void startTextBlock(bool dense) override
void endMemberGroupHeader() override
void startGroupCollaboration() override
void endClassDiagram(const ClassDiagram &, const QCString &filename, const QCString &name) override
void startCallGraph() override
void endConstraintList() override
void writeStartAnnoItem(const QCString &type, const QCString &file, const QCString &path, const QCString &name) override
void endMemberList() override
void endConstraintType() override
void endDescTableRow() override
void startLabels() override
void startInlineMemberName() override
void writeChar(char c) override
void endDescTableData() override
void startDescTableData() override
void endDescTable() override
OutputType type() const override
RTFCodeGenerator * m_codeGen
void endDirDepGraph(DotDirDeps &g) override
std::unique_ptr< OutputCodeList > m_codeList
void startGroupHeader(int) override
void startIndexKey() override
void startConstraintList(const QCString &) override
void endMemberItem(MemberItemType) override
void endPlainFile() override
void startIndexListItem() override
void endCompoundTemplateParams() override
void rtfwriteRuler_thick()
static bool preProcessFileInplace(const QCString &path, const QCString &name)
This is an API to a VERY brittle RTF preprocessor that combines nested RTF files.
static void writeStyleSheetFile(TextStream &t)
void endInlineMemberType() override
void endDescForItem() override
void startIndent() override
void lastIndexPage() override
void endInlineMemberName() override
void startTextLink(const QCString &f, const QCString &anchor) override
void endItemList() override
std::array< RTFListItemInfo, maxIndentLevels > m_listItemInfo
void startDescTableInit() override
void writeDoc(const IDocNodeAST *ast, const Definition *, const MemberDef *, int) override
void endMemberGroup(bool) override
void writeLabel(const QCString &l, bool isLast) override
void writeInheritedSectionTitle(const QCString &, const QCString &, const QCString &, const QCString &, const QCString &, const QCString &) override
void endMemberGroupDocs() override
void exceptionEntry(const QCString &, bool) override
void endMemberDocSimple(bool) override
void startFile(const QCString &name, const QCString &manName, const QCString &title, int id, int hierarchyLevel) override
void startDirDepGraph() override
void startMemberSubtitle() override
void startDotGraph() override
void writePageLink(const QCString &, bool) override
void endTextBlock(bool) override
static void writeExtensionsFile(TextStream &t)
void writeString(const QCString &text) override
void startItemListItem() override
void endDoxyAnchor(const QCString &, const QCString &) override
void startBold() override
void endMemberSubtitle() override
void startPlainFile(const QCString &name) override
void startEmphasis() override
QCString rtf_EList_DepthStyle()
void startParameterType(bool, const QCString &) override
void endMemberDoc(bool) override
void startConstraintDocs() override
void startDescForItem() override
void writeRTFReference(const QCString &label)
void endProjectNumber() override
void startDescTableTitle() override
void startParameterList(bool) override
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name) override
void endDotGraph(DotClassGraph &) override
void endIndexItem(const QCString &ref, const QCString &file) override
void rtfwriteRuler_doubleline()
void startParagraph(const QCString &classDef) override
void endIndexSection(IndexSection) override
void writeNonBreakableSpace(int) override
void endMemberDescription() override
void startIndexList() override
void startIndexItem(const QCString &ref, const QCString &file) override
void rtfwriteRuler_emboss()
void addLabel(const QCString &, const QCString &) override
static const int maxIndentLevels
void docify(const QCString &text) override
QCString rtf_BList_DepthStyle()
QCString rtf_DList_DepthStyle()
void endSection(const QCString &, SectionType) override
void endInclDepGraph(DotInclDepGraph &) override
void startMemberItem(const QCString &, MemberItemType, const QCString &) override
void endDescTableTitle() override
void startItemList() override
void writeAnchor(const QCString &fileName, const QCString &name) override
void startMemberGroupHeader(bool) override
void endGroupCollaboration(DotGroupCollaboration &g) override
void endItemListItem() override
void addCodeGen(OutputCodeList &list) override
void startMemberDocSimple(bool) override
void startCompoundTemplateParams() override
void startDescTableRow() override
void endPageRef(const QCString &, const QCString &) override
void startDescTable(const QCString &title, const bool hasInits) override
void startInlineMemberType() override
void endParameterExtra(bool, bool, bool) override
void startPageRef() override
void startMemberGroup() override
void rtfwriteRuler_thin()
void startIndexValue(bool) override
void startClassDiagram() override
void setRelativePath(const QCString &path)
void setSourceFileName(const QCString &sourceFileName)
void endInlineHeader() override
void startInlineMemberDoc() override
void addIndexItem(const QCString &, const QCString &) override
void endIndexList() override
void endInlineMemberDoc() override
void endParagraph() override
void endTextLink() override
QCString rtf_LCList_DepthStyle()
void startConstraintType() override
void startInclDepGraph() override
void endIndexKey() override
void endTitleHead(const QCString &, const QCString &name) override
void startMemberGroupDocs() override
void endGroupHeader(int) override
void startExamples() override
void endCallGraph(DotCallGraph &) override
void startTitleHead(const QCString &) override
void endConstraintDocs() override
void endParameterType() override
void endIndexValue(const QCString &, bool) override
void startSection(const QCString &, const QCString &, SectionType) override
void endEmphasis() override
void endConstraintParam() override
void startDoxyAnchor(const QCString &, const QCString &, const QCString &, const QCString &, const QCString &) override
void startProjectNumber() override
void startMemberDoc(const QCString &, const QCString &, const QCString &, const QCString &, int, int, bool) override
void startIndexSection(IndexSection) override
RTFGenerator & operator=(const RTFGenerator &)
void startInlineHeader() override
void startMemberList() override
void endIndent() override
void writeStyleInfo(int part) override
void endDescTableInit() override
void endIndexListItem() override
void startConstraintParam() override
void endLabels() override
void lineBreak(const QCString &style=QCString()) override
void startMemberDescription(const QCString &, const QCString &, bool) override
QCString rtf_CList_DepthStyle()
void endExamples() override
static constexpr int Section
static constexpr int MaxLevel
static constexpr int Subsection
static constexpr int Subsubsection
static constexpr int Page
static constexpr int MinLevel
static constexpr int Paragraph
static constexpr int Subsubparagraph
static constexpr int Subparagraph
Text streaming class that buffers data.
void flush()
Flushes the buffer.
virtual QCString trRTFGeneralIndex()=0
virtual QCString trTopicIndex()=0
virtual QCString trDirIndex()=0
virtual QCString trConceptIndex()=0
virtual QCString trModuleIndex()=0
virtual QCString trFileIndex()=0
virtual QCString trInheritedFrom(const QCString &members, const QCString &what)=0
virtual QCString trNamespaceIndex()=0
virtual QCString trHierarchicalIndex()=0
virtual QCString trVersion()=0
virtual QCString trPageIndex()=0
virtual QCString trFileDocumentation()=0
virtual QCString trEnumerationValues()=0
virtual QCString trRTFTableOfContents()=0
virtual QCString trCompoundMembers()=0
virtual QCString trCompoundIndex()=0
virtual QCString trClassDocumentation()=0
virtual QCString trModuleDocumentation()=0
virtual QCString trTopicDocumentation()=0
virtual QCString trTypeDocumentation()=0
virtual QCString trRTFansicp()=0
virtual QCString trModulesIndex()=0
virtual QCString trDirDocumentation()=0
virtual QCString trCompoundIndexFortran()=0
virtual QCString trExamples()=0
virtual QCString trDesignUnitIndex()=0
virtual QCString trRTFCharSet()=0
#define Config_getInt(name)
#define Config_getBool(name)
#define Config_getString(name)
#define Config_getEnum(name)
std::set< std::string > StringSet
QCString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
std::tm getCurrentDateTime()
Returns the filled in std::tm for the current date and time.
static QCString objectLinkToString(const QCString &, const QCString &f, const QCString &anchor, const QCString &text)
IDocNodeASTPtr validatingParseText(IDocParser &parserIntf, const QCString &input)
IDocParserPtr createDocParser()
factory function to create a parser
@ isNamespaceDocumentation
Translator * theTranslator
static QCString docifyToString(const QCString &str)
std::ifstream openInputStream(const QCString &name, bool binary=false, bool openAtEnd=false)
std::ofstream openOutputStream(const QCString &name, bool append=false)
void unlink(const QCString &fileName)
OutputCodeDefer< RTFCodeGenerator > RTFCodeGeneratorDefer
Portable versions of functions that are platform dependent.
int portable_iconv_close(void *cd)
size_t portable_iconv(void *cd, const char **inbuf, size_t *inbytesleft, char **outbuf, size_t *outbytesleft)
void * portable_iconv_open(const char *tocode, const char *fromcode)
const char * qPrint(const char *s)
static QCString objectLinkToString(const QCString &ref, const QCString &f, const QCString &anchor, const QCString &text)
QCString rtfFormatBmkStr(const QCString &name)
static std::mutex g_rtfFormatMutex
static QCString dateToRTFDateString()
static StringSet removeSet
void testRTFOutput(const QCString &name)
Tests the integrity of the result by counting brackets.
static bool preProcessFile(Dir &d, const QCString &infName, TextStream &t, bool bIncludeHeader=true, bool removeFile=true)
VERY brittle routine inline RTF's included by other RTF's.
static QCString g_nextTag("AAAAAAAAAA")
static QCString makeIndexName(const QCString &s, int i)
static std::unordered_map< std::string, std::string > g_tagMap
static void encodeForOutput(TextStream &t, const QCString &s)
static QCString docifyToString(const QCString &str)
QCString rtfFormatBmkStr(const QCString &name)
QCString rtf_documentType
void loadStylesheet(const QCString &name, StyleDataMap &map)
Rtf_Style_Default rtf_Style_Default[]
void loadExtensions(const QCString &name)
QCString rtf_logoFilename
Rtf_Table_Default rtf_Table_Default[]
const char * definition() const
const char * reference() const
const char * writeUTF8Char(TextStream &t, const char *s)
Writes the UTF8 character pointed to by s to stream t and returns a pointer to the next character.
Various UTF8 related helper functions.
size_t updateColumnCount(const char *s, size_t col)
QCString stripPath(const QCString &s)
QCString relativePathToRoot(const QCString &name)
void clearSubDirs(const Dir &d)
QCString stripExtensionGeneral(const QCString &fName, const QCString &ext)
void createSubDirs(const Dir &d)
QCString getDotImageExtension()
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.