55#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
56#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
58constexpr auto alphaSepar =
"<div class=\"alphasepar\"></div>";
62static void countFiles(
int &htmlFiles,
int &files);
140 return p->classIndexLetterUsed[
static_cast<int>(e)];
145 return p->fileIndexLetterUsed[
static_cast<int>(e)];
150 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
155 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
160 p->documentedClassMembers[i]=0;
161 p->classIndexLetterUsed[i].clear();
166 p->documentedFileMembers[i]=0;
167 p->fileIndexLetterUsed[i].clear();
172 p->documentedNamespaceMembers[i]=0;
173 p->namespaceIndexLetterUsed[i].clear();
178 p->documentedModuleMembers[i]=0;
179 p->moduleIndexLetterUsed[i].clear();
184 auto it = map.find(letter);
187 it->second.push_back(md);
191 map.emplace(letter,std::vector<const MemberDef*>({md}));
197 p->documentedClassMembers[i]++;
203 p->documentedFileMembers[i]++;
209 p->documentedNamespaceMembers[i]++;
215 p->documentedModuleMembers[i]++;
224 for (
auto &[name,list] : map)
226 std::stable_sort(list.begin(),list.end(),
236 int result = qstricmp_sort(md1->name(),md2->name());
239 result = qstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
246 for (
auto &idx : p->classIndexLetterUsed)
248 sortMemberIndexList(idx);
250 for (
auto &idx : p->fileIndexLetterUsed)
252 sortMemberIndexList(idx);
254 for (
auto &idx : p->namespaceIndexLetterUsed)
256 sortMemberIndexList(idx);
258 for (
auto &idx : p->moduleIndexLetterUsed)
260 sortMemberIndexList(idx);
351 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
355 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
367 bool hl,
bool ,
bool &first)
405 const QCString &altSidebarName,
int hierarchyLevel,
const QCString &allMembersFile)
410 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
411 ol.
startFile(name,isSource,manName,title,hierarchyLevel);
413 if (!disableIndex && !quickLinksAfterSplitbar)
417 if (!additionalIndices)
422 if (quickLinksAfterSplitbar)
438 if (generateTreeView)
455 if (generateTreeview)
474 bool isDir = md->
isEnumerate() && std::any_of(enumList.
begin(),enumList.
end(),[](
const auto &emd) { return emd->hasDocumentation(); });
477 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
498 for (
const auto &emd : enumList)
500 if (emd->hasDocumentation())
503 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
505 emd->qualifiedName() : emd->name();
506 if (emd->getOuterScope()==def ||
511 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
531 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
536 for (
const auto &cd : def->getClasses())
538 if (cd->isLinkable()) numClasses++;
543 for (
const auto &cd : *concepts)
545 if (cd->isLinkable()) numConcepts++;
548 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
550 def->getReference(),def->getOutputFileBase(),anchor,
551 hasMembers && !preventSeparateIndex,
556 if (hasMembers || numClasses>0 || numConcepts>0)
561 auto kind = lde->kind();
562 if (kind==LayoutDocEntry::MemberDef)
570 for (
const auto &md : *ml)
572 if (md->visibleInIndex())
580 else if (kind==LayoutDocEntry::NamespaceClasses ||
581 kind==LayoutDocEntry::FileClasses ||
582 kind==LayoutDocEntry::ClassNestedClasses ||
583 kind==LayoutDocEntry::ModuleClasses
586 for (
const auto &cd : def->getClasses())
588 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
592 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
593 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
594 preventSeparateIndex || cd->isEmbeddedInOuterScope());
598 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
600 for (
const auto &cd : *concepts)
602 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
605 cd->getReference(),cd->getOutputFileBase(),
QCString(),
624 if (bcl.empty())
return;
626 for (
const auto &bcd : bcl)
653 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
668 .setAutolinkSupport(
false));
709 visitedClasses.insert(cd);
742 for (
const auto &fd : dd->
getFiles())
744 bool genSourceFile =
false;
755 for(
const auto &subdd : dd->
subDirs())
771 "maximum nesting level exceeded for directory {}: "
772 "check for possible recursive directory relation!",dd->
name());
781 bool tocExpand =
TRUE;
782 bool isDir = !dd->
subDirs().empty() ||
808 .setAutolinkSupport(
false));
821 for(
const auto &subdd : dd->
subDirs())
831 for (
const auto &fd : dd->
getFiles())
838 bool genSourceFile =
false;
843 else if (genSourceFile)
851 for (
const auto &fd : dd->
getFiles())
859 reference = fd->getReference();
860 outputBase = fd->getOutputFileBase();
873 .setAutolinkSupport(
false));
876 if (ftv && (src || doc))
880 reference,outputBase,
889 if (tocExpand && addToIndex)
894 for (
const auto &fd : dd->
getFiles())
901 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
943 for (
const auto &fd : *fn)
945 if (fd->getDirDef()==
nullptr)
952 reference = fd->getReference();
953 outputBase = fd->getOutputFileBase();
992 for (
const auto &cd : cl)
1000 if (cd->getLanguage()==SrcLangExt::VHDL)
1008 else if (sliceOpt && cd->compoundType() != ct)
1019 if (cd->isVisibleInHierarchy())
1031 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1035 if (cd->isLinkable())
1046 .setSingleLine(
true)
1047 .setAutolinkSupport(
false));
1048 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1049 if (cd->isReference())
1052 ol.
docify(
" [external]");
1057 if (cd->getLanguage()!=SrcLangExt::VHDL)
1059 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1064 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get(),escapedName);
1081 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1084 visitedClasses.insert(cd.get());
1086 else if (hasChildren)
1089 visitedClasses.insert(cd.get());
1128 for (
const auto &cd : cl)
1130 if (sliceOpt && cd->compoundType() != ct)
1136 if (cd->isVisibleInHierarchy())
1138 if (!cd->subClasses().empty())
1168 bool addToIndex = lne==
nullptr || lne->
visible();
1274 bool addToIndex = lne==
nullptr || lne->
visible();
1379 bool addToIndex = lne==
nullptr || lne->
visible();
1481 for (
const auto &fd: *fn)
1554 .setSingleLine(
true)
1555 .setLinkFromIndex(
true));
1586 if (dir->hasDocumentation())
1611 bool addToIndex = lne==
nullptr || lne->
visible();
1644 std::unordered_map<std::string,size_t> pathMap;
1645 std::vector<FilesInDir> outputFiles;
1650 for (
const auto &fd : *fn)
1653 if (path.
isEmpty()) path=
"[external]";
1654 auto it = pathMap.
find(path.
str());
1655 if (it!=pathMap.end())
1657 outputFiles.at(it->second).files.push_back(fd.get());
1661 pathMap.emplace(path.
str(),outputFiles.size());
1662 outputFiles.emplace_back(path);
1663 outputFiles.back().files.push_back(fd.get());
1669 std::stable_sort(outputFiles.begin(),
1671 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1673 for (
auto &fp : outputFiles)
1678 for (
const auto &fp : outputFiles)
1680 for (
const auto &fd : fp.files)
1690 for (
const auto &fd : *fn)
1733 if (nd->isLinkableInProject()) count++;
1744 if (cd->isLinkableInProject()) count++;
1755template<
class ListType>
1759 for (
const auto &cdi : cl)
1785 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1824 if (lde->kind()==LayoutDocEntry::MemberDef)
1832 for (
const auto &md : *ml)
1835 if (md->visibleInIndex())
1850 if (lde->kind()==LayoutDocEntry::MemberDecl)
1858 for (
const auto &md : *ml)
1861 if (md->visibleInIndex())
1875 bool rootOnly,
bool addToIndex);
1878 bool rootOnly,
bool addToIndex)
1885 bool hasChildren = hasNestedNamespace ||
1905 bool isDir = hasChildren || visibleMembers>0;
1906 if (isLinkable || isDir)
1915 if (addToIndex && isDir)
1929 if (addToIndex && isDir)
1938 bool rootOnly,
bool addToIndex)
1940 for (
const auto &nd : nsLinkedMap)
1942 if (nd->isVisibleInHierarchy())
1950 bool rootOnly,
bool addToIndex)
1952 for (
const auto &nd : nsLinkedMap)
1954 if (nd->isVisibleInHierarchy())
2039 for (
const auto &nd : nsLinkedMap)
2048 for (
const auto &nd : nsLinkedMap)
2063 bool addToIndex = lne==
nullptr || lne->
visible();
2083 if (nd->isLinkableInProject())
2092 if (nd->getLanguage()==SrcLangExt::VHDL)
2102 bool hasBrief = !nd->briefDescription().isEmpty();
2110 nd->briefDescription(
true),
2112 .setSingleLine(
true)
2113 .setLinkFromIndex(
true));
2162 if (sliceOpt && cd->compoundType() != ct)
2166 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2168 if (!cd->isEmbeddedInOuterScope())
2190 if (cd->getLanguage()==SrcLangExt::VHDL &&
2203 if (sliceOpt && cd->compoundType() != ct)
2209 if (cd->isEmbeddedInOuterScope())
2215 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2218 if (cd->getLanguage()==SrcLangExt::VHDL)
2226 bool hasBrief = !cd->briefDescription().isEmpty();
2234 cd->briefDescription(
true),
2236 .setSingleLine(
true)
2237 .setLinkFromIndex(
true));
2253 return (c<127 && c>31);
2258 if (startLetter.
isEmpty())
return startLetter;
2259 const char *p = startLetter.
data();
2269 const char hex[]=
"0123456789abcdef";
2272 result+=
hex[
static_cast<unsigned char>(c)>>4];
2273 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2295 if (sliceOpt && cd->compoundType() != ct)
2297 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2304 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2305 if (!letter.empty())
2313 QCString alphaLinks =
"<div class=\"qindex\">";
2315 for (
const auto &letter : indexLettersUsed)
2320 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2324 alphaLinks +=
"</div>\n";
2327 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2334 if (sliceOpt && cd->compoundType() != ct)
2339 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2341 QCString className = cd->className();
2344 if (!letter.empty())
2347 auto it = classesByLetter.find(letter);
2348 if (it!=classesByLetter.end())
2350 it->second.push_back(cd.get());
2354 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2361 for (
auto &[letter,list] : classesByLetter)
2363 std::stable_sort(list.begin(), list.end(),
2364 [](
const auto &c1,
const auto &c2)
2366 QCString n1 = c1->className();
2367 QCString n2 = c2->className();
2368 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2373 if (!classesByLetter.empty())
2377 for (
const auto &cl : classesByLetter)
2379 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2380 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2395 for (
const auto &cd : cl.second)
2414 cd->getOutputFileBase(),cd->anchor(),cname);
2448 bool addToIndex = lne==
nullptr || lne->
visible();
2477 bool addToIndex = lne==
nullptr || lne->
visible();
2506 bool addToIndex = lne==
nullptr || lne->
visible();
2535 bool addToIndex = lne==
nullptr || lne->
visible();
2598 bool addToIndex = lne==
nullptr || lne->
visible();
2662 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2676 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2679 "annotatedinterfaces",
2690 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2704 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2707 "annotatedexceptions",
2729 if (fd && prevFileName!=fd->
name())
2734 prevFileName = fd->
name();
2770 int index =
static_cast<int>(type);
2771 const int numIndices = 4;
2772 ASSERT(index<numIndices);
2778 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2788 bool firstSection=
TRUE;
2789 bool firstItem=
TRUE;
2792 for (
const auto &kv : memberIndexMap)
2796 auto it = memberIndexMap.find(page);
2797 if (it != memberIndexMap.end())
2808 if (mil==
nullptr || mil->empty())
continue;
2809 for (
const auto &md : *mil)
2811 const char *sep =
nullptr;
2812 bool isFunc=!md->isObjCMethod() &&
2813 (md->isFunction() || md->isSlot() || md->isSignal());
2816 if (name.
data()+startIndex!=prevName)
2819 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2834 else if (!useSections && first)
2845 if (isFunc) ol.
docify(
"()");
2850 sep =
" : ";
2851 prevName = name.
data()+startIndex;
2858 if (index<numIndices)
2861 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2877 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2887 if (!letter.empty())
2890 bool isFriendToHide = hideFriendCompounds &&
2894 if (!(md->
isFriend() && isFriendToHide) &&
2929 (md->
isFriend() && !isFriendToHide))
2946 if (!letter.empty())
2994 if (!letter.empty())
3046 if (!letter.empty())
3085 for (
const auto &[letter,list] : map)
3094 anchor=fullName+extension+
"#index_";
3096 anchor=fullName+
"_"+is+extension+
"#index_";
3104<script type="text/javascript">
3105function updateNavHighlight() {
3106 var currentHash = window.location.hash;
3107 var navItems = document.querySelectorAll('#navrow4 .tablist li');
3109 for (var i = 0; i < navItems.length; i++) {
3110 var item = navItems[i];
3111 var link = item.querySelector('a');
3112 item.classList.remove('current');
3113 if (link && link.getAttribute('href') === currentHash) {
3114 item.classList.add('current');
3119 var target = document.querySelector(currentHash);
3121 target.scrollIntoView();
3125updateNavHighlight();
3126window.addEventListener('hashchange', updateNavHighlight);
3136 QCString alphaLinks =
"<div class=\"qindex\">";
3138 for (
const auto &[letter,list] : map)
3142 for (
const auto &[letterUC,letter] : usedLetters)
3151 anchor=fullName+extension+
"#index_";
3153 anchor=fullName+
"_"+is+extension+
"#index_";
3158 alphaLinks +=
"<a class=\"qindex\" href=\"" + anchor +
3162 alphaLinks +=
"</div>\n";
3195 return &cmhlInfo[hl];
3201 if (index.numDocumentedClassMembers(hl)==0)
return;
3207 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3209 bool multiPageIndex=
FALSE;
3212 multiPageIndex=
TRUE;
3222 bool addToIndex = lne==
nullptr || lne->
visible();
3232 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3250 auto writeQuickLinks = [&,cap_letter=letter]()
3291 if (!disableIndex && !quickLinksAfterSplitbar)
3297 if (quickLinksAfterSplitbar)
3313 if (dynamicMenus || disableIndex)
3319 multiPageIndex ? letter : std::string(),
3320 index.isClassIndexLetterUsed(hl),
3335 bool addToIndex = lne==
nullptr || lne->
visible();
3388 return &fmhlInfo[hl];
3394 if (index.numDocumentedFileMembers(hl)==0)
return;
3400 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3402 bool multiPageIndex=
FALSE;
3405 multiPageIndex=
TRUE;
3414 bool addToIndex = lne==
nullptr || lne->
visible();
3424 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3442 auto writeQuickLinks = [&,cap_letter=letter]()
3481 if (!disableIndex && !quickLinksAfterSplitbar)
3487 if (quickLinksAfterSplitbar)
3503 if (dynamicMenus || disableIndex)
3509 multiPageIndex ? letter : std::string(),
3510 index.isFileIndexLetterUsed(hl),
3573 return &nmhlInfo[hl];
3582 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3588 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3590 bool multiPageIndex=
FALSE;
3593 multiPageIndex=
TRUE;
3602 bool addToIndex = lne==
nullptr || lne->
visible();
3612 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3630 auto writeQuickLinks = [&,cap_letter=letter]()
3669 if (!disableIndex && !quickLinksAfterSplitbar)
3675 if (quickLinksAfterSplitbar)
3693 multiPageIndex ? letter : std::string(),
3694 index.isNamespaceIndexLetterUsed(hl),
3750 return &nmhlInfo[hl];
3759 if (index.numDocumentedModuleMembers(hl)==0)
return;
3765 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3767 bool multiPageIndex=
FALSE;
3770 multiPageIndex=
TRUE;
3779 bool addToIndex = lne==
nullptr || lne->
visible();
3789 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3807 auto writeQuickLinks = [&,cap_letter=letter]()
3846 if (!disableIndex && !quickLinksAfterSplitbar)
3852 if (quickLinksAfterSplitbar)
3868 if (dynamicMenus || disableIndex)
3874 multiPageIndex ? letter : std::string(),
3875 index.isModuleIndexLetterUsed(hl),
3891 bool addToIndex = lne==
nullptr || lne->
visible();
3920 bool addToIndex = lne==
nullptr || lne->
visible();
3944 QCString n=pd->getOutputFileBase();
3945 if (!pd->title().isEmpty())
3979 docPages=indexPages=0;
3982 if (pd->visibleInIndex() && !pd->hasParentPage())
3986 if (pd->documentedPage())
3999 bool addToIndex = lne==
nullptr || lne->
visible();
4000 if (!addToIndex)
return;
4007 QCString pageTitle, pageTitleAsHtml;
4010 pageTitle=pd->
name();
4019 hasSubPages,pageTitle,
4026 hasSubPages || hasSections,pageTitle,
4032 bool doIndent = (hasSections || hasSubPages) && !reuseRoot;
4102 if (!gd->isReference())
4118 if (dd->isLinkableInProject())
4138 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4151 int s = legendDocs.
find(
"<center>");
4152 int e = legendDocs.
find(
"</center>");
4154 if (imgExt==
"svg" && s!=-1 && e!=-1)
4156 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4186 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4199 size_t numSubItems = 0;
4202 if (ml->listType().isDocumentation())
4204 numSubItems += ml->size();
4209 numSubItems += gd->
getFiles().size();
4211 numSubItems += gd->
getDirs().size();
4214 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4223 isDir,
TRUE,
nullptr,titleAsHtml);
4242 .setSingleLine(
true)
4243 .setAutolinkSupport(
false));
4249 ol.
docify(
" [external]");
4255 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4263 for (
const auto &md : *ml)
4266 isDir = !enumList.
empty() && md->isEnumerate();
4267 if (md->isVisible() && !md->isAnonymous())
4270 md->qualifiedName(),md->getReference(),
4271 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4276 for (
const auto &emd : enumList)
4278 if (emd->isVisible())
4281 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4282 emd->anchor(),
FALSE,addToIndex);
4291 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4299 if (cd->isVisible() )
4302 LayoutDocManager::Class,
4310 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4314 if (nd->isVisible())
4317 nd->displayName(),nd->getReference(),
4322 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4326 if (cd->isVisible())
4329 cd->displayName(),cd->getReference(),
4334 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4336 for (
const auto &fd : gd->
getFiles())
4338 if (fd->isVisible())
4341 fd->displayName(),fd->getReference(),
4342 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4346 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4348 for (
const auto &dd : gd->
getDirs())
4350 if (dd->isVisible())
4353 dd->shortName(),dd->getReference(),
4358 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4360 for (
const auto &pd : gd->
getPages())
4368 pageTitle=pd->
name();
4373 hasSubPages || hasSections,
4378 hasSubPages || hasSections,
4382 if (hasSections || hasSubPages)
4391 if (hasSections || hasSubPages)
4397 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4458 bool addToIndex = lne==
nullptr || lne->
visible();
4519 FTVHelp* ftv,
bool addToIndex)
4522 bool isDir=visibleMembers>0;
4542 .setSingleLine(
true)
4543 .setAutolinkSupport(
false));
4548 ol.
docify(
" [external]");
4551 if (addToIndex && isDir)
4563 if (addToIndex && isDir)
4607 bool addToIndex = lne==
nullptr || lne->
visible();
4666 for (
const auto &cd : concepts)
4668 if (cd->isLinkableInProject())
4673 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4678 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4685 bool rootOnly,
bool addToIndex);
4688 bool rootOnly,
bool addToIndex)
4690 for (
const auto &nd : nsLinkedMap)
4698 bool rootOnly,
bool addToIndex)
4752 if ((cd->getOuterScope()==
nullptr ||
4758 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4759 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4763 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4764 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4779 bool addToIndex = lne==
nullptr || lne->
visible();
4800 if (cd->isLinkableInProject())
4812 bool hasBrief = !cd->briefDescription().isEmpty();
4820 cd->briefDescription(
true),
4822 .setSingleLine(
true)
4823 .setLinkFromIndex(
true));
4885 if (entry->visible()) count++;
4890 for (
const auto &entry: lne->
children())
4892 if (entry->visible())
4894 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4895 fixSpaces(entry->title())+
"</span></a></li>\n");
4923 projPrefix=projectName+
" ";
4975 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4977 if (!disableIndex && !quickLinksAfterSplitbar)
4983 if (quickLinksAfterSplitbar)
4988 bool headerWritten=
FALSE;
5013 .setSingleLine(
true));
5014 headerWritten =
TRUE;
5024 headerWritten =
TRUE;
5053 .setIndexWords(
true));
5092 msg(
"Generating main page...\n");
5135 if (index.numDocumentedPages()>0)
5150 if (index.numDocumentedModules()>0)
5156 if (index.numDocumentedGroups()>0)
5162 if (index.numDocumentedDirs()>0)
5168 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5178 if (index.numDocumentedConcepts()>0)
5184 if (index.numHierarchyInterfaces()>0)
5190 if (index.numHierarchyClasses()>0)
5204 if (index.numHierarchyExceptions()>0)
5210 if (index.numAnnotatedInterfacesPrinted()>0)
5216 if (index.numAnnotatedClassesPrinted()>0)
5226 if (index.numAnnotatedStructsPrinted()>0)
5232 if (index.numAnnotatedExceptionsPrinted()>0)
5247 if (index.numDocumentedModules()>0)
5253 if (index.numDocumentedGroups()>0)
5259 if (index.numDocumentedDirs()>0)
5265 if (index.numDocumentedNamespaces()>0)
5271 if (index.numDocumentedConcepts()>0)
5277 if (index.numAnnotatedInterfacesPrinted()>0)
5283 if (index.numAnnotatedClassesPrinted()>0)
5289 if (index.numAnnotatedStructsPrinted()>0)
5295 if (index.numAnnotatedExceptionsPrinted()>0)
5325 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5329 for (
const auto &lne : entries)
5332 size_t idx =
static_cast<size_t>(kind);
5336 size_t newSize = idx+1;
5341 bool addToIndex=lne->
visible();
5342 bool needsClosing=
FALSE;
5347 case LayoutNavEntry::MainPage:
5348 msg(
"Generating index page...\n");
5351 case LayoutNavEntry::Pages:
5352 msg(
"Generating page index...\n");
5355 case LayoutNavEntry::Topics:
5356 msg(
"Generating topic index...\n");
5359 case LayoutNavEntry::Modules:
5361 if (index.numDocumentedModules()>0 && addToIndex)
5369 case LayoutNavEntry::ModuleList:
5370 msg(
"Generating module index...\n");
5373 case LayoutNavEntry::ModuleMembers:
5374 msg(
"Generating module member index...\n");
5377 case LayoutNavEntry::Namespaces:
5382 if (index.numDocumentedNamespaces()>0 && addToIndex)
5390 msg(
"Generating namespace index...\n");
5396 case LayoutNavEntry::NamespaceList:
5401 msg(
"Generating namespace index...\n");
5406 case LayoutNavEntry::NamespaceMembers:
5407 msg(
"Generating namespace member index...\n");
5410 case LayoutNavEntry::Classes:
5411 if (index.numAnnotatedClasses()>0 && addToIndex)
5419 msg(
"Generating annotated compound index...\n");
5423 case LayoutNavEntry::Concepts:
5424 msg(
"Generating concept index...\n");
5427 case LayoutNavEntry::ClassList:
5428 msg(
"Generating annotated compound index...\n");
5431 case LayoutNavEntry::ClassIndex:
5432 msg(
"Generating alphabetical compound index...\n");
5435 case LayoutNavEntry::ClassHierarchy:
5436 msg(
"Generating hierarchical class index...\n");
5440 msg(
"Generating graphical class hierarchy...\n");
5444 case LayoutNavEntry::ClassMembers:
5447 msg(
"Generating member index...\n");
5451 case LayoutNavEntry::Interfaces:
5452 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5459 case LayoutNavEntry::InterfaceList:
5462 msg(
"Generating annotated interface index...\n");
5466 case LayoutNavEntry::InterfaceIndex:
5469 msg(
"Generating alphabetical interface index...\n");
5473 case LayoutNavEntry::InterfaceHierarchy:
5476 msg(
"Generating hierarchical interface index...\n");
5480 msg(
"Generating graphical interface hierarchy...\n");
5485 case LayoutNavEntry::Structs:
5486 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5493 case LayoutNavEntry::StructList:
5496 msg(
"Generating annotated struct index...\n");
5500 case LayoutNavEntry::StructIndex:
5503 msg(
"Generating alphabetical struct index...\n");
5507 case LayoutNavEntry::Exceptions:
5508 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5515 case LayoutNavEntry::ExceptionList:
5518 msg(
"Generating annotated exception index...\n");
5522 case LayoutNavEntry::ExceptionIndex:
5525 msg(
"Generating alphabetical exception index...\n");
5529 case LayoutNavEntry::ExceptionHierarchy:
5532 msg(
"Generating hierarchical exception index...\n");
5536 msg(
"Generating graphical exception hierarchy...\n");
5541 case LayoutNavEntry::Files:
5543 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5551 msg(
"Generating file index...\n");
5556 case LayoutNavEntry::FileList:
5557 msg(
"Generating file index...\n");
5560 case LayoutNavEntry::FileGlobals:
5561 msg(
"Generating file member index...\n");
5564 case LayoutNavEntry::Examples:
5565 msg(
"Generating example index...\n");
5568 case LayoutNavEntry::User:
5573 bool isRelative=url.
at(0)==
'!';
5574 if (!url.
isEmpty() && !isRelative)
5582 case LayoutNavEntry::UserGroup:
5594 bool isRelative=url.
at(0)==
'!';
5612 case LayoutNavEntry::None:
5613 assert(kind != LayoutNavEntry::None);
5616 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5626 case LayoutNavEntry::Modules:
5627 case LayoutNavEntry::Namespaces:
5628 case LayoutNavEntry::Classes:
5629 case LayoutNavEntry::Files:
5630 case LayoutNavEntry::UserGroup:
5652 case LayoutNavEntry::MainPage:
return TRUE;
5653 case LayoutNavEntry::User:
return TRUE;
5654 case LayoutNavEntry::UserGroup:
return TRUE;
5655 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5656 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5657 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5658 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5660 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5661 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5663 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5664 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5665 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5666 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5667 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5669 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5670 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5671 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5672 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5673 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5674 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5675 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5676 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5677 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5678 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5679 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5680 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5681 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5684 case LayoutNavEntry::None:
5685 assert(kind != LayoutNavEntry::None);
5693 std::function<std::size_t(std::size_t)> numDocumented,
5695 const T *(*getInfo)(
size_t hl),
5699 bool firstMember=
TRUE;
5700 for (std::size_t i=0;i<total;i++)
5702 if (numDocumented(i)>0)
5718 bool multiPageIndex=
FALSE;
5721 multiPageIndex=
TRUE;
5723 t <<
",children:[\n";
5724 bool firstLetter=
TRUE;
5725 for (
const auto &[letter,list] : getMemberList(i))
5727 if (!firstLetter) t <<
",\n";
5732 QCString fullName = getInfo(i)->fname;
5733 if (!multiPageIndex || firstLetter)
5734 anchor=fullName+extension+
"#index_";
5736 anchor=fullName+
"_"+is+extension+
"#index_";
5755 for (
const auto &entry : root->
children())
5761 bool firstChild =
TRUE;
5762 if (!first) t <<
",";
5763 t <<
"children:[\n";
5764 for (
const auto &entry : root->
children())
5768 if (!firstChild) t <<
",\n";
5771 if (
isURL(url)) url =
"^" + url;
5774 bool hasChildren=
FALSE;
5775 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5777 auto numDoc = [](std::size_t i) {
5780 auto memList = [](std::size_t i) {
5785 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5787 auto numDoc = [](std::size_t i) {
5790 auto memList = [](std::size_t i) {
5795 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5797 auto numDoc = [](std::size_t i) {
5800 auto memList = [](std::size_t i) {
5805 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5807 auto numDoc = [](std::size_t i) {
5810 auto memList = [](std::size_t i) {
5819 if (hasChildren) t <<
"]";
5836 t <<
"var menudata={";
5838 if (hasChildren) t <<
"]";
A abstract class representing of a compound symbol.
virtual bool isVisibleInHierarchy() const =0
the class is visible in a class diagram, or class hierarchy
virtual const BaseClassList & baseClasses() const =0
Returns the list of base classes from which this class directly inherits.
virtual bool isSimple() const =0
virtual Protection protection() const =0
Return the protection level (Public,Protected,Private) in which this compound was found.
virtual bool isImplicitTemplateInstance() const =0
CompoundType
The various compound types.
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
virtual ClassLinkedRefMap getClasses() const =0
returns the classes nested into this class
virtual const BaseClassList & subClasses() const =0
Returns the list of sub classes that directly derive from this class.
static const QCString crawlFileName
The common base class of all entity definitions found in the sources.
virtual bool isVisible() const =0
virtual const QCString & localName() const =0
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.
virtual bool hasSections() const =0
virtual QCString navigationPathAsString() const =0
virtual QCString getDefFileName() const =0
virtual bool isLinkable() const =0
virtual int getDefLine() const =0
virtual DefType definitionType() const =0
virtual QCString anchor() const =0
virtual int briefLine() const =0
virtual bool hasDocumentation() const =0
virtual bool isLinkableInProject() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual bool isAnonymous() const =0
virtual QCString getReference() const =0
virtual QCString getSourceFileBase() const =0
virtual const GroupList & partOfGroups() const =0
virtual QCString qualifiedName() const =0
virtual QCString displayName(bool includeScope=TRUE) const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
virtual Definition * getOuterScope() const =0
virtual bool isReference() const =0
virtual const QCString & name() const =0
virtual void writePageNavigation(OutputList &) const =0
virtual void writeSummaryLinks(OutputList &) const =0
A model of a directory symbol.
virtual const QCString shortName() const =0
virtual const DirList & subDirs() const =0
virtual const FileList & getFiles() const =0
Represents a graphical class hierarchy.
Representation of a legend explaining the meaning of boxes, arrows, and colors.
void writeGraph(const QCString &path)
static NamespaceLinkedMap * namespaceLinkedMap
static ConceptLinkedMap * conceptLinkedMap
static std::unique_ptr< PageDef > mainPage
static FileNameLinkedMap * inputNameLinkedMap
static ClassLinkedMap * classLinkedMap
static PageLinkedMap * exampleLinkedMap
static NamespaceDefMutable * globalScope
static IndexList * indexList
static ClassLinkedMap * hiddenClassLinkedMap
static QCString htmlFileExtension
static PageLinkedMap * pageLinkedMap
static DirLinkedMap * dirLinkedMap
static GroupLinkedMap * groupLinkedMap
A class that generates a dynamic tree view side panel.
void addContentsItem(bool isDir, const QCString &name, const QCString &ref, const QCString &file, const QCString &anchor, bool separateIndex, bool addToNavIndex, const Definition *def, const QCString &nameAsHtml=QCString())
void generateTreeViewInline(TextStream &t)
A model of a file symbol.
virtual QCString includeName() const =0
virtual QCString getPath() const =0
virtual bool generateSourceFile() const =0
virtual bool isDocumentationFile() const =0
A model of a group of symbols.
virtual const DirList & getDirs() const =0
virtual const GroupList & getSubGroups() const =0
virtual QCString groupTitle() const =0
virtual const FileList & getFiles() const =0
virtual const MemberLists & getMemberLists() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const PageLinkedRefMap & getPages() const =0
virtual const NamespaceLinkedRefMap & getNamespaces() const =0
virtual bool isASubGroup() const =0
virtual bool isVisibleInHierarchy() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
virtual MemberList * getMemberList(MemberListType lt) const =0
void incrementDocumentedNamespaceMembers(int i, const std::string &letter, const MemberDef *md)
int numAnnotatedInterfacesPrinted() const
void addClassMemberNameToIndex(const MemberDef *md)
std::vector< const MemberDef * > MemberIndexList
void resetDocumentedNamespaceMembers(int i)
int numDocumentedFiles() const
int numDocumentedNamespaces() const
int numIndexedPages() const
int numAnnotatedClassesPrinted() const
int numDocumentedGroups() const
void resetDocumentedModuleMembers(int i)
int numDocumentedModules() const
void incrementDocumentedFileMembers(int i, const std::string &letter, const MemberDef *md)
int numAnnotatedStructs() const
int numDocumentedConcepts() const
void addNamespaceMemberNameToIndex(const MemberDef *md)
void resetDocumentedClassMembers(int i)
int numAnnotatedStructsPrinted() const
void incrementDocumentedClassMembers(int i, const std::string &letter, const MemberDef *md)
MemberIndexMap isClassIndexLetterUsed(ClassMemberHighlight::Enum e) const
void addFileMemberNameToIndex(const MemberDef *md)
void incrementDocumentedModuleMembers(int i, const std::string &letter, const MemberDef *md)
int numHierarchyInterfaces() const
int numDocumentedClassMembers(ClassMemberHighlight::Enum e) const
int numDocumentedModuleMembers(ModuleMemberHighlight::Enum e) const
void addModuleMemberNameToIndex(const MemberDef *md)
int numDocumentedNamespaceMembers(NamespaceMemberHighlight::Enum e) const
int numDocumentedPages() const
int numHierarchyExceptions() const
int numAnnotatedExceptionsPrinted() const
int numDocumentedFileMembers(FileMemberHighlight::Enum e) const
int numAnnotatedExceptions() const
MemberIndexMap isFileIndexLetterUsed(FileMemberHighlight::Enum e) const
void sortMemberIndexLists()
std::map< std::string, MemberIndexList > MemberIndexMap
static Index & instance()
void countDataStructures()
int numHierarchyClasses() const
MemberIndexMap isModuleIndexLetterUsed(ModuleMemberHighlight::Enum e) const
void resetDocumentedFileMembers(int i)
int numDocumentedDirs() const
int numAnnotatedInterfaces() const
std::unique_ptr< Private > p
int numAnnotatedClasses() const
MemberIndexMap isNamespaceIndexLetterUsed(NamespaceMemberHighlight::Enum e) const
static LayoutDocManager & instance()
Returns a reference to this singleton.
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
std::unique_ptr< ClassDef > Ptr
const T * find(const std::string &key) const
A model of a class/file/namespace member symbol.
virtual QCString typeString() const =0
virtual bool isSignal() const =0
virtual bool isFriend() const =0
virtual bool isForeign() const =0
virtual bool isRelated() const =0
virtual bool isSequence() const =0
virtual const ClassDef * getClassDef() const =0
virtual GroupDef * getGroupDef()=0
virtual bool isTypedef() const =0
virtual bool isSlot() const =0
virtual const MemberVector & enumFieldList() const =0
virtual const FileDef * getFileDef() const =0
virtual bool isEvent() const =0
virtual bool isFunction() const =0
virtual bool isDictionary() const =0
virtual const ModuleDef * getModuleDef() const =0
virtual bool isDefine() const =0
virtual const NamespaceDef * getNamespaceDef() const =0
virtual bool isEnumerate() const =0
virtual bool isVariable() const =0
virtual bool isStrong() const =0
virtual const MemberDef * getEnumScope() const =0
virtual bool isEnumValue() const =0
virtual bool isProperty() const =0
A list of MemberDef objects as shown in documentation sections.
A vector of MemberDef object.
bool empty() const noexcept
iterator begin() noexcept
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual int countVisibleMembers() const =0
virtual bool isPrimaryInterface() const =0
virtual const ConceptLinkedRefMap & getConcepts() const =0
virtual const ClassLinkedRefMap & getClasses() const =0
int numDocumentedModules() const
static ModuleManager & instance()
An abstract interface of a namespace symbol.
virtual MemberList * getMemberList(MemberListType lt) const =0
virtual ConceptLinkedRefMap getConcepts() const =0
virtual ClassLinkedRefMap getStructs() const =0
virtual ClassLinkedRefMap getExceptions() const =0
virtual NamespaceLinkedRefMap getNamespaces() const =0
virtual int countVisibleMembers() const =0
virtual ClassLinkedRefMap getClasses() const =0
virtual ClassLinkedRefMap getInterfaces() const =0
Class representing a list of output generators that are written to in parallel.
void endTextBlock(bool paraBreak=FALSE)
void writeString(const QCString &text)
void startIndexItem(const QCString &ref, const QCString &file)
void endTitleHead(const QCString &fileName, const QCString &name)
void endSection(const QCString &lab, SectionType t)
void endIndexValue(const QCString &name, bool b)
void disable(OutputType o)
void startTitleHead(const QCString &fileName)
void enable(OutputType o)
void writeObjectLink(const QCString &ref, const QCString &file, const QCString &anchor, const QCString &name)
void endIndexItem(const QCString &ref, const QCString &file)
void writeGraphicalHierarchy(DotGfxHierarchyTable &g)
void startHeaderSection()
void docify(const QCString &s)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, const DocOptions &options)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void startTextBlock(bool dense=FALSE)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startFile(const QCString &name, bool isSource, const QCString &manName, const QCString &title, int hierarchyLevel=0)
void startIndexValue(bool b)
void startPageDoc(const QCString &pageTitle)
void writeSplitBar(const QCString &name, const QCString &allMembersFile)
void writeFooter(const QCString &navPath)
void startIndexListItem()
void parseText(const QCString &textStr)
void startSection(const QCString &lab, const QCString &title, SectionType t)
void startIndexSection(IndexSection is)
void startTextLink(const QCString &file, const QCString &anchor)
void writeQuickLinks(HighlightedItem hli, const QCString &file, bool extraTabs=false)
A model of a page symbol.
virtual void addSectionsToIndex()=0
virtual bool visibleInIndex() const =0
virtual const PageLinkedRefMap & getSubPages() const =0
virtual bool hasSubPages() const =0
virtual QCString title() const =0
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
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
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & replace(size_t index, size_t len, const char *s)
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
class that provide information about a section.
static SectionManager & instance()
returns a reference to the singleton
static constexpr int Subsection
Text streaming class that buffers data.
std::string str() const
Return the contents of the buffer as a std::string object.
static QCString getProtectionName(int prot)
static VhdlClasses convert(Protection prot)
bool classHasVisibleRoot(const BaseClassList &bcl)
bool classVisibleInIndex(const ClassDef *cd)
bool classHasVisibleChildren(const ClassDef *cd)
std::vector< BaseClassDef > BaseClassList
std::unordered_set< const ClassDef * > ClassDefSet
#define Config_updateBool(name, value)
#define Config_getBool(name)
#define Config_getString(name)
std::map< std::string, std::string > StringMap
Definition * toDefinition(DefinitionMutable *dm)
static constexpr auto hex
static void addMembersToIndex()
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
bool compareFileDefs(const FileDef *fd1, const FileDef *fd2)
constexpr auto JAVASCRIPT_LICENSE_TEXT
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writePages(PageDef *pd, FTVHelp *ftv, bool reuseRoot=false)
static void writeConceptTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static void writeClassTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
void startTitle(OutputList &ol, const QCString &fileName, const DefinitionMutable *def)
static void writeIndexHierarchyEntries(OutputList &ol, const LayoutNavEntryList &entries)
static void writeClassTreeToOutput(OutputList &ol, const BaseClassList &bcl, int level, FTVHelp *ftv, bool addToIndex, ClassDefSet &visitedClasses)
void endFile(OutputList &ol, bool skipNavIndex, bool skipEndContents, const QCString &navPath)
#define MAX_ITEMS_BEFORE_QUICK_INDEX
static void writeFileMemberIndexFiltered(OutputList &ol, FileMemberHighlight::Enum hl)
#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX
static void writeNamespaceTree(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static bool renderQuickLinksAsJs(std::ostream &t, LayoutNavEntry *root, bool first)
static void writeGraphicalClassHierarchy(OutputList &ol)
static void writeAnnotatedStructIndex(OutputList &ol)
static void writeAlphabeticalExceptionIndex(OutputList &ol)
static void writeDirIndex(OutputList &ol)
static void writeClassMemberIndex(OutputList &ol)
void writeGraphInfo(OutputList &ol)
static std::vector< bool > indexWritten
static int countConcepts()
void endTitle(OutputList &ol, const QCString &fileName, const QCString &name)
static void writeAnnotatedIndex(OutputList &ol)
static void writeClassMemberIndexFiltered(OutputList &ol, ClassMemberHighlight::Enum hl)
static void writeAnnotatedClassList(OutputList &ol, ClassDef::CompoundType ct)
static void writeFileIndex(OutputList &ol)
static void writeGraphicalInterfaceHierarchy(OutputList &ol)
static void endQuickIndexList(OutputList &ol)
static void writeAlphabeticalIndex(OutputList &ol)
static int countClassHierarchy(ClassDef::CompoundType ct)
static void startQuickIndexItem(OutputList &ol, const QCString &l, bool hl, bool, bool &first)
static void writeAnnotatedInterfaceIndex(OutputList &ol)
static void writePageIndex(OutputList &ol)
static void writeNamespaceIndex(OutputList &ol)
static void writeClassTreeInsideNamespace(const NamespaceLinkedRefMap &nsLinkedMap, FTVHelp *ftv, bool rootOnly, bool addToIndex, ClassDef::CompoundType ct)
void renderMemberIndicesAsJs(std::ostream &t, std::function< std::size_t(std::size_t)> numDocumented, std::function< Index::MemberIndexMap(std::size_t)> getMemberList, const T *(*getInfo)(size_t hl), std::size_t total)
static void writeAnnotatedExceptionIndex(OutputList &ol)
static void writeHierarchicalInterfaceIndex(OutputList &ol)
static void writeNamespaceMembers(const NamespaceDef *nd, bool addToIndex)
static void countRelatedPages(int &docPages, int &indexPages)
static void writeUserGroupStubPage(OutputList &ol, LayoutNavEntry *lne)
static void writeNamespaceMemberIndexFiltered(OutputList &ol, NamespaceMemberHighlight::Enum hl)
static void writeNamespaceTreeElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex)
static void writeTopicIndex(OutputList &ol)
static void writeClassTree(const ListType &cl, FTVHelp *ftv, bool addToIndex, bool globalOnly, ClassDef::CompoundType ct)
static void writeModuleMemberIndex(OutputList &ol)
static void writeConceptRootList(FTVHelp *ftv, bool addToIndex)
static const FmhlInfo * getFmhlInfo(size_t hl)
constexpr auto alphaSepar
static void writeGraphicalExceptionHierarchy(OutputList &ol)
static void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevFileName)
static const MmhlInfo * getMmhlInfo(size_t hl)
static void countFiles(int &htmlFiles, int &files)
static void writeClassHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct)
static void writeSingleFileIndex(OutputList &ol, const FileDef *fd)
static void writeNamespaceLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevNamespaceName)
static void writeExampleIndex(OutputList &ol)
static int countClassesInTreeList(const ClassLinkedMap &cl, ClassDef::CompoundType ct)
static void writeAlphabeticalInterfaceIndex(OutputList &ol)
static void endQuickIndexItem(OutputList &ol)
static void writeMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, QCString fullName, bool multiPage)
static void writeAnnotatedIndexGeneric(OutputList &ol, const AnnotatedIndexContext ctx)
static const NmhlInfo * getNmhlInfo(size_t hl)
const ClassDef * get_pointer(const Ptr &p)
static int countAnnotatedClasses(int *cp, ClassDef::CompoundType ct)
static void writeAlphabeticalStructIndex(OutputList &ol)
static void writeGroupHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static void writeModuleMembers(const ModuleDef *mod, bool addToIndex)
static void writeConceptTreeInsideNamespaceElement(const NamespaceDef *nd, FTVHelp *ftv, bool rootOnly, bool addToIndex)
void startFile(OutputList &ol, const QCString &name, bool isSource, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel, const QCString &allMembersFile)
static const CmhlInfo * getCmhlInfo(size_t hl)
static void writeDirHierarchy(OutputList &ol, FTVHelp *ftv, bool addToIndex)
std::set< std::string > UsedIndexLetters
static void writeConceptList(const ConceptLinkedRefMap &concepts, FTVHelp *ftv, bool addToIndex)
static void writeClassLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevClassName)
void writeIndexHierarchy(OutputList &ol)
static void writeModuleList(OutputList &ol, FTVHelp *ftv, bool addToIndex)
static bool dirHasVisibleChildren(const DirDef *dd)
static int countNamespaces()
static void endIndexHierarchy(OutputList &ol, int level)
const int maxItemsBeforeQuickIndex
static QCString letterToLabel(const QCString &startLetter)
static void writeQuickMemberIndex(OutputList &ol, const Index::MemberIndexMap &map, const std::string &page, QCString fullName, bool multiPage)
void endFileWithNavPath(OutputList &ol, const DefinitionMutable *d, bool showPageNavigation)
static void writeConceptIndex(OutputList &ol)
static void writeModuleLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevModuleName)
static void writeModuleIndex(OutputList &ol)
static void MemberIndexMap_add(Index::MemberIndexMap &map, const std::string &letter, const MemberDef *md)
static void writeIndex(OutputList &ol)
static void writeDirTreeNode(OutputList &ol, const DirDef *dd, int level, FTVHelp *ftv, bool addToIndex)
static void startIndexHierarchy(OutputList &ol, int level)
static bool quickLinkVisible(LayoutNavEntry::Kind kind)
static void writeModuleTreeNode(OutputList &ol, const ModuleDef *mod, FTVHelp *ftv, bool addToIndex)
static void writeHierarchicalExceptionIndex(OutputList &ol)
static void writeNamespaceMemberIndex(OutputList &ol)
static void writeHierarchicalIndex(OutputList &ol)
static void writeMenuData()
static void writeGroupTreeNode(OutputList &ol, const GroupDef *gd, int level, FTVHelp *ftv, bool addToIndex)
static void writeMemberToIndex(const Definition *def, const MemberDef *md, bool addToIndex)
static void writeMemberList(OutputList &ol, bool useSections, const std::string &page, const Index::MemberIndexMap &memberIndexMap, Definition::DefType type)
static void writeFileMemberIndex(OutputList &ol)
static void writeClassTreeForList(OutputList &ol, const ClassLinkedMap &cl, bool &started, FTVHelp *ftv, bool addToIndex, ClassDef::CompoundType ct, ClassDefSet &visitedClasses)
static void writeModuleMemberIndexFiltered(OutputList &ol, ModuleMemberHighlight::Enum hl)
static void writeAlphabeticalClassList(OutputList &ol, ClassDef::CompoundType ct, int)
static void startQuickIndexList(OutputList &ol, bool letterTabs=FALSE)
@ isNamespaceDocumentation
Translator * theTranslator
std::vector< std::unique_ptr< LayoutNavEntry > > LayoutNavEntryList
#define warn(file, line, fmt,...)
std::ofstream openOutputStream(const QCString &name, bool append=false)
bool namespaceHasNestedNamespace(const NamespaceDef *nd)
bool namespaceHasNestedClass(const NamespaceDef *nd, bool filterClasses, ClassDef::CompoundType ct)
NamespaceDef * getResolvedNamespace(const QCString &name)
bool namespaceHasNestedConcept(const NamespaceDef *nd)
Portable versions of functions that are platform dependent.
int qstricmp(const char *s1, const char *s2)
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
uint32_t qstrlen(const char *str)
Returns the length of string str, or 0 if a null pointer is passed.
const LayoutNavEntry::Kind fallbackKind
AnnotatedIndexContext(int numAnno, int numPrint, LayoutNavEntry::Kind lk, LayoutNavEntry::Kind fk, const QCString &title, const QCString &intro, ClassDef::CompoundType ct, const QCString &fn, HighlightedItem hi)
const ClassDef::CompoundType compoundType
const HighlightedItem hiItem
const QCString fileBaseName
const LayoutNavEntry::Kind listKind
const QCString listDefaultTitleText
const QCString listDefaultIntroText
Helper class representing a class member in the navigation menu.
CmhlInfo(const char *fn, const QCString &t)
Helper class representing a file member in the navigation menu.
FmhlInfo(const char *fn, const QCString &t)
std::array< MemberIndexMap, ModuleMemberHighlight::Total > moduleIndexLetterUsed
std::array< MemberIndexMap, ClassMemberHighlight::Total > classIndexLetterUsed
int annotatedExceptionsPrinted
int annotatedStructsPrinted
std::array< int, FileMemberHighlight::Total > documentedFileMembers
std::array< MemberIndexMap, FileMemberHighlight::Total > fileIndexLetterUsed
std::array< int, ModuleMemberHighlight::Total > documentedModuleMembers
int annotatedInterfacesPrinted
std::array< int, NamespaceMemberHighlight::Total > documentedNamespaceMembers
std::array< int, ClassMemberHighlight::Total > documentedClassMembers
std::array< MemberIndexMap, NamespaceMemberHighlight::Total > namespaceIndexLetterUsed
int annotatedClassesPrinted
Represents of a member declaration list with configurable title and subtitle.
Represents of a member definition list with configurable title.
Base class for the layout of a navigation item at the top of the HTML pages.
const LayoutNavEntryList & children() const
QCString baseFile() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Helper class representing a module member in the navigation menu.
MmhlInfo(const char *fn, const QCString &t)
Helper class representing a namespace member in the navigation menu.
NmhlInfo(const char *fn, const QCString &t)
std::string convertUTF8ToUpper(const std::string &input)
Converts the input string into a upper case version, also taking into account non-ASCII characters th...
std::string convertUTF8ToLower(const std::string &input)
Converts the input string into a lower case version, also taking into account non-ASCII characters th...
std::string getUTF8CharAt(const std::string &input, size_t pos)
Returns the UTF8 character found at byte position pos in the input string.
Various UTF8 related helper functions.
QCString convertToJSString(const QCString &s, bool keepEntities, bool singleQuotes)
QCString parseCommentAsHtml(const Definition *scope, const MemberDef *member, const QCString &doc, const QCString &fileName, int lineNr)
QCString convertToHtml(const QCString &s, bool keepEntities)
QCString parseCommentAsText(const Definition *scope, const MemberDef *md, const QCString &doc, const QCString &fileName, int lineNr)
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
QCString filterTitle(const QCString &title)
bool fileVisibleInIndex(const FileDef *fd, bool &genSourceFile)
bool isURL(const QCString &url)
Checks whether the given url starts with a supported protocol.
static QCString stripFromPath(const QCString &p, const StringVector &l)
void extractNamespaceName(const QCString &scopeName, QCString &className, QCString &namespaceName, bool allowEmptyClass)
QCString getLanguageSpecificSeparator(SrcLangExt lang, bool classScope)
Returns the scope separator to use given the programming language lang.
QCString getDotImageExtension()
int getPrefixIndex(const QCString &name)
QCString convertToId(const QCString &s)
void addHtmlExtensionIfMissing(QCString &fName)
A bunch of utility functions.
QCString fixSpaces(const QCString &s)