67 return compileOptions(def,langId1,value1,langId2,value2,langId3,value3)+
77 return compileOptions(def,langId1,value1,langId2,value2,langId3,value3,langId4,value4)+
85 if (visible.
empty())
return defVal;
86 if (visible.
at(0)==
'$' && visible.
length()>1)
89 const ConfigValues::Info *opt = ConfigValues::instance().get(
id);
90 if (opt && opt->type==ConfigValues::Info::Bool)
92 return ConfigValues::instance().*(opt->value.b);
94 else if (opt && opt->type==ConfigValues::Info::String)
96 return opt->getBooleanRepresentation();
100 err(
"found unsupported value '{}' for visible attribute in layout file, reverting to '{}'\n",
101 visible,(defVal?
"yes":
"no"));
106 if (visibleLow==
"no" || visibleLow==
"false" || visibleLow==
"0")
return false;
107 else if (visibleLow==
"yes" || visibleLow==
"true" || visibleLow==
"1")
return true;
110 err(
"found unsupported value '{}' for visible attribute in layout file, reverting to '{}'\n",
111 visible,(defVal?
"yes":
"no"));
125 e->updateVisibility(
this);
131 e->updateVisibility(
this);
144 if (result)
return result;
145 if (entry->kind()==
kind && (file==
DString() || entry->baseFile()==file))
156 if ((
kind()!=LayoutNavEntry::User &&
kind()!=LayoutNavEntry::UserGroup) ||
168 auto dfAstImpl =
dynamic_cast<const DocNodeAST*
>(dfAst.get());
169 const DocRef *df = std::get_if<DocRef>(&dfAstImpl->root);
187 msg(
"explicit link request to '{}' in layout file '{}' could not be resolved\n",
url.
mid(5),
Config_getString(LAYOUT_FILE));
206 void error(
const std::string &fileName,
int lineNr,
const std::string &
msg)
216 if (
m_part!=LayoutDocManager::Undefined)
218 auto elem = std::make_unique<LayoutDocEntrySimple>(k,
id,isVisible);
233 if (userTitle.
empty()) userTitle = title;
234 if (
m_part!=LayoutDocManager::Undefined)
246 if (userTitle.
empty()) userTitle = title;
247 if (userSubscript.
empty()) userSubscript = subscript;
249 if (
m_part!=LayoutDocManager::Undefined)
259 if (userTitle.
empty()) userTitle = title;
262 if (
m_part!=LayoutDocManager::Undefined)
272 static const reg::Ex re(R
"((\d+)\.(\d+))");
308 static struct NavEntryMap
319 LayoutNavEntry::MainPage,
326 LayoutNavEntry::Pages,
333 LayoutNavEntry::Topics,
340 LayoutNavEntry::Modules,
347 LayoutNavEntry::ModuleList,
354 LayoutNavEntry::ModuleMembers,
361 LayoutNavEntry::Namespaces,
368 LayoutNavEntry::NamespaceList,
374 {
"namespacemembers",
375 LayoutNavEntry::NamespaceMembers,
382 LayoutNavEntry::Concepts,
389 LayoutNavEntry::ClassIndex,
396 LayoutNavEntry::Classes,
403 LayoutNavEntry::ClassList,
410 LayoutNavEntry::ClassHierarchy,
414 hasGraphicalHierarchy ?
"inherits" :
"hierarchy"
417 LayoutNavEntry::ClassMembers,
424 LayoutNavEntry::InterfaceIndex,
431 LayoutNavEntry::Interfaces,
435 "annotatedinterfaces"
438 LayoutNavEntry::InterfaceList,
442 "annotatedinterfaces"
444 {
"interfacehierarchy",
445 LayoutNavEntry::InterfaceHierarchy,
449 hasGraphicalHierarchy ?
"interfaceinherits" :
"interfacehierarchy"
452 LayoutNavEntry::StructIndex,
459 LayoutNavEntry::Structs,
466 LayoutNavEntry::StructList,
473 LayoutNavEntry::ExceptionIndex,
480 LayoutNavEntry::Exceptions,
484 "annotatedexceptions"
487 LayoutNavEntry::ExceptionList,
491 "annotatedexceptions"
493 {
"exceptionhierarchy",
494 LayoutNavEntry::ExceptionHierarchy,
498 hasGraphicalHierarchy ?
"exceptioninherits" :
"exceptionhierarchy"
501 LayoutNavEntry::Files,
508 LayoutNavEntry::FileList,
515 LayoutNavEntry::FileGlobals,
522 LayoutNavEntry::Examples,
529 LayoutNavEntry::User,
536 LayoutNavEntry::UserGroup,
553 while (mapping[i].typeStr)
555 if (mapping[i].typeStr==type)
559 if (mapping[i].typeStr==
nullptr)
568 warn_layout(fileName,
m_locator->
lineNr(),
"the type '{}' is not supported for the entry tag within a navindex! Check your layout file!",type);
574 DString baseFile = mapping[i].baseFile;
579 title = mapping[i].mainName;
582 title = mapping[i].subName;
589 intro = mapping[i].intro;
592 if (mapping[i].kind==LayoutNavEntry::User && !url.
empty())
596 else if (kind==LayoutNavEntry::UserGroup)
637 m_part = LayoutDocManager::Undefined;
644 if (
m_part!=LayoutDocManager::Undefined)
656 bool isVisible =
true;
659 if (lde->kind() == LayoutDocEntry::MemberDefStart)
665 if (
m_part!=LayoutDocManager::Undefined)
676 if (
m_part!=LayoutDocManager::Undefined)
687 bool isVisible =
true;
690 if (lde->kind() == LayoutDocEntry::MemberDeclStart)
696 if (
m_part!=LayoutDocManager::Undefined)
732template<
class...Args>
738template<
class...Args>
746template<
class...Args>
749 const std::function<
DString()> &title
755template<
class...Args>
758 const std::function<
DString()> &title
764template<
class...Args>
767 const std::function<
DString()> &title,
768 const std::function<
DString()> &subtitle
774template<
class...Args>
784template<
class...Args>
787 return [=](
LayoutParser &parser,
const std::string &id) { (parser.*fn)(
id); };
1365 it->second.startCb(*
this,it->first,attrib);
1390 it->second.endCb(*
this,it->first+
" end");
1403 std::array<LayoutDocEntryList,LayoutDocManager::NrParts>
docEntries;
1422 handlers.
endElement = [&layoutParser](
const std::string &name) { layoutParser.
endElement(name); };
1423 handlers.
error = [&layoutParser](
const std::string &fileName,
int lineNr,
const std::string &
msg) { layoutParser.
error(fileName,lineNr,
msg); };
1426 constexpr auto layoutFile =
"layout_default.xml";
1429 [&]() { DebugLex::print(Debug::Lex_xml,
"Entering",
"libxml/xml.l",layoutFile); },
1430 [&]() { DebugLex::print(Debug::Lex_xml,
"Finished",
"libxml/xml.l",layoutFile); }
1445 return d->docEntries[
static_cast<int>(part)];
1458 auto ptr = std::make_unique<LayoutNavEntry>(
parent,k,vs,bf,tl,intro);
1459 auto child = ptr.get();
1460 parent->appendChild(std::move(ptr));
1466 auto &docEntry =
d->docEntries[
static_cast<int>(p)];
1467 docEntry.push_back(std::move(e));
1477 handlers.
endElement = [&layoutParser](
const std::string &name) { layoutParser.
endElement(name); };
1478 handlers.
error = [&layoutParser](
const std::string &fn,
int lineNr,
const std::string &
msg) { layoutParser.
error(fn,lineNr,
msg); };
1499 if (
d->majorVersion>=2)
1507 d->docEntries.swap(layoutDocManager.
d->docEntries);
1508 d->rootNav.swap(layoutDocManager.
d->rootNav);
1514 for (
auto &list :
d->docEntries)
1516 auto it = list.begin();
1517 while (it!=list.end())
1519 if (*it==
nullptr || !(*it)->visible())
1521 it = list.erase(it);
1533 return d->majorVersion;
1538 return d->minorVersion;
1546 if (root->
id()==
id)
return root;
1547 for (
auto &child : root->
children())
1550 if (childNavEntry)
return childNavEntry;
1559 using IdSet = std::unordered_set<std::string>;
1560 using IdMap = std::unordered_map<std::string,size_t>;
1563 for (
const auto &e : tree->
children())
1565 set.insert(e->id());
1569 auto prepareMap = [](
const LayoutNavEntry *tree,
const IdSet &set, IdMap &map) {
1570 for (
size_t i=0; i<tree->
children().size(); i++)
1572 std::string
id = tree->
children()[i]->id();
1573 auto it = set.find(
id);
1574 if (it != set.end())
1581 IdSet sourceSet, targetSet;
1582 prepareSet(sourceTree,sourceSet);
1583 prepareSet(targetTree,targetSet);
1585 IdMap sourceMap, targetMap;
1586 prepareMap(targetTree,sourceSet,targetMap);
1587 prepareMap(sourceTree,targetSet,sourceMap);
1590 std::vector<size_t> insertionList;
1591 for (
size_t i=0; i<sourceTree->
children().size(); i++)
1593 std::string
id = sourceTree->
children()[i]->id();
1597 size_t minIdx = targetTree->
children().size();
1598 for (
const auto &kv : sourceMap)
1602 size_t idx = targetMap[kv.first];
1609 insertionList.push_back(minIdx);
1614 size_t idx = sourceTree->
children().size()-1;
1615 for (
auto it=insertionList.rbegin(); it!=insertionList.rend(); ++it, idx--)
1617 std::string
id = sourceTree->
children()[idx]->id();
1618 if (targetSet.find(
id)==targetSet.end())
1625 for (
auto &targetChild : targetTree->
children())
1642 using IdSet = std::unordered_set<std::string>;
1643 using IdMap = std::unordered_map<std::string,size_t>;
1647 for (
const auto &e : list)
1650 set.insert(e->id());
1656 for (
size_t i=0; i<list.size(); i++)
1658 std::string
id = list[i]->id();
1659 auto it = set.find(
id);
1660 if (it != set.end())
1668 IdSet sourceSet, targetSet;
1670 prepareSet(sourceList,sourceSet);
1672 prepareSet(targetList,targetSet);
1674 IdMap sourceMap, targetMap;
1676 prepareMap(targetList,sourceSet,targetMap);
1678 prepareMap(sourceList,targetSet,sourceMap);
1681 std::vector<size_t> insertionList;
1682 for (
size_t i=0; i<sourceList.size(); i++)
1684 std::string
id = sourceList[i]->id();
1688 size_t minIdx = targetList.size();
1689 for (
const auto &kv : sourceMap)
1693 size_t idx = targetMap[kv.first];
1702 insertionList.push_back(minIdx);
1707 size_t idx = sourceList.size()-1;
1708 for (
auto it=insertionList.rbegin(); it!=insertionList.rend(); ++it, idx--)
1710 std::string
id = sourceList[idx]->id();
1712 if (targetSet.find(
id)==targetSet.end())
1716 warn_layout(fileName,1,
"User defined layout misses entry '{}'. Using default value.",
id);
1717 targetList.insert(targetList.begin()+*it, std::move(sourceList[idx]));
1725 for (
size_t i=0; i<
d->docEntries.size(); i++)
1741 t <<
substitute(layout_default,
"$doxygenversion",getDoxygenVersion());
1745 err(
"Failed to open file {} for writing!\n",fileName);
1760 size_t s=0,e=input.
find(
'|');
1766 e=input.
find(
'|',s);
1767 size_t i=input.
find(
'=',s);
1773 return input.
mid(i+1,e-i-1);
1776 return input.
left(e1);
1812 indentStr.
fill(
' ',indent);
1815 for (
const auto &e : root->
children())
1824 bool extraIndent =
false;
1830 for (
const auto &e : mgr.rootNavEntry()->children())
1835 for (
int i = 0; i < LayoutDocManager::NrParts; i++)
1842 if (lde->kind() == LayoutDocEntry::MemberDeclEnd || lde->kind() == LayoutDocEntry::MemberDefEnd) extraIndent =
false;
1844 extraIndent?
" " :
"",lde->entryToString(), ldes->visible());
1845 if (lde->kind() == LayoutDocEntry::MemberDeclStart || lde->kind() == LayoutDocEntry::MemberDefStart) extraIndent =
true;
1850 extraIndent?
" " :
"",lde->entryToString(),lmdecl->visible(),lmdecl->type.to_string());
1855 extraIndent?
" " :
"",lde->entryToString(),lmdef->visible(),lmdef->type.to_string());
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
DString & setNum(short n)
size_t rfind(char c, size_t pos=npos) const
DString fill(char c, size_t len)
Fills a string with a predefined character.
DString mid(size_t index, size_t len=npos) const
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
std::string_view view() const
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
char & at(size_t i)
Returns a reference to the character at index i.
DString right(size_t len) const
size_t find(char c, size_t pos=0) const
DString & sprintf(const char *format,...)
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
DString left(size_t len) const
const std::string & str() const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
bool startsWith(const char *s) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
static bool isFlagSet(const DebugMask mask)
static void print(DebugMask mask, int prio, fmt::format_string< Args... > fmt, Args &&... args)
static void print(Debug::DebugMask mask, const char *state, const char *lexName, const char *fileName)
Class representing the abstract syntax tree of a documentation block.
Node representing a reference to some item.
std::array< LayoutDocEntryList, LayoutDocManager::NrParts > docEntries
Singleton providing access to the (user configurable) layout of the documentation.
void mergeNavEntries(LayoutDocManager &manager)
static std::string partToString(int k)
void parse(const DString &fileName, const char *data=nullptr)
Parses a user provided layout.
std::unique_ptr< Private > d
LayoutNavEntry * createChildNavEntry(LayoutNavEntry *root, LayoutNavEntry::Kind k, bool vs, const DString &bf, const DString &tl, const DString &intro)
append a new node as a child to root.
static LayoutDocManager & instance()
Returns a reference to this singleton.
friend class LayoutParser
void mergeDocEntries(const DString &fileName, LayoutDocManager &manager)
void addEntry(LayoutPart p, LayoutDocEntryPtr &&e)
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
void removeInvisibleDocEntries()
const LayoutDocEntryList & docEntries(LayoutPart part) const
Returns the list of LayoutDocEntry's in representation order for a given page identified by part.
void endTop(const std::string &)
void endNavIndex(const std::string &)
void setDocumentLocator(const XMLLocator *locator)
static int m_userGroupCount
void startMemberDefEntry(const std::string &id, const XMLHandlers::Attributes &attrib, MemberListType type, const DString &title, const DString &)
void startSimpleEntry(LayoutDocEntry::Kind k, const std::string &id, const XMLHandlers::Attributes &attrib)
void startNavIndex(const std::string &, const XMLHandlers::Attributes &)
LayoutParser(LayoutDocManager &manager)
void startTop(const std::string &, const XMLHandlers::Attributes &attrib, LayoutDocManager::LayoutPart part, const DString &scope, LayoutNavEntry::Kind nav)
void error(const std::string &fileName, int lineNr, const std::string &msg)
const XMLLocator * m_locator
void startMemberDecl(const std::string &id, const XMLHandlers::Attributes &attrib)
void endMemberDecl(const std::string &id)
void endMemberDef(const std::string &id)
void endNavEntry(const std::string &)
void startSectionEntry(LayoutDocEntry::Kind k, const std::string &id, const XMLHandlers::Attributes &attrib, const DString &title)
LayoutDocManager & m_layoutDocManager
void startMemberDeclEntry(const std::string &id, const XMLHandlers::Attributes &attrib, MemberListType type, const DString &title, const DString &subscript)
void startNavEntry(const std::string &, const XMLHandlers::Attributes &attrib)
void startMemberDef(const std::string &id, const XMLHandlers::Attributes &attrib)
void endElement(const std::string &name)
LayoutNavEntry * m_rootNav
void startLayout(const std::string &, const XMLHandlers::Attributes &attrib)
void startElement(const std::string &name, const XMLHandlers::Attributes &attrib)
LayoutDocManager::LayoutPart m_part
Wrapper class for the MemberListType type.
static ResourceMgr & instance()
Returns the one and only instance of this class.
DString getAsString(const DString &name) const
Gets the resource data as a C string.
Text streaming class that buffers data.
virtual DString trCompoundMembers()=0
virtual DString trFunctionAndProc()=0
virtual DString trStaticProtectedAttribs()=0
virtual DString trProtectedTypes()=0
virtual DString trTypedefs()=0
virtual DString trConceptList()=0
virtual DString trTopics()=0
virtual DString trModulesMembers()=0
virtual DString trCompoundMembersFortran()=0
virtual DString trStaticProtectedMembers()=0
virtual DString trPublicAttribs()=0
virtual DString trExceptions()=0
virtual DString trModulesList()=0
virtual DString trEnumerations()=0
virtual DString trRelatedSymbolDocumentation()=0
virtual DString trClasses()=0
virtual DString trDetailedDescription()=0
virtual DString trDataMemberDocumentation()=0
virtual DString trInterfaceIndex()=0
virtual DString trNamespaceMembers()=0
virtual DString trVariableDocumentation()=0
virtual DString trNamespaceMemberDescription(bool extractAll)=0
virtual DString trFileMembersDescription(bool extractAll)=0
virtual DString trPackageMembers()=0
virtual DString trNamespaceList()=0
virtual DString trPrivateAttribs()=0
virtual DString trExceptionList()=0
virtual DString trSequenceDocumentation()=0
virtual DString trTypedefDocumentation()=0
virtual DString trPrivateSlots()=0
virtual DString trStructs()=0
virtual DString trPrivateTypes()=0
virtual DString trClassDocumentation()=0
virtual DString trExceptionHierarchyDescription()=0
virtual DString trOperationDocumentation()=0
virtual DString trInterfaceList()=0
virtual DString trSequences()=0
virtual DString trClassMethods()=0
virtual DString trFunctions()=0
virtual DString trMemberEnumerationDocumentation()=0
virtual DString trProtectedSlots()=0
virtual DString trInterfaceListDescription()=0
virtual DString trFriends()=0
virtual DString trPropertyDocumentation()=0
virtual DString trInstanceMethods()=0
virtual DString trExceptionHierarchy()=0
virtual DString trCompoundList()=0
virtual DString trPackageAttribs()=0
virtual DString trEnumerationTypeDocumentation()=0
virtual DString trInterfaceHierarchy()=0
virtual DString trTypeDocumentation()=0
virtual DString trPackageList()=0
virtual DString trMemberTypedefDocumentation()=0
virtual DString trEnumerationValueDocumentation()=0
virtual DString trModulesDescription()=0
virtual DString trStaticPackageAttribs()=0
virtual DString trStructListDescription()=0
virtual DString trOperations()=0
virtual DString trConceptDefinition()=0
virtual DString trDefineDocumentation()=0
virtual DString trDesignUnitListDescription()=0
virtual DString trExamplesDescription()=0
virtual DString trCompounds()=0
virtual DString trFileList()=0
virtual DString trModules()=0
virtual DString trDefines()=0
virtual DString trRelatedPages()=0
virtual DString trPublicMembers()=0
virtual DString trSubprogramDocumentation()=0
virtual DString trCompoundListDescriptionFortran()=0
virtual DString trVhdlType(VhdlSpecifier type, bool single)=0
virtual DString trInterfaces()=0
virtual DString trRelatedSymbols()=0
virtual DString trFileMembers()=0
virtual DString trDesignUnitHierarchy()=0
virtual DString trDesignUnits()=0
virtual DString trProtectedMembers()=0
virtual DString trDirectories()=0
virtual DString trInterfaceHierarchyDescription()=0
virtual DString trStaticPrivateAttribs()=0
virtual DString trStructIndex()=0
virtual DString trExceptionIndex()=0
virtual DString trConstructorDocumentation()=0
virtual DString trPackageTypes()=0
virtual DString trExportedModules()=0
virtual DString trModule(bool first_capital, bool singular)=0
virtual DString trDictionaryDocumentation()=0
virtual DString trProtectedAttribs()=0
virtual DString trDesignUnitMembers()=0
virtual DString trConstantGroups()=0
virtual DString trExceptionListDescription()=0
virtual DString trProperties()=0
virtual DString trRelatedPagesDescription()=0
virtual DString trDesignUnitList()=0
virtual DString trModulesMemberDescription(bool extractAll)=0
virtual DString trCompoundIndexFortran()=0
virtual DString trDataTypes()=0
virtual DString trCompoundListDescription()=0
virtual DString trConcept(bool first_capital, bool singular)=0
virtual DString trTopicListDescription()=0
virtual DString trDataMembers()=0
virtual DString trFileListDescription(bool extractAll)=0
virtual DString trClassHierarchyDescription()=0
virtual DString trSliceInterfaces()=0
virtual DString trConceptListDescription(bool extractAll)=0
virtual DString trFunctionDocumentation()=0
virtual DString trSubprograms()=0
virtual DString trMemberFunctionDocumentationFortran()=0
virtual DString trMemberFunctionDocumentation()=0
virtual DString trCompoundListFortran()=0
virtual DString trPackageFunctions()=0
virtual DString trPackages()=0
virtual DString trPrivateMembers()=0
virtual DString trPackageListDescription()=0
virtual DString trConstantDocumentation()=0
virtual DString trPublicTypes()=0
virtual DString trVariables()=0
virtual DString trStaticPublicMembers()=0
virtual DString trMethodDocumentation()=0
virtual DString trEnumerationValues()=0
virtual DString trRelatedSymbolsSubscript()=0
virtual DString trStaticPublicAttribs()=0
virtual DString trModulesListDescription(bool extractAll)=0
virtual DString trServices()=0
virtual DString trStructList()=0
virtual DString trNamespaceListDescription(bool extractAll)=0
virtual DString trSignals()=0
virtual DString trClassHierarchy()=0
virtual DString trPublicSlots()=0
virtual DString trCompoundIndex()=0
virtual DString trFile(bool first_capital, bool singular)=0
virtual DString trDesignUnitIndex()=0
virtual DString trConstants()=0
virtual DString trCompoundMembersDescription(bool extractAll)=0
virtual DString trEventDocumentation()=0
virtual DString trMainPage()=0
virtual DString trNamespaces()=0
virtual DString trCompoundMembersDescriptionFortran(bool extractAll)=0
virtual DString trMemberDataDocumentation()=0
virtual DString trEvents()=0
virtual DString trDictionaries()=0
virtual DString trStaticPackageFunctions()=0
virtual DString trExamples()=0
virtual DString trStaticPrivateMembers()=0
Event handlers that can installed by the client and called while parsing a XML document.
std::unordered_map< std::string, std::string > Attributes
std::function< EndElementType > endElement
handler invoked when a closing tag has been found
std::function< StartElementType > startElement
handler invoked when an opening tag has been found
static std::string value(const Attributes &attrib, const std::string &key)
std::function< ErrorType > error
handler invoked when the parser encounters an error
virtual int lineNr() const =0
virtual std::string fileName() const =0
void parse(const char *fileName, const char *inputString, bool debugEnabled, std::function< void()> debugStart, std::function< void()> debugEnd, std::function< Transcode > transcoder=[](std::string &s, const char *){ return true;})
Class representing a regular expression.
Object representing the matching results.
#define Config_getBool(name)
#define Config_getString(name)
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
IDocParserPtr createDocParser()
factory function to create a parser
IDocNodeASTPtr createRef(IDocParser &parserIntf, const DString &target, const DString &context, const DString &srcFile, int srcLine)
DString substitute(const DString &s, const DString &src, const DString &dst)
substitute all occurrences of src in s by dst
const char * qPrint(const char *s)
Translator * theTranslator
static void mergeNavTreeNodesRec(LayoutNavEntry *targetTree, LayoutNavEntry *sourceTree)
static void mergeDocEntryLists(const DString &fileName, LayoutDocEntryList &targetList, LayoutDocEntryList &sourceList)
static bool elemIsVisible(const XMLHandlers::Attributes &attrib, bool defVal=true)
DString extractLanguageSpecificTitle(const DString &input, SrcLangExt lang)
static LayoutNavEntry * findNavEntryRec(LayoutNavEntry *root, const std::string &id)
DString compileOptions(const DString &def)
void writeDefaultLayoutFile(const DString &fileName)
static void printNavLayout(LayoutNavEntry *root, int indent)
std::unique_ptr< LayoutDocEntry > LayoutDocEntryPtr
std::vector< LayoutDocEntryPtr > LayoutDocEntryList
#define warn_layout(file, line, fmt,...)
static auto startCb(void(LayoutParser::*fn)(Args...))
static const std::map< std::string, ElementCallbacks > g_elementHandlers
static auto endCb(void(LayoutParser::*fn)(Args...))
bool match(std::string_view str, Match &match, const Ex &re)
Matches a given string str for a match against regular expression re.
Represents of a member declaration list with configurable title and subtitle.
DString subtitle(SrcLangExt lang) const
DString title(SrcLangExt lang) const
Represents of a member definition list with configurable title.
DString title(SrcLangExt lang) const
DString title(SrcLangExt lang) const
Represents of a piece of a documentation page without configurable parts.
bool visible() const override
Base class for the layout of a navigation item at the top of the HTML pages.
LayoutNavEntryList m_children
const LayoutNavEntryList & children() const
LayoutNavEntry * find(LayoutNavEntry::Kind k, const DString &file=DString()) const
void updateVisibility(LayoutNavEntry *parent)
void appendChild(std::unique_ptr< LayoutNavEntry > &&e)
void insertChild(size_t pos, std::unique_ptr< LayoutNavEntry > &&e)
LayoutNavEntry * parent() const
LayoutNavEntry(LayoutNavEntry *parent, Kind k, bool vs, const DString &bf, const DString &tl, const DString &intro)
std::string navToString() const
std::function< void(LayoutParser &, const std::string &)> EndCallback
std::function< void(LayoutParser &, const std::string &, const XMLHandlers::Attributes &)> StartCallback
This file contains a number of basic enums and types.
bool transcodeCharacterStringToUTF8(std::string &input, const char *inputEncoding)
Recodes the input string from the given input encoding to UTF8.
void addHtmlExtensionIfMissing(DString &fName)
DString fileToString(const DString &name, bool filter, bool isSourceCode)
DString externalRef(const DString &relPath, const DString &ref)
bool openOutputFile(const DString &outFile, std::ofstream &f)
A bunch of utility functions.