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

Concrete visitor implementation for HTML output. More...

#include <src/htmldocvisitor.h>

Inheritance diagram for HtmlDocVisitor:
Collaboration diagram for HtmlDocVisitor:

Public Member Functions

 HtmlDocVisitor (TextStream &t, OutputCodeList &ci, const Definition *ctx, const QCString &fn=QCString())
void operator() (const DocWord &)
void operator() (const DocLinkedWord &)
void operator() (const DocWhiteSpace &)
void operator() (const DocSymbol &)
void operator() (const DocEmoji &)
void operator() (const DocURL &)
void operator() (const DocLineBreak &)
void operator() (const DocHorRuler &)
void operator() (const DocStyleChange &)
void operator() (const DocVerbatim &)
void operator() (const DocAnchor &)
void operator() (const DocInclude &)
void operator() (const DocIncOperator &)
void operator() (const DocFormula &)
void operator() (const DocIndexEntry &)
void operator() (const DocSimpleSectSep &)
void operator() (const DocCite &)
void operator() (const DocSeparator &)
void operator() (const DocAutoList &)
void operator() (const DocAutoListItem &)
void operator() (const DocPara &)
void operator() (const DocRoot &)
void operator() (const DocSimpleSect &)
void operator() (const DocTitle &)
void operator() (const DocSimpleList &)
void operator() (const DocSimpleListItem &)
void operator() (const DocSection &)
void operator() (const DocHtmlList &)
void operator() (const DocHtmlListItem &)
void operator() (const DocHtmlDescList &)
void operator() (const DocHtmlDescTitle &)
void operator() (const DocHtmlDescData &)
void operator() (const DocHtmlTable &)
void operator() (const DocHtmlRow &)
void operator() (const DocHtmlCell &)
void operator() (const DocHtmlCaption &)
void operator() (const DocInternal &)
void operator() (const DocHRef &)
void operator() (const DocHtmlSummary &)
void operator() (const DocHtmlDetails &)
void operator() (const DocHtmlHeader &)
void operator() (const DocImage &)
void operator() (const DocDotFile &)
void operator() (const DocMscFile &)
void operator() (const DocDiaFile &)
void operator() (const DocPlantUmlFile &)
void operator() (const DocLink &)
void operator() (const DocRef &)
void operator() (const DocSecRefItem &)
void operator() (const DocSecRefList &)
void operator() (const DocParamSect &)
void operator() (const DocParamList &)
void operator() (const DocXRefItem &)
void operator() (const DocInternalRef &)
void operator() (const DocText &)
void operator() (const DocHtmlBlockQuote &)
void operator() (const DocVhdlFlow &)
void operator() (const DocParBlock &)
template<class Node>
void forceEndParagraph (const Node &n)
 Used for items found inside a paragraph, which due to XHTML restrictions have to be outside of the paragraph.
template<class Node>
void forceStartParagraph (const Node &n)
 Used for items found inside a paragraph, which due to XHTML restrictions have to be outside of the paragraph.
Public Member Functions inherited from DocVisitor
 DocVisitor ()
virtual ~DocVisitor ()
CodeParserInterfacegetCodeParser (const QCString &langExt)
void pushHidden (bool hide)
bool popHidden ()

Private Member Functions

template<class T>
void visitChildren (const T &t)
template<class T>
void visitCaption (TextStream &t, const T &n)
void writeObfuscatedMailAddress (const QCString &url)
void filter (const QCString &str, const bool retainNewline=false)
QCString filterQuotedCdataAttr (const QCString &str)
 Escape basic entities to produce a valid CDATA attribute value, assume that the outer quoting will be using the double quote ".
void startLink (const QCString &ref, const QCString &file, const QCString &relPath, const QCString &anchor, const QCString &tooltip="")
void endLink ()
void writeDotFile (const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
void writeMscFile (const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
void writeDiaFile (const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
void writePlantUMLFile (const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
template<class DocNode>
void forceEndParagraph (const DocNode &n)
template<class DocNode>
void forceStartParagraph (const DocNode &n)

Private Attributes

TextStreamm_t
OutputCodeListm_ci
bool m_insidePre = false
bool m_hide = false
bool m_insideTitle = false
const Definitionm_ctx
QCString m_fileName
QCString m_langExt

Detailed Description

Concrete visitor implementation for HTML output.

Definition at line 29 of file htmldocvisitor.h.

Constructor & Destructor Documentation

◆ HtmlDocVisitor()

HtmlDocVisitor::HtmlDocVisitor ( TextStream & t,
OutputCodeList & ci,
const Definition * ctx,
const QCString & fn = QCString() )

Definition at line 254 of file htmldocvisitor.cpp.

256 : m_t(t), m_ci(ci), m_ctx(ctx), m_fileName(fn)
257{
258 if (ctx) m_langExt=ctx->getDefFileExtension();
259}
virtual QCString getDefFileExtension() const =0
TextStream & m_t
OutputCodeList & m_ci
const Definition * m_ctx

References Definition::getDefFileExtension(), m_ci, m_ctx, m_fileName, m_langExt, and m_t.

Member Function Documentation

◆ endLink()

void HtmlDocVisitor::endLink ( )
private

Definition at line 2203 of file htmldocvisitor.cpp.

2204{
2205 m_t << "</a>";
2206}

References m_t.

Referenced by operator()(), operator()(), operator()(), operator()(), operator()(), and operator()().

◆ filter()

void HtmlDocVisitor::filter ( const QCString & str,
const bool retainNewline = false )
private

Definition at line 2092 of file htmldocvisitor.cpp.

2093{
2094 if (str.isEmpty()) return;
2095 const char *p=str.data();
2096 while (*p)
2097 {
2098 char c=*p++;
2099 switch(c)
2100 {
2101 case '\n': if(retainNewline) m_t << "<br/>"; m_t << c; break;
2102 case '<': m_t << "&lt;"; break;
2103 case '>': m_t << "&gt;"; break;
2104 case '&': m_t << "&amp;"; break;
2105 case '\\':
2106 if ((*p == '(') || (*p == ')') || (*p == '[') || (*p == ']'))
2107 m_t << "\\&zwj;" << *p++;
2108 else
2109 m_t << c;
2110 break;
2111 default:
2112 {
2113 uint8_t uc = static_cast<uint8_t>(c);
2114 if (uc<32 && !isspace(c)) // non-printable control characters
2115 {
2116 m_t << "&#x24" << hex[uc>>4] << hex[uc&0xF] << ";";
2117 }
2118 else
2119 {
2120 m_t << c;
2121 }
2122 }
2123 break;
2124 }
2125 }
2126}
bool isEmpty() const
Returns TRUE iff the string is empty.
Definition qcstring.h:163
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition qcstring.h:172
static constexpr auto hex

References QCString::data(), hex, QCString::isEmpty(), and m_t.

Referenced by operator()(), operator()(), operator()(), operator()(), operator()(), operator()(), operator()(), and operator()().

◆ filterQuotedCdataAttr()

QCString HtmlDocVisitor::filterQuotedCdataAttr ( const QCString & str)
private

Escape basic entities to produce a valid CDATA attribute value, assume that the outer quoting will be using the double quote ".

Definition at line 2130 of file htmldocvisitor.cpp.

2131{
2132 if (str.isEmpty()) return str;
2133 QCString result;
2134 result.reserve(str.length()+8);
2135 const char *p=str.data();
2136 while (*p)
2137 {
2138 char c=*p++;
2139 switch(c)
2140 {
2141 case '&': result+="&amp;"; break;
2142 case '"': result+="&quot;"; break;
2143 case '<': result+="&lt;"; break;
2144 case '>': result+="&gt;"; break;
2145 case '\\':
2146 if ((*p == '(') || (*p == ')') || (*p == '[') || (*p == ']'))
2147 {
2148 result+="\\&zwj;";
2149 result+=*p++;
2150 }
2151 else
2152 {
2153 result+=c;
2154 }
2155 break;
2156 default:
2157 {
2158 uint8_t uc = static_cast<uint8_t>(c);
2159 if (uc<32 && !isspace(c)) // non-printable control characters
2160 {
2161 result+="&#x24";
2162 result+=hex[uc>>4];
2163 result+=hex[uc&0xF];
2164 result+=";";
2165 }
2166 else
2167 {
2168 result+=c;
2169 }
2170 }
2171 break;
2172 }
2173 }
2174 return result;
2175}
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition qcstring.h:166
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
Definition qcstring.h:185

References QCString::data(), hex, QCString::isEmpty(), QCString::length(), and QCString::reserve().

Referenced by operator()().

◆ forceEndParagraph() [1/2]

◆ forceEndParagraph() [2/2]

template<class Node>
void HtmlDocVisitor::forceEndParagraph ( const Node & n)

Used for items found inside a paragraph, which due to XHTML restrictions have to be outside of the paragraph.

This method will forcefully end the current paragraph and forceStartParagraph() will restart it.

Definition at line 2313 of file htmldocvisitor.cpp.

2314{
2315 const DocPara *para=std::get_if<DocPara>(n.parent());
2316 if (para)
2317 {
2318 const DocNodeList &children = para->children();
2319
2320 //printf("forceEndParagraph\n");
2321 //dumpDocNodeList(children);
2322
2323 auto it = std::find_if(std::begin(children),std::end(children),
2324 [&n](const auto &np) { return holds_value(&n,np); });
2325 if (it==std::end(children)) return;
2326 if (it==std::begin(children)) return; // first node in paragraph
2327 it = std::prev(it);
2328 bool found=false;
2329 while (!found)
2330 {
2331 found = !isInvisibleNode(*it);
2332 if (found) break;
2333 if (it!=std::begin(children))
2334 {
2335 --it;
2336 }
2337 else
2338 {
2339 break;
2340 }
2341 }
2342 if (!found) return; // first visible node in paragraph
2343 const DocNodeVariant &v = *it;
2344 if (mustBeOutsideParagraph(v)) return; // previous node already outside paragraph context
2345 bool styleOutsideParagraph=false;
2346 if (it!=std::begin(children))
2347 {
2348 it = std::prev(it);
2349 styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,it);
2350 }
2351 bool isFirst = false;
2352 bool isLast = false;
2353 getParagraphContext(*para,isFirst,isLast);
2354 //printf("forceEnd first=%d last=%d styleOutsideParagraph=%d\n",isFirst,isLast,styleOutsideParagraph);
2355 if (!std::holds_alternative<DocAutoListItem>(*para->parent()) && isFirst && isLast) return;
2356 if (styleOutsideParagraph) return;
2357
2358 //printf("adding </p>\n");
2359 m_t << "</p>";
2360 }
2361}
DocNodeList & children()
Definition docnode.h:143
DocNodeVariant * parent()
Definition docnode.h:90
std::variant< DocWord, DocLinkedWord, DocURL, DocLineBreak, DocHorRuler, DocAnchor, DocCite, DocStyleChange, DocSymbol, DocEmoji, DocWhiteSpace, DocSeparator, DocVerbatim, DocInclude, DocIncOperator, DocFormula, DocIndexEntry, DocAutoList, DocAutoListItem, DocTitle, DocXRefItem, DocImage, DocDotFile, DocMscFile, DocDiaFile, DocVhdlFlow, DocLink, DocRef, DocInternalRef, DocHRef, DocHtmlHeader, DocHtmlDescTitle, DocHtmlDescList, DocSection, DocSecRefItem, DocSecRefList, DocInternal, DocParBlock, DocSimpleList, DocHtmlList, DocSimpleSect, DocSimpleSectSep, DocParamSect, DocPara, DocParamList, DocSimpleListItem, DocHtmlListItem, DocHtmlDescData, DocHtmlCell, DocHtmlCaption, DocHtmlRow, DocHtmlTable, DocHtmlBlockQuote, DocText, DocRoot, DocHtmlDetails, DocHtmlSummary, DocPlantUmlFile > DocNodeVariant
Definition docnode.h:67
static bool isInvisibleNode(const DocNodeVariant &node)
static contexts_t getParagraphContext(const DocPara &p, bool &isFirst, bool &isLast)
static bool mustBeOutsideParagraph(const DocNodeVariant &n)
static bool insideStyleChangeThatIsOutsideParagraph(const DocPara *para, DocNodeList::const_iterator it)
Returns TRUE if the child nodes in paragraph para until nodeIndex contain a style change node that is...
static bool holds_value(const Node *val, const DocNodeVariant &v)

References DocCompoundNode::children(), getParagraphContext(), holds_value(), insideStyleChangeThatIsOutsideParagraph(), isInvisibleNode(), m_t, mustBeOutsideParagraph(), and DocNode::parent().

◆ forceStartParagraph() [1/2]

◆ forceStartParagraph() [2/2]

template<class Node>
void HtmlDocVisitor::forceStartParagraph ( const Node & n)

Used for items found inside a paragraph, which due to XHTML restrictions have to be outside of the paragraph.

This method will forcefully start the paragraph, that was previously ended by forceEndParagraph().

Definition at line 2368 of file htmldocvisitor.cpp.

2369{
2370 //printf("> forceStartParagraph(%s)\n",docNodeName(n));
2371 const DocPara *para=nullptr;
2372 if (n.parent() && (para = std::get_if<DocPara>(n.parent()))) // if we are inside a paragraph
2373 {
2374 const DocNodeList &children = para->children();
2375
2376 auto it = std::find_if(std::begin(children),
2377 std::end(children),
2378 [&n](const auto &np)
2379 { return holds_value(&n,np); });
2380 if (it==std::end(children)) return;
2381 bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,it);
2382 //printf("it=%s (%p) styleOutsideParagraph=%d\n",
2383 // docNodeName(*it), (void *)&*it, styleOutsideParagraph);
2384 if (styleOutsideParagraph) return;
2385 it = std::next(it);
2386 while (it!=std::end(children) && isInvisibleNode(*it))
2387 {
2388 ++it;
2389 }
2390 if (it!=std::end(children))
2391 {
2392 const DocNodeVariant &v = *it;
2393 if (mustBeOutsideParagraph(v)) return; // next element also outside paragraph
2394 }
2395 else
2396 {
2397 return; // only whitespace at the end!
2398 }
2399
2400 bool needsTag = true;
2401 bool isFirst = false;
2402 bool isLast = false;
2403 getParagraphContext(*para,isFirst,isLast);
2404 if (!std::holds_alternative<DocAutoListItem>(*para->parent()) && isFirst && isLast) needsTag = false;
2405 //printf("forceStart first=%d last=%d needsTag=%d\n",isFirst,isLast,needsTag);
2406
2407 if (needsTag) m_t << "<p>";
2408 }
2409}

References DocCompoundNode::children(), getParagraphContext(), holds_value(), insideStyleChangeThatIsOutsideParagraph(), isInvisibleNode(), m_t, mustBeOutsideParagraph(), and DocNode::parent().

◆ operator()() [1/58]

void HtmlDocVisitor::operator() ( const DocAnchor & anc)

Definition at line 703 of file htmldocvisitor.cpp.

704{
705 if (m_hide) return;
706 m_t << "<a class=\"anchor\" id=\"" << anc.anchor() << "\"" << anc.attribs().toString() << "></a>";
707}
const HtmlAttribList & attribs() const
Definition docnode.h:235
QCString anchor() const
Definition docnode.h:232
QCString toString(QCString *pAltValue=nullptr) const
Definition htmlattrib.h:49

References DocAnchor::anchor(), DocAnchor::attribs(), m_hide, m_t, and HtmlAttribList::toString().

◆ operator()() [2/58]

void HtmlDocVisitor::operator() ( const DocAutoList & l)

Definition at line 1008 of file htmldocvisitor.cpp.

1009{
1010 //printf("DocAutoList::visitPre\n");
1011 if (m_hide) return;
1013 if (l.isEnumList())
1014 {
1015 //
1016 // Do list type based on depth:
1017 // 1.
1018 // a.
1019 // i.
1020 // A.
1021 // 1. (repeat)...
1022 //
1023 m_t << "<ol type=\"" << g_types[l.depth() % NUM_HTML_LIST_TYPES] << "\">";
1024 }
1025 else
1026 {
1027 if (l.isCheckedList())
1028 {
1029 m_t << "<ul class=\"check\">";
1030 }
1031 else
1032 {
1033 m_t << "<ul>";
1034 }
1035 }
1036 if (!l.isPreformatted()) m_t << "\n";
1037 visitChildren(l);
1038 if (l.isEnumList())
1039 {
1040 m_t << "</ol>";
1041 }
1042 else
1043 {
1044 m_t << "</ul>";
1045 }
1046 if (!l.isPreformatted()) m_t << "\n";
1048}
bool isCheckedList() const
Definition docnode.h:582
bool isEnumList() const
Definition docnode.h:580
int depth() const
Definition docnode.h:583
bool isPreformatted() const
Definition docnode.h:105
void forceStartParagraph(const DocNode &n)
void visitChildren(const T &t)
void forceEndParagraph(const DocNode &n)
static const char g_types[][NUM_HTML_LIST_TYPES]
static const int NUM_HTML_LIST_TYPES

References DocAutoList::depth(), forceEndParagraph(), forceStartParagraph(), g_types, DocAutoList::isCheckedList(), DocAutoList::isEnumList(), DocNode::isPreformatted(), m_hide, m_t, NUM_HTML_LIST_TYPES, and visitChildren().

◆ operator()() [3/58]

void HtmlDocVisitor::operator() ( const DocAutoListItem & li)

Definition at line 1050 of file htmldocvisitor.cpp.

1051{
1052 if (m_hide) return;
1053 switch (li.itemNumber())
1054 {
1055 case DocAutoList::Unchecked: // unchecked
1056 m_t << "<li class=\"unchecked\">";
1057 break;
1058 case DocAutoList::Checked_x: // checked with x
1059 case DocAutoList::Checked_X: // checked with X
1060 m_t << "<li class=\"checked\">";
1061 break;
1062 default:
1063 m_t << "<li>";
1064 break;
1065 }
1066 visitChildren(li);
1067 m_t << "</li>";
1068 if (!li.isPreformatted()) m_t << "\n";
1069}
int itemNumber() const
Definition docnode.h:598

References DocAutoList::Checked_X, DocAutoList::Checked_x, DocNode::isPreformatted(), DocAutoListItem::itemNumber(), m_hide, m_t, DocAutoList::Unchecked, and visitChildren().

◆ operator()() [4/58]

void HtmlDocVisitor::operator() ( const DocCite & cite)

Definition at line 982 of file htmldocvisitor.cpp.

983{
984 if (m_hide) return;
985 auto opt = cite.option();
986 if (!cite.file().isEmpty())
987 {
988 if (!opt.noCite()) startLink(cite.ref(),cite.file(),cite.relPath(),cite.anchor());
989 filter(cite.getText());
990 if (!opt.noCite()) endLink();
991 }
992 else
993 {
994 m_t << "<b>";
995 if (!opt.noPar()) filter("[");
996 filter(cite.target());
997 if (!opt.noPar()) filter("]");
998 m_t << "</b>";
999 }
1000}
QCString getText() const
Definition docnode.cpp:959
QCString relPath() const
Definition docnode.h:249
CiteInfoOption option() const
Definition docnode.h:253
QCString target() const
Definition docnode.h:252
QCString anchor() const
Definition docnode.h:251
QCString ref() const
Definition docnode.h:250
QCString file() const
Definition docnode.h:248
void startLink(const QCString &ref, const QCString &file, const QCString &relPath, const QCString &anchor, const QCString &tooltip="")
void filter(const QCString &str, const bool retainNewline=false)

References DocCite::anchor(), endLink(), DocCite::file(), filter(), DocCite::getText(), QCString::isEmpty(), m_hide, m_t, DocCite::option(), DocCite::ref(), DocCite::relPath(), startLink(), and DocCite::target().

◆ operator()() [5/58]

void HtmlDocVisitor::operator() ( const DocDiaFile & df)

Definition at line 1804 of file htmldocvisitor.cpp.

1805{
1806 if (m_hide) return;
1807 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1809 m_t << "<div class=\"diagraph\">\n";
1810 writeDiaFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1811 if (df.hasCaption())
1812 {
1813 m_t << "<div class=\"caption\">\n";
1814 }
1815 visitChildren(df);
1816 if (df.hasCaption())
1817 {
1818 m_t << "</div>\n";
1819 }
1820 m_t << "</div>\n";
1822}
QCString relPath() const
Definition docnode.h:686
QCString srcFile() const
Definition docnode.h:691
QCString file() const
Definition docnode.h:685
int srcLine() const
Definition docnode.h:692
bool hasCaption() const
Definition docnode.h:687
QCString context() const
Definition docnode.h:690
void writeDiaFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
#define Config_getBool(name)
Definition config.h:33
#define Config_getString(name)
Definition config.h:32
QCString stripPath(const QCString &s)
Definition util.cpp:4890
bool copyFile(const QCString &src, const QCString &dest)
Copies the contents of file with name src to the newly created file with name dest.
Definition util.cpp:5809

References Config_getBool, Config_getString, DocDiagramFileBase::context(), copyFile(), DocDiagramFileBase::file(), forceEndParagraph(), forceStartParagraph(), DocDiagramFileBase::hasCaption(), m_hide, m_t, DocDiagramFileBase::relPath(), DocDiagramFileBase::srcFile(), DocDiagramFileBase::srcLine(), stripPath(), visitChildren(), and writeDiaFile().

◆ operator()() [6/58]

void HtmlDocVisitor::operator() ( const DocDotFile & df)

Definition at line 1764 of file htmldocvisitor.cpp.

1765{
1766 if (m_hide) return;
1767 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1769 m_t << "<div class=\"dotgraph\">\n";
1770 writeDotFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1771 if (df.hasCaption())
1772 {
1773 m_t << "<div class=\"caption\">\n";
1774 }
1775 visitChildren(df);
1776 if (df.hasCaption())
1777 {
1778 m_t << "</div>\n";
1779 }
1780 m_t << "</div>\n";
1782}
void writeDotFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)

References Config_getBool, Config_getString, DocDiagramFileBase::context(), copyFile(), DocDiagramFileBase::file(), forceEndParagraph(), forceStartParagraph(), DocDiagramFileBase::hasCaption(), m_hide, m_t, DocDiagramFileBase::relPath(), DocDiagramFileBase::srcFile(), DocDiagramFileBase::srcLine(), stripPath(), visitChildren(), and writeDotFile().

◆ operator()() [7/58]

void HtmlDocVisitor::operator() ( const DocEmoji & s)

Definition at line 330 of file htmldocvisitor.cpp.

331{
332 if (m_hide) return;
333 const char *res = EmojiEntityMapper::instance().unicode(s.index());
334 if (res)
335 {
336 m_t << "<span class=\"emoji\">" << res << "</span>";
337 }
338 else
339 {
340 m_t << s.name();
341 }
342}
int index() const
Definition docnode.h:345
QCString name() const
Definition docnode.h:344
const char * unicode(int index) const
Access routine to the unicode sequence for the Emoji entity.
Definition emoji.cpp:2016
static EmojiEntityMapper & instance()
Returns the one and only instance of the Emoji entity mapper.
Definition emoji.cpp:1978

References DocEmoji::index(), EmojiEntityMapper::instance(), m_hide, m_t, DocEmoji::name(), and EmojiEntityMapper::unicode().

◆ operator()() [8/58]

void HtmlDocVisitor::operator() ( const DocFormula & f)

Definition at line 847 of file htmldocvisitor.cpp.

848{
849 if (m_hide) return;
850 bool bDisplay = !f.isInline();
851 if (bDisplay)
852 {
854 m_t << "<p class=\"formulaDsp\">\n";
855 }
856
857 if (Config_getBool(USE_MATHJAX))
858 {
859 QCString text = f.text();
860 bool closeInline = FALSE;
861 if (!bDisplay && !text.isEmpty() && text.at(0)=='$' &&
862 text.at(text.length()-1)=='$')
863 {
864 closeInline=TRUE;
865 text = text.mid(1,text.length()-2);
866 m_t << "\\(";
867 }
868 else if (!bDisplay && !text.isEmpty())
869 {
870 closeInline=TRUE;
871 m_t << "\\(";
872 }
873 m_t << convertToHtml(text);
874 if (closeInline)
875 {
876 m_t << "\\)";
877 }
878 }
879 else
880 {
881 const Formula *formula = FormulaManager::instance().findFormula(f.id());
882
883 enum class ImageType { Light, Dark };
884 enum class Visibility { Always, Dark, Light, AutoDark, AutoLight };
885 auto writeFormula = [&](ImageType imgType,Visibility visibility) -> QCString {
886 // see https://chipcullen.com/how-to-have-dark-mode-image-that-works-with-user-choice for the design idea
887 TextStream t;
888 QCString extension = Config_getEnum(HTML_FORMULA_FORMAT)==HTML_FORMULA_FORMAT_t::svg ? ".svg":".png" ;
889 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
890 {
891 t << "<picture>";
892 t << "<source srcset=\"" << f.relPath() << f.name();
893 if (visibility==Visibility::AutoDark)
894 {
895 t << extension;
896 t << "\" media=\"(prefers-color-scheme: light)\"";
897 }
898 else // AutoLight
899 {
900 t << "_dark";
901 t << extension;
902 t << "\" media=\"(prefers-color-scheme: dark)\"";
903 }
904 t << "/>";
905 }
906 t << "<img class=\"formula";
907 t << (bDisplay ? "Dsp" : "Inl");
908 if (visibility==Visibility::Light) t << " light-mode-visible";
909 else if (visibility==Visibility::Dark) t << " dark-mode-visible";
910 t << "\" alt=\"" << filterQuotedCdataAttr(f.text()) << "\"" << " src=\"" << f.relPath() << f.name();
911 if (imgType==ImageType::Dark) t << "_dark";
912 t << extension;
913 if (formula && formula->width()!=-1)
914 {
915 t << "\" width=\"";
916 t << formula->width();
917 }
918 if (formula && formula->height()!=-1)
919 {
920 t << "\" height=\"";
921 t << formula->height();
922 }
923 t << "\"/>";
924 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
925 {
926 t << "</picture>";
927 }
928 return t.str();
929 };
930
931 auto colorStyle = Config_getEnum(HTML_COLORSTYLE);
932 switch(colorStyle)
933 {
934 case HTML_COLORSTYLE_t::LIGHT:
935 m_t << writeFormula(ImageType::Light,Visibility::Always);
936 break;
937 case HTML_COLORSTYLE_t::DARK:
938 m_t << writeFormula(ImageType::Dark, Visibility::Always);
939 break;
940 case HTML_COLORSTYLE_t::AUTO_LIGHT:
941 m_t << writeFormula(ImageType::Light, Visibility::AutoLight);
942 break;
943 case HTML_COLORSTYLE_t::AUTO_DARK:
944 m_t << writeFormula(ImageType::Dark, Visibility::AutoDark);
945 break;
946 case HTML_COLORSTYLE_t::TOGGLE:
947 // write the image twice and use javascript (darkmode_toggle.js) to show only one of them
948 m_t << writeFormula(ImageType::Light,Visibility::Light);
949 m_t << writeFormula(ImageType::Dark, Visibility::Dark);
950 break;
951 }
952 }
953 if (bDisplay)
954 {
955 m_t << "\n</p>\n";
957 }
958}
QCString text() const
Definition docnode.h:533
QCString name() const
Definition docnode.h:532
bool isInline() const
Definition docnode.h:536
int id() const
Definition docnode.h:535
QCString relPath() const
Definition docnode.h:534
int width() const
Definition formula.h:34
int height() const
Definition formula.h:35
const Formula * findFormula(int formulaId) const
Definition formula.cpp:705
static FormulaManager & instance()
Definition formula.cpp:54
QCString filterQuotedCdataAttr(const QCString &str)
Escape basic entities to produce a valid CDATA attribute value, assume that the outer quoting will be...
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
Definition qcstring.h:241
char & at(size_t i)
Returns a reference to the character at index i.
Definition qcstring.h:593
std::string str() const
Return the contents of the buffer as a std::string object.
Definition textstream.h:216
#define Config_getEnum(name)
Definition config.h:35
#define TRUE
Definition qcstring.h:37
#define FALSE
Definition qcstring.h:34
QCString convertToHtml(const QCString &s, bool keepEntities)
Definition util.cpp:3905

References QCString::at(), Config_getBool, Config_getEnum, convertToHtml(), FALSE, filterQuotedCdataAttr(), FormulaManager::findFormula(), forceEndParagraph(), forceStartParagraph(), Formula::height(), DocFormula::id(), FormulaManager::instance(), QCString::isEmpty(), DocFormula::isInline(), QCString::length(), m_hide, m_t, QCString::mid(), DocFormula::name(), DocFormula::relPath(), TextStream::str(), DocFormula::text(), TRUE, and Formula::width().

◆ operator()() [9/58]

void HtmlDocVisitor::operator() ( const DocHorRuler & hr)

Definition at line 417 of file htmldocvisitor.cpp.

418{
419 if (m_hide) return;
421 m_t << "<hr "<< hr.attribs().toString() << " />\n";
423}
const HtmlAttribList & attribs() const
Definition docnode.h:221

References DocHorRuler::attribs(), forceEndParagraph(), forceStartParagraph(), m_hide, m_t, and HtmlAttribList::toString().

◆ operator()() [10/58]

void HtmlDocVisitor::operator() ( const DocHRef & href)

Definition at line 1605 of file htmldocvisitor.cpp.

1606{
1607 if (m_hide) return;
1608 if (href.url().startsWith("mailto:"))
1609 {
1611 }
1612 else
1613 {
1614 QCString url = correctURL(href.url(),href.relPath());
1615 m_t << "<a href=\"" << convertToHtml(url) << "\""
1616 << href.attribs().toString() << ">";
1617 }
1618 visitChildren(href);
1619 m_t << "</a>";
1620}
QCString url() const
Definition docnode.h:830
QCString relPath() const
Definition docnode.h:832
const HtmlAttribList & attribs() const
Definition docnode.h:833
void writeObfuscatedMailAddress(const QCString &url)
bool startsWith(const char *s) const
Definition qcstring.h:507
QCString correctURL(const QCString &url, const QCString &relPath)
Corrects URL url according to the relative path relPath.
Definition util.cpp:5877

References DocHRef::attribs(), convertToHtml(), correctURL(), m_hide, m_t, QCString::mid(), DocHRef::relPath(), QCString::startsWith(), HtmlAttribList::toString(), DocHRef::url(), visitChildren(), and writeObfuscatedMailAddress().

◆ operator()() [11/58]

void HtmlDocVisitor::operator() ( const DocHtmlBlockQuote & b)

Definition at line 2048 of file htmldocvisitor.cpp.

2049{
2050 if (m_hide) return;
2052 m_t << "<blockquote class=\"doxtable\"" << b.attribs().toString() << ">\n";
2053 visitChildren(b);
2054 m_t << "</blockquote>\n";
2056}
const HtmlAttribList & attribs() const
Definition docnode.h:1296

References DocHtmlBlockQuote::attribs(), forceEndParagraph(), forceStartParagraph(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [12/58]

void HtmlDocVisitor::operator() ( const DocHtmlCaption & c)

Definition at line 1591 of file htmldocvisitor.cpp.

1592{
1593 if (m_hide) return;
1594 m_t << "<caption" << c.attribs().toString() << ">";
1595 visitChildren(c);
1596 m_t << "</caption>\n";
1597}
const HtmlAttribList & attribs() const
Definition docnode.h:1231

References DocHtmlCaption::attribs(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [13/58]

void HtmlDocVisitor::operator() ( const DocHtmlCell & c)

Definition at line 1576 of file htmldocvisitor.cpp.

1577{
1578 if (m_hide) return;
1579 if (c.isHeading())
1580 {
1581 m_t << "<th" << c.attribs().toString() << ">";
1582 }
1583 else
1584 {
1585 m_t << "<td" << c.attribs().toString() << ">";
1586 }
1587 visitChildren(c);
1588 if (c.isHeading()) m_t << "</th>"; else m_t << "</td>";
1589}
bool isHeading() const
Definition docnode.h:1200
const HtmlAttribList & attribs() const
Definition docnode.h:1205

References DocHtmlCell::attribs(), DocHtmlCell::isHeading(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [14/58]

void HtmlDocVisitor::operator() ( const DocHtmlDescData & dd)

Definition at line 1527 of file htmldocvisitor.cpp.

1528{
1529 if (m_hide) return;
1530 m_t << "<dd" << dd.attribs().toString() << ">";
1531 visitChildren(dd);
1532 m_t << "</dd>\n";
1533}
const HtmlAttribList & attribs() const
Definition docnode.h:1184

References DocHtmlDescData::attribs(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [15/58]

void HtmlDocVisitor::operator() ( const DocHtmlDescList & dl)

Definition at line 1509 of file htmldocvisitor.cpp.

1510{
1511 if (m_hide) return;
1513 m_t << "<dl" << dl.attribs().toString() << ">\n";
1514 visitChildren(dl);
1515 m_t << "</dl>\n";
1517}
const HtmlAttribList & attribs() const
Definition docnode.h:905

References DocHtmlDescList::attribs(), forceEndParagraph(), forceStartParagraph(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [16/58]

void HtmlDocVisitor::operator() ( const DocHtmlDescTitle & dt)

Definition at line 1519 of file htmldocvisitor.cpp.

1520{
1521 if (m_hide) return;
1522 m_t << "<dt" << dt.attribs().toString() << ">";
1523 visitChildren(dt);
1524 m_t << "</dt>\n";
1525}
const HtmlAttribList & attribs() const
Definition docnode.h:892

References DocHtmlDescTitle::attribs(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [17/58]

void HtmlDocVisitor::operator() ( const DocHtmlDetails & d)

Definition at line 1630 of file htmldocvisitor.cpp.

1631{
1632 if (m_hide) return;
1634 m_t << "<details " << d.attribs().toString() << ">\n";
1635 auto summary = d.summary();
1636 if (summary)
1637 {
1638 std::visit(*this,*summary);
1639 }
1640 visitChildren(d);
1641 m_t << "</details>\n";
1643}
const HtmlAttribList & attribs() const
Definition docnode.h:861
const DocNodeVariant * summary() const
Definition docnode.h:864

References DocHtmlDetails::attribs(), forceEndParagraph(), forceStartParagraph(), m_hide, m_t, DocHtmlDetails::summary(), HtmlAttribList::toString(), and visitChildren().

◆ operator()() [18/58]

void HtmlDocVisitor::operator() ( const DocHtmlHeader & header)

Definition at line 1645 of file htmldocvisitor.cpp.

1646{
1647 if (m_hide) return;
1648 forceEndParagraph(header);
1649 m_t << "<h" << header.level() << header.attribs().toString() << ">";
1650 visitChildren(header);
1651 m_t << "</h" << header.level() << ">\n";
1652 forceStartParagraph(header);
1653}
const HtmlAttribList & attribs() const
Definition docnode.h:878
int level() const
Definition docnode.h:877

References DocHtmlHeader::attribs(), forceEndParagraph(), forceStartParagraph(), DocHtmlHeader::level(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [19/58]

void HtmlDocVisitor::operator() ( const DocHtmlList & s)

Definition at line 1474 of file htmldocvisitor.cpp.

1475{
1476 if (m_hide) return;
1478 if (s.type()==DocHtmlList::Ordered)
1479 {
1480 m_t << "<ol" << s.attribs().toString();
1481 }
1482 else
1483 {
1484 m_t << "<ul" << s.attribs().toString();
1485 }
1486 m_t << ">\n";
1487 visitChildren(s);
1488 if (s.type()==DocHtmlList::Ordered)
1489 {
1490 m_t << "</ol>";
1491 }
1492 else
1493 {
1494 m_t << "</ul>";
1495 }
1496 if (!s.isPreformatted()) m_t << "\n";
1498}
const HtmlAttribList & attribs() const
Definition docnode.h:1006
Type type() const
Definition docnode.h:1005

References DocHtmlList::attribs(), forceEndParagraph(), forceStartParagraph(), DocNode::isPreformatted(), m_hide, m_t, DocHtmlList::Ordered, HtmlAttribList::toString(), DocHtmlList::type(), and visitChildren().

◆ operator()() [20/58]

void HtmlDocVisitor::operator() ( const DocHtmlListItem & i)

Definition at line 1500 of file htmldocvisitor.cpp.

1501{
1502 if (m_hide) return;
1503 m_t << "<li" << i.attribs().toString() << ">";
1504 if (!i.isPreformatted()) m_t << "\n";
1505 visitChildren(i);
1506 m_t << "</li>\n";
1507}
const HtmlAttribList & attribs() const
Definition docnode.h:1170

References DocHtmlListItem::attribs(), DocNode::isPreformatted(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [21/58]

void HtmlDocVisitor::operator() ( const DocHtmlRow & tr)

Definition at line 1568 of file htmldocvisitor.cpp.

1569{
1570 if (m_hide) return;
1571 m_t << "<tr" << tr.attribs().toString() << ">\n";
1572 visitChildren(tr);
1573 m_t << "</tr>\n";
1574}
const HtmlAttribList & attribs() const
Definition docnode.h:1252

References DocHtmlRow::attribs(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [22/58]

void HtmlDocVisitor::operator() ( const DocHtmlSummary & s)

Definition at line 1622 of file htmldocvisitor.cpp.

1623{
1624 if (m_hide) return;
1625 m_t << "<summary " << s.attribs().toString() << ">\n";
1626 visitChildren(s);
1627 m_t << "</summary>\n";
1628}
const HtmlAttribList & attribs() const
Definition docnode.h:848

References DocHtmlSummary::attribs(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [23/58]

void HtmlDocVisitor::operator() ( const DocHtmlTable & t)

Definition at line 1535 of file htmldocvisitor.cpp.

1536{
1537 if (m_hide) return;
1538
1540
1541 if (t.caption())
1542 {
1543 QCString anc = std::get<DocHtmlCaption>(*t.caption()).anchor();
1544 if (!anc.isEmpty())
1545 {
1546 m_t << "<a class=\"anchor\" id=\"" << anc << "\"></a>\n";
1547 }
1548 }
1549
1550 QCString attrs = t.attribs().toString();
1551 if (attrs.isEmpty())
1552 {
1553 m_t << "<table class=\"doxtable\">\n";
1554 }
1555 else
1556 {
1557 m_t << "<table" << t.attribs().toString() << ">\n";
1558 }
1559 if (t.caption())
1560 {
1561 std::visit(*this,*t.caption());
1562 }
1563 visitChildren(t);
1564 m_t << "</table>\n";
1566}
const DocNodeVariant * caption() const
Definition docnode.cpp:2189
const HtmlAttribList & attribs() const
Definition docnode.h:1275

References DocHtmlTable::attribs(), DocHtmlTable::caption(), forceEndParagraph(), forceStartParagraph(), QCString::isEmpty(), m_hide, m_t, HtmlAttribList::toString(), and visitChildren().

◆ operator()() [24/58]

void HtmlDocVisitor::operator() ( const DocImage & img)

Definition at line 1655 of file htmldocvisitor.cpp.

1656{
1657 if (img.type()==DocImage::Html)
1658 {
1659 bool inlineImage = img.isInlineImage();
1660 bool typeSVG = img.isSVG();
1661 QCString url = img.url();
1662
1663 if (!inlineImage)
1664 {
1665 forceEndParagraph(img);
1666 }
1667 if (m_hide) return;
1668 QCString baseName=makeShortName(img.name());
1669 if (!inlineImage) m_t << "<div class=\"image\">\n";
1670 QCString sizeAttribs;
1671 if (!img.width().isEmpty())
1672 {
1673 sizeAttribs+=" width=\""+img.width()+"\"";
1674 }
1675 if (!img.height().isEmpty()) // link to local file
1676 {
1677 sizeAttribs+=" height=\""+img.height()+"\"";
1678 }
1679 // 16 cases: url.isEmpty() | typeSVG | inlineImage | img.hasCaption()
1680
1681 HtmlAttribList attribs = img.attribs();
1682 if (typeSVG)
1683 {
1684 attribs.mergeAttribute("style","pointer-events: none;");
1685 }
1686 QCString alt;
1687 QCString attrs = attribs.toString(&alt);
1688 QCString src;
1689 if (url.isEmpty())
1690 {
1691 src = img.relPath()+img.name();
1692 }
1693 else
1694 {
1695 src = correctURL(url,img.relPath());
1696 }
1697 if (typeSVG && !inlineImage && !src.startsWith("http://") && !src.startsWith("https://"))
1698 {
1699 m_t << "<object type=\"image/svg+xml\" data=\"" << convertToHtml(src)
1700 << "\"" << sizeAttribs << attrs;
1701 if (inlineImage)
1702 {
1703 // skip closing tag
1704 }
1705 else
1706 {
1707 m_t << ">" << alt << "</object>\n";
1708 }
1709 }
1710 else
1711 {
1712 m_t << "<img src=\"" << convertToHtml(src) << "\" alt=\"" << alt << "\"" << sizeAttribs << attrs;
1713 if (inlineImage)
1714 {
1715 m_t << " class=\"inline\"";
1716 }
1717 else
1718 {
1719 m_t << "/>\n";
1720 }
1721 }
1722 if (img.hasCaption())
1723 {
1724 if (inlineImage)
1725 {
1726 m_t << " title=\"";
1727 m_insideTitle=true;
1728 }
1729 else
1730 {
1731 m_t << "<div class=\"caption\">\n";
1732 }
1733 }
1734 else if (inlineImage)
1735 {
1736 m_t << "/>";
1737 }
1738
1739 visitChildren(img);
1740
1741 if (img.hasCaption())
1742 {
1743 if (inlineImage)
1744 {
1745 m_t << "\"/>";
1746 m_insideTitle=false;
1747 }
1748 else // end <div class="caption">
1749 {
1750 m_t << "</div>";
1751 }
1752 }
1753 if (!inlineImage) // end <div class="image">
1754 {
1755 m_t << "</div>\n";
1757 }
1758 }
1759 else // other format -> skip
1760 {
1761 }
1762}
const HtmlAttribList & attribs() const
Definition docnode.h:656
QCString relPath() const
Definition docnode.h:652
QCString name() const
Definition docnode.h:648
QCString url() const
Definition docnode.h:653
QCString height() const
Definition docnode.h:651
Type type() const
Definition docnode.h:647
QCString width() const
Definition docnode.h:650
bool isInlineImage() const
Definition docnode.h:654
bool isSVG() const
Definition docnode.cpp:1307
bool hasCaption() const
Definition docnode.h:649
void mergeAttribute(const QCString &optName, const QCString &optValue)
Definition htmlattrib.h:35
static QCString makeShortName(const QCString &baseName)

References DocImage::attribs(), convertToHtml(), correctURL(), forceEndParagraph(), forceStartParagraph(), DocImage::hasCaption(), DocImage::height(), DocImage::Html, QCString::isEmpty(), DocImage::isInlineImage(), DocImage::isSVG(), m_hide, m_insideTitle, m_t, makeShortName(), HtmlAttribList::mergeAttribute(), DocImage::name(), DocImage::relPath(), QCString::startsWith(), HtmlAttribList::toString(), DocImage::type(), DocImage::url(), visitChildren(), and DocImage::width().

◆ operator()() [25/58]

void HtmlDocVisitor::operator() ( const DocInclude & inc)

Definition at line 709 of file htmldocvisitor.cpp.

710{
711 if (m_hide) return;
713 switch(inc.type())
714 {
717 m_ci.startCodeFragment("DoxyCode");
719 inc.context(),
720 inc.text(),
721 langExt,
722 inc.stripCodeComments(),
723 CodeParserOptions()
724 .setExample(inc.isExample(), inc.exampleFile())
725 .setInlineFragment(true)
726 .setShowLineNumbers(false)
727 .setSearchCtx(m_ctx)
728 );
729 m_ci.endCodeFragment("DoxyCode");
731 break;
733 {
735 m_ci.startCodeFragment("DoxyCode");
736 FileInfo cfi( inc.file().str() );
737 auto fd = createFileDef( cfi.dirPath(), cfi.fileName() );
739 inc.context(),
740 inc.text(),
741 langExt,
742 inc.stripCodeComments(),
743 CodeParserOptions()
744 .setExample(inc.isExample(), inc.exampleFile())
745 .setFileDef(fd.get())
746 .setInlineFragment(true)
747 .setSearchCtx(m_ctx)
748 );
749 m_ci.endCodeFragment("DoxyCode");
751 }
752 break;
760 break;
762 {
763 if (inc.isBlock()) forceEndParagraph(inc);
764 m_t << inc.text();
765 if (inc.isBlock()) forceStartParagraph(inc);
766 }
767 break;
770 m_t << "<pre class=\"fragment\">";
771 filter(inc.text());
772 m_t << "</pre>";
774 break;
778 m_ci.startCodeFragment("DoxyCode");
780 inc.file(),
781 inc.blockId(),
782 inc.context(),
784 inc.trimLeft(),
786 );
787 m_ci.endCodeFragment("DoxyCode");
789 break;
790 }
791}
void parseCodeFragment(OutputCodeList &codeOutList, const QCString &fileName, const QCString &blockId, const QCString &scopeName, bool showLineNumbers, bool trimLeft, bool stripCodeComments)
static CodeFragmentManager & instance()
virtual void parseCode(OutputCodeList &codeOutList, const QCString &scopeName, const QCString &input, SrcLangExt lang, bool stripCodeComments, const CodeParserOptions &options)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
QCString blockId() const
Definition docnode.h:454
QCString extension() const
Definition docnode.h:450
bool isBlock() const
Definition docnode.h:458
bool stripCodeComments() const
Definition docnode.h:455
@ LatexInclude
Definition docnode.h:437
@ SnippetWithLines
Definition docnode.h:438
@ DontIncWithLines
Definition docnode.h:439
@ IncWithLines
Definition docnode.h:438
@ HtmlInclude
Definition docnode.h:437
@ VerbInclude
Definition docnode.h:437
@ DontInclude
Definition docnode.h:437
@ DocbookInclude
Definition docnode.h:439
Type type() const
Definition docnode.h:451
QCString exampleFile() const
Definition docnode.h:457
QCString text() const
Definition docnode.h:452
QCString file() const
Definition docnode.h:449
bool trimLeft() const
Definition docnode.h:459
bool isExample() const
Definition docnode.h:456
QCString context() const
Definition docnode.h:453
CodeParserInterface & getCodeParser(const QCString &langExt)
const std::string & str() const
Definition qcstring.h:552
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
Definition filedef.cpp:268
SrcLangExt
Definition types.h:207
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
Definition util.cpp:5147

References DocInclude::blockId(), DocInclude::context(), createFileDef(), FileInfo::dirPath(), DocInclude::DocbookInclude, DocInclude::DontInclude, DocInclude::DontIncWithLines, DocInclude::exampleFile(), DocInclude::extension(), DocInclude::file(), FileInfo::fileName(), filter(), forceEndParagraph(), forceStartParagraph(), DocVisitor::getCodeParser(), getLanguageFromFileName(), DocInclude::HtmlInclude, DocInclude::Include, DocInclude::IncWithLines, CodeFragmentManager::instance(), DocInclude::isBlock(), DocInclude::isExample(), DocInclude::LatexInclude, m_ci, m_ctx, m_hide, m_t, DocInclude::ManInclude, CodeParserInterface::parseCode(), CodeFragmentManager::parseCodeFragment(), DocInclude::RtfInclude, CodeParserOptions::setFileDef(), CodeParserOptions::setInlineFragment(), CodeParserOptions::setSearchCtx(), CodeParserOptions::setShowLineNumbers(), DocInclude::Snippet, DocInclude::SnippetWithLines, QCString::str(), DocInclude::stripCodeComments(), DocInclude::text(), DocInclude::trimLeft(), DocInclude::type(), DocInclude::VerbInclude, and DocInclude::XmlInclude.

◆ operator()() [26/58]

void HtmlDocVisitor::operator() ( const DocIncOperator & op)

Definition at line 793 of file htmldocvisitor.cpp.

794{
795 //printf("DocIncOperator: type=%d first=%d, last=%d text='%s'\n",
796 // op.type(),op.isFirst(),op.isLast(),qPrint(op.text()));
797 if (op.isFirst())
798 {
800 if (!m_hide) m_ci.startCodeFragment("DoxyCode");
802 m_hide=TRUE;
803 }
804 QCString locLangExt = getFileNameExtension(op.includeFileName());
805 if (locLangExt.isEmpty()) locLangExt = m_langExt;
806 SrcLangExt langExt = getLanguageFromFileName(locLangExt);
807 if (op.type()!=DocIncOperator::Skip)
808 {
809 m_hide = popHidden();
810 if (!m_hide)
811 {
812 std::unique_ptr<FileDef> fd;
813 if (!op.includeFileName().isEmpty())
814 {
815 FileInfo cfi( op.includeFileName().str() );
816 fd = createFileDef( cfi.dirPath(), cfi.fileName() );
817 }
818 getCodeParser(locLangExt).parseCode(
819 m_ci,
820 op.context(),
821 op.text(),
822 langExt,
824 CodeParserOptions()
825 .setExample(op.isExample(), op.exampleFile())
826 .setFileDef(fd.get())
827 .setStartLine(op.line())
828 .setShowLineNumbers(op.showLineNo())
829 .setSearchCtx(m_ctx)
830 );
831 }
833 m_hide=TRUE;
834 }
835 if (op.isLast())
836 {
837 m_hide = popHidden();
838 if (!m_hide) m_ci.endCodeFragment("DoxyCode");
840 }
841 else
842 {
843 if (!m_hide) m_t << "\n";
844 }
845}
bool stripCodeComments() const
Definition docnode.h:506
bool isLast() const
Definition docnode.h:503
QCString includeFileName() const
Definition docnode.h:509
QCString text() const
Definition docnode.h:499
QCString context() const
Definition docnode.h:501
QCString exampleFile() const
Definition docnode.h:508
int line() const
Definition docnode.h:497
Type type() const
Definition docnode.h:485
bool isFirst() const
Definition docnode.h:502
bool showLineNo() const
Definition docnode.h:498
bool isExample() const
Definition docnode.h:507
void pushHidden(bool hide)
bool popHidden()
QCString getFileNameExtension(const QCString &fn)
Definition util.cpp:5189

References DocIncOperator::context(), createFileDef(), FileInfo::dirPath(), DocIncOperator::exampleFile(), FileInfo::fileName(), forceEndParagraph(), forceStartParagraph(), DocVisitor::getCodeParser(), getFileNameExtension(), getLanguageFromFileName(), DocIncOperator::includeFileName(), QCString::isEmpty(), DocIncOperator::isExample(), DocIncOperator::isFirst(), DocIncOperator::isLast(), DocIncOperator::line(), m_ci, m_ctx, m_hide, m_langExt, m_t, CodeParserInterface::parseCode(), DocVisitor::popHidden(), DocVisitor::pushHidden(), CodeParserOptions::setFileDef(), CodeParserOptions::setSearchCtx(), CodeParserOptions::setShowLineNumbers(), CodeParserOptions::setStartLine(), DocIncOperator::showLineNo(), DocIncOperator::Skip, QCString::str(), DocIncOperator::stripCodeComments(), DocIncOperator::text(), TRUE, and DocIncOperator::type().

◆ operator()() [27/58]

void HtmlDocVisitor::operator() ( const DocIndexEntry & e)

Definition at line 960 of file htmldocvisitor.cpp.

961{
962 QCString anchor = convertIndexWordToAnchor(e.entry());
963 if (e.member())
964 {
965 anchor.prepend(e.member()->anchor()+"_");
966 }
967 m_t << "<a id=\"" << anchor << "\" name=\"" << anchor << "\"></a>";
968 //printf("*** DocIndexEntry: word='%s' scope='%s' member='%s'\n",
969 // qPrint(e.entry()),
970 // e.scope() ? qPrint(e.scope()->name()) : "<null>",
971 // e.member() ? qPrint(e.member()->name()) : "<null>"
972 // );
973 Doxygen::indexList->addIndexItem(e.scope(),e.member(),anchor,e.entry());
974}
virtual QCString anchor() const =0
QCString entry() const
Definition docnode.h:559
const Definition * scope() const
Definition docnode.h:557
const MemberDef * member() const
Definition docnode.h:558
static IndexList * indexList
Definition doxygen.h:133
void addIndexItem(const Definition *context, const MemberDef *md, const QCString &sectionAnchor=QCString(), const QCString &title=QCString())
Definition indexlist.h:117
QCString & prepend(const char *s)
Definition qcstring.h:422
static QCString convertIndexWordToAnchor(const QCString &word)

References Definition::anchor(), convertIndexWordToAnchor(), DocIndexEntry::entry(), Doxygen::indexList, m_t, DocIndexEntry::member(), QCString::prepend(), and DocIndexEntry::scope().

◆ operator()() [28/58]

void HtmlDocVisitor::operator() ( const DocInternal & i)

Definition at line 1599 of file htmldocvisitor.cpp.

1600{
1601 if (m_hide) return;
1602 visitChildren(i);
1603}

References m_hide, and visitChildren().

◆ operator()() [29/58]

void HtmlDocVisitor::operator() ( const DocInternalRef & ref)

Definition at line 2034 of file htmldocvisitor.cpp.

2035{
2036 if (m_hide) return;
2037 startLink(QCString(),ref.file(),ref.relPath(),ref.anchor());
2038 visitChildren(ref);
2039 endLink();
2040 m_t << " ";
2041}
QCString file() const
Definition docnode.h:811
QCString relPath() const
Definition docnode.h:812
QCString anchor() const
Definition docnode.h:813

References DocInternalRef::anchor(), endLink(), DocInternalRef::file(), m_hide, m_t, DocInternalRef::relPath(), startLink(), and visitChildren().

◆ operator()() [30/58]

void HtmlDocVisitor::operator() ( const DocLineBreak & br)

Definition at line 411 of file htmldocvisitor.cpp.

412{
413 if (m_hide) return;
414 m_t << "<br "<< br.attribs().toString() << " />\n";
415}
const HtmlAttribList & attribs() const
Definition docnode.h:208

References DocLineBreak::attribs(), m_hide, m_t, and HtmlAttribList::toString().

◆ operator()() [31/58]

void HtmlDocVisitor::operator() ( const DocLink & lnk)

Definition at line 1859 of file htmldocvisitor.cpp.

1860{
1861 if (m_hide) return;
1862 startLink(lnk.ref(),lnk.file(),lnk.relPath(),lnk.anchor());
1863 visitChildren(lnk);
1864 endLink();
1865}

References DocLink::anchor(), endLink(), DocLink::file(), m_hide, DocLink::ref(), DocLink::relPath(), startLink(), and visitChildren().

◆ operator()() [32/58]

void HtmlDocVisitor::operator() ( const DocLinkedWord & w)

Definition at line 285 of file htmldocvisitor.cpp.

286{
287 if (m_hide) return;
288 //printf("linked word: %s\n",qPrint(w.word()));
289 startLink(w.ref(),w.file(),w.relPath(),w.anchor(),w.tooltip());
290 filter(w.word());
291 endLink();
292}
QCString file() const
Definition docnode.h:171
QCString relPath() const
Definition docnode.h:172
QCString ref() const
Definition docnode.h:173
QCString word() const
Definition docnode.h:170
QCString anchor() const
Definition docnode.h:174
QCString tooltip() const
Definition docnode.h:175

References DocLinkedWord::anchor(), endLink(), DocLinkedWord::file(), filter(), m_hide, DocLinkedWord::ref(), DocLinkedWord::relPath(), startLink(), DocLinkedWord::tooltip(), and DocLinkedWord::word().

◆ operator()() [33/58]

void HtmlDocVisitor::operator() ( const DocMscFile & df)

Definition at line 1784 of file htmldocvisitor.cpp.

1785{
1786 if (m_hide) return;
1787 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1789 m_t << "<div class=\"mscgraph\">\n";
1790 writeMscFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1791 if (df.hasCaption())
1792 {
1793 m_t << "<div class=\"caption\">\n";
1794 }
1795 visitChildren(df);
1796 if (df.hasCaption())
1797 {
1798 m_t << "</div>\n";
1799 }
1800 m_t << "</div>\n";
1802}
void writeMscFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)

References Config_getBool, Config_getString, DocDiagramFileBase::context(), copyFile(), DocDiagramFileBase::file(), forceEndParagraph(), forceStartParagraph(), DocDiagramFileBase::hasCaption(), m_hide, m_t, DocDiagramFileBase::relPath(), DocDiagramFileBase::srcFile(), DocDiagramFileBase::srcLine(), stripPath(), visitChildren(), and writeMscFile().

◆ operator()() [34/58]

void HtmlDocVisitor::operator() ( const DocPara & p)

Definition at line 1278 of file htmldocvisitor.cpp.

1279{
1280 if (m_hide) return;
1281
1282 //printf("> DocPara\n");
1283 //dumpDocNodeList(p.children());
1284
1285 bool needsTag = determineIfNeedsTag(p);
1286 //printf(" needsTag=%d\n",needsTag);
1287 bool needsTagBefore = needsTag;
1288 bool needsTagAfter = needsTag;
1289
1290 // if the first element of a paragraph is something that should be outside of
1291 // the paragraph (<ul>,<dl>,<table>,..) then that will already started the
1292 // paragraph and we don't need to do it here
1293 if (!p.children().empty())
1294 {
1295 auto it = std::find_if(std::begin(p.children()),std::end(p.children()),
1296 [](const auto &node) { return !isInvisibleNode(node); });
1297 if (it!=std::end(p.children()))
1298 {
1299 const DocNodeVariant &n = *it;
1301 {
1302 needsTagBefore = FALSE;
1303 }
1304 }
1305 }
1306
1307 // check if this paragraph is the first or last or intermediate child of a <li> or <dd>.
1308 // this allows us to mark the tag with a special class so we can
1309 // fix the otherwise ugly spacing.
1310 bool isFirst = false;
1311 bool isLast = false;
1312 contexts_t t = getParagraphContext(p,isFirst,isLast);
1313 //printf("startPara first=%d last=%d\n",isFirst,isLast);
1314 if (!std::holds_alternative<DocAutoListItem>(*p.parent()) && isFirst && isLast) needsTagBefore=FALSE;
1315
1316 //printf(" needsTagBefore=%d\n",needsTagBefore);
1317 // write the paragraph tag (if needed)
1318 if (needsTagBefore)
1319 {
1320 if (contexts(t))
1321 m_t << "<p class=\"" << contexts(t) << "\"" << p.attribs().toString() << ">";
1322 else
1323 m_t << "<p" << p.attribs().toString() << ">";
1324 }
1325
1326 visitChildren(p);
1327
1328 // if the last element of a paragraph is something that should be outside of
1329 // the paragraph (<ul>,<dl>,<table>) then that will already have ended the
1330 // paragraph and we don't need to do it here
1331 if (!p.children().empty())
1332 {
1333 auto it = std::prev(std::end(p.children()));
1334 for (;;)
1335 {
1336 const DocNodeVariant &n = *it;
1337 if (!isInvisibleNode(n))
1338 {
1340 {
1341 needsTagAfter = FALSE;
1342 }
1343 // stop searching if we found a node that is visible
1344 break;
1345 }
1346 if (it==std::begin(p.children()))
1347 {
1348 // stop searching if we are at the beginning of the list
1349 break;
1350 }
1351 else
1352 {
1353 --it;
1354 }
1355 }
1356 }
1357
1358 //printf("endPara first=%d last=%d\n",isFirst,isLast);
1359 if (!std::holds_alternative<DocAutoListItem>(*p.parent()) && isFirst && isLast) needsTagAfter=FALSE;
1360
1361 //printf(" needsTagAfter=%d\n",needsTagAfter);
1362 if (needsTagAfter) m_t << "</p>\n";
1363 //printf("< DocPara\n");
1364}
const HtmlAttribList & attribs() const
Definition docnode.h:1114
bool empty() const
checks whether the container is empty
Definition growvector.h:140
static bool determineIfNeedsTag(const DocPara &p)
static constexpr const char * contexts(contexts_t type)
contexts_t

References DocPara::attribs(), DocCompoundNode::children(), contexts(), determineIfNeedsTag(), GrowVector< T >::empty(), FALSE, getParagraphContext(), isInvisibleNode(), m_hide, m_t, mustBeOutsideParagraph(), DocNode::parent(), HtmlAttribList::toString(), and visitChildren().

◆ operator()() [35/58]

void HtmlDocVisitor::operator() ( const DocParamList & pl)

Definition at line 1954 of file htmldocvisitor.cpp.

1955{
1956 //printf("DocParamList::visitPre\n");
1957 if (m_hide) return;
1958 m_t << " <tr>";
1959 const DocParamSect *sect = std::get_if<DocParamSect>(pl.parent());
1960 if (sect && sect->hasInOutSpecifier())
1961 {
1962 m_t << "<td class=\"paramdir\">";
1964 {
1965 m_t << "[";
1966 if (pl.direction()==DocParamSect::In)
1967 {
1968 m_t << "in";
1969 }
1970 else if (pl.direction()==DocParamSect::Out)
1971 {
1972 m_t << "out";
1973 }
1974 else if (pl.direction()==DocParamSect::InOut)
1975 {
1976 m_t << "in,out";
1977 }
1978 m_t << "]";
1979 }
1980 m_t << "</td>";
1981 }
1982 if (sect && sect->hasTypeSpecifier())
1983 {
1984 m_t << "<td class=\"paramtype\">";
1985 for (const auto &type : pl.paramTypes())
1986 {
1987 std::visit(*this,type);
1988 }
1989 m_t << "</td>";
1990 }
1991 m_t << "<td class=\"paramname\">";
1992 bool first=TRUE;
1993 for (const auto &param : pl.parameters())
1994 {
1995 if (!first) m_t << ","; else first=FALSE;
1996 std::visit(*this,param);
1997 }
1998 m_t << "</td><td>";
1999 for (const auto &par : pl.paragraphs())
2000 {
2001 std::visit(*this,par);
2002 }
2003 m_t << "</td></tr>\n";
2004}
const DocNodeList & parameters() const
Definition docnode.h:1129
const DocNodeList & paramTypes() const
Definition docnode.h:1130
DocParamSect::Direction direction() const
Definition docnode.h:1133
const DocNodeList & paragraphs() const
Definition docnode.h:1131
bool hasInOutSpecifier() const
Definition docnode.h:1069
bool hasTypeSpecifier() const
Definition docnode.h:1070

References DocParamList::direction(), FALSE, DocParamSect::hasInOutSpecifier(), DocParamSect::hasTypeSpecifier(), DocParamSect::In, DocParamSect::InOut, m_hide, m_t, DocParamSect::Out, DocParamList::paragraphs(), DocParamList::parameters(), DocParamList::paramTypes(), DocNode::parent(), TRUE, and DocParamSect::Unspecified.

◆ operator()() [36/58]

void HtmlDocVisitor::operator() ( const DocParamSect & s)

Definition at line 1910 of file htmldocvisitor.cpp.

1911{
1912 if (m_hide) return;
1914 QCString className;
1915 QCString heading;
1916 switch(s.type())
1917 {
1919 heading=theTranslator->trParameters();
1920 className="params";
1921 break;
1923 heading=theTranslator->trReturnValues();
1924 className="retval";
1925 break;
1927 heading=theTranslator->trExceptions();
1928 className="exception";
1929 break;
1932 className="tparams";
1933 break;
1934 default:
1935 ASSERT(0);
1936 }
1937 m_t << "<dl class=\"" << className << "\"><dt>";
1938 m_t << heading;
1939 m_t << "</dt><dd>\n";
1940 m_t << " <table class=\"" << className << "\">\n";
1941 visitChildren(s);
1942 m_t << " </table>\n";
1943 m_t << " </dd>\n";
1944 m_t << "</dl>\n";
1946}
Type type() const
Definition docnode.h:1068
virtual QCString trExceptions()=0
virtual QCString trParameters()=0
virtual QCString trTemplateParameters()=0
virtual QCString trReturnValues()=0
Translator * theTranslator
Definition language.cpp:71
#define ASSERT(x)
Definition qcstring.h:39

References ASSERT, DocParamSect::Exception, forceEndParagraph(), forceStartParagraph(), m_hide, m_t, DocParamSect::Param, DocParamSect::RetVal, DocParamSect::TemplateParam, theTranslator, DocParamSect::type(), and visitChildren().

◆ operator()() [37/58]

void HtmlDocVisitor::operator() ( const DocParBlock & pb)

Definition at line 2086 of file htmldocvisitor.cpp.

2087{
2088 if (m_hide) return;
2089 visitChildren(pb);
2090}

References m_hide, and visitChildren().

◆ operator()() [38/58]

void HtmlDocVisitor::operator() ( const DocPlantUmlFile & df)

Definition at line 1824 of file htmldocvisitor.cpp.

1825{
1826 if (m_hide) return;
1827 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1829 QCString htmlOutput = Config_getString(HTML_OUTPUT);
1830 QCString imgExt = getDotImageExtension();
1831 PlantumlManager::OutputFormat format = PlantumlManager::PUML_BITMAP; // default : PUML_BITMAP
1832 if (imgExt=="svg")
1833 {
1835 }
1836 std::string inBuf;
1837 readInputFile(df.file(),inBuf);
1838 auto baseNameVector = PlantumlManager::instance().writePlantUMLSource(htmlOutput,QCString(),
1839 inBuf,format,QCString(),df.srcFile(),df.srcLine(),false);
1840 for (const auto &bName: baseNameVector)
1841 {
1842 QCString baseName=makeBaseName(bName);
1843 m_t << "<div class=\"plantumlgraph\">\n";
1844 writePlantUMLFile(baseName,df.relPath(),QCString(),df.srcFile(),df.srcLine());
1845 if (df.hasCaption())
1846 {
1847 m_t << "<div class=\"caption\">\n";
1848 }
1849 visitChildren(df);
1850 if (df.hasCaption())
1851 {
1852 m_t << "</div>\n";
1853 }
1854 m_t << "</div>\n";
1855 }
1857}
void writePlantUMLFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine)
OutputFormat
Plant UML output image formats.
Definition plantuml.h:44
StringVector writePlantUMLSource(const QCString &outDirArg, const QCString &fileName, const QCString &content, OutputFormat format, const QCString &engine, const QCString &srcFile, int srcLine, bool inlineCode)
Write a PlantUML compatible file.
Definition plantuml.cpp:31
static PlantumlManager & instance()
Definition plantuml.cpp:231
static QCString makeBaseName(const QCString &name)
bool readInputFile(const QCString &fileName, std::string &contents, bool filter, bool isSourceCode)
read a file name fileName and optionally filter and transcode it
Definition util.cpp:5486
QCString getDotImageExtension()
Definition util.cpp:6239

References Config_getBool, Config_getString, copyFile(), DocDiagramFileBase::file(), forceEndParagraph(), forceStartParagraph(), getDotImageExtension(), DocDiagramFileBase::hasCaption(), PlantumlManager::instance(), m_hide, m_t, makeBaseName(), PlantumlManager::PUML_BITMAP, PlantumlManager::PUML_SVG, readInputFile(), DocDiagramFileBase::relPath(), DocDiagramFileBase::srcFile(), DocDiagramFileBase::srcLine(), stripPath(), visitChildren(), writePlantUMLFile(), and PlantumlManager::writePlantUMLSource().

◆ operator()() [39/58]

void HtmlDocVisitor::operator() ( const DocRef & ref)

Definition at line 1867 of file htmldocvisitor.cpp.

1868{
1869 if (m_hide) return;
1870 if (!ref.file().isEmpty())
1871 {
1872 // when ref.isSubPage()==TRUE we use ref.file() for HTML and
1873 // ref.anchor() for LaTeX/RTF
1874 startLink(ref.ref(),ref.file(),ref.relPath(),ref.isSubPage() ? QCString() : ref.anchor());
1875 }
1876 if (!ref.hasLinkText()) filter(ref.targetTitle());
1877 visitChildren(ref);
1878 if (!ref.file().isEmpty()) endLink();
1879 //m_t << " ";
1880}
QCString anchor() const
Definition docnode.h:785
QCString relPath() const
Definition docnode.h:783
QCString targetTitle() const
Definition docnode.h:786
bool isSubPage() const
Definition docnode.h:792
QCString file() const
Definition docnode.h:782
QCString ref() const
Definition docnode.h:784
bool hasLinkText() const
Definition docnode.h:788

References DocRef::anchor(), endLink(), DocRef::file(), filter(), DocRef::hasLinkText(), QCString::isEmpty(), DocRef::isSubPage(), m_hide, DocRef::ref(), DocRef::relPath(), startLink(), DocRef::targetTitle(), and visitChildren().

◆ operator()() [40/58]

void HtmlDocVisitor::operator() ( const DocRoot & r)

Definition at line 1366 of file htmldocvisitor.cpp.

1367{
1368 //printf("> DocRoot\n");
1369 //dumpDocNodeList(r.children());
1370 visitChildren(r);
1371 //printf("< DocRoot\n");
1372}

References visitChildren().

◆ operator()() [41/58]

void HtmlDocVisitor::operator() ( const DocSecRefItem & ref)

Definition at line 1882 of file htmldocvisitor.cpp.

1883{
1884 if (m_hide) return;
1885 if (!ref.file().isEmpty())
1886 {
1887 m_t << "<li>";
1888 startLink(ref.ref(),ref.file(),ref.relPath(),ref.isSubPage() ? QCString() : ref.anchor());
1889 }
1890 visitChildren(ref);
1891 if (!ref.file().isEmpty())
1892 {
1893 endLink();
1894 m_t << "</li>\n";
1895 }
1896}
QCString relPath() const
Definition docnode.h:941
QCString file() const
Definition docnode.h:939
QCString anchor() const
Definition docnode.h:940
QCString ref() const
Definition docnode.h:942
bool isSubPage() const
Definition docnode.h:944

References DocSecRefItem::anchor(), endLink(), DocSecRefItem::file(), QCString::isEmpty(), DocSecRefItem::isSubPage(), m_hide, m_t, DocSecRefItem::ref(), DocSecRefItem::relPath(), startLink(), and visitChildren().

◆ operator()() [42/58]

void HtmlDocVisitor::operator() ( const DocSecRefList & s)

Definition at line 1898 of file htmldocvisitor.cpp.

1899{
1900 if (m_hide) return;
1902 m_t << "<div>\n";
1903 m_t << "<ul class=\"multicol\">\n";
1904 visitChildren(s);
1905 m_t << "</ul>\n";
1906 m_t << "</div>\n";
1908}

References forceEndParagraph(), forceStartParagraph(), m_hide, m_t, and visitChildren().

◆ operator()() [43/58]

void HtmlDocVisitor::operator() ( const DocSection & s)

Definition at line 1458 of file htmldocvisitor.cpp.

1459{
1460 if (m_hide) return;
1462 m_t << "<h" << s.level() << " class=\"doxsection\">";
1463 m_t << "<a class=\"anchor\" id=\"" << s.anchor();
1464 m_t << "\"></a>\n";
1465 if (s.title())
1466 {
1467 std::visit(*this,*s.title());
1468 }
1469 m_t << "</h" << s.level() << ">\n";
1470 visitChildren(s);
1472}
int level() const
Definition docnode.h:918
QCString anchor() const
Definition docnode.h:920
const DocNodeVariant * title() const
Definition docnode.h:919

References DocSection::anchor(), forceEndParagraph(), forceStartParagraph(), DocSection::level(), m_hide, m_t, DocSection::title(), and visitChildren().

◆ operator()() [44/58]

void HtmlDocVisitor::operator() ( const DocSeparator & s)

Definition at line 1948 of file htmldocvisitor.cpp.

1949{
1950 if (m_hide) return;
1951 m_t << "&#160;" << s.chars() << "&#160;";
1952}
QCString chars() const
Definition docnode.h:369

References DocSeparator::chars(), m_hide, and m_t.

◆ operator()() [45/58]

void HtmlDocVisitor::operator() ( const DocSimpleList & sl)

Definition at line 1434 of file htmldocvisitor.cpp.

1435{
1436 if (m_hide) return;
1438 m_t << "<ul>";
1439 if (!sl.isPreformatted()) m_t << "\n";
1440 visitChildren(sl);
1441 m_t << "</ul>";
1442 if (!sl.isPreformatted()) m_t << "\n";
1444}

References forceEndParagraph(), forceStartParagraph(), DocNode::isPreformatted(), m_hide, m_t, and visitChildren().

◆ operator()() [46/58]

void HtmlDocVisitor::operator() ( const DocSimpleListItem & li)

Definition at line 1446 of file htmldocvisitor.cpp.

1447{
1448 if (m_hide) return;
1449 m_t << "<li>";
1450 if (li.paragraph())
1451 {
1452 visit(*this,*li.paragraph());
1453 }
1454 m_t << "</li>";
1455 if (!li.isPreformatted()) m_t << "\n";
1456}
const DocNodeVariant * paragraph() const
Definition docnode.h:1157

References DocNode::isPreformatted(), m_hide, m_t, and DocSimpleListItem::paragraph().

◆ operator()() [47/58]

void HtmlDocVisitor::operator() ( const DocSimpleSect & s)

Definition at line 1374 of file htmldocvisitor.cpp.

1375{
1376 if (m_hide) return;
1378 m_t << "<dl class=\"section " << s.typeString() << "\"><dt>";
1379 switch(s.type())
1380 {
1381 case DocSimpleSect::See:
1382 m_t << theTranslator->trSeeAlso(); break;
1384 m_t << theTranslator->trReturns(); break;
1386 m_t << theTranslator->trAuthor(TRUE,TRUE); break;
1388 m_t << theTranslator->trAuthor(TRUE,FALSE); break;
1390 m_t << theTranslator->trVersion(); break;
1392 m_t << theTranslator->trSince(); break;
1394 m_t << theTranslator->trDate(); break;
1396 m_t << theTranslator->trNote(); break;
1398 m_t << theTranslator->trWarning(); break;
1399 case DocSimpleSect::Pre:
1400 m_t << theTranslator->trPrecondition(); break;
1402 m_t << theTranslator->trPostcondition(); break;
1404 m_t << theTranslator->trCopyright(); break;
1406 m_t << theTranslator->trInvariant(); break;
1408 m_t << theTranslator->trRemarks(); break;
1410 m_t << theTranslator->trAttention(); break;
1412 m_t << theTranslator->trImportant(); break;
1413 case DocSimpleSect::User: break;
1414 case DocSimpleSect::Rcs: break;
1415 case DocSimpleSect::Unknown: break;
1416 }
1417
1418 if (s.title())
1419 {
1420 std::visit(*this,*s.title());
1421 }
1422 m_t << "</dt><dd>";
1423 visitChildren(s);
1424 m_t << "</dd></dl>\n";
1426}
QCString typeString() const
Definition docnode.cpp:3192
Type type() const
Definition docnode.h:1026
const DocNodeVariant * title() const
Definition docnode.h:1033
virtual QCString trPrecondition()=0
virtual QCString trSince()=0
virtual QCString trVersion()=0
virtual QCString trReturns()=0
virtual QCString trRemarks()=0
virtual QCString trNote()=0
virtual QCString trPostcondition()=0
virtual QCString trAttention()=0
virtual QCString trCopyright()=0
virtual QCString trDate()=0
virtual QCString trAuthor(bool first_capital, bool singular)=0
virtual QCString trWarning()=0
virtual QCString trSeeAlso()=0
virtual QCString trImportant()=0
virtual QCString trInvariant()=0

References DocSimpleSect::Attention, DocSimpleSect::Author, DocSimpleSect::Authors, DocSimpleSect::Copyright, DocSimpleSect::Date, FALSE, forceEndParagraph(), forceStartParagraph(), DocSimpleSect::Important, DocSimpleSect::Invar, m_hide, m_t, DocSimpleSect::Note, DocSimpleSect::Post, DocSimpleSect::Pre, DocSimpleSect::Rcs, DocSimpleSect::Remark, DocSimpleSect::Return, DocSimpleSect::See, DocSimpleSect::Since, theTranslator, DocSimpleSect::title(), TRUE, DocSimpleSect::type(), DocSimpleSect::typeString(), DocSimpleSect::Unknown, DocSimpleSect::User, DocSimpleSect::Version, visitChildren(), and DocSimpleSect::Warning.

◆ operator()() [48/58]

void HtmlDocVisitor::operator() ( const DocSimpleSectSep & )

Definition at line 976 of file htmldocvisitor.cpp.

977{
978 m_t << "</dd>\n";
979 m_t << "<dd>\n";
980}

References m_t.

◆ operator()() [49/58]

void HtmlDocVisitor::operator() ( const DocStyleChange & s)

Definition at line 425 of file htmldocvisitor.cpp.

426{
427 if (m_hide) return;
428 switch (s.style())
429 {
431 if (s.enable()) m_t << "<b" << s.attribs().toString() << ">"; else m_t << "</b>";
432 break;
434 if (s.enable()) m_t << "<s" << s.attribs().toString() << ">"; else m_t << "</s>";
435 break;
437 if (s.enable()) m_t << "<strike" << s.attribs().toString() << ">"; else m_t << "</strike>";
438 break;
440 if (s.enable()) m_t << "<del" << s.attribs().toString() << ">"; else m_t << "</del>";
441 break;
443 if (s.enable()) m_t << "<u" << s.attribs().toString() << ">"; else m_t << "</u>";
444 break;
446 if (s.enable()) m_t << "<ins" << s.attribs().toString() << ">"; else m_t << "</ins>";
447 break;
449 if (s.enable())
450 {
451 auto attribs = s.attribs();
452 if (s.tagName()=="a")
453 {
454 attribs.mergeAttribute("class","arg");
455 }
456 m_t << "<em" << attribs.toString() << ">";
457 }
458 else
459 {
460 m_t << "</em>";
461 }
462 break;
464 if (s.enable()) m_t << "<kbd" << s.attribs().toString() << ">"; else m_t << "</kbd>";
465 break;
467 if (s.enable())
468 {
469 m_t << "<span class=\"tt\"" << s.attribs().toString() << ">";
470 m_insidePre=true;
471 }
472 else
473 {
474 m_t << "</span>";
475 m_insidePre=false;
476 }
477 break;
479 if (s.enable())
480 {
481 auto attribs = s.attribs();
482 if (s.tagName()=="p")
483 {
484 attribs.mergeAttribute("class","param");
485 }
486 m_t << "<code" << attribs.toString() << ">";
487 m_insidePre=true;
488 }
489 else
490 {
491 m_insidePre=false;
492 m_t << "</code>";
493 }
494 break;
496 if (s.enable()) m_t << "<sub" << s.attribs().toString() << ">"; else m_t << "</sub>";
497 break;
499 if (s.enable()) m_t << "<sup" << s.attribs().toString() << ">"; else m_t << "</sup>";
500 break;
502 if (s.enable())
503 {
505 m_t << "<center" << s.attribs().toString() << ">";
506 }
507 else
508 {
509 m_t << "</center>";
511 }
512 break;
514 if (s.enable()) m_t << "<small" << s.attribs().toString() << ">"; else m_t << "</small>";
515 break;
517 if (s.enable()) m_t << "<cite" << s.attribs().toString() << ">"; else m_t << "</cite>";
518 break;
520 if (s.enable())
521 {
523 m_t << "<pre" << s.attribs().toString() << ">";
525 }
526 else
527 {
529 m_t << "</pre>";
531 }
532 break;
534 if (s.enable())
535 {
537 m_t << "<div" << s.attribs().toString() << ">";
538 }
539 else
540 {
541 m_t << "</div>";
543 }
544 break;
546 if (s.enable()) m_t << "<span" << s.attribs().toString() << ">"; else m_t << "</span>";
547 break;
548 }
549}
const HtmlAttribList & attribs() const
Definition docnode.h:311
QCString tagName() const
Definition docnode.h:312
Style style() const
Definition docnode.h:307
bool enable() const
Definition docnode.h:309

References DocStyleChange::attribs(), DocStyleChange::Bold, DocStyleChange::Center, DocStyleChange::Cite, DocStyleChange::Code, DocStyleChange::Del, DocStyleChange::Div, DocStyleChange::enable(), FALSE, forceEndParagraph(), forceStartParagraph(), DocStyleChange::Ins, DocStyleChange::Italic, DocStyleChange::Kbd, m_hide, m_insidePre, m_t, DocStyleChange::Preformatted, DocStyleChange::S, DocStyleChange::Small, DocStyleChange::Span, DocStyleChange::Strike, DocStyleChange::style(), DocStyleChange::Subscript, DocStyleChange::Superscript, DocStyleChange::tagName(), HtmlAttribList::toString(), TRUE, DocStyleChange::Typewriter, and DocStyleChange::Underline.

◆ operator()() [50/58]

void HtmlDocVisitor::operator() ( const DocSymbol & s)

Definition at line 307 of file htmldocvisitor.cpp.

308{
309 if (m_hide) return;
310 if (m_insideTitle &&
311 (s.symbol()==HtmlEntityMapper::Sym_Quot || s.symbol()==HtmlEntityMapper::Sym_quot)) // escape "'s inside title="..."
312 {
313 m_t << "&quot;";
314 }
315 else
316 {
317 const char *res = HtmlEntityMapper::instance().html(s.symbol());
318 if (res)
319 {
320 m_t << res;
321 }
322 else
323 {
324 err("HTML: non supported HTML-entity found: {}\n",
326 }
327 }
328}
HtmlEntityMapper::SymType symbol() const
Definition docnode.h:332
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
const char * html(SymType symb, bool useInPrintf=FALSE) const
Access routine to the html code of the HTML entity.
#define err(fmt,...)
Definition message.h:127

References err, HtmlEntityMapper::html(), HtmlEntityMapper::instance(), m_hide, m_insideTitle, m_t, HtmlEntityMapper::Sym_Quot, HtmlEntityMapper::Sym_quot, DocSymbol::symbol(), and TRUE.

◆ operator()() [51/58]

void HtmlDocVisitor::operator() ( const DocText & t)

Definition at line 2043 of file htmldocvisitor.cpp.

2044{
2045 visitChildren(t);
2046}

References visitChildren().

◆ operator()() [52/58]

void HtmlDocVisitor::operator() ( const DocTitle & t)

Definition at line 1428 of file htmldocvisitor.cpp.

1429{
1430 if (m_hide) return;
1431 visitChildren(t);
1432}

References m_hide, and visitChildren().

◆ operator()() [53/58]

void HtmlDocVisitor::operator() ( const DocURL & u)

Definition at line 372 of file htmldocvisitor.cpp.

373{
374 if (m_hide) return;
375 if (u.isEmail()) // mail address
376 {
377 QCString url = u.url();
378 // obfuscate the mail address link
380 if (!Config_getBool(OBFUSCATE_EMAILS))
381 {
382 m_t << url;
383 }
384 else
385 {
386 const char *p = url.data();
387 // also obfuscate the address as shown on the web page
388 uint32_t size=5;
389 while (*p)
390 {
391 for (uint32_t j=0;j<size && *p;j++)
392 {
393 p = writeUTF8Char(m_t,p);
394 }
395 if (*p) m_t << "<span class=\"obfuscator\">.nosp@m.</span>";
396 if (size==5) size=4; else size=5;
397 }
398 }
399 m_t << "</a>";
400 }
401 else // web address
402 {
403 m_t << "<a href=\"";
404 filter(u.url());
405 m_t << "\">";
406 filter(u.url());
407 m_t << "</a>";
408 }
409}
QCString url() const
Definition docnode.h:192
bool isEmail() const
Definition docnode.h:193
const char * writeUTF8Char(TextStream &t, const char *s)
Writes the UTF8 character pointed to by s to stream t and returns a pointer to the next character.
Definition utf8.cpp:197

References Config_getBool, QCString::data(), filter(), DocURL::isEmail(), m_hide, m_t, DocURL::url(), writeObfuscatedMailAddress(), and writeUTF8Char().

◆ operator()() [54/58]

void HtmlDocVisitor::operator() ( const DocVerbatim & s)

Definition at line 553 of file htmldocvisitor.cpp.

554{
555 if (m_hide) return;
556 QCString lang = m_langExt;
557 if (!s.language().isEmpty()) // explicit language setting
558 {
559 lang = s.language();
560 }
561 SrcLangExt langExt = getLanguageFromCodeLang(lang);
562 switch(s.type())
563 {
566 m_ci.startCodeFragment("DoxyCode");
568 s.context(),
569 s.text(),
570 langExt,
571 Config_getBool(STRIP_CODE_COMMENTS),
572 CodeParserOptions()
573 .setExample(s.isExample(), s.exampleFile())
574 .setInlineFragment(true)
575 .setSearchCtx(m_ctx)
576 );
577 m_ci.endCodeFragment("DoxyCode");
579 break;
582 m_t << "<pre class=\"fragment\">";
583 filter(s.text());
584 m_t << "</pre>";
586 break;
588 filter(s.text(), true);
589 break;
591 m_t << "<code class=\"JavaDocCode\">";
592 filter(s.text(), true);
593 m_t << "</code>";
594 break;
596 {
597 if (s.isBlock()) forceEndParagraph(s);
598 m_t << s.text();
599 if (s.isBlock()) forceStartParagraph(s);
600 }
601 break;
607 /* nothing */
608 break;
609
610 case DocVerbatim::Dot:
611 {
612 static int dotindex = 1;
613 QCString fileName(4096, QCString::ExplicitSize);
614
616 fileName.sprintf("%s%d%s",
617 qPrint(Config_getString(HTML_OUTPUT)+"/inline_dotgraph_"),
618 dotindex++,
619 ".dot"
620 );
621 std::ofstream file = Portable::openOutputStream(fileName);
622 if (!file.is_open())
623 {
624 err("Could not open file {} for writing\n",fileName);
625 }
626 else
627 {
628 QCString stext = s.text();
629 file.write( stext.data(), stext.length() );
630 file.close();
631
632 m_t << "<div class=\"dotgraph\">\n";
633 writeDotFile(fileName,s.relPath(),s.context(),s.srcFile(),s.srcLine());
634 visitCaption(m_t, s);
635 m_t << "</div>\n";
636
637 if (Config_getBool(DOT_CLEANUP)) Dir().remove(fileName.str());
638 }
640 }
641 break;
642 case DocVerbatim::Msc:
643 {
645
646 static int mscindex = 1;
647 QCString baseName(4096, QCString::ExplicitSize);
648
649 baseName.sprintf("%s%d",
650 qPrint(Config_getString(HTML_OUTPUT)+"/inline_mscgraph_"),
651 mscindex++
652 );
653 std::ofstream file = Portable::openOutputStream(baseName.str()+".msc");
654 if (!file.is_open())
655 {
656 err("Could not open file {}.msc for writing\n",baseName);
657 }
658 else
659 {
660 QCString text = "msc {";
661 text+=s.text();
662 text+="}";
663
664 file.write( text.data(), text.length() );
665 file.close();
666
667 m_t << "<div class=\"mscgraph\">\n";
668 writeMscFile(baseName+".msc",s.relPath(),s.context(),s.srcFile(),s.srcLine());
669 visitCaption(m_t, s);
670 m_t << "</div>\n";
671
672 if (Config_getBool(DOT_CLEANUP)) Dir().remove(baseName.str()+".msc");
673 }
675 }
676 break;
678 {
680 QCString htmlOutput = Config_getString(HTML_OUTPUT);
681 QCString imgExt = getDotImageExtension();
682 PlantumlManager::OutputFormat format = PlantumlManager::PUML_BITMAP; // default : PUML_BITMAP
683 if (imgExt=="svg")
684 {
686 }
687 auto baseNameVector = PlantumlManager::instance().writePlantUMLSource(
688 htmlOutput,s.exampleFile(),
689 s.text(),format,s.engine(),s.srcFile(),s.srcLine(),true);
690 for (const auto &baseName: baseNameVector)
691 {
692 m_t << "<div class=\"plantumlgraph\">\n";
693 writePlantUMLFile(baseName,s.relPath(),s.context(),s.srcFile(),s.srcLine());
694 visitCaption(m_t, s);
695 m_t << "</div>\n";
696 }
698 }
699 break;
700 }
701}
QCString srcFile() const
Definition docnode.h:397
int srcLine() const
Definition docnode.h:398
QCString language() const
Definition docnode.h:388
bool isBlock() const
Definition docnode.h:389
bool isExample() const
Definition docnode.h:385
QCString context() const
Definition docnode.h:384
Type type() const
Definition docnode.h:382
QCString text() const
Definition docnode.h:383
QCString exampleFile() const
Definition docnode.h:386
QCString engine() const
Definition docnode.h:393
QCString relPath() const
Definition docnode.h:387
@ JavaDocLiteral
Definition docnode.h:378
void visitCaption(TextStream &t, const T &n)
@ ExplicitSize
Definition qcstring.h:146
std::ofstream openOutputStream(const QCString &name, bool append=false)
Definition portable.cpp:649
const char * qPrint(const char *s)
Definition qcstring.h:687
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
Definition util.cpp:5165

References DocVerbatim::Code, Config_getBool, Config_getString, DocVerbatim::context(), QCString::data(), DocVerbatim::DocbookOnly, DocVerbatim::Dot, DocVerbatim::engine(), err, DocVerbatim::exampleFile(), QCString::ExplicitSize, filter(), forceEndParagraph(), forceStartParagraph(), DocVisitor::getCodeParser(), getDotImageExtension(), getLanguageFromCodeLang(), DocVerbatim::HtmlOnly, PlantumlManager::instance(), DocVerbatim::isBlock(), QCString::isEmpty(), DocVerbatim::isExample(), DocVerbatim::JavaDocCode, DocVerbatim::JavaDocLiteral, DocVerbatim::language(), DocVerbatim::LatexOnly, QCString::length(), m_ci, m_ctx, m_hide, m_langExt, m_t, DocVerbatim::ManOnly, DocVerbatim::Msc, Portable::openOutputStream(), CodeParserInterface::parseCode(), DocVerbatim::PlantUML, PlantumlManager::PUML_BITMAP, PlantumlManager::PUML_SVG, qPrint(), DocVerbatim::relPath(), Dir::remove(), DocVerbatim::RtfOnly, CodeParserOptions::setInlineFragment(), CodeParserOptions::setSearchCtx(), QCString::sprintf(), DocVerbatim::srcFile(), DocVerbatim::srcLine(), QCString::str(), DocVerbatim::text(), DocVerbatim::type(), DocVerbatim::Verbatim, visitCaption(), writeDotFile(), writeMscFile(), writePlantUMLFile(), PlantumlManager::writePlantUMLSource(), and DocVerbatim::XmlOnly.

◆ operator()() [55/58]

void HtmlDocVisitor::operator() ( const DocVhdlFlow & vf)

Definition at line 2058 of file htmldocvisitor.cpp.

2059{
2060 if (m_hide) return;
2061 if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
2062 {
2064 QCString fname=FlowChart::convertNameToFileName();
2065 m_t << "<p>";
2067 m_t << " ";
2068 m_t << "<a href=\"";
2069 m_t << fname;
2070 m_t << ".svg\">";
2072 m_t << "</a>";
2073 if (vf.hasCaption())
2074 {
2075 m_t << "<br />";
2076 }
2077 }
2078 visitChildren(vf);
2079 if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
2080 {
2081 m_t << "</p>";
2083 }
2084}
virtual const QCString & name() const =0
bool hasCaption() const
Definition docnode.h:753
static QCString convertNameToFileName()
virtual QCString trFlowchart()=0
static const MemberDef * getFlowMember()

References FlowChart::convertNameToFileName(), forceEndParagraph(), forceStartParagraph(), VhdlDocGen::getFlowMember(), DocVhdlFlow::hasCaption(), m_hide, m_t, Definition::name(), theTranslator, and visitChildren().

◆ operator()() [56/58]

void HtmlDocVisitor::operator() ( const DocWhiteSpace & w)

Definition at line 294 of file htmldocvisitor.cpp.

295{
296 if (m_hide) return;
297 if (m_insidePre)
298 {
299 m_t << w.chars();
300 }
301 else
302 {
303 m_t << " ";
304 }
305}
QCString chars() const
Definition docnode.h:358

References DocWhiteSpace::chars(), m_hide, m_insidePre, and m_t.

◆ operator()() [57/58]

void HtmlDocVisitor::operator() ( const DocWord & w)

Definition at line 279 of file htmldocvisitor.cpp.

280{
281 if (m_hide) return;
282 filter(w.word());
283}
QCString word() const
Definition docnode.h:156

References filter(), m_hide, and DocWord::word().

◆ operator()() [58/58]

void HtmlDocVisitor::operator() ( const DocXRefItem & x)

Definition at line 2006 of file htmldocvisitor.cpp.

2007{
2008 if (m_hide) return;
2009 if (x.title().isEmpty()) return;
2010
2012 bool anonymousEnum = x.file()=="@";
2013 if (!anonymousEnum)
2014 {
2015 QCString fn = x.file();
2017 m_t << "<dl class=\"" << x.key() << "\"><dt><b><a class=\"el\" href=\""
2018 << x.relPath() << fn
2019 << "#" << x.anchor() << "\">";
2020 }
2021 else
2022 {
2023 m_t << "<dl class=\"" << x.key() << "\"><dt><b>";
2024 }
2025 filter(x.title());
2026 if (!anonymousEnum) m_t << "</a>";
2027 m_t << "</b></dt><dd>";
2028 visitChildren(x);
2029 if (x.title().isEmpty()) return;
2030 m_t << "</dd></dl>\n";
2032}
QCString anchor() const
Definition docnode.h:625
QCString key() const
Definition docnode.h:628
QCString relPath() const
Definition docnode.h:627
QCString file() const
Definition docnode.h:624
QCString title() const
Definition docnode.h:626
void addHtmlExtensionIfMissing(QCString &fName)
Definition util.cpp:4863

References addHtmlExtensionIfMissing(), DocXRefItem::anchor(), DocXRefItem::file(), filter(), forceEndParagraph(), forceStartParagraph(), QCString::isEmpty(), DocXRefItem::key(), m_hide, m_t, DocXRefItem::relPath(), DocXRefItem::title(), and visitChildren().

◆ startLink()

void HtmlDocVisitor::startLink ( const QCString & ref,
const QCString & file,
const QCString & relPath,
const QCString & anchor,
const QCString & tooltip = "" )
private

Definition at line 2177 of file htmldocvisitor.cpp.

2180{
2181 //printf("HtmlDocVisitor: file=%s anchor=%s\n",qPrint(file),qPrint(anchor));
2182 if (!ref.isEmpty()) // link to entity imported via tag file
2183 {
2184 m_t << "<a class=\"elRef\" ";
2186 }
2187 else // local link
2188 {
2189 m_t << "<a class=\"el\" ";
2190 }
2191 m_t << "href=\"";
2192 QCString fn = file;
2194 m_t << createHtmlUrl(relPath,ref,true,
2195 m_fileName == Config_getString(HTML_OUTPUT)+"/"+fn,
2196 fn,
2197 anchor);
2198 m_t << "\"";
2199 if (!tooltip.isEmpty()) m_t << " title=\"" << convertToHtml(tooltip) << "\"";
2200 m_t << ">";
2201}
QCString externalLinkTarget(const bool parent)
Definition util.cpp:5661
QCString createHtmlUrl(const QCString &relPath, const QCString &ref, bool href, bool isLocalFile, const QCString &targetFileName, const QCString &anchor)
Definition util.cpp:5672

References addHtmlExtensionIfMissing(), Config_getString, convertToHtml(), createHtmlUrl(), externalLinkTarget(), QCString::isEmpty(), m_fileName, and m_t.

Referenced by operator()(), operator()(), operator()(), operator()(), operator()(), and operator()().

◆ visitCaption()

template<class T>
void HtmlDocVisitor::visitCaption ( TextStream & t,
const T & n )
private

Definition at line 262 of file htmldocvisitor.cpp.

263{
264 if (n.hasCaption())
265 {
266 t << "<div class=\"caption\">\n";
267 for (const auto &child : n.children())
268 {
269 std::visit(*this, child);
270 }
271 t << "</div>\n";
272 }
273}

Referenced by operator()().

◆ visitChildren()

◆ writeDiaFile()

void HtmlDocVisitor::writeDiaFile ( const QCString & fileName,
const QCString & relPath,
const QCString & context,
const QCString & srcFile,
int srcLine )
private

Definition at line 2232 of file htmldocvisitor.cpp.

2234{
2235 QCString baseName=makeBaseName(fileName);
2236 baseName.prepend("dia_");
2237 QCString outDir = Config_getString(HTML_OUTPUT);
2238 writeDiaGraphFromFile(fileName,outDir,baseName,DiaOutputFormat::BITMAP,srcFile,srcLine);
2239
2240 m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />\n";
2241}
void writeDiaGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, DiaOutputFormat format, const QCString &srcFile, int srcLine)
Definition dia.cpp:26

References BITMAP, Config_getString, m_t, makeBaseName(), QCString::prepend(), and writeDiaGraphFromFile().

Referenced by operator()().

◆ writeDotFile()

void HtmlDocVisitor::writeDotFile ( const QCString & fileName,
const QCString & relPath,
const QCString & context,
const QCString & srcFile,
int srcLine )
private

Definition at line 2208 of file htmldocvisitor.cpp.

2210{
2211 QCString baseName=makeBaseName(fn);
2212 baseName.prepend("dot_");
2213 QCString outDir = Config_getString(HTML_OUTPUT);
2214 writeDotGraphFromFile(fn,outDir,baseName,GraphOutputFormat::BITMAP,srcFile,srcLine);
2215 writeDotImageMapFromFile(m_t,fn,outDir,relPath,baseName,context,-1,srcFile,srcLine);
2216}
void writeDotImageMapFromFile(TextStream &t, const QCString &inFile, const QCString &outDir, const QCString &relPath, const QCString &baseName, const QCString &context, int graphId, const QCString &srcFile, int srcLine)
Definition dot.cpp:283
void writeDotGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, GraphOutputFormat format, const QCString &srcFile, int srcLine)
Definition dot.cpp:230

References BITMAP, Config_getString, m_t, makeBaseName(), QCString::prepend(), writeDotGraphFromFile(), and writeDotImageMapFromFile().

Referenced by operator()(), and operator()().

◆ writeMscFile()

void HtmlDocVisitor::writeMscFile ( const QCString & fileName,
const QCString & relPath,
const QCString & context,
const QCString & srcFile,
int srcLine )
private

Definition at line 2218 of file htmldocvisitor.cpp.

2220{
2221 QCString baseName=makeBaseName(fileName);
2222 baseName.prepend("msc_");
2223 QCString outDir = Config_getString(HTML_OUTPUT);
2224 QCString imgExt = getDotImageExtension();
2226 if ("svg" == imgExt)
2227 mscFormat = MscOutputFormat::SVG;
2228 writeMscGraphFromFile(fileName,outDir,baseName,mscFormat,srcFile,srcLine);
2229 writeMscImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context,mscFormat,srcFile,srcLine);
2230}
void writeMscImageMapFromFile(TextStream &t, const QCString &inFile, const QCString &outDir, const QCString &relPath, const QCString &baseName, const QCString &context, MscOutputFormat format, const QCString &srcFile, int srcLine)
Definition msc.cpp:233
void writeMscGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, MscOutputFormat format, const QCString &srcFile, int srcLine)
Definition msc.cpp:157
MscOutputFormat
Definition msc.h:22

References BITMAP, Config_getString, getDotImageExtension(), m_t, makeBaseName(), QCString::prepend(), SVG, writeMscGraphFromFile(), and writeMscImageMapFromFile().

Referenced by operator()(), and operator()().

◆ writeObfuscatedMailAddress()

void HtmlDocVisitor::writeObfuscatedMailAddress ( const QCString & url)
private

Definition at line 344 of file htmldocvisitor.cpp.

345{
346 if (!Config_getBool(OBFUSCATE_EMAILS))
347 {
348 m_t << "<a href=\"mailto:" << url << "\">";
349 }
350 else
351 {
352 m_t << "<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
353 if (!url.isEmpty())
354 {
355 const char *p = url.data();
356 uint32_t size=3;
357 while (*p)
358 {
359 m_t << "+'";
360 for (uint32_t j=0;j<size && *p;j++)
361 {
362 p = writeUTF8Char(m_t,p);
363 }
364 m_t << "'";
365 if (size==3) size=2; else size=3;
366 }
367 }
368 m_t << "; return false;\">";
369 }
370}

References Config_getBool, QCString::data(), QCString::isEmpty(), m_t, and writeUTF8Char().

Referenced by operator()(), and operator()().

◆ writePlantUMLFile()

void HtmlDocVisitor::writePlantUMLFile ( const QCString & fileName,
const QCString & relPath,
const QCString & context,
const QCString & srcFile,
int srcLine )
private

Definition at line 2243 of file htmldocvisitor.cpp.

2245{
2246 QCString baseName=makeBaseName(fileName);
2247 QCString outDir = Config_getString(HTML_OUTPUT);
2248 QCString imgExt = getDotImageExtension();
2249 if (imgExt=="svg")
2250 {
2252 //m_t << "<iframe scrolling=\"no\" frameborder=\"0\" src=\"" << relPath << baseName << ".svg" << "\" />\n";
2253 //m_t << "<p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p>";
2254 //m_t << "</iframe>\n";
2255 m_t << "<object type=\"image/svg+xml\" data=\"" << relPath << baseName << ".svg\"></object>\n";
2256 }
2257 else
2258 {
2260 m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />\n";
2261 }
2262}
void generatePlantUMLOutput(const QCString &baseName, const QCString &outDir, OutputFormat format)
Convert a PlantUML file to an image.
Definition plantuml.cpp:202

References Config_getString, PlantumlManager::generatePlantUMLOutput(), getDotImageExtension(), PlantumlManager::instance(), m_t, makeBaseName(), PlantumlManager::PUML_BITMAP, and PlantumlManager::PUML_SVG.

Referenced by operator()(), and operator()().

Member Data Documentation

◆ m_ci

OutputCodeList& HtmlDocVisitor::m_ci
private

Definition at line 145 of file htmldocvisitor.h.

Referenced by HtmlDocVisitor(), operator()(), operator()(), and operator()().

◆ m_ctx

const Definition* HtmlDocVisitor::m_ctx
private

Definition at line 149 of file htmldocvisitor.h.

Referenced by HtmlDocVisitor(), operator()(), operator()(), and operator()().

◆ m_fileName

QCString HtmlDocVisitor::m_fileName
private

Definition at line 150 of file htmldocvisitor.h.

Referenced by HtmlDocVisitor(), and startLink().

◆ m_hide

◆ m_insidePre

bool HtmlDocVisitor::m_insidePre = false
private

Definition at line 146 of file htmldocvisitor.h.

Referenced by operator()(), and operator()().

◆ m_insideTitle

bool HtmlDocVisitor::m_insideTitle = false
private

Definition at line 148 of file htmldocvisitor.h.

Referenced by operator()(), and operator()().

◆ m_langExt

QCString HtmlDocVisitor::m_langExt
private

Definition at line 151 of file htmldocvisitor.h.

Referenced by HtmlDocVisitor(), operator()(), and operator()().

◆ m_t


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