Doxygen
Loading...
Searching...
No Matches
ftvhelp.cpp File Reference
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include "ftvhelp.h"
#include "config.h"
#include "message.h"
#include "doxygen.h"
#include "language.h"
#include "htmlgen.h"
#include "layout.h"
#include "pagedef.h"
#include "docparser.h"
#include "htmldocvisitor.h"
#include "filedef.h"
#include "classdef.h"
#include "util.h"
#include "resourcemgr.h"
#include "portable.h"
#include "outputlist.h"
#include "threadpool.h"
Include dependency graph for ftvhelp.cpp:

Go to the source code of this file.

Classes

struct  FTVNode
struct  FTVHelp::Private
struct  NavIndexEntry
class  NavIndexEntryList
struct  JSTreeFile

Typedefs

using FTVNodePtr = std::shared_ptr<FTVNode>
using FTVNodeWeakPtr = std::weak_ptr<FTVNode>
using FTVNodes = std::vector<FTVNodePtr>
using JSTreeFiles = std::vector<JSTreeFile>

Functions

static QCString node2URL (const FTVNodePtr &n, bool overruleFile=FALSE, bool srcLink=FALSE)
static QCString generateIndentLabel (const FTVNodePtr &n, int level)
static void generateIndent (TextStream &t, const FTVNodePtr &n, bool opened)
static void generateBriefDoc (TextStream &t, const Definition *def)
static char compoundIcon (const ClassDef *cd)
static QCString pathToNode (const FTVNodePtr &leaf, const FTVNodePtr &n)
static bool dupOfParent (const FTVNodePtr &n)
static void generateJSLink (TextStream &t, const FTVNodePtr &n)
static QCString convertFileId2Var (const QCString &fileId)
static void collectJSTreeFiles (const FTVNodes &nl, JSTreeFiles &files)
static bool generateJSTree (NavIndexEntryList &navIndex, TextStream &t, const FTVNodes &nl, int level, bool &first)
static void generateJSTreeFiles (NavIndexEntryList &navIndex, TextStream &t, const FTVNodes &nodeList)
static void generateJSNavTree (const FTVNodes &nodeList)

Variables

static int folderId =1
static std::mutex g_navIndexMutex

Typedef Documentation

◆ FTVNodePtr

using FTVNodePtr = std::shared_ptr<FTVNode>

Definition at line 47 of file ftvhelp.cpp.

◆ FTVNodes

using FTVNodes = std::vector<FTVNodePtr>

Definition at line 49 of file ftvhelp.cpp.

◆ FTVNodeWeakPtr

using FTVNodeWeakPtr = std::weak_ptr<FTVNode>

Definition at line 48 of file ftvhelp.cpp.

◆ JSTreeFiles

using JSTreeFiles = std::vector<JSTreeFile>

Definition at line 591 of file ftvhelp.cpp.

Function Documentation

◆ collectJSTreeFiles()

void collectJSTreeFiles ( const FTVNodes & nl,
JSTreeFiles & files )
static

Definition at line 593 of file ftvhelp.cpp.

594{
595 QCString htmlOutput = Config_getString(HTML_OUTPUT);
596 for (const auto &n : nl)
597 {
598 if (n->separateIndex) // add new file if there are children
599 {
600 if (!n->children.empty())
601 {
602 QCString fileId = n->file;
603 files.emplace_back(fileId,n);
604 collectJSTreeFiles(n->children,files);
605 }
606 }
607 else // traverse without adding a new file
608 {
609 collectJSTreeFiles(n->children,files);
610 }
611 }
612}
This is an alternative implementation of QCString.
Definition qcstring.h:101
#define Config_getString(name)
Definition config.h:32
static void collectJSTreeFiles(const FTVNodes &nl, JSTreeFiles &files)
Definition ftvhelp.cpp:593

References collectJSTreeFiles(), and Config_getString.

Referenced by collectJSTreeFiles(), and generateJSTreeFiles().

◆ compoundIcon()

char compoundIcon ( const ClassDef * cd)
static

Definition at line 359 of file ftvhelp.cpp.

360{
361 char icon='C';
362 if (cd->getLanguage() == SrcLangExt::Slice)
363 {
365 {
366 icon='I';
367 }
368 else if (cd->compoundType()==ClassDef::Struct)
369 {
370 icon='S';
371 }
372 else if (cd->compoundType()==ClassDef::Exception)
373 {
374 icon='E';
375 }
376 }
377 return icon;
378}
@ Interface
Definition classdef.h:112
@ Exception
Definition classdef.h:115
virtual CompoundType compoundType() const =0
Returns the type of compound this is, i.e.
virtual SrcLangExt getLanguage() const =0
Returns the programming language this definition was written in.

References ClassDef::compoundType(), ClassDef::Exception, Definition::getLanguage(), ClassDef::Interface, and ClassDef::Struct.

Referenced by FTVHelp::Private::generateTree().

◆ convertFileId2Var()

QCString convertFileId2Var ( const QCString & fileId)
static

Definition at line 575 of file ftvhelp.cpp.

576{
577 QCString varId = fileId;
578 int i=varId.findRev('/');
579 if (i>=0) varId = varId.mid(i+1);
580 return substitute(varId,"-","_");
581}
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
int findRev(char c, int index=-1, bool cs=TRUE) const
Definition qcstring.cpp:96
QCString substitute(const QCString &s, const QCString &src, const QCString &dst)
substitute all occurrences of src in s by dst
Definition qcstring.cpp:571

References QCString::findRev(), QCString::mid(), and substitute().

Referenced by generateJSTreeFiles().

◆ dupOfParent()

bool dupOfParent ( const FTVNodePtr & n)
static

Definition at line 548 of file ftvhelp.cpp.

549{
550 auto parent = n->parent.lock();
551 if (!parent) return FALSE;
552 if (n->file==parent->file) return TRUE;
553 return FALSE;
554}
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:1327
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34

References FALSE, parent(), and TRUE.

Referenced by generateJSTree(), and generateJSTreeFiles().

◆ generateBriefDoc()

void generateBriefDoc ( TextStream & t,
const Definition * def )
static

Definition at line 330 of file ftvhelp.cpp.

331{
332 QCString brief = def->briefDescription(TRUE);
333 //printf("*** %p: generateBriefDoc(%s)='%s'\n",def,qPrint(def->name()),qPrint(brief));
334 if (!brief.isEmpty())
335 {
336 auto parser { createDocParser() };
337 auto ast { validatingParseDoc(*parser.get(),
338 def->briefFile(),
339 def->briefLine(),
340 def,
341 nullptr,
342 brief,
343 DocOptions()
344 .setSingleLine(true)
345 .setLinkFromIndex(true))
346 };
347 const DocNodeAST *astImpl = dynamic_cast<const DocNodeAST*>(ast.get());
348 if (astImpl)
349 {
351 OutputCodeList htmlList;
352 htmlList.add<HtmlCodeGenerator>(&t,relPath);
353 HtmlDocVisitor visitor(t,htmlList,def);
354 std::visit(visitor,astImpl->root);
355 }
356 }
357}
virtual int briefLine() const =0
virtual QCString briefDescription(bool abbreviate=FALSE) const =0
virtual QCString briefFile() const =0
virtual QCString getOutputFileBase() const =0
Class representing the abstract syntax tree of a documentation block.
Definition docnode.h:1463
DocNodeVariant root
Definition docnode.h:1488
Generator for HTML code fragments.
Definition htmlgen.h:26
Concrete visitor implementation for HTML output.
Class representing a list of different code generators.
Definition outputlist.h:165
void add(OutputCodeIntfPtr &&p)
Definition outputlist.h:195
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
IDocNodeASTPtr validatingParseDoc(IDocParser &parserIntf, const QCString &fileName, int startLine, const Definition *ctx, const MemberDef *md, const QCString &input, const DocOptions &options)
IDocParserPtr createDocParser()
factory function to create a parser
Definition docparser.cpp:55
QCString relativePathToRoot(const QCString &name)
Definition util.cpp:3560

