55#define MAX_ITEMS_BEFORE_MULTIPAGE_INDEX 200
56#define MAX_ITEMS_BEFORE_QUICK_INDEX 30
60static void countFiles(
int &htmlFiles,
int &files);
138 return p->classIndexLetterUsed[
static_cast<int>(e)];
143 return p->fileIndexLetterUsed[
static_cast<int>(e)];
148 return p->namespaceIndexLetterUsed[
static_cast<int>(e)];
153 return p->moduleIndexLetterUsed[
static_cast<int>(e)];
158 p->documentedClassMembers[i]=0;
159 p->classIndexLetterUsed[i].clear();
164 p->documentedFileMembers[i]=0;
165 p->fileIndexLetterUsed[i].clear();
170 p->documentedNamespaceMembers[i]=0;
171 p->namespaceIndexLetterUsed[i].clear();
176 p->documentedModuleMembers[i]=0;
177 p->moduleIndexLetterUsed[i].clear();
182 auto it = map.find(letter);
185 it->second.push_back(md);
189 map.emplace(letter,std::vector<const MemberDef*>({md}));
195 p->documentedClassMembers[i]++;
201 p->documentedFileMembers[i]++;
207 p->documentedNamespaceMembers[i]++;
213 p->documentedModuleMembers[i]++;
222 for (
auto &[name,list] : map)
224 std::stable_sort(list.begin(),list.end(),
234 int result = qstricmp_sort(md1->name(),md2->name());
237 result = qstricmp_sort(md1->qualifiedName(),md2->qualifiedName());
244 for (
auto &idx : p->classIndexLetterUsed)
246 sortMemberIndexList(idx);
248 for (
auto &idx : p->fileIndexLetterUsed)
250 sortMemberIndexList(idx);
252 for (
auto &idx : p->namespaceIndexLetterUsed)
254 sortMemberIndexList(idx);
256 for (
auto &idx : p->moduleIndexLetterUsed)
258 sortMemberIndexList(idx);
349 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
353 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
365 bool hl,
bool ,
bool &first)
402 const QCString &altSidebarName,
int hierarchyLevel)
407 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
408 ol.
startFile(name,manName,title,hierarchyLevel);
410 if (!disableIndex && !quickLinksAfterSplitbar)
414 if (!additionalIndices)
419 if (quickLinksAfterSplitbar)
435 if (generateTreeView)
450 if (generateTreeView)
471 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
492 for (
const auto &emd : enumList)
494 if (!hideUndocMembers || emd->hasDocumentation())
497 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
499 emd->qualifiedName() : emd->name();
500 if (emd->getOuterScope()==def ||
505 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
525 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
530 for (
const auto &cd : def->getClasses())
532 if (cd->isLinkable()) numClasses++;
537 for (
const auto &cd : *concepts)
539 if (cd->isLinkable()) numConcepts++;
542 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
544 def->getReference(),def->getOutputFileBase(),anchor,
545 hasMembers && !preventSeparateIndex,
549 if (hasMembers || numClasses>0 || numConcepts>0)
554 auto kind = lde->kind();
555 if (kind==LayoutDocEntry::MemberDef)
563 for (
const auto &md : *ml)
565 if (md->visibleInIndex())
573 else if (kind==LayoutDocEntry::NamespaceClasses ||
574 kind==LayoutDocEntry::FileClasses ||
575 kind==LayoutDocEntry::ClassNestedClasses ||
576 kind==LayoutDocEntry::ModuleClasses
579 for (
const auto &cd : def->getClasses())
581 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
585 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
586 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
587 preventSeparateIndex || cd->isEmbeddedInOuterScope());
591 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
593 for (
const auto &cd : *concepts)
595 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
598 cd->getReference(),cd->getOutputFileBase(),
QCString(),
617 if (bcl.empty())
return;
619 for (
const auto &bcd : bcl)
646 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
694 visitedClasses.insert(cd);
727 for (
const auto &fd : dd->
getFiles())
729 bool genSourceFile =
false;
740 for(
const auto &subdd : dd->
subDirs())
756 "maximum nesting level exceeded for directory {}: "
757 "check for possible recursive directory relation!",dd->
name());
766 bool tocExpand =
TRUE;
767 bool isDir = !dd->
subDirs().empty() ||
799 for(
const auto &subdd : dd->
subDirs())
809 for (
const auto &fd : dd->
getFiles())
816 bool genSourceFile =
false;
821 else if (genSourceFile)
829 for (
const auto &fd : dd->
getFiles())
837 reference = fd->getReference();
838 outputBase = fd->getOutputFileBase();
847 if (ftv && (src || doc))
851 reference,outputBase,
860 if (tocExpand && addToIndex)
865 for (
const auto &fd : dd->
getFiles())
872 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
914 for (
const auto &fd : *fn)
916 if (fd->getDirDef()==
nullptr)
923 reference = fd->getReference();
924 outputBase = fd->getOutputFileBase();
963 for (
const auto &cd : cl)
971 if (cd->getLanguage()==SrcLangExt::VHDL)
979 else if (sliceOpt && cd->compoundType() != ct)
990 if (cd->isVisibleInHierarchy())
1002 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1005 if (cd->isLinkable())
1011 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1012 if (cd->isReference())
1015 ol.
docify(
" [external]");
1020 if (cd->getLanguage()!=SrcLangExt::VHDL)
1021 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1025 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1042 if (cd->getLanguage()==SrcLangExt::VHDL && hasChildren)
1045 visitedClasses.insert(cd.get());
1047 else if (hasChildren)
1050 visitedClasses.insert(cd.get());
1089 for (
const auto &cd : cl)
1091 if (sliceOpt && cd->compoundType() != ct)
1097 if (cd->isVisibleInHierarchy())
1099 if (!cd->subClasses().empty())
1129 bool addToIndex = lne==
nullptr || lne->
visible();
1235 bool addToIndex = lne==
nullptr || lne->
visible();
1340 bool addToIndex = lne==
nullptr || lne->
visible();
1442 for (
const auto &fd: *fn)
1549 bool addToIndex = lne==
nullptr || lne->
visible();
1582 std::unordered_map<std::string,size_t> pathMap;
1583 std::vector<FilesInDir> outputFiles;
1588 for (
const auto &fd : *fn)
1591 if (path.
isEmpty()) path=
"[external]";
1592 auto it = pathMap.
find(path.
str());
1593 if (it!=pathMap.end())
1595 outputFiles.at(it->second).files.push_back(fd.get());
1599 pathMap.emplace(path.
str(),outputFiles.size());
1600 outputFiles.emplace_back(path);
1601 outputFiles.back().files.push_back(fd.get());
1607 std::stable_sort(outputFiles.begin(),
1609 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1611 for (
auto &fp : outputFiles)
1616 for (
const auto &fp : outputFiles)
1618 for (
const auto &fd : fp.files)
1628 for (
const auto &fd : *fn)
1671 if (nd->isLinkableInProject()) count++;
1682 if (cd->isLinkableInProject()) count++;
1693template<
class ListType>
1697 for (
const auto &cdi : cl)
1723 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1761 if (lde->kind()==LayoutDocEntry::MemberDef)
1769 for (
const auto &md : *ml)
1772 if (md->visibleInIndex())
1787 if (lde->kind()==LayoutDocEntry::MemberDecl)
1795 for (
const auto &md : *ml)
1798 if (md->visibleInIndex())
1812 bool rootOnly,
bool addToIndex);
1815 bool rootOnly,
bool addToIndex)
1822 bool hasChildren = hasNestedNamespace ||
1842 bool isDir = hasChildren || visibleMembers>0;
1843 if (isLinkable || isDir)
1852 if (addToIndex && isDir)
1866 if (addToIndex && isDir)
1875 bool rootOnly,
bool addToIndex)
1877 for (
const auto &nd : nsLinkedMap)
1879 if (nd->isVisibleInHierarchy())
1887 bool rootOnly,
bool addToIndex)
1889 for (
const auto &nd : nsLinkedMap)
1891 if (nd->isVisibleInHierarchy())
1976 for (
const auto &nd : nsLinkedMap)
1985 for (
const auto &nd : nsLinkedMap)
2000 bool addToIndex = lne==
nullptr || lne->
visible();
2020 if (nd->isLinkableInProject())
2029 if (nd->getLanguage()==SrcLangExt::VHDL)
2039 bool hasBrief = !nd->briefDescription().isEmpty();
2045 nd->briefFile(),nd->briefLine(),
2047 nd->briefDescription(
TRUE),
2104 if (sliceOpt && cd->compoundType() != ct)
2108 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2110 if (!cd->isEmbeddedInOuterScope())
2132 if (cd->getLanguage()==SrcLangExt::VHDL &&
2145 if (sliceOpt && cd->compoundType() != ct)
2151 if (cd->isEmbeddedInOuterScope())
2157 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2160 if (cd->getLanguage()==SrcLangExt::VHDL)
2168 bool hasBrief = !cd->briefDescription().isEmpty();
2173 cd->briefFile(),cd->briefLine(),
2175 cd->briefDescription(
TRUE),
2198 return (c<127 && c>31);
2203 if (startLetter.
isEmpty())
return startLetter;
2204 const char *p = startLetter.
data();
2214 const char hex[]=
"0123456789abcdef";
2217 result+=
hex[
static_cast<unsigned char>(c)>>4];
2218 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2260 if (sliceOpt && cd->compoundType() != ct)
2262 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2269 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2270 if (!letter.empty())
2278 QCString alphaLinks =
"<div class=\"qindex\">";
2280 for (
const auto &letter : indexLettersUsed)
2282 if (!first) alphaLinks +=
" | ";
2285 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2289 alphaLinks +=
"</div>\n";
2292 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2299 if (sliceOpt && cd->compoundType() != ct)
2304 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2306 QCString className = cd->className();
2309 if (!letter.empty())
2312 auto it = classesByLetter.find(letter);
2313 if (it!=classesByLetter.end())
2315 it->second.push_back(cd.get());
2319 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2326 for (
auto &[letter,list] : classesByLetter)
2328 std::stable_sort(list.begin(), list.end(),
2329 [](
const auto &c1,
const auto &c2)
2331 QCString n1 = c1->className();
2332 QCString n2 = c2->className();
2333 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2338 if (!classesByLetter.empty())
2342 for (
const auto &cl : classesByLetter)
2344 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2345 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2360 for (
const auto &cd : cl.second)
2379 cd->getOutputFileBase(),cd->anchor(),cname);
2413 bool addToIndex = lne==
nullptr || lne->
visible();
2442 bool addToIndex = lne==
nullptr || lne->
visible();
2471 bool addToIndex = lne==
nullptr || lne->
visible();
2500 bool addToIndex = lne==
nullptr || lne->
visible();
2563 bool addToIndex = lne==
nullptr || lne->
visible();
2627 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2641 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2644 "annotatedinterfaces",
2655 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2669 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2672 "annotatedexceptions",
2694 if (fd && prevFileName!=fd->
name())
2699 prevFileName = fd->
name();
2735 int index =
static_cast<int>(type);
2736 const int numIndices = 4;
2737 ASSERT(index<numIndices);
2743 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2753 bool firstSection=
TRUE;
2754 bool firstItem=
TRUE;
2757 for (
const auto &kv : memberIndexMap)
2761 auto it = memberIndexMap.find(page);
2762 if (it != memberIndexMap.end())
2773 if (mil==
nullptr || mil->empty())
continue;
2774 for (
const auto &md : *mil)
2776 const char *sep =
nullptr;
2777 bool isFunc=!md->isObjCMethod() &&
2778 (md->isFunction() || md->isSlot() || md->isSignal());
2781 if (name.
data()+startIndex!=prevName)
2784 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2799 else if (!useSections && first)
2810 if (isFunc) ol.
docify(
"()");
2815 sep =
" : ";
2816 prevName = name.
data()+startIndex;
2823 if (index<numIndices)
2826 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2842 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2852 if (!letter.empty())
2855 bool isFriendToHide = hideFriendCompounds &&
2859 if (!(md->
isFriend() && isFriendToHide) &&
2894 (md->
isFriend() && !isFriendToHide))
2911 if (!letter.empty())
2959 if (!letter.empty())
3011 if (!letter.empty())
3050 for (
const auto &[letter,list] : map)
3059 anchor=fullName+extension+
"#index_";
3061 anchor=fullName+
"_"+is+extension+
"#index_";
3099 return &cmhlInfo[hl];
3105 if (index.numDocumentedClassMembers(hl)==0)
return;
3111 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3113 bool multiPageIndex=
FALSE;
3116 multiPageIndex=
TRUE;
3126 bool addToIndex = lne==
nullptr || lne->
visible();
3136 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3154 auto writeQuickLinks = [&,cap_letter=letter]()
3195 if (!disableIndex && !quickLinksAfterSplitbar)
3201 if (quickLinksAfterSplitbar)
3218 multiPageIndex ? letter : std::string(),
3219 index.isClassIndexLetterUsed(hl),
3234 bool addToIndex = lne==
nullptr || lne->
visible();
3287 return &fmhlInfo[hl];
3293 if (index.numDocumentedFileMembers(hl)==0)
return;
3299 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3301 bool multiPageIndex=
FALSE;
3304 multiPageIndex=
TRUE;
3313 bool addToIndex = lne==
nullptr || lne->
visible();
3323 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3341 auto writeQuickLinks = [&,cap_letter=letter]()
3380 if (!disableIndex && !quickLinksAfterSplitbar)
3386 if (quickLinksAfterSplitbar)
3403 multiPageIndex ? letter : std::string(),
3404 index.isFileIndexLetterUsed(hl),
3416 bool addToIndex = lne==
nullptr || lne->
visible();
3467 return &nmhlInfo[hl];
3476 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3482 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3484 bool multiPageIndex=
FALSE;
3487 multiPageIndex=
TRUE;
3496 bool addToIndex = lne==
nullptr || lne->
visible();
3506 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3524 auto writeQuickLinks = [&,cap_letter=letter]()
3563 if (!disableIndex && !quickLinksAfterSplitbar)
3569 if (quickLinksAfterSplitbar)
3586 multiPageIndex ? letter : std::string(),
3587 index.isNamespaceIndexLetterUsed(hl),
3600 bool addToIndex = lne==
nullptr || lne->
visible();
3643 return &nmhlInfo[hl];
3652 if (index.numDocumentedModuleMembers(hl)==0)
return;
3658 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
3660 bool multiPageIndex=
FALSE;
3663 multiPageIndex=
TRUE;
3672 bool addToIndex = lne==
nullptr || lne->
visible();
3682 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3700 auto writeQuickLinks = [&,cap_letter=letter]()
3739 if (!disableIndex && !quickLinksAfterSplitbar)
3745 if (quickLinksAfterSplitbar)
3762 multiPageIndex ? letter : std::string(),
3763 index.isModuleIndexLetterUsed(hl),
3779 bool addToIndex = lne==
nullptr || lne->
visible();
3808 bool addToIndex = lne==
nullptr || lne->
visible();
3832 QCString n=pd->getOutputFileBase();
3833 if (!pd->title().isEmpty())
3867 docPages=indexPages=0;
3870 if (pd->visibleInIndex() && !pd->hasParentPage())
3874 if (pd->documentedPage())
3898 bool addToIndex = lne==
nullptr || lne->
visible();
3899 if (!addToIndex)
return;
3909 pageTitle=pd->
name();
3917 hasSubPages,pageTitle,
3924 hasSubPages || hasSections,pageTitle,
3930 bool doIndent = (hasSections || hasSubPages) &&
3974 if ((pd->getOuterScope()==
nullptr ||
3976 pd->visibleInIndex()
4001 if (!gd->isReference())
4017 if (dd->isLinkableInProject())
4037 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
4050 int s = legendDocs.
find(
"<center>");
4051 int e = legendDocs.
find(
"</center>");
4053 if (imgExt==
"svg" && s!=-1 && e!=-1)
4055 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4086 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4099 size_t numSubItems = 0;
4102 if (ml->listType().isDocumentation())
4104 numSubItems += ml->size();
4109 numSubItems += gd->
getFiles().size();
4111 numSubItems += gd->
getDirs().size();
4114 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4141 ol.
docify(
" [external]");
4147 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4155 for (
const auto &md : *ml)
4158 isDir = !enumList.
empty() && md->isEnumerate();
4159 if (md->isVisible() && !md->isAnonymous())
4162 md->qualifiedName(),md->getReference(),
4163 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4168 for (
const auto &emd : enumList)
4170 if (emd->isVisible())
4173 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4174 emd->anchor(),
FALSE,addToIndex);
4183 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4191 if (cd->isVisible() )
4194 LayoutDocManager::Class,
4202 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4206 if (nd->isVisible())
4209 nd->displayName(),nd->getReference(),
4214 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4218 if (cd->isVisible())
4221 cd->displayName(),cd->getReference(),
4226 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4228 for (
const auto &fd : gd->
getFiles())
4230 if (fd->isVisible())
4233 fd->displayName(),fd->getReference(),
4234 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4238 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4240 for (
const auto &dd : gd->
getDirs())
4242 if (dd->isVisible())
4245 dd->shortName(),dd->getReference(),
4250 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4252 for (
const auto &pd : gd->
getPages())
4256 hasSubPages = pd->hasSubPages();
4257 bool hasSections = pd->hasSections();
4259 hasSubPages || hasSections,
4264 hasSubPages || hasSections,
4266 if (hasSections || hasSubPages)
4272 pd->addSectionsToIndex();
4275 if (hasSections || hasSubPages)
4281 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4319 if (gd->isVisibleInHierarchy())
4342 bool addToIndex = lne==
nullptr || lne->
visible();
4403 FTVHelp* ftv,
bool addToIndex)
4406 bool isDir=visibleMembers>0;
4425 ol.
docify(
" [external]");
4428 if (addToIndex && isDir)
4440 if (addToIndex && isDir)
4459 if (mod->isPrimaryInterface())
4484 bool addToIndex = lne==
nullptr || lne->
visible();
4543 for (
const auto &cd : concepts)
4545 if (cd->isLinkableInProject())
4550 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4555 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4562 bool rootOnly,
bool addToIndex);
4565 bool rootOnly,
bool addToIndex)
4567 for (
const auto &nd : nsLinkedMap)
4575 bool rootOnly,
bool addToIndex)
4629 if ((cd->getOuterScope()==
nullptr ||
4635 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4636 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4640 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4641 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4656 bool addToIndex = lne==
nullptr || lne->
visible();
4677 if (cd->isLinkableInProject())
4689 bool hasBrief = !cd->briefDescription().isEmpty();
4695 cd->briefFile(),cd->briefLine(),
4697 cd->briefDescription(
TRUE),
4765 for (
const auto &entry: lne->
children())
4767 if (entry->visible()) count++;
4772 for (
const auto &entry: lne->
children())
4774 if (entry->visible())
4776 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4777 fixSpaces(entry->title())+
"</span></a></li>\n");
4804 projPrefix=projectName+
" ";
4851 bool quickLinksAfterSplitbar = !disableIndex && generateTreeView && fullSidebar;
4853 if (!disableIndex && !quickLinksAfterSplitbar)
4859 if (quickLinksAfterSplitbar)
4864 bool headerWritten=
FALSE;
4886 headerWritten =
TRUE;
4896 headerWritten =
TRUE;
4944 msg(
"Generating main page...\n");
4983 if (index.numDocumentedPages()>0)
4998 if (index.numDocumentedModules()>0)
5004 if (index.numDocumentedGroups()>0)
5010 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
5020 if (index.numDocumentedConcepts()>0)
5026 if (index.numHierarchyInterfaces()>0)
5032 if (index.numHierarchyClasses()>0)
5046 if (index.numHierarchyExceptions()>0)
5052 if (index.numAnnotatedInterfacesPrinted()>0)
5058 if (index.numAnnotatedClassesPrinted()>0)
5068 if (index.numAnnotatedStructsPrinted()>0)
5074 if (index.numAnnotatedExceptionsPrinted()>0)
5089 if (index.numDocumentedModules()>0)
5095 if (index.numDocumentedGroups()>0)
5101 if (index.numDocumentedNamespaces()>0)
5107 if (index.numDocumentedConcepts()>0)
5113 if (index.numAnnotatedInterfacesPrinted()>0)
5119 if (index.numAnnotatedClassesPrinted()>0)
5125 if (index.numAnnotatedStructsPrinted()>0)
5131 if (index.numAnnotatedExceptionsPrinted()>0)
5161 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5165 for (
const auto &lne : entries)
5168 size_t idx =
static_cast<size_t>(kind);
5172 size_t newSize = idx+1;
5177 bool addToIndex=lne->visible();
5178 bool needsClosing=
FALSE;
5183 case LayoutNavEntry::MainPage:
5184 msg(
"Generating index page...\n");
5187 case LayoutNavEntry::Pages:
5188 msg(
"Generating page index...\n");
5191 case LayoutNavEntry::Topics:
5192 msg(
"Generating topic index...\n");
5195 case LayoutNavEntry::Modules:
5197 if (index.numDocumentedModules()>0 && addToIndex)
5205 case LayoutNavEntry::ModuleList:
5206 msg(
"Generating module index...\n");
5209 case LayoutNavEntry::ModuleMembers:
5210 msg(
"Generating module member index...\n");
5213 case LayoutNavEntry::Namespaces:
5218 if (index.numDocumentedNamespaces()>0 && addToIndex)
5226 msg(
"Generating namespace index...\n");
5232 case LayoutNavEntry::NamespaceList:
5237 msg(
"Generating namespace index...\n");
5242 case LayoutNavEntry::NamespaceMembers:
5243 msg(
"Generating namespace member index...\n");
5246 case LayoutNavEntry::Classes:
5247 if (index.numAnnotatedClasses()>0 && addToIndex)
5255 msg(
"Generating annotated compound index...\n");
5259 case LayoutNavEntry::Concepts:
5260 msg(
"Generating concept index...\n");
5263 case LayoutNavEntry::ClassList:
5264 msg(
"Generating annotated compound index...\n");
5267 case LayoutNavEntry::ClassIndex:
5268 msg(
"Generating alphabetical compound index...\n");
5271 case LayoutNavEntry::ClassHierarchy:
5272 msg(
"Generating hierarchical class index...\n");
5276 msg(
"Generating graphical class hierarchy...\n");
5280 case LayoutNavEntry::ClassMembers:
5283 msg(
"Generating member index...\n");
5287 case LayoutNavEntry::Interfaces:
5288 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5295 case LayoutNavEntry::InterfaceList:
5298 msg(
"Generating annotated interface index...\n");
5302 case LayoutNavEntry::InterfaceIndex:
5305 msg(
"Generating alphabetical interface index...\n");
5309 case LayoutNavEntry::InterfaceHierarchy:
5312 msg(
"Generating hierarchical interface index...\n");
5316 msg(
"Generating graphical interface hierarchy...\n");
5321 case LayoutNavEntry::Structs:
5322 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5329 case LayoutNavEntry::StructList:
5332 msg(
"Generating annotated struct index...\n");
5336 case LayoutNavEntry::StructIndex:
5339 msg(
"Generating alphabetical struct index...\n");
5343 case LayoutNavEntry::Exceptions:
5344 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5351 case LayoutNavEntry::ExceptionList:
5354 msg(
"Generating annotated exception index...\n");
5358 case LayoutNavEntry::ExceptionIndex:
5361 msg(
"Generating alphabetical exception index...\n");
5365 case LayoutNavEntry::ExceptionHierarchy:
5368 msg(
"Generating hierarchical exception index...\n");
5372 msg(
"Generating graphical exception hierarchy...\n");
5377 case LayoutNavEntry::Files:
5379 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5387 msg(
"Generating file index...\n");
5392 case LayoutNavEntry::FileList:
5393 msg(
"Generating file index...\n");
5396 case LayoutNavEntry::FileGlobals:
5397 msg(
"Generating file member index...\n");
5400 case LayoutNavEntry::Examples:
5401 msg(
"Generating example index...\n");
5404 case LayoutNavEntry::User:
5409 bool isRelative=url.
at(0)==
'!';
5410 if (!url.
isEmpty() && !isRelative)
5418 case LayoutNavEntry::UserGroup:
5430 bool isRelative=url.
at(0)==
'!';
5448 case LayoutNavEntry::None:
5449 assert(kind != LayoutNavEntry::None);
5452 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5462 case LayoutNavEntry::Modules:
5463 case LayoutNavEntry::Namespaces:
5464 case LayoutNavEntry::Classes:
5465 case LayoutNavEntry::Files:
5466 case LayoutNavEntry::UserGroup:
5485 case LayoutNavEntry::MainPage:
return TRUE;
5486 case LayoutNavEntry::User:
return TRUE;
5487 case LayoutNavEntry::UserGroup:
return TRUE;
5488 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5489 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5490 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5491 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5493 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5494 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5496 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5497 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5498 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5499 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5500 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5502 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5503 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5504 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5505 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5506 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5507 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5508 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5509 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5510 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5511 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5512 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5513 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5514 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5517 case LayoutNavEntry::None:
5518 assert(kind != LayoutNavEntry::None);
5526 std::function<std::size_t(std::size_t)> numDocumented,
5528 const T *(*getInfo)(
size_t hl),
5532 bool firstMember=
TRUE;
5533 for (std::size_t i=0;i<total;i++)
5535 if (numDocumented(i)>0)
5551 bool multiPageIndex=
FALSE;
5554 multiPageIndex=
TRUE;
5556 t <<
",children:[\n";
5557 bool firstLetter=
TRUE;
5558 for (
const auto &[letter,list] : getMemberList(i))
5560 if (!firstLetter) t <<
",\n";
5565 QCString fullName = getInfo(i)->fname;
5566 if (!multiPageIndex || firstLetter)
5567 anchor=fullName+extension+
"#index_";
5569 anchor=fullName+
"_"+is+extension+
"#index_";
5588 for (
const auto &entry : root->
children())
5594 bool firstChild =
TRUE;
5595 if (!first) t <<
",";
5596 t <<
"children:[\n";
5597 for (
const auto &entry : root->
children())
5601 if (!firstChild) t <<
",\n";
5604 if (
isURL(url)) url =
"^" + url;
5607 bool hasChildren=
FALSE;
5608 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5610 auto numDoc = [](std::size_t i) {
5613 auto memList = [](std::size_t i) {
5618 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5620 auto numDoc = [](std::size_t i) {
5623 auto memList = [](std::size_t i) {
5628 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5630 auto numDoc = [](std::size_t i) {
5633 auto memList = [](std::size_t i) {
5638 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5640 auto numDoc = [](std::size_t i) {
5643 auto memList = [](std::size_t i) {
5652 if (hasChildren) t <<
"]";
5669 t <<
"var menudata={";
5671 if (hasChildren) t <<
"]";
const ClassDef * classDef() const
std::string letter() const
AlphaIndexTableCell(int row, int col, const std::string &letter, const ClassDef *cd)
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 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)
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
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 writeSplitBar(const QCString &name)
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 startFile(const QCString &name, const QCString &manName, const QCString &title, int hierarchyLevel=0)
void startHeaderSection()
void docify(const QCString &s)
void startParagraph(const QCString &classDef=QCString())
void endIndexSection(IndexSection is)
void startProjectNumber()
void startTextBlock(bool dense=FALSE)
void generateDoc(const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &docStr, bool indexWords, bool isExample, const QCString &exampleName, bool singleLine, bool linkFromIndex, bool markdownSupport)
void pushGeneratorState()
void disableAllBut(OutputType o)
void startIndexValue(bool b)
void startPageDoc(const QCString &pageTitle)
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)
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 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 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 bool mainPageHasOwnTitle()
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)
static void writeGraphicalExceptionHierarchy(OutputList &ol)
void startFile(OutputList &ol, const QCString &name, const QCString &manName, const QCString &title, HighlightedItem hli, bool additionalIndices, const QCString &altSidebarName, int hierarchyLevel)
static void writeFileLinkForMember(OutputList &ol, const MemberDef *md, const QCString &separator, QCString &prevFileName)
static const MmhlInfo * getMmhlInfo(size_t hl)
static void writePages(PageDef *pd, FTVHelp *ftv)
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 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)
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)
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)
void endFileWithNavPath(OutputList &ol, const Definition *d)
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 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)
QCString convertToJSString(const QCString &s)
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)