Doxygen
Loading...
Searching...
No Matches
pagedef.h File Reference
#include "definition.h"
Include dependency graph for pagedef.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  PageDef
 A model of a page symbol. More...
class  PageLinkedMap
class  PageLinkedRefMap

Functions

std::unique_ptr< PageDefcreatePageDef (const DString &f, int l, const DString &n, const DString &d, const DString &t)
PageDefaddRelatedPage (const DString &name, const DString &ptitle, const DString &doc, const DString &fileName, int docLine, int startLine, const RefItemVector &sli=RefItemVector(), GroupDef *gd=nullptr, const TagInfo *tagInfo=nullptr, bool xref=false, SrcLangExt lang=SrcLangExt::Unknown)
PageDeftoPageDef (Definition *d)
const PageDeftoPageDef (const Definition *d)

Function Documentation

◆ addRelatedPage()

PageDef * addRelatedPage ( const DString & name,
const DString & ptitle,
const DString & doc,
const DString & fileName,
int docLine,
int startLine,
const RefItemVector & sli = RefItemVector(),
GroupDef * gd = nullptr,
const TagInfo * tagInfo = nullptr,
bool xref = false,
SrcLangExt lang = SrcLangExt::Unknown )

Definition at line 524 of file pagedef.cpp.

535{
536 PageDef *pd=nullptr;
537 //printf("addRelatedPage(name=%s gd=%p)\n",qPrint(name),gd);
538 DString title=ptitle.stripWhiteSpace();
539 bool newPage = true;
540 if ((pd=Doxygen::pageLinkedMap->find(name)) && !pd->isReference())
541 {
542 if (!xref && !title.empty() && pd->title()!=pd->name() && pd->title()!=title)
543 {
544 warn(fileName,startLine,"multiple use of page label '{}' with different titles, (other occurrence: {}, line: {})",
545 name,pd->docFile(),pd->getStartBodyLine());
546 }
547 if (!title.empty() && pd->title()==pd->name()) // pd has no real title yet
548 {
549 pd->setTitle(title);
551 if (si)
552 {
553 si->setTitle(title);
554 }
555 }
556 // append documentation block to the page.
557 pd->setDocumentation(doc,fileName,docLine);
558 //printf("Adding page docs '%s' pi=%p name=%s\n",qPrint(doc),pd,name);
559 // append (x)refitems to the page.
560 pd->setRefItems(sli);
561 newPage = false;
562 }
563
564 if (newPage) // new page
565 {
566 DString baseName=name;
567 if (baseName.endsWith(".tex"))
568 baseName=baseName.left(baseName.length()-4);
570 baseName=baseName.left(baseName.length()-Doxygen::htmlFileExtension.length());
571
572 //printf("Appending page '%s'\n",qPrint(baseName));
573 if (pd) // replace existing page
574 {
575 pd->setDocumentation(doc,fileName,docLine);
576 pd->setFileName(::convertNameToFile(baseName,false,true));
577 pd->setShowLineNo(false);
578 pd->setNestingLevel(0);
579 pd->setPageScope(nullptr);
580 pd->setTitle(title);
581 pd->setReference(DString());
582 }
583 else // newPage
584 {
585 pd = Doxygen::pageLinkedMap->add(baseName,
586 createPageDef(fileName,docLine,baseName,doc,title));
587 }
588 pd->setBodySegment(startLine,startLine,-1);
589
590 pd->setRefItems(sli);
591 pd->setLanguage(lang);
592
593 if (tagInfo)
594 {
595 pd->setReference(tagInfo->tagName);
596 pd->setFileName(tagInfo->fileName);
597 }
598
599 if (gd) gd->addPage(pd);
600
601 if (pd->hasTitle())
602 {
603 //outputList->writeTitle(pi->name,pi->title);
604
605 // a page name is a label as well!
606 DString file;
607 DString orgFile;
608 int line = -1;
609 if (gd)
610 {
611 file=gd->getOutputFileBase();
612 orgFile=gd->getOutputFileBase();
613 }
614 else
615 {
616 file=pd->getOutputFileBase();
617 orgFile=pd->docFile();
618 line = pd->getStartBodyLine();
619 }
620 const SectionInfo *si = SectionManager::instance().find(pd->name());
621 if (si)
622 {
623 if (!si->ref().empty()) // we are from a tag file
624 {
626 file,-1,pd->title(),SectionType::Page,0,pd->getReference());
627 }
628 else if (si->lineNr() != -1)
629 {
630 warn(orgFile,line,"multiple use of section label '{}', (first occurrence: {}, line {})",pd->name(),si->fileName(),si->lineNr());
631 }
632 else
633 {
634 warn(orgFile,line,"multiple use of section label '{}', (first occurrence: {})",pd->name(),si->fileName());
635 }
636 }
637 else
638 {
640 file,-1,pd->title(),SectionType::Page,0,pd->getReference());
641 //printf("si->label='%s' si->definition=%s si->fileName='%s'\n",
642 // qPrint(si->label),si->definition?si->definition->name().data():"<none>",
643 // qPrint(si->fileName));
644 //printf(" SectionInfo: sec=%p sec->fileName=%s\n",si,qPrint(si->fileName));
645 //printf("Adding section key=%s si->fileName=%s\n",qPrint(pageName),qPrint(si->fileName));
646 }
647 }
648 }
649 return pd;
650}
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:84
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:148
DString right(size_t len) const
Definition dstring.h:311
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:337
DString left(size_t len) const
Definition dstring.h:306
bool endsWith(const char *s) const
Definition dstring.h:617
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:151
virtual const DString & name() const =0
virtual DString getReference() const =0
virtual DString docFile() const =0
virtual int getStartBodyLine() const =0
virtual bool isReference() const =0
virtual DString getOutputFileBase() const =0
virtual void setBodySegment(int defLine, int bls, int ble)=0
virtual void setReference(const DString &r)=0
virtual void setDocumentation(const DString &d, const DString &docFile, int docLine, bool stripWhiteSpace=true)=0
virtual void setLanguage(SrcLangExt lang)=0
virtual void setRefItems(const RefItemVector &sli)=0
static PageLinkedMap * pageLinkedMap
Definition doxygen.h:92
static DString htmlFileExtension
Definition doxygen.h:115
virtual void addPage(PageDef *def)=0
T * add(const char *k, Args &&... args)
Definition linkedmap.h:90
const T * find(const std::string &key) const
Definition linkedmap.h:47
A model of a page symbol.
Definition pagedef.h:27
virtual void setTitle(const DString &title)=0
virtual void setNestingLevel(int)=0
virtual bool hasTitle() const =0
virtual void setFileName(const DString &name)=0
virtual void setShowLineNo(bool)=0
virtual DString title() const =0
virtual void setPageScope(Definition *)=0
class that provide information about a section.
Definition section.h:58
void setTitle(const DString &t)
Definition section.h:84
DString fileName() const
Definition section.h:74
int lineNr() const
Definition section.h:73
DString ref() const
Definition section.h:72
SectionInfo * replace(const DString &label, const DString &fileName, int lineNr, const DString &title, SectionType type, int level, const DString &ref=DString())
Definition section.h:157
SectionInfo * add(const SectionInfo &si)
Definition section.h:139
static SectionManager & instance()
returns a reference to the singleton
Definition section.h:179
static constexpr int Page
Definition section.h:31
DString tagName
Definition entry.h:103
DString fileName
Definition entry.h:104
#define warn(file, line, fmt,...)
Definition message.h:97
std::unique_ptr< PageDef > createPageDef(const DString &f, int l, const DString &n, const DString &d, const DString &t)
Definition pagedef.cpp:89
DString convertNameToFile(const DString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:2863

References LinkedMap< T, Hash, KeyEqual, Map >::add(), SectionManager::add(), GroupDef::addPage(), convertNameToFile(), createPageDef(), Definition::docFile(), DString::empty(), DString::endsWith(), SectionInfo::fileName(), TagInfo::fileName, LinkedMap< T, Hash, KeyEqual, Map >::find(), Definition::getOutputFileBase(), Definition::getReference(), Definition::getStartBodyLine(), PageDef::hasTitle(), Doxygen::htmlFileExtension, SectionManager::instance(), Definition::isReference(), DString::left(), DString::length(), SectionInfo::lineNr(), Definition::name(), SectionType::Page, Doxygen::pageLinkedMap, SectionInfo::ref(), SectionManager::replace(), DString::right(), DefinitionMutable::setBodySegment(), DefinitionMutable::setDocumentation(), PageDef::setFileName(), DefinitionMutable::setLanguage(), PageDef::setNestingLevel(), PageDef::setPageScope(), DefinitionMutable::setReference(), DefinitionMutable::setRefItems(), PageDef::setShowLineNo(), PageDef::setTitle(), SectionInfo::setTitle(), DString::stripWhiteSpace(), TagInfo::tagName, PageDef::title(), and warn.

Referenced by RequirementManager::addRequirement(), PageDef::addRequirementReferences(), CitationManager::generatePage(), and RefList::generatePage().

◆ createPageDef()

std::unique_ptr< PageDef > createPageDef ( const DString & f,
int l,
const DString & n,
const DString & d,
const DString & t )

Definition at line 89 of file pagedef.cpp.

90{
91 return std::make_unique<PageDefImpl>(f,l,n,d,t);
92}

Referenced by addRelatedPage(), PageDef::addRequirementReferences(), buildExampleList(), and findMainPage().

◆ toPageDef() [1/2]

const PageDef * toPageDef ( const Definition * d)

Definition at line 661 of file pagedef.cpp.

662{
663 return (d && typeid(*d) == typeid(PageDefImpl)) ? static_cast<const PageDef*>(d) : nullptr;
664}

◆ toPageDef() [2/2]