References OutputCodeList::add(), Definition::briefDescription(), Definition::briefFile(), Definition::briefLine(), createDocParser(), Definition::getOutputFileBase(), QCString::isEmpty(), relativePathToRoot(), DocNodeAST::root, TRUE, and validatingParseDoc().

Referenced by FTVHelp::Private::generateTree().

◆ generateIndent()

void generateIndent ( TextStream & t,
const FTVNodePtr & n,
bool opened )
static

Definition at line 260 of file ftvhelp.cpp.

261{
262 bool dynamicSections = Config_getBool(HTML_DYNAMIC_SECTIONS);
263 int indent=0;
264 auto parent = n->parent.lock();
265 while (parent) { indent++; parent=parent->parent.lock(); }
266 if (n->isDir && dynamicSections)
267 {
268 const char *ARROW_DOWN = "<span class=\"arrowhead opened\"></span>";
269 const char *ARROW_RIGHT = "<span class=\"arrowhead closed\"></span>";
270 QCString dir = opened ? ARROW_DOWN : ARROW_RIGHT;
271 t << "<span style=\"width:" << (indent*16) << "px;display:inline-block;\">&#160;</span>"
272 << "<span id=\"arr_" << generateIndentLabel(n,0) << "\" class=\"arrow\" ";
273 t << "onclick=\"dynsection.toggleFolder('" << generateIndentLabel(n,0) << "')\"";
274 t << ">" << dir
275 << "</span>";
276 }
277 else
278 {
279 t << "<span style=\"width:" << ((indent+1)*16) << "px;display:inline-block;\">&#160;</span>";
280 }
281}
#define Config_getBool(name)
Definition config.h:33
static QCString generateIndentLabel(const FTVNodePtr &n, int level)
Definition ftvhelp.cpp:248

References Config_getBool, generateIndentLabel(), and parent().

Referenced by FTVHelp::Private::generateTree().

◆ generateIndentLabel()

QCString generateIndentLabel ( const FTVNodePtr & n,
int level )
static

Definition at line 248 of file ftvhelp.cpp.

249{
250 QCString result;
251 auto parent = n->parent.lock();
252 if (parent)
253 {
254 result=generateIndentLabel(parent,level+1);
255 }
256 result+=QCString().setNum(n->index)+"_";
257 return result;
258}
QCString & setNum(short n)
Definition qcstring.h:459

References generateIndentLabel(), parent(), and QCString::setNum().

Referenced by generateIndent(), generateIndentLabel(), and FTVHelp::Private::generateTree().

◆ generateJSLink()

void generateJSLink ( TextStream & t,
const FTVNodePtr & n )
static

Definition at line 556 of file ftvhelp.cpp.

557{
558 bool nameAsHtml = !n->nameAsHtml.isEmpty();
559 QCString result = nameAsHtml ? n->nameAsHtml : n->name;
560 QCString link = convertToJSString(result,nameAsHtml);
561 if (n->file.isEmpty()) // no link
562 {
563 t << "\"" << link << "\", null, ";
564 }
565 else // link into other page
566 {
567 if (Config_getBool(HIDE_SCOPE_NAMES)) result=stripScope(result);
568 t << "\"" << link << "\", \"";
569 t << externalRef("",n->ref,TRUE);
570 t << node2URL(n);
571 t << "\", ";
572 }
573}
static QCString node2URL(const FTVNodePtr &n, bool overruleFile=FALSE, bool srcLink=FALSE)
Definition ftvhelp.cpp:216
QCString externalRef(const QCString &relPath, const QCString &ref, bool href)
Definition util.cpp:5753
QCString convertToJSString(const QCString &s, bool keepEntities, bool singleQuotes)
Definition util.cpp:4004
QCString stripScope(const QCString &name)
Definition util.cpp:3760

