57#define XML_DB(x) do {} while(0)
83 if (str.
empty())
return;
85 const char *s = str.
data();
99 int spacesToNextTabStop = tabSize - (col%tabSize);
100 while (spacesToNextTabStop--)
102 if (col>=stripIndentAmount) t <<
"<sp/>";
108 if (col>=stripIndentAmount) t <<
"<sp/>";
111 case '<': t <<
"<"; col++;
break;
112 case '>': t <<
">"; col++;
break;
113 case '&': t <<
"&"; col++;
break;
114 case '\'': t <<
"'"; col++;
break;
115 case '"': t <<
"""; col++;
break;
116 case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
case 8:
117 case 11:
case 12:
case 13:
case 14:
case 15:
case 16:
case 17:
case 18:
118 case 19:
case 20:
case 21:
case 22:
case 23:
case 24:
case 25:
case 26:
119 case 27:
case 28:
case 29:
case 30:
case 31:
121 t <<
"<sp value=\"" << int(c) <<
"\"/>";
132 t <<
"<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
133 t <<
"<doxygen xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
134 t <<
"xsi:noNamespaceSchemaLocation=\"compound.xsd\" ";
135 t <<
"version=\"" << getDoxygenVersion() <<
"\" ";
143 DString fileName=outputDirectory+
"/combine.xslt";
147 err(
"Cannot open file {} for writing!\n",fileName);
152 "<!-- XSLT script to combine the generated output into a single file. \n"
153 " If you have xsltproc you could use:\n"
154 " xsltproc combine.xslt index.xml >all.xml\n"
156 "<xsl:stylesheet xmlns:xsl=\"http://www.w3.org/1999/XSL/Transform\" version=\"1.0\">\n"
157 " <xsl:output method=\"xml\" version=\"1.0\" indent=\"no\" standalone=\"yes\" />\n"
158 " <xsl:template match=\"/\">\n"
159 " <doxygen version=\"{doxygenindex/@version}\" xml:lang=\"{doxygenindex/@xml:lang}\">\n"
160 " <!-- Load all doxygen generated xml files -->\n"
161 " <xsl:for-each select=\"doxygenindex/compound\">\n"
162 " <xsl:copy-of select=\"document( concat( @refid, '.xml' ) )/doxygen/*\" />\n"
166 "</xsl:stylesheet>\n";
173 t <<
"<ref refid=\"" << compoundId;
174 if (!anchorId.
empty()) t <<
"_1" << anchorId;
175 t <<
"\" kindref=\"";
176 if (!anchorId.
empty()) t <<
"member";
else t <<
"compound";
178 if (!extRef.
empty()) t <<
" external=\"" << extRef <<
"\"";
196 const DString &anchor,std::string_view text
217 *
m_t <<
"<highlight class=\"normal\">";
249 XML_DB((
"(writeCodeLink)\n"));
252 *
m_t <<
"<highlight class=\"normal\">";
256 m_col+=name.length();
264 XML_DB((
"(writeToolTip)\n"));
271 XML_DB((
"(startCodeLine)\n"));
281 *
m_t <<
" refkind=\"member\"";
285 *
m_t <<
" refkind=\"compound\"";
301 XML_DB((
"(endCodeLine)\n"));
304 *
m_t <<
"</highlight>";
309 *
m_t <<
"</codeline>\n";
320 XML_DB((
"(startFontClass)\n"));
323 *
m_t <<
"</highlight>";
326 *
m_t <<
"<highlight class=\"" << colorClass <<
"\">";
333 XML_DB((
"(endFontClass)\n"));
334 *
m_t <<
"</highlight>";
341 XML_DB((
"(writeCodeAnchor)\n"));
345 const DString &anchorId,
int l,
bool)
348 XML_DB((
"(writeLineNumber)\n"));
363 XML_DB((
"(startCodeFragment)\n"));
364 *
m_t <<
" <programlisting>\n";
369 XML_DB((
"(endCodeFragment)\n"));
370 *
m_t <<
" </programlisting>\n";
383 indentStr.
fill(
' ',indent);
388 t << indentStr <<
"<templateparamlist>\n";
391 t << indentStr <<
" <param>\n";
394 t << indentStr <<
" <type>";
400 t << indentStr <<
" <declname>" <<
convertToXML(a.name) <<
"</declname>\n";
401 t << indentStr <<
" <defname>" <<
convertToXML(a.name) <<
"</defname>\n";
403 if (!a.defval.empty())
405 t << indentStr <<
" <defval>";
409 DString typeConstraint = a.typeConstraint;
411 const DString ¶mName = a.name.
empty() ? a.type : a.name;
412 for (
const Argument &tc : typeConstraints)
414 if (tc.name==paramName && !tc.type.
empty())
416 if (!typeConstraint.
empty()) typeConstraint+=
", ";
417 typeConstraint+=tc.type;
420 if (!typeConstraint.
empty())
422 t << indentStr <<
" <typeconstraint>";
424 t <<
"</typeconstraint>\n";
426 if (a.hasTemplateDocumentation())
428 t << indentStr <<
" <briefdescription>\n";
429 t << indentStr <<
" ";
438 t << indentStr <<
" </briefdescription>\n";
440 t << indentStr <<
" </param>\n";
442 t << indentStr <<
"</templateparamlist>\n";
469 if (stext.
empty())
return;
480 auto astImpl =
dynamic_cast<const DocNodeAST*
>(ast.get());
489 std::visit(visitor,astImpl->root);
498 intf->resetCodeParserState();
502 intf->parseCode(xmlList,
517 if (!scope.
empty() && scope!=def->
name())
521 t <<
" <" << tagName <<
" refid=\"";
532 t <<
">" <<
convertToXML(name) <<
"</" << tagName <<
">\n";
547 else if (typeStr==
"virtual") typeStr=
"";
578 size_t searchStart = 0;
579 size_t searchEnd = str.
size();
580 size_t len = strlen(keyword);
581 while (searchStart<searchEnd)
583 size_t index = str.
find(keyword, searchStart);
588 size_t end = index + len;
591 if ((index>0 && str[index-1]!=
' ') ||
592 (
end!=searchEnd && str[
end] !=
' ')
599 if (needSpace && index>0)
601 str.
remove(index-1, len+1);
602 searchEnd -= (len+1);
604 else if (needSpace &&
end<searchEnd)
607 searchEnd -= (len+1);
625 int bracketCount = 1;
628 bool insideString =
false;
629 bool insideChar =
false;
631 while (!found && p<argsStr.
length())
633 char c = argsStr[p++];
636 if (c==
'"' && pc!=
'\\') insideString=
false;
640 if (c==
'\'' && pc!=
'\\') insideChar=
false;
646 case '(': bracketCount++;
break;
647 case ')': bracketCount--; found = bracketCount==0;
break;
648 case '"': insideString =
true;
break;
649 case '\'': insideChar =
true;
break;
654 expr = argsStr.
mid(i+9,p-i-10);
667 t <<
prefix <<
" <" << tagName <<
">\n";
668 for (
const auto &ref : refs)
673 t <<
prefix <<
" </" << tagName <<
">\n";
679 writeRefsForType(satisfiesRefs,
"satisfies");
680 writeRefsForType(verifiesRefs,
"verifies");
714 for (
auto lt : { MemberListType::PubAttribs(), MemberListType::ProAttribs(),
715 MemberListType::PacAttribs(), MemberListType::PriAttribs() })
720 for (
const auto &imd : *ml)
733 if (md->
memberType()==MemberType::EnumValue)
return;
762 argsStr +=
" override";
774 argsStr +=
"=default";
778 argsStr +=
"=delete";
780 i=defStr.
find(
"auto ");
783 defStr=defStr.
left(i)+typeStr+defStr.
mid(i+4);
790 <<
"_1" << md->
anchor() <<
"\" kind=\"" << memType <<
"\"><name>"
795 t <<
" <member refid=\""
797 <<
"_1" << md->
anchor() <<
"\" kind=\"" << memType <<
"\"><name>"
803 t <<
" <memberdef kind=\"";
804 t << memType <<
"\" id=\"";
811 t <<
"\" prot=\"" << to_string_lower(md->
protection());
815 if (md->
isStatic()) t <<
"yes";
else t <<
"no";
820 t <<
" nodiscard=\"yes\"";
825 t <<
" constexpr=\"yes\"";
830 t <<
" consteval=\"yes\"";
835 t <<
" constinit=\"yes\"";
840 t <<
" extern=\"yes\"";
851 if (md->
isExplicit()) t <<
"yes";
else t <<
"no";
855 if (md->
isInline()) t <<
"yes";
else t <<
"no";
867 t <<
" final=\"yes\"";
872 t <<
" sealed=\"yes\"";
882 t <<
" optional=\"yes\"";
887 t <<
" required=\"yes\"";
892 t <<
" noexcept=\"yes\"";
895 if (!noExceptExpr.
empty())
897 t <<
" noexceptexpression=\"" <<
convertToXML(noExceptExpr) <<
"\"";
902 t <<
" volatile=\"yes\"";
905 t <<
" virt=\"" << to_string_lower(md->
virtualness());
909 if (md->
memberType() == MemberType::Enumeration)
912 if (md->
isStrong()) t <<
"yes";
else t <<
"no";
923 if (md->
isMutable()) t <<
"yes";
else t <<
"no";
928 t <<
" thread_local=\"yes\"";
933 t <<
" initonly=\"yes\"";
937 t <<
" attribute=\"yes\"";
941 t <<
" property=\"yes\"";
945 t <<
" readonly=\"yes\"";
949 t <<
" bound=\"yes\"";
953 t <<
" removable=\"yes\"";
957 t <<
" constrained=\"yes\"";
961 t <<
" transient=\"yes\"";
965 t <<
" maybevoid=\"yes\"";
969 t <<
" maybedefault=\"yes\"";
973 t <<
" maybeambiguous=\"yes\"";
976 else if (md->
memberType() == MemberType::Property)
979 if (md->
isReadable()) t <<
"yes";
else t <<
"no";
983 if (md->
isWritable()) t <<
"yes";
else t <<
"no";
987 if (md->
isGettable()) t <<
"yes";
else t <<
"no";
990 t <<
" privategettable=\"";
994 t <<
" protectedgettable=\"";
999 if (md->
isSettable()) t <<
"yes";
else t <<
"no";
1002 t <<
" privatesettable=\"";
1006 t <<
" protectedsettable=\"";
1012 t <<
" initonly=\"yes\"";
1017 t <<
" accessor=\"";
1019 else if (md->
isCopy()) t <<
"copy";
1020 else if (md->
isRetain()) t <<
"retain";
1021 else if (md->
isStrong()) t <<
"strong";
1022 else if (md->
isWeak()) t <<
"weak";
1026 else if (md->
memberType() == MemberType::Event)
1029 if (md->
isAddable()) t <<
"yes";
else t <<
"no";
1033 if (md->
isRemovable()) t <<
"yes";
else t <<
"no";
1037 if (md->
isRaisable()) t <<
"yes";
else t <<
"no";
1055 t <<
" <definition>" <<
convertToXML(defStr) <<
"</definition>\n";
1056 t <<
" <argsstring>" <<
convertToXML(argsStr) <<
"</argsstring>\n";
1059 if (md->
memberType() == MemberType::Enumeration)
1067 t <<
" <name>" <<
convertToXML(nameStr) <<
"</name>\n";
1068 if (nameStr!=qualifiedNameStr)
1070 t <<
" <qualifiedname>" <<
convertToXML(qualifiedNameStr) <<
"</qualifiedname>\n";
1073 if (md->
memberType() == MemberType::Property)
1084 if (bitfield.
at(0)==
':') bitfield=bitfield.
mid(1);
1085 t <<
" <bitfield>" <<
convertToXML(bitfield) <<
"</bitfield>\n";
1091 t <<
" <reimplements refid=\""
1097 t <<
" <reimplementedby refid=\""
1099 <<
convertToXML(rbmd->name()) <<
"</reimplementedby>\n";
1104 t <<
" <qualifier>" <<
convertToXML(qmd) <<
"</qualifier>\n";
1119 bool isFortran = md->
getLanguage()==SrcLangExt::Fortran;
1122 auto defIt = defAl.
begin();
1127 if (defIt!=defAl.
end())
1133 if (!a.attrib.empty())
1135 t <<
" <attributes>";
1137 t <<
"</attributes>\n";
1139 if (isFortran && defArg && !defArg->
type.
empty())
1145 else if (!a.type.empty())
1151 if (!a.name.empty())
1155 t <<
"</declname>\n";
1157 if (defArg && !defArg->
name.
empty() && defArg->
name!=a.name)
1161 t <<
"</defname>\n";
1163 if (!a.array.empty())
1169 if (!a.defval.empty())
1177 t <<
" <briefdescription>";
1180 t <<
"</briefdescription>\n";
1186 else if (md->
memberType()==MemberType::Define &&
1192 t <<
" <param></param>\n";
1198 t <<
" <param><defname>" << a.type <<
"</defname></param>\n";
1204 t <<
" <requiresclause>";
1206 t <<
" </requiresclause>\n";
1211 t <<
" <initializer>";
1213 t <<
"</initializer>\n";
1218 t <<
" <exceptions>";
1220 t <<
"</exceptions>\n";
1224 if (md->
memberType()==MemberType::Enumeration)
1229 <<
"_1" << emd->anchor() <<
"\" kind=\"enumvalue\"><name>"
1233 << emd->anchor() <<
"\" prot=\"" << to_string_lower(emd->protection());
1238 if (!emd->initializer().empty())
1240 t <<
" <initializer>";
1242 t <<
"</initializer>\n";
1244 t <<
" <briefdescription>\n";
1245 writeXMLDocBlock(t,emd->briefFile(),emd->briefLine(),emd->getOuterScope(),emd,emd->briefDescription());
1246 t <<
" </briefdescription>\n";
1247 t <<
" <detaileddescription>\n";
1248 writeXMLDocBlock(t,emd->docFile(),emd->docLine(),emd->getOuterScope(),emd,emd->documentation());
1249 t <<
" </detaileddescription>\n";
1250 t <<
" </enumvalue>\n";
1253 t <<
" <briefdescription>\n";
1255 t <<
" </briefdescription>\n";
1256 t <<
" <detaileddescription>\n";
1258 t <<
" </detaileddescription>\n";
1259 t <<
" <inbodydescription>\n";
1261 t <<
" </inbodydescription>\n";
1264 t <<
" <location file=\""
1289 for (
const auto &refmd : refList)
1294 for (
const auto &refmd : refByList)
1299 t <<
" </memberdef>\n";
1307 if (ml==
nullptr)
return;
1309 for (
const auto &md : *ml)
1311 if (
memberVisible(d,md) && (md->memberType()!=MemberType::EnumValue) &&
1317 if (count==0)
return;
1319 t <<
" <sectiondef kind=\"" << kind <<
"\">\n";
1320 if (!header.empty())
1322 t <<
" <header>" <<
convertToXML(header) <<
"</header>\n";
1324 if (!documentation.empty())
1326 t <<
" <description>";
1328 t <<
"</description>\n";
1330 for (
const auto &md : *ml)
1337 t <<
" </sectiondef>\n";
1342 t <<
" <listofallmembers>\n";
1345 for (
auto &mi : *mni)
1353 md->
anchor() <<
"\" prot=\"" << to_string_lower(prot);
1354 t <<
"\" virt=\"" << to_string_lower(virt) <<
"\"";
1355 if (!mi->ambiguityResolutionScope().empty())
1357 t <<
" ambiguityscope=\"" <<
convertToXML(mi->ambiguityResolutionScope()) <<
"\"";
1364 t <<
" </listofallmembers>\n";
1369 for (
const auto &cd : cl)
1371 if (!cd->isHidden() && !cd->isAnonymous())
1374 <<
"\" prot=\"" << to_string_lower(cd->protection());
1375 t <<
"\">" <<
convertToXML(cd->name()) <<
"</innerclass>\n";
1382 for (
const auto &cd : cl)
1384 if (!cd->isHidden())
1386 t <<
" <innerconcept refid=\"" << cd->getOutputFileBase()
1387 <<
"\">" <<
convertToXML(cd->name()) <<
"</innerconcept>\n";
1394 for (
const auto &mod : ml)
1396 if (!mod->isHidden())
1398 t <<
" <innermodule refid=\"" << mod->getOutputFileBase()
1399 <<
"\">" <<
convertToXML(mod->name()) <<
"</innermodule>\n";
1406 for (
const auto &nd : nl)
1408 if (!nd->isHidden() && !nd->isAnonymous())
1410 t <<
" <innernamespace refid=\"" << nd->getOutputFileBase()
1411 <<
"\"" << (nd->isInline() ?
" inline=\"yes\"" :
"")
1412 <<
">" <<
convertToXML(nd->name()) <<
"</innernamespace>\n";
1419 if (exportMap.empty())
return;
1420 t <<
" <exports>\n";
1421 for (
const auto &[moduleName,importInfoList] : exportMap)
1423 for (
const auto &importInfo : importInfoList)
1432 t << importInfo.importName;
1436 t <<
" </exports>\n";
1441 for (
const auto &fd : fl)
1443 t <<
" <innerfile refid=\"" << fd->getOutputFileBase()
1444 <<
"\">" <<
convertToXML(fd->name()) <<
"</innerfile>\n";
1450 for (
const auto &pd : pl)
1452 t <<
" <innerpage refid=\"" << pd->getOutputFileBase();
1453 if (pd->getGroupDef())
1455 t <<
"_" << pd->name();
1457 t <<
"\">" <<
convertToXML(pd->title()) <<
"</innerpage>\n";
1463 for (
const auto &sgd : gl)
1465 t <<
" <innergroup refid=\"" << sgd->getOutputFileBase()
1467 <<
"</innergroup>\n";
1475 for(
const auto &subdir : *dl)
1477 t <<
" <innerdir refid=\"" << subdir->getOutputFileBase()
1478 <<
"\">" <<
convertToXML(subdir->displayName()) <<
"</innerdir>\n";
1498 t <<
"</includes>\n";
1527 msg(
"Generating XML output for class {}\n",cd->
name());
1538 err(
"Cannot open file {} for writing!\n",fileName);
1544 t <<
" <compounddef id=\""
1549 if (cd->
isFinal()) t <<
"\" final=\"yes";
1550 if (cd->
isSealed()) t <<
"\" sealed=\"yes";
1551 if (cd->
isAbstract()) t <<
"\" abstract=\"yes";
1552 if (cd->
isRef()) t <<
"\" ref=\"yes";
1554 t <<
" <compoundname>";
1557 t <<
"</compoundname>\n";
1560 t <<
" <basecompoundref ";
1561 if (bcd.classDef->isLinkable())
1565 if (bcd.prot == Protection::Package)
ASSERT(0);
1567 t << to_string_lower(bcd.prot);
1569 t << to_string_lower(bcd.virt);
1571 if (!bcd.templSpecifiers.empty())
1575 bcd.classDef->name(),bcd.templSpecifiers)
1582 t <<
"</basecompoundref>\n";
1586 if (bcd.prot == Protection::Package)
ASSERT(0);
1587 t <<
" <derivedcompoundref refid=\""
1590 t << to_string_lower(bcd.prot);
1592 t << to_string_lower(bcd.virt);
1593 t <<
"\">" <<
convertToXML(bcd.classDef->displayName())
1594 <<
"</derivedcompoundref>\n";
1605 mg->documentation());
1621 t <<
" <requiresclause>";
1623 t <<
" </requiresclause>\n";
1628 t <<
" <qualifier>" <<
convertToXML(qcd) <<
"</qualifier>\n";
1631 t <<
" <briefdescription>\n";
1633 t <<
" </briefdescription>\n";
1634 t <<
" <detaileddescription>\n";
1636 t <<
" </detaileddescription>\n";
1640 t <<
" <inheritancegraph>\n";
1642 t <<
" </inheritancegraph>\n";
1647 t <<
" <collaborationgraph>\n";
1649 t <<
" </collaborationgraph>\n";
1652 t <<
" <location file=\""
1668 t <<
" </compounddef>\n";
1669 t <<
"</doxygen>\n";
1671 ti <<
" </compound>\n";
1679 <<
"\" kind=\"concept\"" <<
"><name>"
1689 err(
"Cannot open file {} for writing!\n",fileName);
1695 <<
"\" kind=\"concept\">\n";
1696 t <<
" <compoundname>";
1699 t <<
"</compoundname>\n";
1702 t <<
" <initializer>";
1704 t <<
"</initializer>\n";
1706 intf->resetCodeParserState();
1709 t <<
" <conceptparts>\n";
1715 t <<
" <docpart line=\"" << part.lineNr <<
"\" col=\"" << part.colNr <<
"\">\n";
1717 t <<
" </docpart>\n";
1720 t <<
" <codepart line=\"" << part.lineNr <<
"\">";
1722 intf->parseCode(xmlList,
1730 t <<
"</codepart>\n";
1734 t <<
" </conceptparts>\n";
1735 t <<
" <briefdescription>\n";
1737 t <<
" </briefdescription>\n";
1738 t <<
" <detaileddescription>\n";
1740 t <<
" </detaileddescription>\n";
1742 t <<
" <location file=\""
1746 t <<
" </compounddef>\n";
1747 t <<
"</doxygen>\n";
1749 ti <<
" </compound>\n";
1756 <<
"\" kind=\"module\"" <<
"><name>"
1764 err(
"Cannot open file {} for writing!\n",fileName);
1770 <<
"\" kind=\"module\">\n";
1771 t <<
" <compoundname>";
1773 t <<
"</compoundname>\n";
1787 mg->documentation());
1789 t <<
" <briefdescription>\n";
1791 t <<
" </briefdescription>\n";
1792 t <<
" <detaileddescription>\n";
1794 t <<
" </detaileddescription>\n";
1797 t <<
" <location file=\""
1801 t <<
" </compounddef>\n";
1802 t <<
"</doxygen>\n";
1804 ti <<
" </compound>\n";
1822 <<
"\" kind=\"namespace\"" <<
"><name>"
1830 err(
"Cannot open file {} for writing!\n",fileName);
1837 <<
"\" kind=\"namespace\" "
1838 << (nd->
isInline()?
"inline=\"yes\" ":
"")
1841 t <<
" <compoundname>";
1844 t <<
"</compoundname>\n";
1853 mg->documentation());
1864 t <<
" <briefdescription>\n";
1866 t <<
" </briefdescription>\n";
1867 t <<
" <detaileddescription>\n";
1869 t <<
" </detaileddescription>\n";
1871 t <<
" <location file=\""
1875 t <<
" </compounddef>\n";
1876 t <<
"</doxygen>\n";
1878 ti <<
" </compound>\n";
1908 err(
"Cannot open file {} for writing!\n",fileName);
1915 <<
"\" kind=\"file\" language=\""
1917 t <<
" <compoundname>";
1919 t <<
"</compoundname>\n";
1924 if (inc.fileDef && !inc.fileDef->isReference())
1926 t <<
" refid=\"" << inc.fileDef->getOutputFileBase() <<
"\"";
1930 t <<
"</includes>\n";
1935 t <<
" <includedby";
1936 if (inc.fileDef && !inc.fileDef->isReference())
1938 t <<
" refid=\"" << inc.fileDef->getOutputFileBase() <<
"\"";
1942 t <<
"</includedby>\n";
1948 t <<
" <incdepgraph>\n";
1950 t <<
" </incdepgraph>\n";
1956 t <<
" <invincdepgraph>\n";
1958 t <<
" </invincdepgraph>\n";
1968 mg->documentation());
1979 t <<
" <briefdescription>\n";
1981 t <<
" </briefdescription>\n";
1982 t <<
" <detaileddescription>\n";
1984 t <<
" </detaileddescription>\n";
1991 t <<
" </compounddef>\n";
1992 t <<
"</doxygen>\n";
1994 ti <<
" </compound>\n";
2021 err(
"Cannot open file {} for writing!\n",fileName);
2027 t <<
" <compounddef id=\""
2043 mg->documentation());
2054 t <<
" <briefdescription>\n";
2056 t <<
" </briefdescription>\n";
2057 t <<
" <detaileddescription>\n";
2059 t <<
" </detaileddescription>\n";
2061 t <<
" </compounddef>\n";
2062 t <<
"</doxygen>\n";
2064 ti <<
" </compound>\n";
2079 err(
"Cannot open file {} for writing!\n",fileName);
2085 t <<
" <compounddef id=\""
2092 t <<
" <briefdescription>\n";
2094 t <<
" </briefdescription>\n";
2095 t <<
" <detaileddescription>\n";
2097 t <<
" </detaileddescription>\n";
2100 t <<
" </compounddef>\n";
2101 t <<
"</doxygen>\n";
2103 ti <<
" </compound>\n";
2108 ti <<
" <compound refid=\"requirements\" kind=\"requirements\"><name>" <<
convertToXML(pd->
name()) <<
"</name>\n";
2110 DString fileName = outputDirectory+
"/requirements.xml";
2114 err(
"Cannot open file {} for writing!\n",fileName);
2119 auto writeDefsForReq = [&t](
const std::vector<const Definition *> &defs,
const char *tagName)
2121 for (
const auto &def : defs)
2123 t <<
" <" << tagName <<
" refid=\"";
2124 t << def->getOutputFileBase();
2127 t <<
"_1" << def->anchor();
2131 t <<
"</" << tagName<<
">\n";
2136 t <<
" <compounddef id=\"requirements\" kind=\"requirements\">\n";
2138 t <<
" <requirementslist>\n";
2140 for (
const auto &req : reqs)
2142 t <<
" <requirement refid=\"" << req->id();
2143 if (
auto tagFile = req->getTagFile(); !tagFile.empty())
2150 writeDefsForReq(req->satisfiedBy(),
"satisfiedby");
2151 writeDefsForReq(req->verifiedBy(),
"verifiedby");
2152 t <<
" </requirement>\n";
2154 t <<
" </requirementslist>\n";
2155 t <<
" </compounddef>\n";
2156 t <<
"</doxygen>\n";
2158 ti <<
" </compound>\n";
2168 const char *kindName = isExample ?
"example" :
"page";
2177 if (pageName==
"index")
2179 pageName=
"indexpage";
2181 else if (pageName==
"requirements")
2187 ti <<
" <compound refid=\"" << pageName
2192 DString fileName=outputDirectory+
"/"+pageName+
".xml";
2196 err(
"Cannot open file {} for writing!\n",fileName);
2202 t <<
" <compounddef id=\"" << pageName;
2203 t <<
"\" kind=\"" << kindName <<
"\">\n";
2205 <<
"</compoundname>\n";
2236 auto writeIndent = [&]() {
for (
int i=0;i<4+indent*2;i++) t <<
" "; };
2237 auto incIndent = [&](
const char *text) { writeIndent(); t << text <<
"\n"; indent++; };
2238 auto decIndent = [&](
const char *text) { indent--; writeIndent(); t << text <<
"\n"; };
2239 incIndent(
"<tableofcontents>");
2244 if (si->type().isSection())
2247 int nextLevel = si->type().level();
2248 if (nextLevel>level)
2250 for (
int l=level;l<nextLevel;l++)
2252 if (l < maxLevel) incIndent(
"<tableofcontents>");
2255 else if (nextLevel<level)
2257 for (
int l=level;l>nextLevel;l--)
2259 if (l <= maxLevel && inLi[l]) decIndent(
"</tocsect>");
2261 if (l <= maxLevel) decIndent(
"</tableofcontents>");
2264 if (nextLevel <= maxLevel)
2266 if (inLi[nextLevel])
2268 decIndent(
"</tocsect>");
2270 else if (level>nextLevel)
2272 decIndent(
"</tableofcontents>");
2273 incIndent(
"<tableofcontents>");
2277 if (titleDoc.
empty()) titleDoc = label;
2278 incIndent(
"<tocsect>");
2279 writeIndent(); t <<
"<name>" << titleDoc <<
"</name>\n";
2280 writeIndent(); t <<
"<docs>";
2281 if (!si->title().empty())
2286 writeIndent(); t <<
"<reference>" <<
convertToXML(pageName) <<
"_1" << label <<
"</reference>\n";
2287 inLi[nextLevel]=
true;
2292 while (level>1 && level <= maxLevel)
2294 if (inLi[level]) decIndent(
"</tocsect>");
2296 decIndent(
"</tableofcontents>");
2299 if (level <= maxLevel && inLi[level]) decIndent(
"</tocsect>");
2301 decIndent(
"</tableofcontents>");
2303 t <<
" <briefdescription>\n";
2305 t <<
" </briefdescription>\n";
2306 t <<
" <detaileddescription>\n";
2317 t <<
" </detaileddescription>\n";
2322 t <<
" </compounddef>\n";
2323 t <<
"</doxygen>\n";
2325 ti <<
" </compound>\n";
2331 ti <<
" <compound refid=\"" << pageName <<
"\" kind=\"requirement\"><name>" <<
convertToXML(req->
id()) <<
"</name>\n";
2334 DString fileName = outputDirectory+
"/"+pageName+
".xml";
2338 err(
"Cannot open file {} for writing!\n",fileName);
2343 t <<
" <compounddef id=\"" << pageName <<
"\" kind=\"requirement\">\n";
2344 t <<
" <compoundname>" <<
convertToXML(req->
id()) <<
"</compoundname>\n";
2346 t <<
" <detaileddescription>\n";
2348 t <<
" </detaileddescription>\n";
2350 t <<
" </compounddef>\n";
2351 t <<
"</doxygen>\n";
2353 ti <<
" </compound>\n";
2368 Dir xmlDir(outputDirectory.
str());
2374 DString fileName=outputDirectory+
"/compound.xsd";
2378 err(
"Cannot open file {} for writing!\n",fileName);
2386 const char *startLine = compound_xsd.
data();
2390 const char *endLine = startLine+1;
2391 while (*endLine && *(endLine-1)!=
'\n') endLine++;
2392 int len=
static_cast<int>(endLine-startLine);
2396 if (s.
find(
"<!-- Automatically insert here the HTML entities -->")!=
DString::npos)
2402 t.
write(startLine,len);
2410 fileName=outputDirectory+
"/doxyfile.xsd";
2414 err(
"Cannot open file {} for writing!\n",fileName);
2422 const char *startLine = doxyfile_xsd.
data();
2426 const char *endLine = startLine+1;
2427 while (*endLine && *(endLine-1)!=
'\n') endLine++;
2428 int len=
static_cast<int>(endLine-startLine);
2432 if (s.
find(
"<!-- Automatically insert here the configuration settings -->")!=
DString::npos)
2438 t.
write(startLine,len);
2446 fileName=outputDirectory+
"/Doxyfile.xml";
2450 err(
"Cannot open file {} for writing\n",fileName);
2460 fileName=outputDirectory+
"/index.xml";
2464 err(
"Cannot open file {} for writing!\n",fileName);
2472 t <<
"<?xml version='1.0' encoding='UTF-8' standalone='no'?>\n";
2473 t <<
"<doxygenindex xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" ";
2474 t <<
"xsi:noNamespaceSchemaLocation=\"index.xsd\" ";
2475 t <<
"version=\"" << getDoxygenVersion() <<
"\" ";
2485 msg(
"Generating XML output for concept {}\n",cd->displayName());
2490 msg(
"Generating XML output for namespace {}\n",nd->displayName());
2495 for (
const auto &fd : *fn)
2497 msg(
"Generating XML output for file {}\n",fd->name());
2503 msg(
"Generating XML output for group {}\n",gd->name());
2508 msg(
"Generating XML output for page {}\n",pd->name());
2513 if (req->getTagFile().empty())
2515 msg(
"Generating XML output for requirement {}\n", req->id());
2521 msg(
"Generate XML output for dir {}\n",dd->name());
2526 msg(
"Generating XML output for module {}\n",mod->name());
2531 msg(
"Generating XML output for example {}\n",pd->name());
2536 msg(
"Generating XML output for the main page\n");
2541 t <<
"</doxygenindex>\n";
This class contains the information about the argument of a function or template.
bool hasDocumentation(bool allowEmptyName=false) const
This class represents an function or template argument list.
RefQualifierType refQualifier() const
bool hasParameters() const
bool constSpecifier() const
bool volatileSpecifier() const
A abstract class representing of a compound symbol.
virtual DString requiresClause() const =0
virtual bool isAbstract() const =0
Returns true if there is at least one pure virtual member in this class.
virtual bool isFinal() const =0
Returns true if this class is marked as final.
virtual const ArgumentList & templateArguments() const =0
Returns the template arguments of this class.
virtual const MemberLists & getMemberLists() const =0
Returns the list containing the list of members sorted per type.
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isSealed() const =0
Returns true if this class is marked as sealed.
virtual StringVector getQualifiers() const =0
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual DString compoundTypeString() const =0
Returns the type of compound as a string.
virtual MemberList * getMemberList(MemberListType lt) const =0
Returns the members in the list identified by lt.
virtual const ArgumentList & typeConstraints() const =0
virtual const MemberNameInfoLinkedMap & memberNameInfoLinkedMap() const =0
Returns a dictionary of all members.
virtual bool isImplicitTemplateInstance() const =0
virtual const MemberGroupList & getMemberGroups() const =0
Returns the member groups defined for this class.
virtual bool isRef() const =0
Returns true if this class is a C# ref struct or a C++/CLI ref class.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual FileDef * getFileDef() const =0
Returns the file in which this compound's definition can be found.
virtual const IncludeInfo * includeInfo() const =0
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
virtual DString initializer() const =0
virtual ArgumentList getTemplateParameterList() const =0
virtual const IncludeInfo * includeInfo() const =0
virtual Parts conceptParts() const =0
virtual const FileDef * getFileDef() const =0
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
size_t rfind(char c, size_t pos=npos) const
DString fill(char c, size_t len)
Fills a string with a predefined character.
DString mid(size_t index, size_t len=npos) const
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
DString & remove(size_t index, size_t len)
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
char & at(size_t i)
Returns a reference to the character at index i.
size_t size() const
Returns the length of the string, not counting the 0-terminator.
size_t find(char c, size_t pos=0) const
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
DString left(size_t len) const
const std::string & str() const
bool stripPrefix(const DString &prefix)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
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 briefDescription(bool abbreviate=false) const =0
virtual int getEndBodyLine() const =0
virtual DString briefFile() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual DString getDefFileExtension() const =0
virtual int docLine() const =0
virtual DString getDefFileName() const =0
virtual DString documentation() const =0
virtual DString inbodyDocumentation() const =0
virtual int getDefLine() const =0
virtual DefType definitionType() const =0
virtual const SectionRefs & getSectionRefs() const =0
returns the section dictionary, only of importance for pagedef
virtual const DString & name() const =0
virtual int inbodyLine() const =0
virtual const FileDef * getBodyDef() const =0
virtual int briefLine() const =0
virtual bool isLinkableInProject() const =0
virtual size_t getDefColumn() const =0
virtual bool isAnonymous() const =0
virtual const RequirementRefs & requirementReferences() const =0
virtual DString displayName(bool includeScope=true) const =0
virtual DString qualifiedName() const =0
virtual bool isHidden() const =0
virtual DString anchor() const =0
virtual bool isArtificial() const =0
virtual Definition * getOuterScope() const =0
virtual DString docFile() const =0
virtual const MemberVector & getReferencedByMembers() const =0
virtual int getStartBodyLine() const =0
virtual bool isReference() const =0
virtual const MemberVector & getReferencesMembers() const =0
virtual DString getOutputFileBase() const =0
A model of a directory symbol.
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
Class representing a directory in the file system.
Class representing the abstract syntax tree of a documentation block.
Representation of a class inheritance or dependency graph.
void writeXML(TextStream &t)
Representation of an include dependency graph.
void writeXML(TextStream &t)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ParserManager * parserManager
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A model of a file symbol.
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual DString absFilePath() const =0
virtual const DString & docName() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const IncludeInfoList & includeFileList() const =0
virtual const MemberLists & getMemberLists() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const IncludeInfoList & includedByFileList() const =0
A model of a group of symbols.
virtual DString groupTitle() const =0
virtual const GroupList & getSubGroups() const =0
virtual const FileList & getFiles() const =0
virtual const MemberLists & getMemberLists() const =0
virtual const MemberGroupList & getMemberGroups() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual const ModuleLinkedRefMap & getModules() const =0
void writeXMLSchema(TextStream &t)
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
Class representing the data associated with a #include statement.
const T * find(const std::string &key) const
constexpr bool isXmlEnabled() const noexcept
constexpr int xmlLevel() const noexcept
A model of a class/file/namespace member symbol.
virtual bool isConstExpr() const =0
virtual bool isConstEval() const =0
virtual bool isInitonly() const =0
virtual bool isNoExcept() const =0
virtual bool isAssign() const =0
virtual bool isExplicit() const =0
virtual bool isNew() const =0
virtual DString requiresClause() const =0
virtual bool isMaybeVoid() const =0
virtual DString argsString() const =0
virtual bool isSealed() const =0
virtual bool isConstInit() const =0
virtual DString definition() const =0
virtual const ClassDef * getClassDef() const =0
virtual DString excpString() const =0
virtual const ArgumentList & templateArguments() const =0
virtual DString getDeclFileName() const =0
virtual const DString & initializer() const =0
virtual GroupDef * getGroupDef()=0
virtual bool isSettable() const =0
virtual bool isRetain() const =0
virtual bool isAddable() const =0
virtual const MemberVector & enumFieldList() const =0
virtual const FileDef * getFileDef() const =0
virtual bool isInline() const =0
virtual DString getReadAccessor() const =0
virtual const ArgumentList & argumentList() const =0
virtual bool isWritable() const =0
virtual bool isMaybeAmbiguous() const =0
virtual bool isPrivateGettable() const =0
virtual const MemberVector & reimplementedBy() const =0
virtual bool isRequired() const =0
virtual bool isAttribute() const =0
virtual bool isExternal() const =0
virtual bool isCopy() const =0
virtual DString bitfieldString() const =0
virtual int getDeclLine() const =0
virtual bool isTypeAlias() const =0
virtual bool isStatic() const =0
virtual const MemberDef * reimplements() const =0
virtual bool isMaybeDefault() const =0
virtual bool isPrivateSettable() const =0
virtual StringVector getQualifiers() const =0
virtual bool isRaisable() const =0
virtual bool isRemovable() const =0
virtual bool isConstrained() const =0
virtual DString getWriteAccessor() const =0
virtual bool isReadonly() const =0
virtual bool isBound() const =0
virtual bool isThreadLocal() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual DString getScopeString() const =0
virtual size_t getDeclColumn() const =0
virtual bool isProtectedSettable() const =0
virtual const ClassDef * getClassDefOfAnonymousType() const =0
virtual bool isProtectedGettable() const =0
virtual bool hasOneLineInitializer() const =0
virtual bool isTransient() const =0
virtual bool hasMultiLineInitializer() const =0
virtual Protection protection() const =0
virtual bool isOptional() const =0
virtual bool isEnumerate() const =0
virtual bool isGettable() const =0
virtual MemberType memberType() const =0
virtual bool isReadable() const =0
virtual bool isWeak() const =0
virtual bool isNoDiscard() const =0
virtual DString enumBaseType() const =0
virtual bool isStrong() const =0
virtual DString typeString() const =0
virtual Specifier virtualness(int count=0) const =0
virtual bool isUNOProperty() const =0
virtual bool isFinal() const =0
virtual const ArgumentList & declArgumentList() const =0
virtual bool isMutable() const =0
virtual bool isFriendClass() const =0
A list of MemberDef objects as shown in documentation sections.
MemberListType listType() const
constexpr const char * toXML() const noexcept
constexpr bool isDeclaration() const noexcept
constexpr bool isDetailed() const noexcept
virtual const MemberGroupList & getMemberGroups() const =0
virtual bool isPrimaryInterface() const =0
virtual const MemberLists & getMemberLists() const =0
virtual FileList getUsedFiles() const =0
virtual const ImportInfoMap & getExports() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
static ModuleManager & instance()
ModuleDef * getPrimaryInterface(const DString &moduleName) const
An abstract interface of a namespace symbol.
virtual ConceptLinkedRefMap getConcepts() const =0
virtual const MemberLists & getMemberLists() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual bool isInline() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual const MemberGroupList & getMemberGroups() const =0
Class representing a list of different code generators.
void startCodeFragment(const DString &style)
void add(OutputCodeIntfPtr &&p)
void endCodeFragment(const DString &style)
A model of a page symbol.
virtual const PageLinkedRefMap & getSubPages() const =0
virtual LocalToc localToc() const =0
virtual DString title() const =0
virtual const GroupDef * getGroupDef() const =0
std::unique_ptr< CodeParserInterface > getCodeParser(const DString &extension)
Gets the interface to the parser associated with a given extension.
virtual DString file() const =0
virtual int line() const =0
virtual DString title() const =0
virtual DString id() const =0
virtual DString doc() const =0
static RequirementManager & instance()
const PageDef * requirementsPage() const
RequirementIntfList requirements() const
static ResourceMgr & instance()
Returns the one and only instance of this class.
bool copyResource(const DString &name, const DString &targetDir) const
Copies a registered resource to a given target directory.
DString getAsString(const DString &name) const
Gets the resource data as a C string.
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
class that represents a list of constant references to sections.
Abstract interface for a hyperlinked text fragment.
Implements TextGeneratorIntf for an XML stream.
TextGeneratorXMLImpl(TextStream &t)
void writeString(std::string_view s, bool) const override
void writeLink(const DString &extRef, const DString &file, const DString &anchor, std::string_view text) const override
void writeBreak(int) const override
Text streaming class that buffers data.
void write(const char *buf, size_t len)
Adds a array of character to the stream.
virtual DString trISOLang()=0
void setStripIndentAmount(size_t amount) override
void endCodeLine() override
size_t m_stripIndentAmount
void startCodeLine(int) override
void startSpecialComment() override
bool m_normalHLNeedStartTag
void startFontClass(const DString &colorClass) override
void writeCodeLink(CodeSymbolType type, const DString &ref, const DString &file, const DString &anchor, const DString &name, const DString &tooltip) override
void endSpecialComment() override
void writeTooltip(const DString &, const DocLinkInfo &, const DString &, const DString &, const SourceLinkInfo &, const SourceLinkInfo &) override
void stripCodeComments(bool b) override
void endCodeFragment(const DString &) override
void startCodeFragment(const DString &) override
void writeLineNumber(const DString &extRef, const DString &compId, const DString &anchorId, int l, bool writeLineAnchor) override
void codify(const DString &text) override
Generator for producing XML formatted source code.
XMLCodeGenerator(TextStream *t)
void writeCodeAnchor(const DString &) override
void endFontClass() override
Concrete visitor implementation for XML output.
#define Config_getInt(name)
#define Config_getBool(name)
#define Config_getString(name)
std::vector< bool > BoolVector
DirIterator end(const DirIterator &) noexcept
IDocParserPtr createDocParser()
factory function to create a parser
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const DString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const DString &input, const DocOptions &options)
const char * qPrint(const char *s)
constexpr uint32_t IncludeKind_LocalMask
Translator * theTranslator
void linkifyText(const TextGeneratorIntf &out, const DString &text, const LinkifyTextOptions &options)
std::unordered_map< std::string, ImportInfoList > ImportInfoMap
void writeXMLDoxyfile(TextStream &t)
void writeXSDDoxyfile(TextStream &t)
std::ofstream openOutputStream(const DString &name, bool append=false)
size_t updateColumnCount(const char *s, size_t col)
Portable versions of functions that are platform dependent.
void splitRequirementRefs(const RequirementRefs &inputReqRefs, RequirementRefs &satisfiesRefs, RequirementRefs &verifiesRefs)
std::vector< RequirementRef > RequirementRefs
List of requirement references.
Options to configure the code parser.
Helper class to pass options when calling OutputList::generateDoc().
LinkifyTextOptions & setScope(const Definition *scope)
LinkifyTextOptions & setSelf(const Definition *self)
LinkifyTextOptions & setFileScope(const FileDef *fileScope)
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.
DString filterTitle(const DString &title)
DString insertTemplateSpecifierInScope(const DString &scope, const DString &templ)
DString convertNameToFile(const DString &name, bool allowDots, bool allowUnderscore)
void clearSubDirs(const Dir &d)
void createSubDirs(const Dir &d)
SrcLangExt getLanguageFromFileName(const DString &fileName, SrcLangExt defLang)
DString fileToString(const DString &name, bool filter, bool isSourceCode)
DString convertToXML(const DString &s, bool keepEntities, const bool citeEntry)
DString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
DString stripFromPath(const DString &path)
A bunch of utility functions.
static void generateXMLForGroup(const GroupDef *gd, TextStream &ti)
static void writeInnerConcepts(const ConceptLinkedRefMap &cl, TextStream &t)
void writeXMLCodeString(bool hide, TextStream &t, const DString &str, size_t &col, size_t stripIndentAmount)
static void writeInnerGroups(const GroupList &gl, TextStream &t)
static void stripQualifiers(DString &typeStr)
static void writeInnerDirs(const DirList *dl, TextStream &t)
static DString memberOutputFileBase(const MemberDef *md)
static void writeListOfAllMembers(const ClassDef *cd, TextStream &t)
static void writeTemplateArgumentList(TextStream &t, const ArgumentList &al, const Definition *scope, const FileDef *fileScope, int indent, const ArgumentList &typeConstraints=ArgumentList())
static void writeXMLDocBlock(TextStream &t, const DString &fileName, int lineNr, const Definition *scope, const MemberDef *md, const DString &text)
static void generateXMLForClass(const ClassDef *cd, TextStream &ti)
static void generateXMLForFile(FileDef *fd, TextStream &ti)
static void generateXMLSection(const Definition *d, TextStream &ti, TextStream &t, const MemberList *ml, const DString &kind, const DString &header=DString(), const DString &documentation=DString())
static void writeMemberTemplateLists(const MemberDef *md, TextStream &t)
void writeXMLCodeBlock(TextStream &t, FileDef *fd)
static void writeTemplateList(const ClassDef *cd, TextStream &t)
void writeXMLString(TextStream &t, const DString &s)
static void writeMemberReference(TextStream &t, const Definition *def, const MemberDef *rmd, const DString &tagName)
void generateXMLForRequirements(PageDef *pd, TextStream &ti)
static bool memberVisible(const Definition *d, const MemberDef *md)
static void writeIncludeInfo(const IncludeInfo *ii, TextStream &t)
static void writeInnerPages(const PageLinkedRefMap &pl, TextStream &t)
DString xmlRequirementId(const DString &reqId)
static void generateXMLForNamespace(const NamespaceDef *nd, TextStream &ti)
static void generateXMLForRequirement(const RequirementIntf *req, TextStream &ti)
void writeXMLLink(TextStream &t, const DString &extRef, const DString &compoundId, const DString &anchorId, const DString &text, const DString &tooltip)
static void writeXMLHeader(TextStream &t)
static void writeInnerModules(const ModuleLinkedRefMap &ml, TextStream &t)
static void generateXMLForModule(const ModuleDef *mod, TextStream &ti)
static void generateXMLForConcept(const ConceptDef *cd, TextStream &ti)
static void writeExports(const ImportInfoMap &exportMap, TextStream &t)
static void writeInnerFiles(const FileList &fl, TextStream &t)
static bool stripKeyword(DString &str, const char *keyword, bool needSpace)
static void generateXMLForMember(const MemberDef *md, TextStream &ti, TextStream &t, const Definition *def)
static DString classOutputFileBase(const ClassDef *cd)
static void writeRequirementRefs(const Definition *d, TextStream &t, const char *prefix="")
static void writeInnerClasses(const ClassLinkedRefMap &cl, TextStream &t)
static DString extractNoExcept(DString &argsStr)
static void writeInnerNamespaces(const NamespaceLinkedRefMap &nl, TextStream &t)
static void generateXMLForDir(DirDef *dd, TextStream &ti)
static void generateXMLForPage(PageDef *pd, TextStream &ti, bool isExample)
static void writeCombineScript()