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(),
225 [](
const MemberDef *md1,
const MemberDef *md2)
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 %s: "
752 "check for possible recursive directory relation!",
qPrint(dd->
name())
762 bool tocExpand =
TRUE;
763 bool isDir = !dd->
subDirs().empty() ||
795 for(
const auto &subdd : dd->
subDirs())
805 for (
const auto &fd : dd->
getFiles())
812 bool genSourceFile =
false;
817 else if (genSourceFile)
825 for (
const auto &fd : dd->
getFiles())
833 reference = fd->getReference();
834 outputBase = fd->getOutputFileBase();
843 if (ftv && (src || doc))
847 reference,outputBase,
856 if (tocExpand && addToIndex)
861 for (
const auto &fd : dd->
getFiles())
868 !fd->isLinkableViaGroup(),
FALSE,&fd->getConcepts());
910 for (
const auto &fd : *fn)
912 if (fd->getDirDef()==
nullptr)
919 reference = fd->getReference();
920 outputBase = fd->getOutputFileBase();
959 for (
const auto &cd : cl)
975 else if (sliceOpt && cd->compoundType() != ct)
986 if (cd->isVisibleInHierarchy())
998 bool hasChildren = visitedClasses.find(cd.get())==visitedClasses.end() &&
1001 if (cd->isLinkable())
1007 ol.
endIndexItem(cd->getReference(),cd->getOutputFileBase());
1008 if (cd->isReference())
1011 ol.
docify(
" [external]");
1017 Doxygen::indexList->addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE);
1021 ftv->
addContentsItem(hasChildren,cd->displayName(),cd->getReference(),cd->getOutputFileBase(),cd->anchor(),
FALSE,
FALSE,cd.get());
1041 visitedClasses.insert(cd.get());
1043 else if (hasChildren)
1046 visitedClasses.insert(cd.get());
1085 for (
const auto &cd : cl)
1087 if (sliceOpt && cd->compoundType() != ct)
1093 if (cd->isVisibleInHierarchy())
1095 if (!cd->subClasses().empty())
1125 bool addToIndex = lne==
nullptr || lne->
visible();
1231 bool addToIndex = lne==
nullptr || lne->
visible();
1336 bool addToIndex = lne==
nullptr || lne->
visible();
1438 for (
const auto &fd: *fn)
1545 bool addToIndex = lne==
nullptr || lne->
visible();
1578 std::unordered_map<std::string,size_t> pathMap;
1579 std::vector<FilesInDir> outputFiles;
1584 for (
const auto &fd : *fn)
1587 if (path.
isEmpty()) path=
"[external]";
1588 auto it = pathMap.
find(path.
str());
1589 if (it!=pathMap.end())
1591 outputFiles.at(it->second).files.push_back(fd.get());
1595 pathMap.emplace(path.
str(),outputFiles.size());
1596 outputFiles.emplace_back(path);
1597 outputFiles.back().files.push_back(fd.get());
1603 std::stable_sort(outputFiles.begin(),
1605 [](
const auto &fp1,
const auto &fp2) { return qstricmp_sort(fp1.path,fp2.path)<0; });
1607 for (
auto &fp : outputFiles)
1612 for (
const auto &fp : outputFiles)
1614 for (
const auto &fd : fp.files)
1624 for (
const auto &fd : *fn)
1667 if (nd->isLinkableInProject()) count++;
1678 if (cd->isLinkableInProject()) count++;
1689template<
class ListType>
1693 for (
const auto &cdi : cl)
1719 if (ccd->isLinkableInProject() && !ccd->isImplicitTemplateInstance())
1757 if (lde->kind()==LayoutDocEntry::MemberDef)
1765 for (
const auto &md : *ml)
1768 if (md->visibleInIndex())
1783 if (lde->kind()==LayoutDocEntry::MemberDecl)
1791 for (
const auto &md : *ml)
1794 if (md->visibleInIndex())
1808 bool rootOnly,
bool addToIndex);
1811 bool rootOnly,
bool addToIndex)
1818 bool hasChildren = hasNestedNamespace ||
1838 bool isDir = hasChildren || visibleMembers>0;
1839 if (isLinkable || isDir)
1848 if (addToIndex && isDir)
1862 if (addToIndex && isDir)
1871 bool rootOnly,
bool addToIndex)
1873 for (
const auto &nd : nsLinkedMap)
1875 if (nd->isVisibleInHierarchy())
1883 bool rootOnly,
bool addToIndex)
1885 for (
const auto &nd : nsLinkedMap)
1887 if (nd->isVisibleInHierarchy())
1972 for (
const auto &nd : nsLinkedMap)
1981 for (
const auto &nd : nsLinkedMap)
1996 bool addToIndex = lne==
nullptr || lne->
visible();
2016 if (nd->isLinkableInProject())
2035 bool hasBrief = !nd->briefDescription().isEmpty();
2041 nd->briefFile(),nd->briefLine(),
2043 nd->briefDescription(
TRUE),
2100 if (sliceOpt && cd->compoundType() != ct)
2104 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2106 if (!cd->isEmbeddedInOuterScope())
2141 if (sliceOpt && cd->compoundType() != ct)
2147 if (cd->isEmbeddedInOuterScope())
2153 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2164 bool hasBrief = !cd->briefDescription().isEmpty();
2169 cd->briefFile(),cd->briefLine(),
2171 cd->briefDescription(
TRUE),
2194 return (c<127 && c>31);
2199 if (startLetter.
isEmpty())
return startLetter;
2200 const char *p = startLetter.
data();
2210 const char hex[]=
"0123456789abcdef";
2213 result+=
hex[
static_cast<unsigned char>(c)>>4];
2214 result+=
hex[
static_cast<unsigned char>(c)&0xf];
2256 if (sliceOpt && cd->compoundType() != ct)
2258 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2265 std::string letter =
getUTF8CharAt(cd->className().str(),index);
2266 if (!letter.empty())
2274 QCString alphaLinks =
"<div class=\"qindex\">";
2276 for (
const auto &letter : indexLettersUsed)
2278 if (!first) alphaLinks +=
" | ";
2281 alphaLinks +=
"<a class=\"qindex\" href=\"#letter_" +
2285 alphaLinks +=
"</div>\n";
2288 std::map<std::string, std::vector<const ClassDef*> > classesByLetter;
2295 if (sliceOpt && cd->compoundType() != ct)
2300 if (cd->isLinkableInProject() && !cd->isImplicitTemplateInstance())
2302 QCString className = cd->className();
2305 if (!letter.empty())
2308 auto it = classesByLetter.find(letter);
2309 if (it!=classesByLetter.end())
2311 it->second.push_back(cd.get());
2315 classesByLetter.emplace(letter, std::vector<const ClassDef*>({ cd.get() }));
2322 for (
auto &[letter,list] : classesByLetter)
2324 std::stable_sort(list.begin(), list.end(),
2325 [](
const auto &c1,
const auto &c2)
2327 QCString n1 = c1->className();
2328 QCString n2 = c2->className();
2329 return qstricmp_sort(n1.data()+getPrefixIndex(n1), n2.data()+getPrefixIndex(n2))<0;
2334 if (!classesByLetter.empty())
2338 for (
const auto &cl : classesByLetter)
2340 QCString parity = (counter++%2)==0 ?
"even" :
"odd";
2341 ol.
writeString(
"<dl class=\"classindex " + parity +
"\">\n");
2356 for (
const auto &cd : cl.second)
2375 cd->getOutputFileBase(),cd->anchor(),cname);
2409 bool addToIndex = lne==
nullptr || lne->
visible();
2438 bool addToIndex = lne==
nullptr || lne->
visible();
2467 bool addToIndex = lne==
nullptr || lne->
visible();
2496 bool addToIndex = lne==
nullptr || lne->
visible();
2522 const QCString &title,
const QCString &intro,
2559 bool addToIndex = lne==
nullptr || lne->
visible();
2623 LayoutNavEntry::ClassList,LayoutNavEntry::Classes,
2637 LayoutNavEntry::InterfaceList,LayoutNavEntry::Interfaces,
2640 "annotatedinterfaces",
2651 LayoutNavEntry::StructList,LayoutNavEntry::Structs,
2665 LayoutNavEntry::ExceptionList,LayoutNavEntry::Exceptions,
2668 "annotatedexceptions",
2690 if (fd && prevFileName!=fd->
name())
2695 prevFileName = fd->
name();
2731 int index =
static_cast<int>(type);
2732 const int numIndices = 4;
2733 ASSERT(index<numIndices);
2739 static writeLinkForMember_t writeLinkForMemberMap[numIndices] =
2749 bool firstSection=
TRUE;
2750 bool firstItem=
TRUE;
2753 for (
const auto &kv : memberIndexMap)
2757 auto it = memberIndexMap.find(page);
2758 if (it != memberIndexMap.end())
2769 if (mil==
nullptr || mil->empty())
continue;
2770 for (
const auto &md : *mil)
2772 const char *sep =
nullptr;
2773 bool isFunc=!md->isObjCMethod() &&
2774 (md->isFunction() || md->isSlot() || md->isSignal());
2777 if (name.
data()+startIndex!=prevName)
2780 tolower(name.
at(startIndex))!=tolower(prevName.
at(0))) &&
2795 else if (!useSections && first)
2806 if (isFunc) ol.
docify(
"()");
2811 sep =
" : ";
2812 prevName = name.
data()+startIndex;
2819 if (index<numIndices)
2822 writeLinkForMemberMap[index](ol,md,sep,prevDefName);
2838 bool hideFriendCompounds =
Config_getBool(HIDE_FRIEND_COMPOUNDS);
2839 const ClassDef *cd=
nullptr;
2846 QCString n = md->
name();
2848 if (!letter.empty())
2851 bool isFriendToHide = hideFriendCompounds &&
2852 (QCString(md->
typeString())==
"friend class" ||
2853 QCString(md->
typeString())==
"friend struct" ||
2855 if (!(md->
isFriend() && isFriendToHide) &&
2890 (md->
isFriend() && !isFriendToHide))
2905 QCString n = md->
name();
2907 if (!letter.empty())
2953 QCString n = md->
name();
2955 if (!letter.empty())
3005 QCString n = md->
name();
3007 if (!letter.empty())
3046 for (
const auto &[letter,list] : map)
3055 anchor=fullName+extension+
"#index_";
3057 anchor=fullName+
"_"+is+extension+
"#index_";
3095 return &cmhlInfo[hl];
3101 if (index.numDocumentedClassMembers(hl)==0)
return;
3105 bool multiPageIndex=
FALSE;
3108 multiPageIndex=
TRUE;
3118 bool addToIndex = lne==
nullptr || lne->
visible();
3128 for (
const auto &[letter,list] : index.isClassIndexLetterUsed(hl))
3194 multiPageIndex ? letter : std::string(),
3195 index.isClassIndexLetterUsed(hl),
3210 bool addToIndex = lne==
nullptr || lne->
visible();
3263 return &fmhlInfo[hl];
3269 if (index.numDocumentedFileMembers(hl)==0)
return;
3273 bool multiPageIndex=
FALSE;
3276 multiPageIndex=
TRUE;
3285 bool addToIndex = lne==
nullptr || lne->
visible();
3295 for (
const auto &[letter,list] : index.isFileIndexLetterUsed(hl))
3359 multiPageIndex ? letter : std::string(),
3360 index.isFileIndexLetterUsed(hl),
3372 bool addToIndex = lne==
nullptr || lne->
visible();
3423 return &nmhlInfo[hl];
3432 if (index.numDocumentedNamespaceMembers(hl)==0)
return;
3437 bool multiPageIndex=
FALSE;
3440 multiPageIndex=
TRUE;
3449 bool addToIndex = lne==
nullptr || lne->
visible();
3459 for (
const auto &[letter,list] : index.isNamespaceIndexLetterUsed(hl))
3523 multiPageIndex ? letter : std::string(),
3524 index.isNamespaceIndexLetterUsed(hl),
3537 bool addToIndex = lne==
nullptr || lne->
visible();
3580 return &nmhlInfo[hl];
3589 if (index.numDocumentedModuleMembers(hl)==0)
return;
3594 bool multiPageIndex=
FALSE;
3597 multiPageIndex=
TRUE;
3606 bool addToIndex = lne==
nullptr || lne->
visible();
3616 for (
const auto &[letter,list] : index.isModuleIndexLetterUsed(hl))
3680 multiPageIndex ? letter : std::string(),
3681 index.isModuleIndexLetterUsed(hl),
3697 bool addToIndex = lne==
nullptr || lne->
visible();
3726 bool addToIndex = lne==
nullptr || lne->
visible();
3750 QCString n=pd->getOutputFileBase();
3751 if (!pd->title().isEmpty())
3785 docPages=indexPages=0;
3788 if (pd->visibleInIndex() && !pd->hasParentPage())
3792 if (pd->documentedPage())
3816 bool addToIndex = lne==
nullptr || lne->
visible();
3817 if (!addToIndex)
return;
3827 pageTitle=pd->
name();
3835 hasSubPages,pageTitle,
3842 hasSubPages || hasSections,pageTitle,
3848 bool doIndent = (hasSections || hasSubPages) &&
3892 if ((pd->getOuterScope()==
nullptr ||
3894 pd->visibleInIndex()
3919 if (!gd->isReference())
3935 if (dd->isLinkableInProject())
3955 bool oldStripCommentsState =
Config_getBool(STRIP_CODE_COMMENTS);
3968 int s = legendDocs.
find(
"<center>");
3969 int e = legendDocs.
find(
"</center>");
3971 if (imgExt==
"svg" && s!=-1 && e!=-1)
3973 legendDocs = legendDocs.
left(s+8) +
"[!-- " +
"SVG 0 --]" + legendDocs.
mid(e);
4004 "maximum nesting level exceeded for group %s: check for possible recursive group relation!",
qPrint(gd->
name())
4018 size_t numSubItems = 0;
4021 if (ml->listType().isDocumentation())
4023 numSubItems += ml->size();
4028 numSubItems += gd->
getFiles().size();
4030 numSubItems += gd->
getDirs().size();
4033 bool isDir = hasSubGroups || hasSubPages || numSubItems>0;
4060 ol.
docify(
" [external]");
4066 if (lde->kind()==LayoutDocEntry::MemberDef && addToIndex)
4074 for (
const auto &md : *ml)
4077 isDir = !enumList.
empty() && md->isEnumerate();
4078 if (md->isVisible() && !md->isAnonymous())
4081 md->qualifiedName(),md->getReference(),
4082 md->getOutputFileBase(),md->anchor(),
FALSE,addToIndex);
4087 for (
const auto &emd : enumList)
4089 if (emd->isVisible())
4092 emd->qualifiedName(),emd->getReference(),emd->getOutputFileBase(),
4093 emd->anchor(),
FALSE,addToIndex);
4102 else if (lde->kind()==LayoutDocEntry::GroupClasses && addToIndex)
4110 if (cd->isVisible() )
4113 LayoutDocManager::Class,
4121 else if (lde->kind()==LayoutDocEntry::GroupNamespaces && addToIndex &&
Config_getBool(SHOW_NAMESPACES))
4125 if (nd->isVisible())
4128 nd->displayName(),nd->getReference(),
4133 else if (lde->kind()==LayoutDocEntry::GroupConcepts && addToIndex)
4137 if (cd->isVisible())
4140 cd->displayName(),cd->getReference(),
4145 else if (lde->kind()==LayoutDocEntry::GroupFiles && addToIndex)
4147 for (
const auto &fd : gd->
getFiles())
4149 if (fd->isVisible())
4152 fd->displayName(),fd->getReference(),
4153 fd->getOutputFileBase(),
QCString(),
FALSE,fd->isLinkableViaGroup());
4157 else if (lde->kind()==LayoutDocEntry::GroupDirs && addToIndex)
4159 for (
const auto &dd : gd->
getDirs())
4161 if (dd->isVisible())
4164 dd->shortName(),dd->getReference(),
4169 else if (lde->kind()==LayoutDocEntry::GroupPageDocs && addToIndex)
4171 for (
const auto &pd : gd->
getPages())
4175 hasSubPages = pd->hasSubPages();
4176 bool hasSections = pd->hasSections();
4178 hasSubPages || hasSections,
4183 hasSubPages || hasSections,
4185 if (hasSections || hasSubPages)
4191 pd->addSectionsToIndex();
4194 if (hasSections || hasSubPages)
4200 else if (lde->kind()==LayoutDocEntry::GroupNestedGroups)
4238 if (gd->isVisibleInHierarchy())
4261 bool addToIndex = lne==
nullptr || lne->
visible();
4322 FTVHelp* ftv,
bool addToIndex)
4325 bool isDir=visibleMembers>0;
4344 ol.
docify(
" [external]");
4347 if (addToIndex && isDir)
4359 if (addToIndex && isDir)
4378 if (mod->isPrimaryInterface())
4403 bool addToIndex = lne==
nullptr || lne->
visible();
4462 for (
const auto &cd : concepts)
4464 if (cd->isLinkableInProject())
4469 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty(),cd);
4474 cd->getOutputFileBase(),
QCString(),
false,cd->partOfGroups().empty());
4481 bool rootOnly,
bool addToIndex);
4484 bool rootOnly,
bool addToIndex)
4486 for (
const auto &nd : nsLinkedMap)
4494 bool rootOnly,
bool addToIndex)
4548 if ((cd->getOuterScope()==
nullptr ||
4554 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4555 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4559 false,cd->localName(),cd->getReference(),cd->getOutputFileBase(),
4560 QCString(),
false,cd->partOfGroups().empty(),cd.get());
4575 bool addToIndex = lne==
nullptr || lne->
visible();
4596 if (cd->isLinkableInProject())
4608 bool hasBrief = !cd->briefDescription().isEmpty();
4614 cd->briefFile(),cd->briefLine(),
4616 cd->briefDescription(
TRUE),
4684 for (
const auto &entry: lne->
children())
4686 if (entry->visible()) count++;
4691 for (
const auto &entry: lne->
children())
4693 if (entry->visible())
4695 ol.
writeString(
"<li><a href=\""+entry->url()+
"\"><span>"+
4696 fixSpaces(entry->title())+
"</span></a></li>\n");
4720 projPrefix=projectName+
" ";
4775 bool headerWritten=
FALSE;
4797 headerWritten =
TRUE;
4807 headerWritten =
TRUE;
4855 msg(
"Generating main page...\n");
4894 if (index.numDocumentedPages()>0)
4909 if (index.numDocumentedModules()>0)
4915 if (index.numDocumentedGroups()>0)
4921 if (
Config_getBool(SHOW_NAMESPACES) && (index.numDocumentedNamespaces()>0))
4931 if (index.numDocumentedConcepts()>0)
4937 if (index.numHierarchyInterfaces()>0)
4943 if (index.numHierarchyClasses()>0)
4957 if (index.numHierarchyExceptions()>0)
4963 if (index.numAnnotatedInterfacesPrinted()>0)
4969 if (index.numAnnotatedClassesPrinted()>0)
4979 if (index.numAnnotatedStructsPrinted()>0)
4985 if (index.numAnnotatedExceptionsPrinted()>0)
5000 if (index.numDocumentedModules()>0)
5006 if (index.numDocumentedGroups()>0)
5012 if (index.numDocumentedNamespaces()>0)
5018 if (index.numDocumentedConcepts()>0)
5024 if (index.numAnnotatedInterfacesPrinted()>0)
5030 if (index.numAnnotatedClassesPrinted()>0)
5036 if (index.numAnnotatedStructsPrinted()>0)
5042 if (index.numAnnotatedExceptionsPrinted()>0)
5072 return s.startsWith(
"@ref") || s.startsWith(
"\\ref");
5076 for (
const auto &lne : entries)
5079 size_t idx =
static_cast<size_t>(kind);
5083 size_t newSize = idx+1;
5088 bool addToIndex=lne->visible();
5089 bool needsClosing=
FALSE;
5094 case LayoutNavEntry::MainPage:
5095 msg(
"Generating index page...\n");
5098 case LayoutNavEntry::Pages:
5099 msg(
"Generating page index...\n");
5102 case LayoutNavEntry::Topics:
5103 msg(
"Generating topic index...\n");
5106 case LayoutNavEntry::Modules:
5108 if (index.numDocumentedModules()>0 && addToIndex)
5116 case LayoutNavEntry::ModuleList:
5117 msg(
"Generating module index...\n");
5120 case LayoutNavEntry::ModuleMembers:
5121 msg(
"Generating module member index...\n");
5124 case LayoutNavEntry::Namespaces:
5129 if (index.numDocumentedNamespaces()>0 && addToIndex)
5137 msg(
"Generating namespace index...\n");
5143 case LayoutNavEntry::NamespaceList:
5148 msg(
"Generating namespace index...\n");
5153 case LayoutNavEntry::NamespaceMembers:
5154 msg(
"Generating namespace member index...\n");
5157 case LayoutNavEntry::Classes:
5158 if (index.numAnnotatedClasses()>0 && addToIndex)
5166 msg(
"Generating annotated compound index...\n");
5170 case LayoutNavEntry::Concepts:
5171 msg(
"Generating concept index...\n");
5174 case LayoutNavEntry::ClassList:
5175 msg(
"Generating annotated compound index...\n");
5178 case LayoutNavEntry::ClassIndex:
5179 msg(
"Generating alphabetical compound index...\n");
5182 case LayoutNavEntry::ClassHierarchy:
5183 msg(
"Generating hierarchical class index...\n");
5187 msg(
"Generating graphical class hierarchy...\n");
5191 case LayoutNavEntry::ClassMembers:
5194 msg(
"Generating member index...\n");
5198 case LayoutNavEntry::Interfaces:
5199 if (sliceOpt && index.numAnnotatedInterfaces()>0 && addToIndex)
5206 case LayoutNavEntry::InterfaceList:
5209 msg(
"Generating annotated interface index...\n");
5213 case LayoutNavEntry::InterfaceIndex:
5216 msg(
"Generating alphabetical interface index...\n");
5220 case LayoutNavEntry::InterfaceHierarchy:
5223 msg(
"Generating hierarchical interface index...\n");
5227 msg(
"Generating graphical interface hierarchy...\n");
5232 case LayoutNavEntry::Structs:
5233 if (sliceOpt && index.numAnnotatedStructs()>0 && addToIndex)
5240 case LayoutNavEntry::StructList:
5243 msg(
"Generating annotated struct index...\n");
5247 case LayoutNavEntry::StructIndex:
5250 msg(
"Generating alphabetical struct index...\n");
5254 case LayoutNavEntry::Exceptions:
5255 if (sliceOpt && index.numAnnotatedExceptions()>0 && addToIndex)
5262 case LayoutNavEntry::ExceptionList:
5265 msg(
"Generating annotated exception index...\n");
5269 case LayoutNavEntry::ExceptionIndex:
5272 msg(
"Generating alphabetical exception index...\n");
5276 case LayoutNavEntry::ExceptionHierarchy:
5279 msg(
"Generating hierarchical exception index...\n");
5283 msg(
"Generating graphical exception hierarchy...\n");
5288 case LayoutNavEntry::Files:
5290 if (
Config_getBool(SHOW_FILES) && index.numDocumentedFiles()>0 && addToIndex)
5298 msg(
"Generating file index...\n");
5303 case LayoutNavEntry::FileList:
5304 msg(
"Generating file index...\n");
5307 case LayoutNavEntry::FileGlobals:
5308 msg(
"Generating file member index...\n");
5311 case LayoutNavEntry::Examples:
5312 msg(
"Generating example index...\n");
5315 case LayoutNavEntry::User:
5320 bool isRelative=url.
at(0)==
'!';
5321 if (!url.
isEmpty() && !isRelative)
5329 case LayoutNavEntry::UserGroup:
5341 bool isRelative=url.
at(0)==
'!';
5359 case LayoutNavEntry::None:
5360 assert(kind != LayoutNavEntry::None);
5363 if (kind!=LayoutNavEntry::User && kind!=LayoutNavEntry::UserGroup)
5373 case LayoutNavEntry::Modules:
5374 case LayoutNavEntry::Namespaces:
5375 case LayoutNavEntry::Classes:
5376 case LayoutNavEntry::Files:
5377 case LayoutNavEntry::UserGroup:
5396 case LayoutNavEntry::MainPage:
return TRUE;
5397 case LayoutNavEntry::User:
return TRUE;
5398 case LayoutNavEntry::UserGroup:
return TRUE;
5399 case LayoutNavEntry::Pages:
return index.numIndexedPages()>0;
5400 case LayoutNavEntry::Topics:
return index.numDocumentedGroups()>0;
5401 case LayoutNavEntry::Modules:
return index.numDocumentedModules()>0;
5402 case LayoutNavEntry::ModuleList:
return index.numDocumentedModules()>0;
5404 case LayoutNavEntry::Namespaces:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5405 case LayoutNavEntry::NamespaceList:
return index.numDocumentedNamespaces()>0 && showNamespaces;
5407 case LayoutNavEntry::Concepts:
return index.numDocumentedConcepts()>0;
5408 case LayoutNavEntry::Classes:
return index.numAnnotatedClasses()>0;
5409 case LayoutNavEntry::ClassList:
return index.numAnnotatedClasses()>0;
5410 case LayoutNavEntry::ClassIndex:
return index.numAnnotatedClasses()>0;
5411 case LayoutNavEntry::ClassHierarchy:
return index.numHierarchyClasses()>0;
5413 case LayoutNavEntry::Interfaces:
return index.numAnnotatedInterfaces()>0;
5414 case LayoutNavEntry::InterfaceList:
return index.numAnnotatedInterfaces()>0;
5415 case LayoutNavEntry::InterfaceIndex:
return index.numAnnotatedInterfaces()>0;
5416 case LayoutNavEntry::InterfaceHierarchy:
return index.numHierarchyInterfaces()>0;
5417 case LayoutNavEntry::Structs:
return index.numAnnotatedStructs()>0;
5418 case LayoutNavEntry::StructList:
return index.numAnnotatedStructs()>0;
5419 case LayoutNavEntry::StructIndex:
return index.numAnnotatedStructs()>0;
5420 case LayoutNavEntry::Exceptions:
return index.numAnnotatedExceptions()>0;
5421 case LayoutNavEntry::ExceptionList:
return index.numAnnotatedExceptions()>0;
5422 case LayoutNavEntry::ExceptionIndex:
return index.numAnnotatedExceptions()>0;
5423 case LayoutNavEntry::ExceptionHierarchy:
return index.numHierarchyExceptions()>0;
5424 case LayoutNavEntry::Files:
return index.numDocumentedFiles()>0 && showFiles;
5425 case LayoutNavEntry::FileList:
return index.numDocumentedFiles()>0 && showFiles;
5428 case LayoutNavEntry::None:
5429 assert(kind != LayoutNavEntry::None);
5437 std::function<std::size_t(std::size_t)> numDocumented,
5439 const T *(*getInfo)(
size_t hl),
5443 bool firstMember=
TRUE;
5444 for (std::size_t i=0;i<total;i++)
5446 if (numDocumented(i)>0)
5462 bool multiPageIndex=
FALSE;
5465 multiPageIndex=
TRUE;
5467 t <<
",children:[\n";
5468 bool firstLetter=
TRUE;
5469 for (
const auto &[letter,list] : getMemberList(i))
5471 if (!firstLetter) t <<
",\n";
5476 QCString fullName = getInfo(i)->fname;
5477 if (!multiPageIndex || firstLetter)
5478 anchor=fullName+extension+
"#index_";
5480 anchor=fullName+
"_"+is+extension+
"#index_";
5499 for (
const auto &entry : root->
children())
5505 bool firstChild =
TRUE;
5506 if (!first) t <<
",";
5507 t <<
"children:[\n";
5508 for (
const auto &entry : root->
children())
5512 if (!firstChild) t <<
",\n";
5515 if (
isURL(url)) url =
"^" + url;
5518 bool hasChildren=
FALSE;
5519 if (entry->kind()==LayoutNavEntry::ModuleMembers)
5521 auto numDoc = [](std::size_t i) {
5524 auto memList = [](std::size_t i) {
5529 if (entry->kind()==LayoutNavEntry::NamespaceMembers)
5531 auto numDoc = [](std::size_t i) {
5534 auto memList = [](std::size_t i) {
5539 else if (entry->kind()==LayoutNavEntry::ClassMembers)
5541 auto numDoc = [](std::size_t i) {
5544 auto memList = [](std::size_t i) {
5549 else if (entry->kind()==LayoutNavEntry::FileGlobals)
5551 auto numDoc = [](std::size_t i) {
5554 auto memList = [](std::size_t i) {
5563 if (hasChildren) t <<
"]";
5580 t <<
"var menudata={";
5582 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
Find an object given the key.
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
void msg(const char *fmt,...)
#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
const char * qPrint(const char *s)
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)