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, bool newFile=true)
void writeMscFile (const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)
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 232 of file htmldocvisitor.cpp.

234 : m_t(t), m_ci(ci), m_ctx(ctx), m_fileName(fn)
235{
236 if (ctx) m_langExt=ctx->getDefFileExtension();
237}
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 2154 of file htmldocvisitor.cpp.

2155{
2156 m_t << "</a>";
2157}

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 2043 of file htmldocvisitor.cpp.

2044{
2045 if (str.isEmpty()) return;
2046 const char *p=str.data();
2047 while (*p)
2048 {
2049 char c=*p++;
2050 switch(c)
2051 {
2052 case '\n': if(retainNewline) m_t << "<br/>"; m_t << c; break;
2053 case '<': m_t << "&lt;"; break;
2054 case '>': m_t << "&gt;"; break;
2055 case '&': m_t << "&amp;"; break;
2056 case '\\':
2057 if ((*p == '(') || (*p == ')') || (*p == '[') || (*p == ']'))
2058 m_t << "\\&zwj;" << *p++;
2059 else
2060 m_t << c;
2061 break;
2062 default:
2063 {
2064 uint8_t uc = static_cast<uint8_t>(c);
2065 if (uc<32 && !isspace(c)) // non-printable control characters
2066 {
2067 m_t << "&#x24" << hex[uc>>4] << hex[uc&0xF] << ";";
2068 }
2069 else
2070 {
2071 m_t << c;
2072 }
2073 }
2074 break;
2075 }
2076 }
2077}
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 2081 of file htmldocvisitor.cpp.

2082{
2083 if (str.isEmpty()) return str;
2084 QCString result;
2085 result.reserve(str.length()+8);
2086 const char *p=str.data();
2087 while (*p)
2088 {
2089 char c=*p++;
2090 switch(c)
2091 {
2092 case '&': result+="&amp;"; break;
2093 case '"': result+="&quot;"; break;
2094 case '<': result+="&lt;"; break;
2095 case '>': result+="&gt;"; break;
2096 case '\\':
2097 if ((*p == '(') || (*p == ')') || (*p == '[') || (*p == ']'))
2098 {
2099 result+="\\&zwj;";
2100 result+=*p++;
2101 }
2102 else
2103 {
2104 result+=c;
2105 }
2106 break;
2107 default:
2108 {
2109 uint8_t uc = static_cast<uint8_t>(c);
2110 if (uc<32 && !isspace(c)) // non-printable control characters
2111 {
2112 result+="&#x24";
2113 result+=hex[uc>>4];
2114 result+=hex[uc&0xF];
2115 result+=";";
2116 }
2117 else
2118 {
2119 result+=c;
2120 }
2121 }
2122 break;
2123 }
2124 }
2125 return result;
2126}
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 2262 of file htmldocvisitor.cpp.

2263{
2264 const DocPara *para=std::get_if<DocPara>(n.parent());
2265 if (para)
2266 {
2267 const DocNodeList &children = para->children();
2268
2269 //printf("forceEndParagraph\n");
2270 //dumpDocNodeList(children);
2271
2272 auto it = std::find_if(std::begin(children),std::end(children),
2273 [&n](const auto &np) { return holds_value(&n,np); });
2274 if (it==std::end(children)) return;
2275 if (it==std::begin(children)) return; // first node in paragraph
2276 it = std::prev(it);
2277 bool found=false;
2278 while (!found)
2279 {
2280 found = !isInvisibleNode(*it);
2281 if (found) break;
2282 if (it!=std::begin(children))
2283 {
2284 --it;
2285 }
2286 else
2287 {
2288 break;
2289 }
2290 }
2291 if (!found) return; // first visible node in paragraph
2292 const DocNodeVariant &v = *it;
2293 if (mustBeOutsideParagraph(v)) return; // previous node already outside paragraph context
2294 bool styleOutsideParagraph=false;
2295 if (it!=std::begin(children))
2296 {
2297 it = std::prev(it);
2298 styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,it);
2299 }
2300 bool isFirst = false;
2301 bool isLast = false;
2302 getParagraphContext(*para,isFirst,isLast);
2303 //printf("forceEnd first=%d last=%d styleOutsideParagraph=%d\n",isFirst,isLast,styleOutsideParagraph);
2304 if (!std::holds_alternative<DocAutoListItem>(*para->parent()) && isFirst && isLast) return;
2305 if (styleOutsideParagraph) return;
2306
2307 //printf("adding </p>\n");
2308 m_t << "</p>";
2309 }
2310}
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 2317 of file htmldocvisitor.cpp.

2318{
2319 //printf("> forceStartParagraph(%s)\n",docNodeName(n));
2320 const DocPara *para=nullptr;
2321 if (n.parent() && (para = std::get_if<DocPara>(n.parent()))) // if we are inside a paragraph
2322 {
2323 const DocNodeList &children = para->children();
2324
2325 auto it = std::find_if(std::begin(children),
2326 std::end(children),
2327 [&n](const auto &np)
2328 { return holds_value(&n,np); });
2329 if (it==std::end(children)) return;
2330 bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,it);
2331 //printf("it=%s (%p) styleOutsideParagraph=%d\n",
2332 // docNodeName(*it), (void *)&*it, styleOutsideParagraph);
2333 if (styleOutsideParagraph) return;
2334 it = std::next(it);
2335 while (it!=std::end(children) && isInvisibleNode(*it))
2336 {
2337 ++it;
2338 }
2339 if (it!=std::end(children))
2340 {
2341 const DocNodeVariant &v = *it;
2342 if (mustBeOutsideParagraph(v)) return; // next element also outside paragraph
2343 }
2344 else
2345 {
2346 return; // only whitespace at the end!
2347 }
2348
2349 bool needsTag = true;
2350 bool isFirst = false;
2351 bool isLast = false;
2352 getParagraphContext(*para,isFirst,isLast);
2353 if (!std::holds_alternative<DocAutoListItem>(*para->parent()) && isFirst && isLast) needsTag = false;
2354 //printf("forceStart first=%d last=%d needsTag=%d\n",isFirst,isLast,needsTag);
2355
2356 if (needsTag) m_t << "<p>";
2357 }
2358}

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 654 of file htmldocvisitor.cpp.

655{
656 if (m_hide) return;
657 m_t << "<a class=\"anchor\" id=\"" << anc.anchor() << "\"" << anc.attribs().toString() << "></a>";
658}
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 959 of file htmldocvisitor.cpp.

960{
961 //printf("DocAutoList::visitPre\n");
962 if (m_hide) return;
964 if (l.isEnumList())
965 {
966 //
967 // Do list type based on depth:
968 // 1.
969 // a.
970 // i.
971 // A.
972 // 1. (repeat)...
973 //
974 m_t << "<ol type=\"" << g_types[l.depth() % NUM_HTML_LIST_TYPES] << "\">";
975 }
976 else
977 {
978 if (l.isCheckedList())
979 {
980 m_t << "<ul class=\"check\">";
981 }
982 else
983 {
984 m_t << "<ul>";
985 }
986 }
987 if (!l.isPreformatted()) m_t << "\n";
988 visitChildren(l);
989 if (l.isEnumList())
990 {
991 m_t << "</ol>";
992 }
993 else
994 {
995 m_t << "</ul>";
996 }
997 if (!l.isPreformatted()) m_t << "\n";
999}
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 1001 of file htmldocvisitor.cpp.

