Doxygen
Loading...
Searching...
No Matches
LayoutDocManager Class Reference

Singleton providing access to the (user configurable) layout of the documentation. More...

#include <src/layout.h>

Classes

class  Private

Public Types

enum  LayoutPart { PART_SPECIFICATIONS }

Public Member Functions

const LayoutDocEntryListdocEntries (LayoutPart part) const
 Returns the list of LayoutDocEntry's in representation order for a given page identified by part.
LayoutNavEntryrootNavEntry () const
 returns the (invisible) root of the navigation tree.
LayoutNavEntrycreateChildNavEntry (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.
void parse (const DString &fileName, const char *data=nullptr)
 Parses a user provided layout.
void init ()
int majorVersion () const
int minorVersion () const

Static Public Member Functions

static LayoutDocManagerinstance ()
 Returns a reference to this singleton.
static std::string partToString (int k)

Private Member Functions

void addEntry (LayoutPart p, LayoutDocEntryPtr &&e)
void mergeNavEntries (LayoutDocManager &manager)
void mergeDocEntries (const DString &fileName, LayoutDocManager &manager)
void removeInvisibleDocEntries ()
 LayoutDocManager ()
 ~LayoutDocManager ()

Private Attributes

std::unique_ptr< Privated

Friends

class LayoutParser

Detailed Description

Singleton providing access to the (user configurable) layout of the documentation.

Definition at line 259 of file layout.h.

Member Enumeration Documentation

◆ LayoutPart

Enumerator
PART_SPECIFICATIONS 

Definition at line 263 of file layout.h.

264 {
265#define PSPEC(x,y) x y,
267#undef PSPEC
268 };

Constructor & Destructor Documentation

◆ LayoutDocManager()

LayoutDocManager::LayoutDocManager ( )
private

Definition at line 1408 of file layout.cpp.

1408 : d(std::make_unique<Private>())
1409{
1410}
std::unique_ptr< Private > d
Definition layout.h:303

References d.

Referenced by instance(), mergeDocEntries(), mergeNavEntries(), and parse().

◆ ~LayoutDocManager()

LayoutDocManager::~LayoutDocManager ( )
private

Definition at line 1412 of file layout.cpp.

1413{
1414}

Member Function Documentation

◆ addEntry()

void LayoutDocManager::addEntry ( LayoutDocManager::LayoutPart p,
LayoutDocEntryPtr && e )
private

Definition at line 1463 of file layout.cpp.

1464{
1465 auto &docEntry = d->docEntries[static_cast<int>(p)];
1466 docEntry.push_back(std::move(e)); // add
1467}

References d.

Referenced by LayoutParser::endMemberDecl(), LayoutParser::endMemberDef(), LayoutParser::startMemberDecl(), LayoutParser::startMemberDeclEntry(), LayoutParser::startMemberDef(), LayoutParser::startMemberDefEntry(), LayoutParser::startSectionEntry(), and LayoutParser::startSimpleEntry().

◆ createChildNavEntry()

LayoutNavEntry * LayoutDocManager::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.

Definition at line 1452 of file layout.cpp.

1455{
1456 if (parent==nullptr) parent = &d->rootNav;
1457 auto ptr = std::make_unique<LayoutNavEntry>(parent,k,vs,bf,tl,intro);
1458 auto child = ptr.get();
1459 parent->appendChild(std::move(ptr));
1460 return child;
1461}
constexpr DocNodeVariant * parent(DocNodeVariant *n)
returns the parent node of a given node n or nullptr if the node has no parent.
Definition docnode.h:1335

References d, and parent().

Referenced by LayoutParser::startNavEntry().

◆ docEntries()

const LayoutDocEntryList & LayoutDocManager::docEntries ( LayoutDocManager::LayoutPart part) const

Returns the list of LayoutDocEntry's in representation order for a given page identified by part.

Definition at line 1442 of file layout.cpp.

1443{
1444 return d->docEntries[static_cast<int>(part)];
1445}

References d.

Referenced by LayoutParser::endMemberDecl(), and LayoutParser::endMemberDef().

◆ init()

void LayoutDocManager::init ( )

Definition at line 1416 of file layout.cpp.

1417{
1419 XMLHandlers handlers;
1420 handlers.startElement = [&layoutParser](const std::string &name,const XMLHandlers::Attributes &attrs) { layoutParser.startElement(name,attrs); };
1421 handlers.endElement = [&layoutParser](const std::string &name) { layoutParser.endElement(name); };
1422 handlers.error = [&layoutParser](const std::string &fileName,int lineNr,const std::string &msg) { layoutParser.error(fileName,lineNr,msg); };
1423 XMLParser parser(handlers);
1424 layoutParser.setDocumentLocator(&parser);
1425 constexpr auto layoutFile = "layout_default.xml";
1426 DString layout_default = ResourceMgr::instance().getAsString(layoutFile);
1427 parser.parse(layoutFile,layout_default.data(),Debug::isFlagSet(Debug::Lex_xml),
1428 [&]() { DebugLex::print(Debug::Lex_xml,"Entering","libxml/xml.l",layoutFile); },
1429 [&]() { DebugLex::print(Debug::Lex_xml,"Finished", "libxml/xml.l",layoutFile); }
1430 );
1432 d->majorVersion = layoutParser.majorVersion();
1433 d->minorVersion = layoutParser.minorVersion();
1434}
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:161
@ Lex_xml
Definition debug.h:72
static bool isFlagSet(const DebugMask mask)
Definition debug.cpp:133
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition layout.cpp:1436
friend class LayoutParser
Definition layout.h:304
void removeInvisibleDocEntries()
Definition layout.cpp:1510
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.
std::unordered_map< std::string, std::string > Attributes
Definition xml.h:29
std::function< EndElementType > endElement
handler invoked when a closing tag has been found
Definition xml.h:40
std::function< StartElementType > startElement
handler invoked when an opening tag has been found
Definition xml.h:39
std::function< ErrorType > error
handler invoked when the parser encounters an error
Definition xml.h:42
#define msg(fmt,...)
Definition message.h:94

References d, DString::data(), LayoutParser::endElement(), XMLHandlers::endElement, LayoutParser::error(), XMLHandlers::error, ResourceMgr::getAsString(), instance(), ResourceMgr::instance(), Debug::isFlagSet(), LayoutParser, Debug::Lex_xml, LayoutParser::majorVersion(), LayoutParser::minorVersion(), msg, XMLParser::parse(), removeInvisibleDocEntries(), LayoutParser::setDocumentLocator(), LayoutParser::startElement(), and XMLHandlers::startElement.

Referenced by parseInput().

◆ instance()

LayoutDocManager & LayoutDocManager::instance ( )
static

Returns a reference to this singleton.

Definition at line 1436 of file layout.cpp.

1437{
1438 static LayoutDocManager theInstance;
1439 return theInstance;
1440}

References LayoutDocManager().

Referenced by addMembersToIndex(), ClassDefImpl::countAdditionalInheritedMembers(), ModuleDefImpl::countVisibleMembers(), NamespaceDefImpl::countVisibleMembers(), generateJSNavTree(), ClassDefImpl::getTitleForMemberListType(), init(), parseInput(), printLayout(), renderQuickLinksAsTabs(), ClassDefImpl::setAnonymousEnumType(), ClassDefImpl::writeAdditionalInheritedMembers(), writeAlphabeticalExceptionIndex(), writeAlphabeticalIndex(), writeAlphabeticalInterfaceIndex(), writeAlphabeticalStructIndex(), writeAnnotatedIndexGeneric(), writeDefaultQuickLinks(), ClassDefImpl::writeDocumentation(), ConceptDefImpl::writeDocumentation(), DirDefImpl::writeDocumentation(), FileDefImpl::writeDocumentation(), GroupDefImpl::writeDocumentation(), ModuleDefImpl::writeDocumentation(), NamespaceDefImpl::writeDocumentation(), ClassDefImpl::writeDocumentationContents(), writeExampleIndex(), writeFileIndex(), writeGraphicalClassHierarchy(), writeGraphicalExceptionHierarchy(), writeGraphicalInterfaceHierarchy(), writeHierarchicalExceptionIndex(), writeHierarchicalIndex(), writeHierarchicalInterfaceIndex(), ClassDefImpl::writeInlineDocumentation(), writeModuleMembers(), writeNamespaceIndex(), writeNamespaceMembers(), ClassDefImpl::writeSummaryLinks(), FileDefImpl::writeSummaryLinks(), GroupDefImpl::writeSummaryLinks(), ModuleDefImpl::writeSummaryLinks(), NamespaceDefImpl::writeSummaryLinks(), ClassDefImpl::writeTagFile(), DirDefImpl::writeTagFile(), FileDefImpl::writeTagFile(), GroupDefImpl::writeTagFile(), ModuleDefImpl::writeTagFile(), and NamespaceDefImpl::writeTagFile().

◆ majorVersion()

int LayoutDocManager::majorVersion ( ) const

Definition at line 1530 of file layout.cpp.

1531{
1532 return d->majorVersion;
1533}

References d.

◆ mergeDocEntries()

void LayoutDocManager::mergeDocEntries ( const DString & fileName,
LayoutDocManager & manager )
private

Definition at line 1722 of file layout.cpp.

1723{
1724 for (size_t i=0; i<d->docEntries.size(); i++)
1725 {
1726 //printf("========= part %zu\n",i);
1727 mergeDocEntryLists(fileName,other.d->docEntries[i],d->docEntries[i]);
1728 }
1729}
static void mergeDocEntryLists(const DString &fileName, LayoutDocEntryList &targetList, LayoutDocEntryList &sourceList)
Definition layout.cpp:1639

References d, LayoutDocManager(), and mergeDocEntryLists().

Referenced by parse().

◆ mergeNavEntries()

void LayoutDocManager::mergeNavEntries ( LayoutDocManager & manager)
private

Definition at line 1634 of file layout.cpp.

1635{
1636 mergeNavTreeNodesRec(other.rootNavEntry(),rootNavEntry());
1637}
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
Definition layout.cpp:1447
static void mergeNavTreeNodesRec(LayoutNavEntry *targetTree, LayoutNavEntry *sourceTree)
Definition layout.cpp:1556

References LayoutDocManager(), mergeNavTreeNodesRec(), and rootNavEntry().

◆ minorVersion()

int LayoutDocManager::minorVersion ( ) const

Definition at line 1535 of file layout.cpp.

1536{
1537 return d->minorVersion;
1538}

References d.

◆ parse()

void LayoutDocManager::parse ( const DString & fileName,
const char * data = nullptr )

Parses a user provided layout.

Definition at line 1469 of file layout.cpp.

1470{
1471 //printf("============ LayoutDocManager::parse(%s)\n",qPrint(fileName));
1472 LayoutDocManager layoutDocManager;
1473 LayoutParser layoutParser(layoutDocManager);
1474 XMLHandlers handlers;
1475 handlers.startElement = [&layoutParser](const std::string &name,const XMLHandlers::Attributes &attrs) { layoutParser.startElement(name,attrs); };
1476 handlers.endElement = [&layoutParser](const std::string &name) { layoutParser.endElement(name); };
1477 handlers.error = [&layoutParser](const std::string &fn,int lineNr,const std::string &msg) { layoutParser.error(fn,lineNr,msg); };
1478 XMLParser parser(handlers);
1479 layoutParser.setDocumentLocator(&parser);
1480 parser.parse(fileName.data(),
1481 data ? data : fileToString(fileName).data(),
1483 [&]() { DebugLex::print(Debug::Lex_xml,"Entering","libxml/xml.l",qPrint(fileName)); },
1484 [&]() { DebugLex::print(Debug::Lex_xml,"Finished", "libxml/xml.l",qPrint(fileName)); },
1486 );
1487
1488 // version in the user defined layout overrides default one
1489 d->majorVersion = layoutParser.majorVersion();
1490 d->minorVersion = layoutParser.minorVersion();
1491
1492 // merge missing parts of the default layout into the user defined layout
1493 // For now merging in defaults has been disabled for navigation entries
1494 // to avoid "extra entries" for projects that work with partial layout files.
1495 //mergeNavEntries(layoutDocManager);
1496
1497 // for compatibility reasons we only merge defaults when the user defined layout has at least version 2.0 or higher
1498 if (d->majorVersion>=2)
1499 {
1500 mergeDocEntries(fileName,layoutDocManager);
1501 }
1502
1503 layoutDocManager.removeInvisibleDocEntries();
1504
1505 // replace default layout with merged layout
1506 d->docEntries.swap(layoutDocManager.d->docEntries);
1507 d->rootNav.swap(layoutDocManager.d->rootNav);
1508}
static void print(Debug::DebugMask mask, const char *state, const char *lexName, const char *fileName)
Definition debug.cpp:157
void mergeDocEntries(const DString &fileName, LayoutDocManager &manager)
Definition layout.cpp:1722
const char * qPrint(const char *s)
Definition dstring.h:787
bool transcodeCharacterStringToUTF8(std::string &input, const char *inputEncoding)
Recodes the input string from the given input encoding to UTF8.
Definition utf8.cpp:241
DString fileToString(const DString &name, bool filter, bool isSourceCode)
Definition util.cpp:1055

References d, DString::data(), LayoutParser::endElement(), XMLHandlers::endElement, LayoutParser::error(), XMLHandlers::error, fileToString(), Debug::isFlagSet(), LayoutDocManager(), LayoutParser, Debug::Lex_xml, LayoutParser::majorVersion(), mergeDocEntries(), LayoutParser::minorVersion(), msg, XMLParser::parse(), DebugLex::print(), qPrint(), removeInvisibleDocEntries(), LayoutParser::setDocumentLocator(), LayoutParser::startElement(), XMLHandlers::startElement, and transcodeCharacterStringToUTF8().

Referenced by parseInput().

◆ partToString()

std::string LayoutDocManager::partToString ( int k)
inlinestatic

Definition at line 271 of file layout.h.

272 {
273 switch (k)
274 {
275#define PSPEC(x,y) case x: return #x; break;
277#undef PSPEC
278 default: return "unknown"; // to satisfy compiler
279 }
280 }

References PART_SPECIFICATIONS.

Referenced by printLayout().

◆ removeInvisibleDocEntries()

void LayoutDocManager::removeInvisibleDocEntries ( )
private

Definition at line 1510 of file layout.cpp.

1511{
1512 // remove invisible entries
1513 for (auto &list : d->docEntries)
1514 {
1515 auto it = list.begin();
1516 while (it!=list.end())
1517 {
1518 if (*it==nullptr || !(*it)->visible())
1519 {
1520 it = list.erase(it);
1521 }
1522 else
1523 {
1524 ++it;
1525 }
1526 }
1527 }
1528}

References d.

Referenced by init(), and parse().

◆ rootNavEntry()

◆ LayoutParser

friend class LayoutParser
friend

Definition at line 304 of file layout.h.

References LayoutParser, printLayout(), and writeDefaultLayoutFile().

Referenced by init(), LayoutParser, and parse().

Member Data Documentation

◆ d


The documentation for this class was generated from the following files: