Doxygen
Loading...
Searching...
No Matches
pagedef.cpp File Reference
#include "pagedef.h"
#include "groupdef.h"
#include "docparser.h"
#include "config.h"
#include "util.h"
#include "outputlist.h"
#include "doxygen.h"
#include "language.h"
#include "namespacedef.h"
#include "reflist.h"
#include "definitionimpl.h"
#include "indexlist.h"
#include "message.h"
#include "entry.h"
Include dependency graph for pagedef.cpp:

Go to the source code of this file.

Classes

class  PageDefImpl

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, GroupDef *gd, const TagInfo *tagInfo, bool xref, SrcLangExt lang)
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,
GroupDef * gd,
const TagInfo * tagInfo,
bool xref,
SrcLangExt lang )

Definition at line 521 of file pagedef.cpp.

532{
533 PageDef *pd=nullptr;
534 //printf("addRelatedPage(name=%s gd=%p)\n",qPrint(name),gd);
535 DString title=ptitle.stripWhiteSpace();
536 bool newPage = true;
537 if ((pd=Doxygen::pageLinkedMap->find(name)) && !pd->isReference())
538 {
539 if (!xref && !title.empty() && pd->title()!=pd->name() && pd->title()!=title)
540 {
541 warn(fileName,startLine,"multiple use of page label '{}' with different titles, (other occurrence: {}, line: {})",
542 name,pd->docFile(),pd->getStartBodyLine());
543 }
544 if (!title.empty() && pd->title()==pd->name()) // pd has no real title yet
545 {
546 pd->setTitle(title);
548 if (si)
549 {
550 si->setTitle(title);
551 }
552 }
553 // append documentation block to the page.
554 pd->setDocumentation(doc,fileName,docLine);
555 //printf("Adding page docs '%s' pi=%p name=%s\n",qPrint(doc),pd,name);
556 // append (x)refitems to the page.
557 pd->setRefItems(sli);
558 newPage = false;
559 }
560
561 if (newPage) // new page
562 {
563 DString baseName=name;
564 if (baseName.endsWith(".tex"))
565 baseName=baseName.left(baseName.length()-4);
567 baseName=baseName.left(baseName.length()-Doxygen::htmlFileExtension.length());
568
569 //printf("Appending page '%s'\n",qPrint(baseName));
570 if (pd) // replace existing page
571 {
572 pd->setDocumentation(doc,fileName,docLine);
573 pd->setFileName(::convertNameToFile(baseName,false,true));
574 pd->setShowLineNo(false);
575 pd->setNestingLevel(0);
576 pd->setPageScope(nullptr);
577 pd->setTitle(title);
578 pd->setReference(DString());
579 }
580 else // newPage
581 {
582 pd = Doxygen::pageLinkedMap->add(baseName,
583 createPageDef(fileName,docLine,baseName,doc,title));
584 }
585 pd->setBodySegment(startLine,startLine,-1);
586
587 pd->setRefItems(sli);
588 pd->setLanguage(lang);
589
590 if (tagInfo)
591 {
592 pd->setReference(tagInfo->tagName);
593 pd->setFileName(tagInfo->fileName);
594 }
595
596 if (gd) gd->addPage(pd);
597
598 if (pd->hasTitle())
599 {
600 //outputList->writeTitle(pi->name,pi->title);
601
602 // a page name is a label as well!
603 DString file;
604 DString orgFile;
605 int line = -1;
606 if (gd)
607 {
608 file=gd->getOutputFileBase();
609 orgFile=gd->getOutputFileBase();
610 }
611 else
612 {
613 file=pd->getOutputFileBase();
614 orgFile=pd->docFile();
615 line = pd->getStartBodyLine();
616 }
617 const SectionInfo *si = SectionManager::instance().find(pd->name());
618 if (si)
619 {
620 if (!si->ref().empty()) // we are from a tag file
621 {
623 file,-1,pd->title(),SectionType::Page,0,pd->getReference());
624 }
625 else if (si->lineNr() != -1)
626 {
627 warn(orgFile,line,"multiple use of section label '{}', (first occurrence: {}, line {})",pd->name(),si->fileName(),si->lineNr());
628 }
629 else
630 {
631 warn(orgFile,line,"multiple use of section label '{}', (first occurrence: {})",pd->name(),si->fileName());
632 }
633 }
634 else
635 {
637 file,-1,pd->title(),SectionType::Page,0,pd->getReference());
638 //printf("si->label='%s' si->definition=%s si->fileName='%s'\n",
639 // qPrint(si->label),si->definition?si->definition->name().data():"<none>",
640 // qPrint(si->fileName));
641 //printf(" SectionInfo: sec=%p sec->fileName=%s\n",si,qPrint(si->fileName));
642 //printf("Adding section key=%s si->fileName=%s\n",qPrint(pageName),qPrint(si->fileName));
643 }
644 }
645 }
646 return pd;
647}
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:88
DString()=default
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:152
DString right(size_t len) const
Definition dstring.h:315
DString stripWhiteSpace() const
returns a copy of this string with leading and trailing whitespace removed
Definition dstring.h:341
DString left(size_t len) const
Definition dstring.h:310
bool endsWith(const char *s) const
Definition dstring.h:621
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:155
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:86
DString convertNameToFile(const DString &name, bool allowDots, bool allowUnderscore)
Definition util.cpp:2865

References LinkedMap< T, Hash, KeyEqual, Map >::add(), SectionManager::add(), GroupDef::addPage(), addRelatedPage(), convertNameToFile(), createPageDef(), Definition::docFile(), DString::DString(), 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 86 of file pagedef.cpp.

87{
88 return std::make_unique<PageDefImpl>(f,l,n,d,t);
89}

References createPageDef().

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

◆ toPageDef() [1/2]

const PageDef * toPageDef ( const Definition * d)

Definition at line 658 of file pagedef.cpp.

659{
660 return (d && typeid(*d) == typeid(PageDefImpl)) ? static_cast<const PageDef*>(d) : nullptr;
661}

References toPageDef().

◆ toPageDef() [2/2]