References Config_getBool, convertToJSString(), externalRef(), node2URL(), stripScope(), and TRUE.

Referenced by generateJSTree().

◆ generateJSNavTree()

void generateJSNavTree ( const FTVNodes & nodeList)
static

Definition at line 748 of file ftvhelp.cpp.

749{
750 QCString htmlOutput = Config_getString(HTML_OUTPUT);
751 std::ofstream f = Portable::openOutputStream(htmlOutput+"/navtreedata.js");
752 NavIndexEntryList navIndex;
753 if (f.is_open())
754 {
755 TextStream t(&f);
756 //TextStream tidx(&fidx);
757 //tidx << "var NAVTREEINDEX =\n";
758 //tidx << "{\n";
760 t << "var NAVTREE =\n";
761 t << "[\n";
762 t << " [ ";
763 QCString projName = Config_getString(PROJECT_NAME);
764 if (projName.isEmpty())
765 {
766 if (mainPageHasTitle()) // Use title of main page as root
767 {
768 t << "\"" << convertToJSString(Doxygen::mainPage->title()) << "\", ";
769 }
770 else // Use default section title as root
771 {
772 LayoutNavEntry *lne = LayoutDocManager::instance().rootNavEntry()->find(LayoutNavEntry::MainPage);
773 t << "\"" << convertToJSString(lne->title()) << "\", ";
774 }
775 }
776 else // use PROJECT_NAME as root tree element
777 {
778 t << "\"" << convertToJSString(projName) << "\", ";
779 }
780 t << "\"index" << Doxygen::htmlFileExtension << "\", ";
781
782 // add special entry for index page
783 navIndex.emplace_back("index"+Doxygen::htmlFileExtension,"");
784 // related page index is written as a child of index.html, so add this as well
785 navIndex.emplace_back("pages"+Doxygen::htmlFileExtension,"");
786
787 bool first=TRUE;
788 generateJSTree(navIndex,t,nodeList,1,first);
789 generateJSTreeFiles(navIndex,t,nodeList);
790
791 if (first)
792 t << "]\n";
793 else
794 t << "\n ] ]\n";
795 t << "];\n\n";
796
797 // write the navigation index (and sub-indices)
798 std::stable_sort(navIndex.begin(),navIndex.end(),[](const auto &n1,const auto &n2)
799 { return !n1.url.isEmpty() && (n2.url.isEmpty() || (n1.url<n2.url)); });
800
801 int subIndex=0;
802 int elemCount=0;
803 const int maxElemCount=250;
804 std::ofstream tsidx = Portable::openOutputStream(htmlOutput+"/navtreeindex0.js");
805 if (tsidx.is_open())
806 {
807 t << "var NAVTREEINDEX =\n";
808 t << "[\n";
809 tsidx << "var NAVTREEINDEX" << subIndex << " =\n";
810 tsidx << "{\n";
811 first=TRUE;
812 auto it = navIndex.begin();
813 while (it!=navIndex.end())
814 {
815 const NavIndexEntry &e = *it;
816 if (elemCount==0)
817 {
818 if (!first)
819 {
820 t << ",\n";
821 }
822 else
823 {
824 first=FALSE;
825 }
826 t << "\"" << e.url << "\"";
827 }
828 tsidx << "\"" << e.url << "\":[" << e.path << "]";
829 ++it;
830 if (it!=navIndex.end() && elemCount<maxElemCount-1) tsidx << ","; // not last entry
831 tsidx << "\n";
832
833 elemCount++;
834 if (it!=navIndex.end() && elemCount>=maxElemCount) // switch to new sub-index
835 {
836 tsidx << "};\n";
837 elemCount=0;
838 tsidx.close();
839 subIndex++;
840 QCString fileName = htmlOutput+"/navtreeindex"+QCString().setNum(subIndex)+".js";
841 tsidx = Portable::openOutputStream(fileName);
842 if (!tsidx.is_open()) break;
843 tsidx << "var NAVTREEINDEX" << subIndex << " =\n";
844 tsidx << "{\n";
845 }
846 }
847 tsidx << "};\n";
848 t << "\n];\n";
849 }
850 t << "\nconst SYNCONMSG = '" << theTranslator->trPanelSynchronisationTooltip(FALSE) << "';";
851 t << "\nconst SYNCOFFMSG = '" << theTranslator->trPanelSynchronisationTooltip(TRUE) << "';";
852 t << "\nconst LISTOFALLMEMBERS = '" << theTranslator->trListOfAllMembers() << "';";
853 }
854
855 auto &mgr = ResourceMgr::instance();
856 {
857 std::ofstream fn = Portable::openOutputStream(htmlOutput+"/navtree.js");
858 if (fn.is_open())
859 {
860 TextStream t(&fn);
861 t << substitute(
862 substitute(mgr.getAsString("navtree.js"),
863 "$TREEVIEW_WIDTH", QCString().setNum(Config_getInt(TREEVIEW_WIDTH))),
864 "$PROJECTID",getProjectId());
865 }
866 }
867}
static std::unique_ptr< PageDef > mainPage
Definition doxygen.h:100
static QCString htmlFileExtension
Definition doxygen.h:121
static LayoutDocManager & instance()
Returns a reference to this singleton.
Definition layout.cpp:1437
LayoutNavEntry * rootNavEntry() const
returns the (invisible) root of the navigation tree.
Definition layout.cpp:1448
Definition ftvhelp.cpp:532
static ResourceMgr & instance()
Returns the one and only instance of this class.
Text streaming class that buffers data.
Definition textstream.h:36
#define Config_getInt(name)
Definition config.h:34
static bool generateJSTree(NavIndexEntryList &navIndex, TextStream &t, const FTVNodes &nl, int level, bool &first)
Definition ftvhelp.cpp:616
static void generateJSTreeFiles(NavIndexEntryList &navIndex, TextStream &t, const FTVNodes &nodeList)
Definition ftvhelp.cpp:697
constexpr auto JAVASCRIPT_LICENSE_TEXT
Definition ftvhelp.h:72
Translator * theTranslator
Definition language.cpp:71
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:649
Base class for the layout of a navigation item at the top of the HTML pages.
Definition layout.h:156
QCString title() const
Definition layout.h:216
LayoutNavEntry * find(LayoutNavEntry::Kind k, const QCString &file=QCString()) const
Definition layout.cpp:133
Definition ftvhelp.cpp:525
QCString url
Definition ftvhelp.cpp:527
QCString path
Definition ftvhelp.cpp:528
bool mainPageHasTitle()
Definition util.cpp:6284
QCString getProjectId()
Definition util.cpp:6811