1002{
1003 if (m_hide) return;
1004 switch (li.itemNumber())
1005 {
1006 case DocAutoList::Unchecked: // unchecked
1007 m_t << "<li class=\"unchecked\">";
1008 break;
1009 case DocAutoList::Checked_x: // checked with x
1010 case DocAutoList::Checked_X: // checked with X
1011 m_t << "<li class=\"checked\">";
1012 break;
1013 default:
1014 m_t << "<li>";
1015 break;
1016 }
1017 visitChildren(li);
1018 m_t << "</li>";
1019 if (!li.isPreformatted()) m_t << "\n";
1020}
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 933 of file htmldocvisitor.cpp.

934{
935 if (m_hide) return;
936 auto opt = cite.option();
937 if (!cite.file().isEmpty())
938 {
939 if (!opt.noCite()) startLink(cite.ref(),cite.file(),cite.relPath(),cite.anchor());
940 filter(cite.getText());
941 if (!opt.noCite()) endLink();
942 }
943 else
944 {
945 m_t << "<b>";
946 if (!opt.noPar()) filter("[");
947 filter(cite.target());
948 if (!opt.noPar()) filter("]");
949 m_t << "</b>";
950 }
951}
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 1755 of file htmldocvisitor.cpp.

1756{
1757 if (m_hide) return;
1758 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1760 m_t << "<div class=\"diagraph\">\n";
1761 writeDiaFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1762 if (df.hasCaption())
1763 {
1764 m_t << "<div class=\"caption\">\n";
1765 }
1766 visitChildren(df);
1767 if (df.hasCaption())
1768 {
1769 m_t << "</div>\n";
1770 }
1771 m_t << "</div>\n";
1773}
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:4902
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:5826

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 1715 of file htmldocvisitor.cpp.

1716{
1717 if (m_hide) return;
1718 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1720 m_t << "<div class=\"dotgraph\">\n";
1721 writeDotFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1722 if (df.hasCaption())
1723 {
1724 m_t << "<div class=\"caption\">\n";
1725 }
1726 visitChildren(df);
1727 if (df.hasCaption())
1728 {
1729 m_t << "</div>\n";
1730 }
1731 m_t << "</div>\n";
1733}
void writeDotFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)

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 308 of file htmldocvisitor.cpp.

309{
310 if (m_hide) return;
311 const char *res = EmojiEntityMapper::instance().unicode(s.index());
312 if (res)
313 {
314 m_t << "<span class=\"emoji\">" << res << "</span>";
315 }
316 else
317 {
318 m_t << s.name();
319 }
320}
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 798 of file htmldocvisitor.cpp.

799{
800 if (m_hide) return;
801 bool bDisplay = !f.isInline();
802 if (bDisplay)
803 {
805 m_t << "<p class=\"formulaDsp\">\n";
806 }
807
808 if (Config_getBool(USE_MATHJAX))
809 {
810 QCString text = f.text();
811 bool closeInline = FALSE;
812 if (!bDisplay && !text.isEmpty() && text.at(0)=='$' &&
813 text.at(text.length()-1)=='$')
814 {
815 closeInline=TRUE;
816 text = text.mid(1,text.length()-2);
817 m_t << "\\(";
818 }
819 else if (!bDisplay && !text.isEmpty())
820 {
821 closeInline=TRUE;
822 m_t << "\\(";
823 }
824 m_t << convertToHtml(text);
825 if (closeInline)
826 {
827 m_t << "\\)";
828 }
829 }
830 else
831 {
832 const Formula *formula = FormulaManager::instance().findFormula(f.id());
833
834 enum class ImageType { Light, Dark };
835 enum class Visibility { Always, Dark, Light, AutoDark, AutoLight };
836 auto writeFormula = [&](ImageType imgType,Visibility visibility) -> QCString {
837 // see https://chipcullen.com/how-to-have-dark-mode-image-that-works-with-user-choice for the design idea
838 TextStream t;
839 QCString extension = Config_getEnum(HTML_FORMULA_FORMAT)==HTML_FORMULA_FORMAT_t::svg ? ".svg":".png" ;
840 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
841 {
842 t << "<picture>";
843 t << "<source srcset=\"" << f.relPath() << f.name();
844 if (visibility==Visibility::AutoDark)
845 {
846 t << extension;
847 t << "\" media=\"(prefers-color-scheme: light)\"";
848 }
849 else // AutoLight
850 {
851 t << "_dark";
852 t << extension;
853 t << "\" media=\"(prefers-color-scheme: dark)\"";
854 }
855 t << "/>";
856 }
857 t << "<img class=\"formula";
858 t << (bDisplay ? "Dsp" : "Inl");
859 if (visibility==Visibility::Light) t << " light-mode-visible";
860 else if (visibility==Visibility::Dark) t << " dark-mode-visible";
861 t << "\" alt=\"" << filterQuotedCdataAttr(f.text()) << "\"" << " src=\"" << f.relPath() << f.name();
862 if (imgType==ImageType::Dark) t << "_dark";
863 t << extension;
864 if (formula && formula->width()!=-1)
865 {
866 t << "\" width=\"";
867 t << formula->width();
868 }
869 if (formula && formula->height()!=-1)
870 {
871 t << "\" height=\"";
872 t << formula->height();
873 }
874 t << "\"/>";
875 if (visibility==Visibility::AutoDark || visibility==Visibility::AutoLight)
876 {
877 t << "</picture>";
878 }
879 return t.str();
880 };
881
882 auto colorStyle = Config_getEnum(HTML_COLORSTYLE);
883 switch(colorStyle)
884 {
885 case HTML_COLORSTYLE_t::LIGHT:
886 m_t << writeFormula(ImageType::Light,Visibility::Always);
887 break;
888 case HTML_COLORSTYLE_t::DARK:
889 m_t << writeFormula(ImageType::Dark, Visibility::Always);
890 break;
891 case HTML_COLORSTYLE_t::AUTO_LIGHT:
892 m_t << writeFormula(ImageType::Light, Visibility::AutoLight);
893 break;
894 case HTML_COLORSTYLE_t::AUTO_DARK:
895 m_t << writeFormula(ImageType::Dark, Visibility::AutoDark);
896 break;
897 case HTML_COLORSTYLE_t::TOGGLE:
898 // write the image twice and use javascript (darkmode_toggle.js) to show only one of them
899 m_t << writeFormula(ImageType::Light,Visibility::Light);
900 m_t << writeFormula(ImageType::Dark, Visibility::Dark);
901 break;
902 }
903 }
904 if (bDisplay)
905 {
906 m_t << "\n</p>\n";
908 }
909}
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:3917

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 395 of file htmldocvisitor.cpp.

396{
397 if (m_hide) return;
399 m_t << "<hr "<< hr.attribs().toString() << " />\n";
401}
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 1556 of file htmldocvisitor.cpp.

1557{
1558 if (m_hide) return;
1559 if (href.url().startsWith("mailto:"))
1560 {
1562 }
1563 else
1564 {
1565 QCString url = correctURL(href.url(),href.relPath());
1566 m_t << "<a href=\"" << convertToHtml(url) << "\""
1567 << href.attribs().toString() << ">";
1568 }
1569 visitChildren(href);
1570 m_t << "</a>";
1571}
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:5894

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 1999 of file htmldocvisitor.cpp.

2000{
2001 if (m_hide) return;
2003 m_t << "<blockquote class=\"doxtable\"" << b.attribs().toString() << ">\n";
2004 visitChildren(b);
2005 m_t << "</blockquote>\n";
2007}
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 1542 of file htmldocvisitor.cpp.

1543{
1544 if (m_hide) return;
1545 m_t << "<caption" << c.attribs().toString() << ">";
1546 visitChildren(c);
1547 m_t << "</caption>\n";
1548}
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 1527 of file htmldocvisitor.cpp.

1528{
1529 if (m_hide) return;
1530 if (c.isHeading())
1531 {
1532 m_t << "<th" << c.attribs().toString() << ">";
1533 }
1534 else
1535 {
1536 m_t << "<td" << c.attribs().toString() << ">";
1537 }
1538 visitChildren(c);
1539 if (c.isHeading()) m_t << "</th>"; else m_t << "</td>";
1540}
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 1478 of file htmldocvisitor.cpp.

1479{
1480 if (m_hide) return;
1481 m_t << "<dd" << dd.attribs().toString() << ">";
1482 visitChildren(dd);
1483 m_t << "</dd>\n";
1484}
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 1460 of file htmldocvisitor.cpp.

1461{
1462 if (m_hide) return;
1464 m_t << "<dl" << dl.attribs().toString() << ">\n";
1465 visitChildren(dl);
1466 m_t << "</dl>\n";
1468}
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 1470 of file htmldocvisitor.cpp.

1471{
1472 if (m_hide) return;
1473 m_t << "<dt" << dt.attribs().toString() << ">";
1474 visitChildren(dt);
1475 m_t << "</dt>\n";
1476}
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 1581 of file htmldocvisitor.cpp.

1582{
1583 if (m_hide) return;
1585 m_t << "<details " << d.attribs().toString() << ">\n";
1586 auto summary = d.summary();
1587 if (summary)
1588 {
1589 std::visit(*this,*summary);
1590 }
1591 visitChildren(d);
1592 m_t << "</details>\n";
1594}
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 1596 of file htmldocvisitor.cpp.

1597{
1598 if (m_hide) return;
1599 forceEndParagraph(header);
1600 m_t << "<h" << header.level() << header.attribs().toString() << ">";
1601 visitChildren(header);
1602 m_t << "</h" << header.level() << ">\n";
1603 forceStartParagraph(header);
1604}
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 1425 of file htmldocvisitor.cpp.

1426{
1427 if (m_hide) return;
1429 if (s.type()==DocHtmlList::Ordered)
1430 {
1431 m_t << "<ol" << s.attribs().toString();
1432 }
1433 else
1434 {
1435 m_t << "<ul" << s.attribs().toString();
1436 }
1437 m_t << ">\n";
1438 visitChildren(s);
1439 if (s.type()==DocHtmlList::Ordered)
1440 {
1441 m_t << "</ol>";
1442 }
1443 else
1444 {
1445 m_t << "</ul>";
1446 }
1447 if (!s.isPreformatted()) m_t << "\n";
1449}
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 1451 of file htmldocvisitor.cpp.

1452{
1453 if (m_hide) return;
1454 m_t << "<li" << i.attribs().toString() << ">";
1455 if (!i.isPreformatted()) m_t << "\n";
1456 visitChildren(i);
1457 m_t << "</li>\n";
1458}
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 1519 of file htmldocvisitor.cpp.

1520{
1521 if (m_hide) return;
1522 m_t << "<tr" << tr.attribs().toString() << ">\n";
1523 visitChildren(tr);
1524 m_t << "</tr>\n";
1525}
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 1573 of file htmldocvisitor.cpp.

1574{
1575 if (m_hide) return;
1576 m_t << "<summary " << s.attribs().toString() << ">\n";
1577 visitChildren(s);
1578 m_t << "</summary>\n";
1579}
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 1486 of file htmldocvisitor.cpp.

1487{
1488 if (m_hide) return;
1489
1491
1492 if (t.caption())
1493 {
1494 QCString anc = std::get<DocHtmlCaption>(*t.caption()).anchor();
1495 if (!anc.isEmpty())
1496 {
1497 m_t << "<a class=\"anchor\" id=\"" << anc << "\"></a>\n";
1498 }
1499 }
1500
1501 QCString attrs = t.attribs().toString();
1502 if (attrs.isEmpty())
1503 {
1504 m_t << "<table class=\"doxtable\">\n";
1505 }
1506 else
1507 {
1508 m_t << "<table" << t.attribs().toString() << ">\n";
1509 }
1510 if (t.caption())
1511 {
1512 std::visit(*this,*t.caption());
1513 }
1514 visitChildren(t);
1515 m_t << "</table>\n";
1517}
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 1606 of file htmldocvisitor.cpp.

1607{
1608 if (img.type()==DocImage::Html)
1609 {
1610 bool inlineImage = img.isInlineImage();
1611 bool typeSVG = img.isSVG();
1612 QCString url = img.url();
1613
1614 if (!inlineImage)
1615 {
1616 forceEndParagraph(img);
1617 }
1618 if (m_hide) return;
1619 QCString baseName=stripPath(img.name());
1620 if (!inlineImage) m_t << "<div class=\"image\">\n";
1621 QCString sizeAttribs;
1622 if (!img.width().isEmpty())
1623 {
1624 sizeAttribs+=" width=\""+img.width()+"\"";
1625 }
1626 if (!img.height().isEmpty()) // link to local file
1627 {
1628 sizeAttribs+=" height=\""+img.height()+"\"";
1629 }
1630 // 16 cases: url.isEmpty() | typeSVG | inlineImage | img.hasCaption()
1631
1632 HtmlAttribList attribs = img.attribs();
1633 if (typeSVG)
1634 {
1635 attribs.mergeAttribute("style","pointer-events: none;");
1636 }
1637 QCString alt;
1638 QCString attrs = attribs.toString(&alt);
1639 QCString src;
1640 if (url.isEmpty())
1641 {
1642 src = img.relPath()+img.name();
1643 }
1644 else
1645 {
1646 src = correctURL(url,img.relPath());
1647 }
1648 if (typeSVG && !inlineImage && !src.startsWith("http://") && !src.startsWith("https://"))
1649 {
1650 m_t << "<object type=\"image/svg+xml\" data=\"" << convertToHtml(src)
1651 << "\"" << sizeAttribs << attrs;
1652 if (inlineImage)
1653 {
1654 // skip closing tag
1655 }
1656 else
1657 {
1658 m_t << ">" << alt << "</object>\n";
1659 }
1660 }
1661 else
1662 {
1663 m_t << "<img src=\"" << convertToHtml(src) << "\" alt=\"" << alt << "\"" << sizeAttribs << attrs;
1664 if (inlineImage)
1665 {
1666 m_t << " class=\"inline\"";
1667 }
1668 else
1669 {
1670 m_t << "/>\n";
1671 }
1672 }
1673 if (img.hasCaption())
1674 {
1675 if (inlineImage)
1676 {
1677 m_t << " title=\"";
1678 m_insideTitle=true;
1679 }
1680 else
1681 {
1682 m_t << "<div class=\"caption\">\n";
1683 }
1684 }
1685 else if (inlineImage)
1686 {
1687 m_t << "/>";
1688 }
1689
1690 visitChildren(img);
1691
1692 if (img.hasCaption())
1693 {
1694 if (inlineImage)
1695 {
1696 m_t << "\"/>";
1697 m_insideTitle=false;
1698 }
1699 else // end <div class="caption">
1700 {
1701 m_t << "</div>";
1702 }
1703 }
1704 if (!inlineImage) // end <div class="image">
1705 {
1706 m_t << "</div>\n";
1708 }
1709 }
1710 else // other format -> skip
1711 {
1712 }
1713}
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

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, HtmlAttribList::mergeAttribute(), DocImage::name(), DocImage::relPath(), QCString::startsWith(), stripPath(), HtmlAttribList::toString(), DocImage::type(), DocImage::url(), visitChildren(), and DocImage::width().

◆ operator()() [25/58]

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

Definition at line 660 of file htmldocvisitor.cpp.

661{
662 if (m_hide) return;
664 switch(inc.type())
665 {
668 m_ci.startCodeFragment("DoxyCode");
670 inc.context(),
671 inc.text(),
672 langExt,
673 inc.stripCodeComments(),
674 CodeParserOptions()
675 .setExample(inc.isExample(), inc.exampleFile())
676 .setInlineFragment(true)
677 .setShowLineNumbers(false)
678 .setSearchCtx(m_ctx)
679 );
680 m_ci.endCodeFragment("DoxyCode");
682 break;
684 {
686 m_ci.startCodeFragment("DoxyCode");
687 FileInfo cfi( inc.file().str() );
688 auto fd = createFileDef( cfi.dirPath(), cfi.fileName() );
690 inc.context(),
691 inc.text(),
692 langExt,
693 inc.stripCodeComments(),
694 CodeParserOptions()
695 .setExample(inc.isExample(), inc.exampleFile())
696 .setFileDef(fd.get())
697 .setInlineFragment(true)
698 .setSearchCtx(m_ctx)
699 );
700 m_ci.endCodeFragment("DoxyCode");
702 }
703 break;
711 break;
713 {
714 if (inc.isBlock()) forceEndParagraph(inc);
715 m_t << inc.text();
716 if (inc.isBlock()) forceStartParagraph(inc);
717 }
718 break;
721 m_t << "<pre class=\"fragment\">";
722 filter(inc.text());
723 m_t << "</pre>";
725 break;
729 m_ci.startCodeFragment("DoxyCode");
731 inc.file(),
732 inc.blockId(),
733 inc.context(),
735 inc.trimLeft(),
737 );
738 m_ci.endCodeFragment("DoxyCode");
740 break;
741 }
742}
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:5164

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 744 of file htmldocvisitor.cpp.

745{
746 //printf("DocIncOperator: type=%d first=%d, last=%d text='%s'\n",
747 // op.type(),op.isFirst(),op.isLast(),qPrint(op.text()));
748 if (op.isFirst())
749 {
751 if (!m_hide) m_ci.startCodeFragment("DoxyCode");
753 m_hide=TRUE;
754 }
755 QCString locLangExt = getFileNameExtension(op.includeFileName());
756 if (locLangExt.isEmpty()) locLangExt = m_langExt;
757 SrcLangExt langExt = getLanguageFromFileName(locLangExt);
758 if (op.type()!=DocIncOperator::Skip)
759 {
760 m_hide = popHidden();
761 if (!m_hide)
762 {
763 std::unique_ptr<FileDef> fd;
764 if (!op.includeFileName().isEmpty())
765 {
766 FileInfo cfi( op.includeFileName().str() );
767 fd = createFileDef( cfi.dirPath(), cfi.fileName() );
768 }
769 getCodeParser(locLangExt).parseCode(
770 m_ci,
771 op.context(),
772 op.text(),
773 langExt,
775 CodeParserOptions()
776 .setExample(op.isExample(), op.exampleFile())
777 .setFileDef(fd.get())
778 .setStartLine(op.line())
779 .setShowLineNumbers(op.showLineNo())
780 .setSearchCtx(m_ctx)
781 );
782 }
784 m_hide=TRUE;
785 }
786 if (op.isLast())
787 {
788 m_hide = popHidden();
789 if (!m_hide) m_ci.endCodeFragment("DoxyCode");
791 }
792 else
793 {
794 if (!m_hide) m_t << "\n";
795 }
796}
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:5206

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 911 of file htmldocvisitor.cpp.

912{
913 QCString anchor = convertIndexWordToAnchor(e.entry());
914 if (e.member())
915 {
916 anchor.prepend(e.member()->anchor()+"_");
917 }
918 m_t << "<a id=\"" << anchor << "\" name=\"" << anchor << "\"></a>";
919 //printf("*** DocIndexEntry: word='%s' scope='%s' member='%s'\n",
920 // qPrint(e.entry()),
921 // e.scope() ? qPrint(e.scope()->name()) : "<null>",
922 // e.member() ? qPrint(e.member()->name()) : "<null>"
923 // );
924 Doxygen::indexList->addIndexItem(e.scope(),e.member(),anchor,e.entry());
925}
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 1550 of file htmldocvisitor.cpp.

1551{
1552 if (m_hide) return;
1553 visitChildren(i);
1554}

References m_hide, and visitChildren().

◆ operator()() [29/58]

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

Definition at line 1985 of file htmldocvisitor.cpp.

1986{
1987 if (m_hide) return;
1988 startLink(QCString(),ref.file(),ref.relPath(),ref.anchor());
1989 visitChildren(ref);
1990 endLink();
1991 m_t << " ";
1992}
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 389 of file htmldocvisitor.cpp.

390{
391 if (m_hide) return;
392 m_t << "<br "<< br.attribs().toString() << " />\n";
393}
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 1810 of file htmldocvisitor.cpp.

1811{
1812 if (m_hide) return;
1813 startLink(lnk.ref(),lnk.file(),lnk.relPath(),lnk.anchor());
1814 visitChildren(lnk);
1815 endLink();
1816}

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 263 of file htmldocvisitor.cpp.

264{
265 if (m_hide) return;
266 //printf("linked word: %s\n",qPrint(w.word()));
267 startLink(w.ref(),w.file(),w.relPath(),w.anchor(),w.tooltip());
268 filter(w.word());
269 endLink();
270}
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 1735 of file htmldocvisitor.cpp.

1736{
1737 if (m_hide) return;
1738 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1740 m_t << "<div class=\"mscgraph\">\n";
1741 writeMscFile(df.file(),df.relPath(),df.context(),df.srcFile(),df.srcLine());
1742 if (df.hasCaption())
1743 {
1744 m_t << "<div class=\"caption\">\n";
1745 }
1746 visitChildren(df);
1747 if (df.hasCaption())
1748 {
1749 m_t << "</div>\n";
1750 }
1751 m_t << "</div>\n";
1753}
void writeMscFile(const QCString &fileName, const QCString &relPath, const QCString &context, const QCString &srcFile, int srcLine, bool newFile=true)

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 1229 of file htmldocvisitor.cpp.

1230{
1231 if (m_hide) return;
1232
1233 //printf("> DocPara\n");
1234 //dumpDocNodeList(p.children());
1235
1236 bool needsTag = determineIfNeedsTag(p);
1237 //printf(" needsTag=%d\n",needsTag);
1238 bool needsTagBefore = needsTag;
1239 bool needsTagAfter = needsTag;
1240
1241 // if the first element of a paragraph is something that should be outside of
1242 // the paragraph (<ul>,<dl>,<table>,..) then that will already started the
1243 // paragraph and we don't need to do it here
1244 if (!p.children().empty())
1245 {
1246 auto it = std::find_if(std::begin(p.children()),std::end(p.children()),
1247 [](const auto &node) { return !isInvisibleNode(node); });
1248 if (it!=std::end(p.children()))
1249 {
1250 const DocNodeVariant &n = *it;
1252 {
1253 needsTagBefore = FALSE;
1254 }
1255 }
1256 }
1257
1258 // check if this paragraph is the first or last or intermediate child of a <li> or <dd>.
1259 // this allows us to mark the tag with a special class so we can
1260 // fix the otherwise ugly spacing.
1261 bool isFirst = false;
1262 bool isLast = false;
1263 contexts_t t = getParagraphContext(p,isFirst,isLast);
1264 //printf("startPara first=%d last=%d\n",isFirst,isLast);
1265 if (!std::holds_alternative<DocAutoListItem>(*p.parent()) && isFirst && isLast) needsTagBefore=FALSE;
1266
1267 //printf(" needsTagBefore=%d\n",needsTagBefore);
1268 // write the paragraph tag (if needed)
1269 if (needsTagBefore)
1270 {
1271 if (contexts(t))
1272 m_t << "<p class=\"" << contexts(t) << "\"" << p.attribs().toString() << ">";
1273 else
1274 m_t << "<p" << p.attribs().toString() << ">";
1275 }
1276
1277 visitChildren(p);
1278
1279 // if the last element of a paragraph is something that should be outside of
1280 // the paragraph (<ul>,<dl>,<table>) then that will already have ended the
1281 // paragraph and we don't need to do it here
1282 if (!p.children().empty())
1283 {
1284 auto it = std::prev(std::end(p.children()));
1285 for (;;)
1286 {
1287 const DocNodeVariant &n = *it;
1288 if (!isInvisibleNode(n))
1289 {
1291 {
1292 needsTagAfter = FALSE;
1293 }
1294 // stop searching if we found a node that is visible
1295 break;
1296 }
1297 if (it==std::begin(p.children()))
1298 {
1299 // stop searching if we are at the beginning of the list
1300 break;
1301 }
1302 else
1303 {
1304 --it;
1305 }
1306 }
1307 }
1308
1309 //printf("endPara first=%d last=%d\n",isFirst,isLast);
1310 if (!std::holds_alternative<DocAutoListItem>(*p.parent()) && isFirst && isLast) needsTagAfter=FALSE;
1311
1312 //printf(" needsTagAfter=%d\n",needsTagAfter);
1313 if (needsTagAfter) m_t << "</p>\n";
1314 //printf("< DocPara\n");
1315}
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 1905 of file htmldocvisitor.cpp.

1906{
1907 //printf("DocParamList::visitPre\n");
1908 if (m_hide) return;
1909 m_t << " <tr>";
1910 const DocParamSect *sect = std::get_if<DocParamSect>(pl.parent());
1911 if (sect && sect->hasInOutSpecifier())
1912 {
1913 m_t << "<td class=\"paramdir\">";
1915 {
1916 m_t << "[";
1917 if (pl.direction()==DocParamSect::In)
1918 {
1919 m_t << "in";
1920 }
1921 else if (pl.direction()==DocParamSect::Out)
1922 {
1923 m_t << "out";
1924 }
1925 else if (pl.direction()==DocParamSect::InOut)
1926 {
1927 m_t << "in,out";
1928 }
1929 m_t << "]";
1930 }
1931 m_t << "</td>";
1932 }
1933 if (sect && sect->hasTypeSpecifier())
1934 {
1935 m_t << "<td class=\"paramtype\">";
1936 for (const auto &type : pl.paramTypes())
1937 {
1938 std::visit(*this,type);
1939 }
1940 m_t << "</td>";
1941 }
1942 m_t << "<td class=\"paramname\">";
1943 bool first=TRUE;
1944 for (const auto &param : pl.parameters())
1945 {
1946 if (!first) m_t << ","; else first=FALSE;
1947 std::visit(*this,param);
1948 }
1949 m_t << "</td><td>";
1950 for (const auto &par : pl.paragraphs())
1951 {
1952 std::visit(*this,par);
1953 }
1954 m_t << "</td></tr>\n";
1955}
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 1861 of file htmldocvisitor.cpp.

1862{
1863 if (m_hide) return;
1865 QCString className;
1866 QCString heading;
1867 switch(s.type())
1868 {
1870 heading=theTranslator->trParameters();
1871 className="params";
1872 break;
1874 heading=theTranslator->trReturnValues();
1875 className="retval";
1876 break;
1878 heading=theTranslator->trExceptions();
1879 className="exception";
1880 break;
1883 className="tparams";
1884 break;
1885 default:
1886 ASSERT(0);
1887 }
1888 m_t << "<dl class=\"" << className << "\"><dt>";
1889 m_t << heading;
1890 m_t << "</dt><dd>\n";
1891 m_t << " <table class=\"" << className << "\">\n";
1892 visitChildren(s);
1893 m_t << " </table>\n";
1894 m_t << " </dd>\n";
1895 m_t << "</dl>\n";
1897}
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 2037 of file htmldocvisitor.cpp.

2038{
2039 if (m_hide) return;
2040 visitChildren(pb);
2041}

References m_hide, and visitChildren().

◆ operator()() [38/58]

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

Definition at line 1775 of file htmldocvisitor.cpp.

1776{
1777 if (m_hide) return;
1778 if (!Config_getBool(DOT_CLEANUP)) copyFile(df.file(),Config_getString(HTML_OUTPUT)+"/"+stripPath(df.file()));
1780 QCString htmlOutput = Config_getString(HTML_OUTPUT);
1781 QCString imgExt = getDotImageExtension();
1782 PlantumlManager::OutputFormat format = PlantumlManager::PUML_BITMAP; // default : PUML_BITMAP
1783 if (imgExt=="svg")
1784 {
1786 }
1787 std::string inBuf;
1788 readInputFile(df.file(),inBuf);
1789 auto baseNameVector = PlantumlManager::instance().writePlantUMLSource(htmlOutput,QCString(),
1790 inBuf,format,QCString(),df.srcFile(),df.srcLine(),false);
1791 for (const auto &bName: baseNameVector)
1792 {
1793 QCString baseName=makeBaseName(bName,".pu");
1794 m_t << "<div class=\"plantumlgraph\">\n";
1795 writePlantUMLFile(baseName,df.relPath(),QCString(),df.srcFile(),df.srcLine());
1796 if (df.hasCaption())
1797 {
1798 m_t << "<div class=\"caption\">\n";
1799 }
1800 visitChildren(df);
1801 if (df.hasCaption())
1802 {
1803 m_t << "</div>\n";
1804 }
1805 m_t << "</div>\n";
1806 }
1808}
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
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:5503
QCString getDotImageExtension()
Definition util.cpp:6258
QCString makeBaseName(const QCString &name, const QCString &ext)
Definition util.cpp:4918

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 1818 of file htmldocvisitor.cpp.

1819{
1820 if (m_hide) return;
1821 if (!ref.file().isEmpty())
1822 {
1823 // when ref.isSubPage()==TRUE we use ref.file() for HTML and
1824 // ref.anchor() for LaTeX/RTF
1825 startLink(ref.ref(),ref.file(),ref.relPath(),ref.isSubPage() ? QCString() : ref.anchor());
1826 }
1827 if (!ref.hasLinkText()) filter(ref.targetTitle());
1828 visitChildren(ref);
1829 if (!ref.file().isEmpty()) endLink();
1830 //m_t << " ";
1831}
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 1317 of file htmldocvisitor.cpp.

1318{
1319 //printf("> DocRoot\n");
1320 //dumpDocNodeList(r.children());
1321 visitChildren(r);
1322 //printf("< DocRoot\n");
1323}

References visitChildren().

◆ operator()() [41/58]

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

Definition at line 1833 of file htmldocvisitor.cpp.

1834{
1835 if (m_hide) return;
1836 if (!ref.file().isEmpty())
1837 {
1838 m_t << "<li>";
1839 startLink(ref.ref(),ref.file(),ref.relPath(),ref.isSubPage() ? QCString() : ref.anchor());
1840 }
1841 visitChildren(ref);
1842 if (!ref.file().isEmpty())
1843 {
1844 endLink();
1845 m_t << "</li>\n";
1846 }
1847}
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 1849 of file htmldocvisitor.cpp.

1850{
1851 if (m_hide) return;
1853 m_t << "<div>\n";
1854 m_t << "<ul class=\"multicol\">\n";
1855 visitChildren(s);
1856 m_t << "</ul>\n";
1857 m_t << "</div>\n";
1859}

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

◆ operator()() [43/58]

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

Definition at line 1409 of file htmldocvisitor.cpp.

1410{
1411 if (m_hide) return;
1413 m_t << "<h" << s.level() << " class=\"doxsection\">";
1414 m_t << "<a class=\"anchor\" id=\"" << s.anchor();
1415 m_t << "\"></a>\n";
1416 if (s.title())
1417 {
1418 std::visit(*this,*s.title());
1419 }
1420 m_t << "</h" << s.level() << ">\n";
1421 visitChildren(s);
1423}
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 1899 of file htmldocvisitor.cpp.

1900{
1901 if (m_hide) return;
1902 m_t << "&#160;" << s.chars() << "&#160;";
1903}
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 1385 of file htmldocvisitor.cpp.

1386{
1387 if (m_hide) return;
1389 m_t << "<ul>";
1390 if (!sl.isPreformatted()) m_t << "\n";
1391 visitChildren(sl);
1392 m_t << "</ul>";
1393 if (!sl.isPreformatted()) m_t << "\n";
1395}

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

◆ operator()() [46/58]

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

Definition at line 1397 of file htmldocvisitor.cpp.

1398{
1399 if (m_hide) return;
1400 m_t << "<li>";
1401 if (li.paragraph())
1402 {
1403 visit(*this,*li.paragraph());
1404 }
1405 m_t << "</li>";
1406 if (!li.isPreformatted()) m_t << "\n";
1407}
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 1325 of file htmldocvisitor.cpp.

1326{
1327 if (m_hide) return;
1329 m_t << "<dl class=\"section " << s.typeString() << "\"><dt>";
1330 switch(s.type())
1331 {
1332 case DocSimpleSect::See:
1333 m_t << theTranslator->trSeeAlso(); break;
1335 m_t << theTranslator->trReturns(); break;
1337 m_t << theTranslator->trAuthor(TRUE,TRUE); break;
1339 m_t << theTranslator->trAuthor(TRUE,FALSE); break;
1341 m_t << theTranslator->trVersion(); break;
1343 m_t << theTranslator->trSince(); break;
1345 m_t << theTranslator->trDate(); break;
1347 m_t << theTranslator->trNote(); break;
1349 m_t << theTranslator->trWarning(); break;
1350 case DocSimpleSect::Pre:
1351 m_t << theTranslator->trPrecondition(); break;
1353 m_t << theTranslator->trPostcondition(); break;
1355 m_t << theTranslator->trCopyright(); break;
1357 m_t << theTranslator->trInvariant(); break;
1359 m_t << theTranslator->trRemarks(); break;
1361 m_t << theTranslator->trAttention(); break;
1363 m_t << theTranslator->trImportant(); break;
1364 case DocSimpleSect::User: break;
1365 case DocSimpleSect::Rcs: break;
1366 case DocSimpleSect::Unknown: break;
1367 }
1368
1369 if (s.title())
1370 {
1371 std::visit(*this,*s.title());
1372 }
1373 m_t << "</dt><dd>";
1374 visitChildren(s);
1375 m_t << "</dd></dl>\n";
1377}
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 927 of file htmldocvisitor.cpp.

928{
929 m_t << "</dd>\n";
930 m_t << "<dd>\n";
931}

References m_t.

◆ operator()() [49/58]

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

Definition at line 403 of file htmldocvisitor.cpp.

404{
405 if (m_hide) return;
406 switch (s.style())
407 {
409 if (s.enable()) m_t << "<b" << s.attribs().toString() << ">"; else m_t << "</b>";
410 break;
412 if (s.enable()) m_t << "<s" << s.attribs().toString() << ">"; else m_t << "</s>";
413 break;
415 if (s.enable()) m_t << "<strike" << s.attribs().toString() << ">"; else m_t << "</strike>";
416 break;
418 if (s.enable()) m_t << "<del" << s.attribs().toString() << ">"; else m_t << "</del>";
419 break;
421 if (s.enable()) m_t << "<u" << s.attribs().toString() << ">"; else m_t << "</u>";
422 break;
424 if (s.enable()) m_t << "<ins" << s.attribs().toString() << ">"; else m_t << "</ins>";
425 break;
427 if (s.enable())
428 {
429 auto attribs = s.attribs();
430 if (s.tagName()=="a")
431 {
432 attribs.mergeAttribute("class","arg");
433 }
434 m_t << "<em" << attribs.toString() << ">";
435 }
436 else
437 {
438 m_t << "</em>";
439 }
440 break;
442 if (s.enable()) m_t << "<kbd" << s.attribs().toString() << ">"; else m_t << "</kbd>";
443 break;
445 if (s.enable())
446 {
447 m_t << "<span class=\"tt\"" << s.attribs().toString() << ">";
448 m_insidePre=true;
449 }
450 else
451 {
452 m_t << "</span>";
453 m_insidePre=false;
454 }
455 break;
457 if (s.enable())
458 {
459 auto attribs = s.attribs();
460 if (s.tagName()=="p")
461 {
462 attribs.mergeAttribute("class","param");
463 }
464 m_t << "<code" << attribs.toString() << ">";
465 m_insidePre=true;
466 }
467 else
468 {
469 m_insidePre=false;
470 m_t << "</code>";
471 }
472 break;
474 if (s.enable()) m_t << "<sub" << s.attribs().toString() << ">"; else m_t << "</sub>";
475 break;
477 if (s.enable()) m_t << "<sup" << s.attribs().toString() << ">"; else m_t << "</sup>";
478 break;
480 if (s.enable())
481 {
483 m_t << "<center" << s.attribs().toString() << ">";
484 }
485 else
486 {
487 m_t << "</center>";
489 }
490 break;
492 if (s.enable()) m_t << "<small" << s.attribs().toString() << ">"; else m_t << "</small>";
493 break;
495 if (s.enable()) m_t << "<cite" << s.attribs().toString() << ">"; else m_t << "</cite>";
496 break;
498 if (s.enable())
499 {
501 m_t << "<pre" << s.attribs().toString() << ">";
503 }
504 else
505 {
507 m_t << "</pre>";
509 }
510 break;
512 if (s.enable())
513 {
515 m_t << "<div" << s.attribs().toString() << ">";
516 }
517 else
518 {
519 m_t << "</div>";
521 }
522 break;
524 if (s.enable()) m_t << "<span" << s.attribs().toString() << ">"; else m_t << "</span>";
525 break;
526 }
527}
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 285 of file htmldocvisitor.cpp.

286{
287 if (m_hide) return;
288 if (m_insideTitle &&
289 (s.symbol()==HtmlEntityMapper::Sym_Quot || s.symbol()==HtmlEntityMapper::Sym_quot)) // escape "'s inside title="..."
290 {
291 m_t << "&quot;";
292 }
293 else
294 {
295 const char *res = HtmlEntityMapper::instance().html(s.symbol());
296 if (res)
297 {
298 m_t << res;
299 }
300 else
301 {
302 err("HTML: non supported HTML-entity found: {}\n",
304 }
305 }
306}
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 1994 of file htmldocvisitor.cpp.

1995{
1996 visitChildren(t);
1997}

References visitChildren().

◆ operator()() [52/58]

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

Definition at line 1379 of file htmldocvisitor.cpp.

1380{
1381 if (m_hide) return;
1382 visitChildren(t);
1383}

References m_hide, and visitChildren().

◆ operator()() [53/58]

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

Definition at line 350 of file htmldocvisitor.cpp.

351{
352 if (m_hide) return;
353 if (u.isEmail()) // mail address
354 {
355 QCString url = u.url();
356 // obfuscate the mail address link
358 if (!Config_getBool(OBFUSCATE_EMAILS))
359 {
360 m_t << url;
361 }
362 else
363 {
364 const char *p = url.data();
365 // also obfuscate the address as shown on the web page
366 uint32_t size=5;
367 while (*p)
368 {
369 for (uint32_t j=0;j<size && *p;j++)
370 {
371 p = writeUTF8Char(m_t,p);
372 }
373 if (*p) m_t << "<span class=\"obfuscator\">.nosp@m.</span>";
374 if (size==5) size=4; else size=5;
375 }
376 }
377 m_t << "</a>";
378 }
379 else // web address
380 {
381 m_t << "<a href=\"";
382 filter(u.url());
383 m_t << "\">";
384 filter(u.url());
385 m_t << "</a>";
386 }
387}
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 531 of file htmldocvisitor.cpp.

532{
533 if (m_hide) return;
534 QCString lang = m_langExt;
535 if (!s.language().isEmpty()) // explicit language setting
536 {
537 lang = s.language();
538 }
539 SrcLangExt langExt = getLanguageFromCodeLang(lang);
540 switch(s.type())
541 {
544 m_ci.startCodeFragment("DoxyCode");
546 s.context(),
547 s.text(),
548 langExt,
549 Config_getBool(STRIP_CODE_COMMENTS),
550 CodeParserOptions()
551 .setExample(s.isExample(), s.exampleFile())
552 .setInlineFragment(true)
553 .setSearchCtx(m_ctx)
554 );
555 m_ci.endCodeFragment("DoxyCode");
557 break;
560 m_t << "<pre class=\"fragment\">";
561 filter(s.text());
562 m_t << "</pre>";
564 break;
566 filter(s.text(), true);
567 break;
569 m_t << "<code class=\"JavaDocCode\">";
570 filter(s.text(), true);
571 m_t << "</code>";
572 break;
574 {
575 if (s.isBlock()) forceEndParagraph(s);
576 m_t << s.text();
577 if (s.isBlock()) forceStartParagraph(s);
578 }
579 break;
585 /* nothing */
586 break;
587
588 case DocVerbatim::Dot:
589 {
591
592 bool exists = false;
593 auto fileName = writeFileContents(Config_getString(HTML_OUTPUT)+"/inline_dotgraph_", // baseName
594 ".dot", // extension
595 s.text(), // contents
596 exists);
597 if (!fileName.isEmpty())
598 {
599 m_t << "<div class=\"dotgraph\">\n";
600 writeDotFile(fileName,s.relPath(),s.context(),s.srcFile(),s.srcLine(),!exists);
601 visitCaption(m_t, s);
602 m_t << "</div>\n";
603 }
604
606 }
607 break;
608 case DocVerbatim::Msc:
609 {
611
612 bool exists = false;
613 auto fileName = writeFileContents(Config_getString(HTML_OUTPUT)+"/inline_mscgraph_", // baseName
614 ".msc", // extension
615 "msc {"+s.text()+"}", // contents
616 exists);
617 if (!fileName.isEmpty())
618 {
619 m_t << "<div class=\"mscgraph\">\n";
620 writeMscFile(fileName,s.relPath(),s.context(),s.srcFile(),s.srcLine(),!exists);
621 visitCaption(m_t, s);
622 m_t << "</div>\n";
623 }
624
626 }
627 break;
629 {
631 QCString htmlOutput = Config_getString(HTML_OUTPUT);
632 QCString imgExt = getDotImageExtension();
633 PlantumlManager::OutputFormat format = PlantumlManager::PUML_BITMAP; // default : PUML_BITMAP
634 if (imgExt=="svg")
635 {
637 }
638 auto baseNameVector = PlantumlManager::instance().writePlantUMLSource(
639 htmlOutput,s.exampleFile(),
640 s.text(),format,s.engine(),s.srcFile(),s.srcLine(),true);
641 for (const auto &baseName: baseNameVector)
642 {
643 m_t << "<div class=\"plantumlgraph\">\n";
644 writePlantUMLFile(baseName,s.relPath(),s.context(),s.srcFile(),s.srcLine());
645 visitCaption(m_t, s);
646 m_t << "</div>\n";
647 }
649 }
650 break;
651 }
652}
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)
QCString writeFileContents(const QCString &baseName, const QCString &extension, const QCString &content, bool &exists)
Thread-safe function to write a string to a file.
Definition util.cpp:6928
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
Definition util.cpp:5182

References DocVerbatim::Code, Config_getBool, Config_getString, DocVerbatim::context(), DocVerbatim::DocbookOnly, DocVerbatim::Dot, DocVerbatim::engine(), DocVerbatim::exampleFile(), 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, m_ci, m_ctx, m_hide, m_langExt, m_t, DocVerbatim::ManOnly, DocVerbatim::Msc, CodeParserInterface::parseCode(), DocVerbatim::PlantUML, PlantumlManager::PUML_BITMAP, PlantumlManager::PUML_SVG, DocVerbatim::relPath(), DocVerbatim::RtfOnly, CodeParserOptions::setInlineFragment(), CodeParserOptions::setSearchCtx(), DocVerbatim::srcFile(), DocVerbatim::srcLine(), DocVerbatim::text(), DocVerbatim::type(), DocVerbatim::Verbatim, visitCaption(), writeDotFile(), writeFileContents(), writeMscFile(), writePlantUMLFile(), PlantumlManager::writePlantUMLSource(), and DocVerbatim::XmlOnly.

◆ operator()() [55/58]

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

Definition at line 2009 of file htmldocvisitor.cpp.

2010{
2011 if (m_hide) return;
2012 if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
2013 {
2015 QCString fname=FlowChart::convertNameToFileName();
2016 m_t << "<p>";
2018 m_t << " ";
2019 m_t << "<a href=\"";
2020 m_t << fname;
2021 m_t << ".svg\">";
2023 m_t << "</a>";
2024 if (vf.hasCaption())
2025 {
2026 m_t << "<br />";
2027 }
2028 }
2029 visitChildren(vf);
2030 if (VhdlDocGen::getFlowMember()) // use VHDL flow chart creator
2031 {
2032 m_t << "</p>";
2034 }
2035}
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 272 of file htmldocvisitor.cpp.

273{
274 if (m_hide) return;
275 if (m_insidePre)
276 {
277 m_t << w.chars();
278 }
279 else
280 {
281 m_t << " ";
282 }
283}
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 257 of file htmldocvisitor.cpp.

258{
259 if (m_hide) return;
260 filter(w.word());
261}
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 1957 of file htmldocvisitor.cpp.

1958{
1959 if (m_hide) return;
1960 if (x.title().isEmpty()) return;
1961
1963 bool anonymousEnum = x.file()=="@";
1964 if (!anonymousEnum)
1965 {
1966 QCString fn = x.file();
1968 m_t << "<dl class=\"" << x.key() << "\"><dt><b><a class=\"el\" href=\""
1969 << x.relPath() << fn
1970 << "#" << x.anchor() << "\">";
1971 }
1972 else
1973 {
1974 m_t << "<dl class=\"" << x.key() << "\"><dt><b>";
1975 }
1976 filter(x.title());
1977 if (!anonymousEnum) m_t << "</a>";
1978 m_t << "</b></dt><dd>";
1979 visitChildren(x);
1980 if (x.title().isEmpty()) return;
1981 m_t << "</dd></dl>\n";
1983}
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:4875

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 2128 of file htmldocvisitor.cpp.

2131{
2132 //printf("HtmlDocVisitor: file=%s anchor=%s\n",qPrint(file),qPrint(anchor));
2133 if (!ref.isEmpty()) // link to entity imported via tag file
2134 {
2135 m_t << "<a class=\"elRef\" ";
2137 }
2138 else // local link
2139 {
2140 m_t << "<a class=\"el\" ";
2141 }
2142 m_t << "href=\"";
2143 QCString fn = file;
2145 m_t << createHtmlUrl(relPath,ref,true,
2146 m_fileName == Config_getString(HTML_OUTPUT)+"/"+fn,
2147 fn,
2148 anchor);
2149 m_t << "\"";
2150 if (!tooltip.isEmpty()) m_t << " title=\"" << convertToHtml(tooltip) << "\"";
2151 m_t << ">";
2152}
QCString externalLinkTarget(const bool parent)
Definition util.cpp:5678
QCString createHtmlUrl(const QCString &relPath, const QCString &ref, bool href, bool isLocalFile, const QCString &targetFileName, const QCString &anchor)
Definition util.cpp:5689

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 240 of file htmldocvisitor.cpp.

241{
242 if (n.hasCaption())
243 {
244 t << "<div class=\"caption\">\n";
245 for (const auto &child : n.children())
246 {
247 std::visit(*this, child);
248 }
249 t << "</div>\n";
250 }
251}

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 2181 of file htmldocvisitor.cpp.

2183{
2184 QCString baseName=makeBaseName(fileName,".dia");
2185 baseName.prepend("dia_");
2186 QCString outDir = Config_getString(HTML_OUTPUT);
2187 writeDiaGraphFromFile(fileName,outDir,baseName,DiaOutputFormat::BITMAP,srcFile,srcLine);
2188
2189 m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />\n";
2190}
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,
bool newFile = true )
private

Definition at line 2159 of file htmldocvisitor.cpp.

2161{
2162 QCString baseName=makeBaseName(fileName,".dot");
2163 baseName.prepend("dot_");
2164 QCString outDir = Config_getString(HTML_OUTPUT);
2165 if (newFile) writeDotGraphFromFile(fileName,outDir,baseName,GraphOutputFormat::BITMAP,srcFile,srcLine);
2166 writeDotImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context,-1,srcFile,srcLine,newFile);
2167}
void writeDotGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, GraphOutputFormat format, const QCString &srcFile, int srcLine)
Definition dot.cpp:230
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, bool newFile)
Definition dot.cpp:284

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,
bool newFile = true )
private

Definition at line 2169 of file htmldocvisitor.cpp.

2171{
2172 QCString baseName=makeBaseName(fileName,".msc");
2173 baseName.prepend("msc_");
2174 QCString outDir = Config_getString(HTML_OUTPUT);
2175 QCString imgExt = getDotImageExtension();
2176 MscOutputFormat mscFormat = imgExt=="svg" ? MscOutputFormat::SVG : MscOutputFormat::BITMAP;
2177 if (newFile) writeMscGraphFromFile(fileName,outDir,baseName,mscFormat,srcFile,srcLine);
2178 writeMscImageMapFromFile(m_t,fileName,outDir,relPath,baseName,context,mscFormat,srcFile,srcLine);
2179}
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 322 of file htmldocvisitor.cpp.

323{
324 if (!Config_getBool(OBFUSCATE_EMAILS))
325 {
326 m_t << "<a href=\"mailto:" << url << "\">";
327 }
328 else
329 {
330 m_t << "<a href=\"#\" onclick=\"location.href='mai'+'lto:'";
331 if (!url.isEmpty())
332 {
333 const char *p = url.data();
334 uint32_t size=3;
335 while (*p)
336 {
337 m_t << "+'";
338 for (uint32_t j=0;j<size && *p;j++)
339 {
340 p = writeUTF8Char(m_t,p);
341 }
342 m_t << "'";
343 if (size==3) size=2; else size=3;
344 }
345 }
346 m_t << "; return false;\">";
347 }
348}

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 2192 of file htmldocvisitor.cpp.

2194{
2195 QCString baseName=makeBaseName(fileName,".pu");
2196 QCString outDir = Config_getString(HTML_OUTPUT);
2197 QCString imgExt = getDotImageExtension();
2198 if (imgExt=="svg")
2199 {
2201 //m_t << "<iframe scrolling=\"no\" frameborder=\"0\" src=\"" << relPath << baseName << ".svg" << "\" />\n";
2202 //m_t << "<p><b>This browser is not able to show SVG: try Firefox, Chrome, Safari, or Opera instead.</b></p>";
2203 //m_t << "</iframe>\n";
2204 m_t << "<object type=\"image/svg+xml\" data=\"" << relPath << baseName << ".svg\"></object>\n";
2205 }
2206 else
2207 {
2209 m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />\n";
2210 }
2211}
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: