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);
351 ol.
writeString(
" <div id=\"navrow4\" class=\"tabs3\">\n");
355 ol.
writeString(
" <div id=\"navrow3\" class=\"tabs2\">\n");
367 bool hl,
bool ,
bool &first)
404 const QCString &altSidebarName,
int hierarchyLevel)
407 ol.
startFile(name,manName,title,hierarchyLevel);
413 if (!additionalIndices)
430 if (generateTreeView)
445 if (generateTreeView)
466 bool lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
487 for (
const auto &emd : enumList)
489 if (!hideUndocMembers || emd->hasDocumentation())
492 lAddToIndex = addToIndex && !namespaceMemberInFileDocs;
494 emd->qualifiedName() : emd->name();
495 if (emd->getOuterScope()==def ||
500 ename,emd->getReference(),emd->getOutputFileBase(),emd->anchor(),
FALSE,lAddToIndex && emd->getGroupDef()==
nullptr);
520 bool addToIndex=
TRUE,
bool preventSeparateIndex=
FALSE,
525 for (
const auto &cd : def->getClasses())
527 if (cd->isLinkable()) numClasses++;
532 for (
const auto &cd : *concepts)
534 if (cd->isLinkable()) numConcepts++;
537 bool hasMembers = !def->getMemberLists().empty() || !def->getMemberGroups().empty() || (numClasses>0) || (numConcepts>0);
539 def->getReference(),def->getOutputFileBase(),anchor,
540 hasMembers && !preventSeparateIndex,
544 if (hasMembers || numClasses>0 || numConcepts>0)
549 auto kind = lde->kind();
550 if (kind==LayoutDocEntry::MemberDef)
558 for (
const auto &md : *ml)
560 if (md->visibleInIndex())
568 else if (kind==LayoutDocEntry::NamespaceClasses ||
569 kind==LayoutDocEntry::FileClasses ||
570 kind==LayoutDocEntry::ClassNestedClasses ||
571 kind==LayoutDocEntry::ModuleClasses
574 for (
const auto &cd : def->getClasses())
576 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
580 addMembersToIndex(cd,LayoutDocManager::Class,cd->displayName(lde->kind()==LayoutDocEntry::FileClasses),cd->anchor(),
581 addToIndex && (isNestedClass || (cd->isSimple() && inlineSimpleStructs)),
582 preventSeparateIndex || cd->isEmbeddedInOuterScope());
586 else if ((kind==LayoutDocEntry::FileConcepts || kind==LayoutDocEntry::ModuleConcepts) && concepts)
588 for (
const auto &cd : *concepts)
590 if (cd->isLinkable() && (cd->partOfGroups().empty() || def->definitionType()==
Definition::TypeGroup))
593 cd->getReference(),cd->getOutputFileBase(),
QCString(),
612 if (bcl.empty())
return;
614 for (
const auto &bcd : bcl)
641 bool hasChildren = visitedClasses.find(cd)==visitedClasses.end() &&
689 visitedClasses.insert(cd);
722 for (
const auto &fd : dd->
getFiles())
724 bool genSourceFile =
false;
735 for(
const auto &subdd : dd->
subDirs())
751 "maximum nesting level exceeded for directory {}: "
752 "check for possible recursive directory relation!",dd->
name());
761 bool tocExpand =
TRUE;
762 bool isDir = !dd->
subDirs().empty() ||
794 for(
const auto &subdd : dd->
subDirs())
804 for (
const auto &fd : dd->
getFiles())
811 bool genSourceFile =
false;
816 else if (genSourceFile)
824 for (
const auto &fd : dd->
getFiles())
832 reference = fd->getReference();
833 outputBase = fd->getOutputFileBase();
842 if (ftv && (src || doc))
846 reference,outputBase,
855 if (tocExpand && addToIndex)
860 for (
const auto &fd : dd->
getFiles())
867 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
909 for (
const auto &fd : *fn)
911 if (fd->getDirDef()==
nullptr)
918 reference = fd->getReference();
919 outputBase = fd->getOutputFileBase();
958 for (
const auto &cd : cl)
974 else if (sliceOpt && cd->compoundType() != ct)
985 if (cd->isVisibleInHierarchy())
997 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1000 if (cd->isLinkable())
1006 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1007 if (cd->isReference())
1010 ol.
docify(
" [external]");
1016 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1020 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1040 visitedClasses.insert(cd.get());
1042 else if (hasChildren)
1045 visitedClasses.insert(cd.get());
1084 for (
const auto &cd : cl)
1086 if (sliceOpt && cd->compoundType() != ct)
1092 if (cd->isVisibleInHierarchy())
1094 if (!cd->subClasses().empty())
1124 bool addToIndex = lne==
nullptr || lne->
visible();
1230 bool addToIndex = lne==
nullptr || lne->
visible();
1335 bool addToIndex = lne==
nullptr || lne->
visible();
1437 for (
const auto &fd: *fn)
1544 bool addToIndex = lne==
nullptr || lne->
visible();
1577 std::unordered_map<std::string,size_t> pathMap;
1578 std::vector<FilesInDir> outputFiles;
1583 for (
const auto &fd : *fn)
1586 if (path.
isEmpty()) path=
"[external]";
1587 auto it = pathMap.
find(path.
str());
1588 if (it!=pathMap.end())
1590 outputFiles.at(it->second).files.push_back(fd.get());
1594 pathMap.emplace(path.
str(),outputFiles.size());
1595 outputFiles.emplace_back(path);
1596 outputFiles.back().files.push_back(fd.get());
1602 std::stable_sort(outputFiles.begin(),
1604 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1606 for (
auto &fp : outputFiles)
1611 for (
const auto &fp : outputFiles)
1613 for (
const auto &fd : fp.files)
1623 for (
const auto &fd : *fn)
1666 if (nd->isLinkableInProject()) count++;
1677 if (cd->isLinkableInProject()) count++;
1688template<
class ListType>
1692 for (
const auto &cdi : cl)
1718 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1756 if (lde->kind()==LayoutDocEntry::MemberDef)
1764 for (
const auto &md : *ml)
1767 if (md->visibleInIndex())
1782 if (lde->kind()==LayoutDocEntry::MemberDecl)
1790 for (
const auto &md : *ml)
1793 if (md->visibleInIndex())
1807 bool rootOnly,
bool addToIndex);
1810 bool rootOnly,
bool addToIndex)
1817 bool hasChildren = hasNestedNamespace ||
1837 bool isDir = hasChildren || visibleMembers>0;
1838 if (isLinkable || isDir)
1847 if (addToIndex && isDir)
1861 if (addToIndex && isDir)
1870 bool rootOnly,
bool addToIndex)
1872 for (
const auto &nd : nsLinkedMap)
1874 if (nd->isVisibleInHierarchy())
1882 bool rootOnly,
bool addToIndex)
1884 for (
const auto &nd : nsLinkedMap)
1886 if (nd->isVisibleInHierarchy())
1971 for (
const auto &nd : nsLinkedMap)
1980 for (
const auto &nd : nsLinkedMap)
1995 bool addToIndex = lne==
nullptr || lne->
visible();
2015 if (nd->isLinkableInProject())
2034 bool hasBrief = !nd->briefDescription().isEmpty();
2040 nd->briefFile(),nd->briefLine(),
2042 nd->briefDescription(
TRUE),
2099 if (sliceOpt && cd->compoundType() != ct)
2103 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2105 if (!cd->isEmbeddedInOuterScope())
2140 if (sliceOpt && cd->compoundType() != ct)
2146 if (cd->isEmbeddedInOuterScope())
2152 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2163 bool hasBrief = !cd->briefDescription().isEmpty();
2168 cd->briefFile(),cd->briefLine(),
2170 cd->briefDescription(
TRUE),
2193 return (c<127 && c>31);
2198 if (startLetter.
isEmpty())
return startLetter;
2199 const char *p = startLetter.
data();
2209 const char hex[]=
"0123456789abcdef";
2212 result+=
hex[
static_cast<unsigned char>(c)>>4];
2213 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2255 if (sliceOpt && cd->compoundType() != ct)
2257 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2264 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2265 if (!letter.empty())
2273 QCString alphaLinks =
"<div class=\"qindex\">";
2275 for (
const auto &letter : indexLettersUsed)
2277 if (!first) alphaLinks +=
" | ";
2280 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2284 alphaLinks +=
"</div>\n";
2287 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2294 if (sliceOpt && cd->compoundType() != ct)
2299 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2301 QCString className = cd->className();
2304 if (!letter.empty())
2307 auto it = classesByLetter.find(letter);
2308 if (it!=classesByLetter.end())
2310 it->second.push_back(cd.get());
2314 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2321 for (
auto &[letter,list] : classesByLetter)
2323 std::stable_sort(list.begin(), list.end(),
2324 [](
const auto &c1,
const auto &c2)
2326 QCString n1 = c1->className();
2327 QCString n2 = c2->className();
2328 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2333 if (!classesByLetter.empty())
2337 for (
const auto &cl : classesByLetter)
2339 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2340 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2355 for (
const auto &cd : cl.second)
2374 cd->getOutputFileBase(),cd->anchor(),cname);
2408 bool addToIndex = lne==
nullptr || lne->
visible();
2437 bool addToIndex = lne==
nullptr || lne->
visible();
2466 bool addToIndex = lne==
nullptr || lne->
visible();
2495 bool addToIndex = lne==
nullptr || lne->
visible();
2558 bool addToIndex = lne==
nullptr || lne->
visible();
2622 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2636 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2639 "annotatedinterfaces",
2650 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2664 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2667 "annotatedexceptions",
2689 if (fd && prevFileName!=fd->
name())
2694 prevFileName = fd->
name();
2730 int index =
static_cast<int>(type);
2731 const int numIndices = 4;
2732 ASSERT(index<numIndices);
2738 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2748 bool firstSection=
TRUE;
2749 bool firstItem=
TRUE;
2752 for (
const auto &kv : memberIndexMap)
2756 auto it = memberIndexMap.find(page);
2757 if (it != memberIndexMap.end())
2768 if (mil==
nullptr || mil->empty())
continue;
2769 for (
const auto &md : *mil)
2771 const char *sep =
nullptr;
2772 bool isFunc=!md->isObjCMethod() &&
2773 (md->isFunction() || md->isSlot() || md->isSignal());
2776 if (name.
data()+startIndex!=prevName)
2779 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2794 else if (!useSections && first)
2805 if (isFunc) ol.
docify(
"()");
2810 sep =
" : ";
2811 prevName = name.
data()+startIndex;
2818 if (index<numIndices)
2821 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2837 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2847 if (!letter.empty())
2850 bool isFriendToHide = hideFriendCompounds &&
2854 if (!(md->
isFriend() && isFriendToHide) &&
2889 (md->
isFriend() && !isFriendToHide))
2906 if (!letter.empty())
2954 if (!letter.empty())
3006 if (!letter.empty())
3045 for (
const auto &[letter,list] : map)
3054 anchor=fullName+extension+
"#index_";
3056 anchor=fullName+
"_"+is+extension+
"#index_";
3094 return &cmhlInfo[hl];
3100 if (index.numDocumentedClassMembers(hl)==0)
return;
3104 bool multiPageIndex=
FALSE;
3107 multiPageIndex=
TRUE;
3117 bool addToIndex = lne==
nullptr || lne->
visible();
3127 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3193 multiPageIndex ? letter : std::string(),
3194 index.isClassIndexLetterUsed(hl),
3209 bool addToIndex = lne==
nullptr || lne->
visible();
3262 return &fmhlInfo[hl];
3268 if (index.numDocumentedFileMembers(hl)==0)
return;
3272 bool multiPageIndex=
FALSE;
3275 multiPageIndex=
TRUE;
3284 bool addToIndex = lne==
nullptr || lne->
visible();
3294 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3358 multiPageIndex ? letter : std::string(),
3359 index.isFileIndexLetterUsed(hl),
3371 bool addToIndex = lne==
nullptr || lne->
visible();
3422 return &nmhlInfo[hl];
3431 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3436 bool multiPageIndex=
FALSE;
3439 multiPageIndex=
TRUE;
3448 bool addToIndex = lne==
nullptr || lne->
visible();
3458 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3522 multiPageIndex ? letter : std::string(),
3523 index.isNamespaceIndexLetterUsed(hl),
3536 bool addToIndex = lne==
nullptr || lne->
visible();
3579 return &nmhlInfo[hl];
3588 if (index.numDocumentedModuleMembers(hl)==0)
return;
3593 bool multiPageIndex=
FALSE;
3596 multiPageIndex=
TRUE;
3605 bool addToIndex = lne==
nullptr || lne->
visible();
3615 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3679 multiPageIndex ? letter : std::string(),
3680 index.isModuleIndexLetterUsed(hl),
3696 bool addToIndex = lne==
nullptr || lne->
visible();
3725 bool addToIndex = lne==
nullptr || lne->
visible();
3749 QCString n=pd->getOutputFileBase();
3750 if (!pd->title().isEmpty())
3784 docPages=indexPages=0;
3787 if (pd->visibleInIndex() && !pd->hasParentPage())
3791 if (pd->documentedPage())
3815 bool addToIndex = lne==
nullptr || lne->
visible();
3816 if (!addToIndex)
return;
3826 pageTitle=pd->
name();
3834 hasSubPages,pageTitle,
3841 hasSubPages || hasSections,pageTitle,
3847 bool doIndent = (hasSections || hasSubPages) &&
3891 if ((pd->getOuterScope()==
nullptr ||
3893 pd->visibleInIndex()
3918 if (!gd->isReference())
3934 if (dd->isLinkableInProject())
3954 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
3967 int s = legendDocs.
find(
"<center>");
3968 int e = legendDocs.
find(
"</center>");
3970 if (imgExt==
"svg" && s!=-1 && e!=-1)
3972 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4003 "maximum nesting level exceeded for group {}: check for possible recursive group relation!",gd->
name());
4016 size_t numSubItems = 0;
4019 if (ml->listType().isDocumentation())
4021 numSubItems += ml->size();
4026 numSubItems += gd->
getFiles().size();
4028 numSubItems += gd->
getDirs().size();
4031 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4058 ol.
docify(
" [external]");
4064 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4072 for (
const auto &md : *ml)
4075 isDir = !enumList.
empty() && md->isEnumerate();
4076 if (md->isVisible() && !md->isAnonymous())
4079 md->qualifiedName(),md->getReference(),
4080 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4085 for (
const auto &emd : enumList)
4087 if (emd->isVisible())
4090 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4091 emd->anchor(),
FALSE,addToIndex);
4100 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4108 if (cd->isVisible() )
4111 LayoutDocManager::Class,
4119 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4123 if (nd->isVisible())
4126 nd->displayName(),nd->getReference(),
4131 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4135 if (cd->isVisible())
4138 cd->displayName(),cd->getReference(),
4143 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4145 for (
const auto &fd : gd->
getFiles())
4147 if (fd->isVisible())
4150 fd->displayName(),fd->getReference(),
4151 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4155 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4157 for (
const auto &dd : gd->
getDirs())
4159 if (dd->isVisible())
4162 dd->shortName(),dd->getReference(),
4167 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4169 for (
const auto &pd : gd->
getPages())
4173 hasSubPages = pd->hasSubPages();
4174 bool hasSections = pd->hasSections();
4176 hasSubPages || hasSections,
4181 hasSubPages || hasSections,
4183 if (hasSections || hasSubPages)
4189 pd->addSectionsToIndex();
4192 if (hasSections || hasSubPages)
4198 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4236 if (gd->isVisibleInHierarchy())
4259 bool addToIndex = lne==
nullptr || lne->
visible();
4320 FTVHelp* ftv,
bool addToIndex)
4323 bool isDir=visibleMembers>0;
4342 ol.
docify(
" [external]");
4345 if (addToIndex && isDir)
4357 if (addToIndex && isDir)
4376 if (mod->isPrimaryInterface())
4401 bool addToIndex = lne==
nullptr || lne->
visible();
4460 for (
const auto &cd : concepts)
4462 if (cd->isLinkableInProject())
4467 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4472 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4479 bool rootOnly,
bool addToIndex);
4482 bool rootOnly,
bool addToIndex)
4484 for (
const auto &nd : nsLinkedMap)
4492 bool rootOnly,
bool addToIndex)
4546 if ((cd->getOuterScope()==
nullptr ||
4552 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4553 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4557 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4558 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4573 bool addToIndex = lne==
nullptr || lne->
visible();
4594 if (cd->isLinkableInProject())
4606 bool hasBrief = !cd->briefDescription().isEmpty();
4612 cd->briefFile(),cd->briefLine(),
4614 cd->briefDescription(
TRUE),
4682 for (
const auto &entry: lne->
children())
4684 if (entry->visible()) count++;
4689 for (
const auto &entry: lne->
children())
4691 if (entry->visible())
4693 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4694 fixSpaces(entry->title())+
"</span></a></li>\n");
4718 projPrefix=projectName+
" ";
4773 bool headerWritten=
FALSE;
4795 headerWritten =
TRUE;
4805 headerWritten =
TRUE;
4853 msg(
"Generating main page...\n");
4892 if (index.numDocumentedPages()>0)
4907 if (index.numDocumentedModules()>0)
4913 if (index.numDocumentedGroups()>0)
4919 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
4929 if (index.numDocumentedConcepts()>0)
4935 if (index.numHierarchyInterfaces()>0)
4941 if (index.numHierarchyClasses()>0)
4955 if (index.numHierarchyExceptions()>0)
4961 if (index.numAnnotatedInterfacesPrinted()>0)
4967 if (index.numAnnotatedClassesPrinted()>0)
4977 if (index.numAnnotatedStructsPrinted()>0)
4983 if (index.numAnnotatedExceptionsPrinted()>0)
4998 if (index.numDocumentedModules()>0)
5004 if (index.numDocumentedGroups()>0)
5010 if (index.numDocumentedNamespaces()>0)
5016 if (index.numDocumentedConcepts()>0)
5022 if (index.numAnnotatedInterfacesPrinted()>0)
5028 if (index.numAnnotatedClassesPrinted()>0)
5034 if (index.numAnnotatedStructsPrinted()>0)
5040 if (index.numAnnotatedExceptionsPrinted()>0)
5070 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5074 for (
const auto &lne : entries)
5077 size_t idx =
static_cast<size_t>(kind);
5081 size_t newSize = idx+1;
5086 bool addToIndex=lne->visible();
5087 bool needsClosing=
FALSE;
5092 case LayoutNavEntry::MainPage:
5093 msg(
"Generating index page...\n");
5096 case LayoutNavEntry::Pages:
5097 msg(
"Generating page index...\n");
5100 case LayoutNavEntry::Topics:
5101 msg(
"Generating topic index...\n");
5104 case LayoutNavEntry::Modules:
5106 if (index.numDocumentedModules()>0 && addToIndex)
5114 case LayoutNavEntry::ModuleList:
5115 msg(
"Generating module index...\n");
5118 case LayoutNavEntry::ModuleMembers:
5119 msg(
"Generating module member index...\n");
5122 case LayoutNavEntry::Namespaces:
5127 if (index.numDocumentedNamespaces()>0 && addToIndex)
5135 msg(
"Generating namespace index...\n");
5141 case LayoutNavEntry::NamespaceList:
5146 msg(
"Generating namespace index...\n");
5151 case LayoutNavEntry::NamespaceMembers:
5152 msg(
"Generating namespace member index...\n");
5155 case LayoutNavEntry::Classes:
5156 if (index.numAnnotatedClasses()>0 && addToIndex)
5164 msg(
"Generating annotated compound index...\n");
5168 case LayoutNavEntry::Concepts:
5169 msg(
"Generating concept index...\n");
5172 case LayoutNavEntry::ClassList:
5173 msg(
"Generating annotated compound index...\n");
5176 case LayoutNavEntry::ClassIndex:
5177 msg(
"Generating alphabetical compound index...\n");
5180 case LayoutNavEntry::ClassHierarchy:
5181 msg(
"Generating hierarchical class index...\n");
5185 msg(
"Generating graphical class hierarchy...\n");
5189 case LayoutNavEntry::ClassMembers:
5192 msg(
"Generating member index...\n");
5196 case LayoutNavEntry::Interfaces:
5197 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5204 case LayoutNavEntry::InterfaceList:
5207 msg(
"Generating annotated interface index...\n");
5211 case LayoutNavEntry::InterfaceIndex:
5214 msg(
"Generating alphabetical interface index...\n");
5218 case LayoutNavEntry::InterfaceHierarchy:
5221 msg(
"Generating hierarchical interface index...\n");
5225 msg(
"Generating graphical interface hierarchy...\n");
5230 case LayoutNavEntry::Structs:
5231 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5238 case LayoutNavEntry::StructList:
5241 msg(
"Generating annotated struct index...\n");
5245 case LayoutNavEntry::StructIndex:
5248 msg(
"Generating alphabetical struct index...\n");
5252 case LayoutNavEntry::Exceptions:
5253 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5260 case LayoutNavEntry::ExceptionList:
5263 msg(
"Generating annotated exception index...\n");
5267 case LayoutNavEntry::ExceptionIndex:
5270 msg(
"Generating alphabetical exception index...\n");
5274 case LayoutNavEntry::ExceptionHierarchy:
5277 msg(
"Generating hierarchical exception index...\n");
5281 msg(
"Generating graphical exception hierarchy...\n");
5286 case LayoutNavEntry::Files:
5288 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5296 msg(
"Generating file index...\n");
5301 case LayoutNavEntry::FileList:
5302 msg(
"Generating file index...\n");
5305 case LayoutNavEntry::FileGlobals:
5306 msg(
"Generating file member index...\n");
5309 case LayoutNavEntry::Examples:
5310 msg(
"Generating example index...\n");
5313 case LayoutNavEntry::User:
5318 bool isRelative=url.
at(0)==
'!';
5319 if (!url.
isEmpty() && !isRelative)
5327 case LayoutNavEntry::UserGroup:
5339 bool isRelative=url.
at(0)==
'!';
5357 case LayoutNavEntry::None:
5358 assert(kind != LayoutNavEntry::None);
5361 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5371 case LayoutNavEntry::Modules:
5372 case LayoutNavEntry::Namespaces:
5373 case LayoutNavEntry::Classes:
5374 case LayoutNavEntry::Files:
5375 case LayoutNavEntry::UserGroup:
5394 case LayoutNavEntry::MainPage:
return TRUE;
5395 case LayoutNavEntry::User:
return TRUE;
5396 case LayoutNavEntry::UserGroup:
return TRUE;
5397 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5398 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5399 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5400 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5402 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5403 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5405 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5406 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5407 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5408 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5409 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5411 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5412 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5413 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5414 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5415 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5416 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5417 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5418 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5419 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5420 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5421 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5422 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5423 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5426 case LayoutNavEntry::None:
5427 assert(kind != LayoutNavEntry::None);
5435 std::function<std::size_t(std::size_t)> numDocumented,
5437 const T *(*getInfo)(
size_t hl),
5441 bool firstMember=
TRUE;
5442 for (std::size_t i=0;i<total;i++)
5444 if (numDocumented(i)>0)
5460 bool multiPageIndex=
FALSE;
5463 multiPageIndex=
TRUE;
5465 t <<
",children:[\n";
5466 bool firstLetter=
TRUE;
5467 for (
const auto &[letter,list] : getMemberList(i))
5469 if (!firstLetter) t <<
",\n";
5474 QCString fullName = getInfo(i)->fname;
5475 if (!multiPageIndex || firstLetter)
5476 anchor=fullName+extension+
"#index_";
5478 anchor=fullName+
"_"+is+extension+
"#index_";
5497 for (
const auto &entry : root->
children())
5503 bool firstChild =
TRUE;
5504 if (!first) t <<
",";
5505 t <<
"children:[\n";
5506 for (
const auto &entry : root->
children())
5510 if (!firstChild) t <<
",\n";
5513 if (
isURL(url)) url =
"^" + url;
5516 bool hasChildren=
FALSE;
5517 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5519 auto numDoc = [](std::size_t i) {
5522 auto memList = [](std::size_t i) {
5527 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5529 auto numDoc = [](std::size_t i) {
5532 auto memList = [](std::size_t i) {
5537 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5539 auto numDoc = [](std::size_t i) {
5542 auto memList = [](std::size_t i) {
5547 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5549 auto numDoc = [](std::size_t i) {
5552 auto memList = [](std::size_t i) {
5561 if (hasChildren) t <<
"]";
5578 t <<
"var menudata={";
5580 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 writeQuickLinks(HighlightedItem hli, const QCString &file)
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)
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)
SrcLangExt
Language as given by extension.
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)