References Config_getInt, Config_getString, convertToJSString(), FALSE, LayoutNavEntry::find(), generateJSTree(), generateJSTreeFiles(), getProjectId(), Doxygen::htmlFileExtension, LayoutDocManager::instance(), ResourceMgr::instance(), QCString::isEmpty(), JAVASCRIPT_LICENSE_TEXT, Doxygen::mainPage, mainPageHasTitle(), Portable::openOutputStream(), NavIndexEntry::path, LayoutDocManager::rootNavEntry(), QCString::setNum(), substitute(), theTranslator, LayoutNavEntry::title(), TRUE, and NavIndexEntry::url.

Referenced by FTVHelp::generateTreeViewScripts().

◆ generateJSTree()

bool generateJSTree ( NavIndexEntryList & navIndex,
TextStream & t,
const FTVNodes & nl,
int level,
bool & first )
static

Definition at line 616 of file ftvhelp.cpp.

618{
619 QCString htmlOutput = Config_getString(HTML_OUTPUT);
620 QCString indentStr;
621 indentStr.fill(' ',level*2);
622
623 bool found=FALSE;
624 for (const auto &n : nl)
625 {
626 // terminate previous entry
627 if (!first) t << ",\n";
628 first=FALSE;
629
630 // start entry
631 if (!found)
632 {
633 t << "[\n";
634 }
635 found=TRUE;
636
637 if (n->addToNavIndex) // add entry to the navigation index
638 {
639 std::lock_guard lock(g_navIndexMutex);
640 if (n->def && n->def->definitionType()==Definition::TypeFile)
641 {
642 const FileDef *fd = toFileDef(n->def);
643 bool src = false;
644 bool doc = fileVisibleInIndex(fd,src);
645 if (doc)
646 {
647 navIndex.emplace_back(node2URL(n,TRUE,FALSE),pathToNode(n,n));
648 }
649 if (src)
650 {
651 navIndex.emplace_back(node2URL(n,TRUE,TRUE),pathToNode(n,n));
652 }
653 }
654 else
655 {
656 navIndex.emplace_back(node2URL(n),pathToNode(n,n));
657 }
658 }
659
660 if (n->separateIndex) // store items in a separate file for dynamic loading
661 {
662 t << indentStr << " [ ";
663 generateJSLink(t,n);
664 if (!n->children.empty()) // write children to separate file for dynamic loading
665 {
666 QCString fileId = n->file;
667 if (!n->anchor.isEmpty())
668 {
669 fileId+="_"+n->anchor;
670 }
671 if (dupOfParent(n))
672 {
673 fileId+="_dup";
674 }
675 t << "\"" << fileId << "\" ]";
676 }
677 else // no children
678 {
679 t << "null ]";
680 }
681 }
682 else // show items in this file
683 {
684 bool firstChild=TRUE;
685 t << indentStr << " [ ";
686 generateJSLink(t,n);
687 bool emptySection = !generateJSTree(navIndex,t,n->children,level+1,firstChild);
688 if (emptySection)
689 t << "null ]";
690 else
691 t << "\n" << indentStr << " ] ]";
692 }
693 }
694 return found;
695}
A model of a file symbol.
Definition filedef.h:99
QCString fill(char c, int len=-1)
Fills a string with a predefined character.
Definition qcstring.h:193
FileDef * toFileDef(Definition *d)
Definition filedef.cpp:1967
static bool dupOfParent(const FTVNodePtr &n)
Definition ftvhelp.cpp:548
static void generateJSLink(TextStream &t, const FTVNodePtr &n)
Definition ftvhelp.cpp:556
static std::mutex g_navIndexMutex
Definition ftvhelp.cpp:614
static QCString pathToNode(const FTVNodePtr &leaf, const FTVNodePtr &n)
Definition ftvhelp.cpp:535
bool fileVisibleInIndex(const FileDef *fd, bool &genSourceFile)
Definition util.cpp:6089

References Config_getString, dupOfParent(), FALSE, fileVisibleInIndex(), QCString::fill(), g_navIndexMutex, generateJSLink(), generateJSTree(), node2URL(), pathToNode(), toFileDef(), TRUE, and Definition::TypeFile.

Referenced by generateJSNavTree(), generateJSTree(), and generateJSTreeFiles().

◆ generateJSTreeFiles()

void generateJSTreeFiles ( NavIndexEntryList & navIndex,
TextStream & t,
const FTVNodes & nodeList )
static

Definition at line 697 of file ftvhelp.cpp.

698{
699 QCString htmlOutput = Config_getString(HTML_OUTPUT);
700
701 auto getVarName = [](const FTVNodePtr n)
702 {
703 QCString fileId = n->file;
704 if (!n->anchor.isEmpty()) fileId+="_"+n->anchor;
705 if (dupOfParent(n)) fileId+="_dup";
706 return fileId;
707 };
708
709 auto generateJSFile = [&](const JSTreeFile &tf)
710 {
711 QCString fileId = getVarName(tf.node);
712 QCString fileName = htmlOutput+"/"+fileId+".js";
713 std::ofstream ff = Portable::openOutputStream(fileName);
714 if (ff.is_open())
715 {
716 bool firstChild = true;
717 TextStream tt(&ff);
718 tt << "var " << convertFileId2Var(fileId) << " =\n";
719 generateJSTree(navIndex,tt,tf.node->children,1,firstChild);
720 tt << "\n];";
721 }
722 };
723
724 JSTreeFiles jsTreeFiles;
725 collectJSTreeFiles(nodeList,jsTreeFiles);
726
727 std::size_t numThreads = static_cast<std::size_t>(Config_getInt(NUM_PROC_THREADS));
728 if (numThreads>1) // multi threaded version
729 {
730 ThreadPool threadPool(numThreads);
731 std::vector< std::future<void> > results;
732 for (const auto &tf : jsTreeFiles)
733 {
734 results.emplace_back(threadPool.queue([&](){ generateJSFile(tf); }));
735 }
736 // wait for the results
737 for (auto &f : results) f.get();
738 }
739 else // single threaded version
740 {
741 for (const auto &tf : jsTreeFiles)
742 {
743 generateJSFile(tf);
744 }
745 }
746}
Class managing a pool of worker threads.
Definition threadpool.h:48
std::shared_ptr< FTVNode > FTVNodePtr
Definition ftvhelp.cpp:47
std::vector< JSTreeFile > JSTreeFiles
Definition ftvhelp.cpp:591
static QCString convertFileId2Var(const QCString &fileId)
Definition ftvhelp.cpp:575

References collectJSTreeFiles(), Config_getInt, Config_getString, convertFileId2Var(), dupOfParent(), generateJSTree(), Portable::openOutputStream(), and ThreadPool::queue().

Referenced by generateJSNavTree().

◆ node2URL()

QCString node2URL ( const FTVNodePtr & n,
bool overruleFile = FALSE,
bool srcLink = FALSE )
static

Definition at line 216 of file ftvhelp.cpp.

217{
218 QCString url = n->file;
219 if (!url.isEmpty() && url.at(0)=='!') // relative URL
220 {
221 // remove leading !
222 url = url.mid(1);
223 }
224 else if (!url.isEmpty() && url.at(0)=='^') // absolute URL
225 {
226 // skip, keep ^ in the output
227 }
228 else // local file (with optional anchor)
229 {
230 if (overruleFile && n->def && n->def->definitionType()==Definition::TypeFile)
231 {
232 const FileDef *fd = toFileDef(n->def);
233 if (srcLink)
234 {
235 url = fd->getSourceFileBase();
236 }
237 else
238 {
239 url = fd->getOutputFileBase();
240 }
241 }
243 if (!n->anchor.isEmpty()) url+="#"+n->anchor;
244 }
245 return url;
246}
virtual QCString getSourceFileBase() const =0
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4902

References addHtmlExtensionIfMissing(), QCString::at(), FALSE, Definition::getOutputFileBase(), Definition::getSourceFileBase(), QCString::isEmpty(), QCString::mid(), toFileDef(), and Definition::TypeFile.

Referenced by generateJSLink(), generateJSTree(), and FTVHelp::Private::generateLink().

◆ pathToNode()

QCString pathToNode ( const FTVNodePtr & leaf,
const FTVNodePtr & n )
static

Definition at line 535 of file ftvhelp.cpp.

536{
537 QCString result;
538 auto parent = n->parent.lock();
539 if (parent)
540 {
541 result+=pathToNode(leaf,parent);
542 }
543 result+=QCString().setNum(n->index);
544 if (leaf!=n) result+=",";
545 return result;
546}

References parent(), pathToNode(), and QCString::setNum().

Referenced by generateJSTree(), and pathToNode().

Variable Documentation

◆ folderId

int folderId =1
static

Definition at line 43 of file ftvhelp.cpp.

Referenced by FTVHelp::Private::generateTree().

◆ g_navIndexMutex

std::mutex g_navIndexMutex
static

Definition at line 614 of file ftvhelp.cpp.

Referenced by generateJSTree().