40#define DB_VIS_C DB_VIS_C1(m_t)
41#define DB_VIS_C1(x) x << "<!-- DB_VIS_C " << __LINE__ << " -->\n";
42#define DB_VIS_C2(y) DB_VIS_C2a(m_t,y)
43#define DB_VIS_C2a(x,y) x << "<!-- DB_VIS_C " << __LINE__ << " " << y << " -->\n";
48#define DB_VIS_C2a(x,y)
56 const char *p=s.
data();
62 case ':': growBuf.
addStr(
"_1");
break;
63 default: growBuf.
addChar(c);
break;
72 return (name==
"align" ||
75 name==
"cellpadding" ||
76 name==
"cellspacing" ||
92 result=result.
mid(i+1);
100 int i = result.
find(
'.');
103 result=result.
left(i);
111 for (
const auto &n : children)
125 if (hasCaption && !inlineImage)
134 t <<
" <informalfigure>\n";
136 t <<
" <mediaobject>\n";
137 t <<
" <imageobject>\n";
145 if (!height.
isEmpty() && !inlineImage) t <<
" width=\"50%\"";
151 t <<
" align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << name <<
"\">";
152 t <<
"</imagedata>\n";
153 t <<
" </imageobject>\n";
154 if (hasCaption && !inlineImage)
163 if (hasCaption && !inlineImage)
167 t <<
" </mediaobject>\n";
168 if (hasCaption && !inlineImage)
174 t <<
" </informalfigure>\n";
253 m_t <<
"<link xlink:href=\"";
265 m_t <<
"<?linebreak?>";
274 m_t <<
"<informaltable frame='bottom'><tgroup cols='1'><colspec align='center'/><tbody><row><entry align='center'>\n";
275 m_t <<
"</entry></row></tbody></tgroup></informaltable>\n";
285 if (s.
enable())
m_t <<
"<emphasis role=\"bold\">";
else m_t <<
"</emphasis>";
288 if (s.
enable())
m_t <<
"<emphasis>";
else m_t <<
"</emphasis>";
292 if (s.
enable())
m_t <<
"<computeroutput>";
else m_t <<
"</computeroutput>";
295 if (s.
enable())
m_t <<
"<subscript>";
else m_t <<
"</subscript>";
298 if (s.
enable())
m_t <<
"<superscript>";
else m_t <<
"</superscript>";
301 if (s.
enable())
m_t <<
"<informaltable frame='none'><tgroup cols='1'><colspec align='center'/><tbody><row><entry align='center'>";
302 else m_t <<
"</entry></row></tbody></tgroup></informaltable>";
307 m_t <<
"<literallayout>";
312 m_t <<
"</literallayout>";
343 m_t <<
"<literallayout><computeroutput>";
350 m_t <<
"</computeroutput></literallayout>";
353 m_t <<
"<literallayout><computeroutput>";
355 m_t <<
"</computeroutput></literallayout>";
361 m_t <<
"<computeroutput>";
363 m_t <<
"</computeroutput>";
380 static int dotindex = 1;
383 QCString stext = s.
text();
385 name.
sprintf(
"%s%d",
"dot_inline_dotgraph_", dotindex);
390 QCString fileName = baseName+
".dot";
394 err(
"Could not open file %s for writing\n",
qPrint(fileName));
405 static int mscindex = 1;
408 QCString stext = s.
text();
410 name.
sprintf(
"%s%d",
"msc_inline_mscgraph_", mscindex);
415 QCString fileName = baseName+
".msc";
419 err(
"Could not open file %s for writing\n",
qPrint(fileName));
421 QCString text =
"msc {";
462 m_t <<
"<literallayout><computeroutput>";
463 FileInfo cfi( inc.
file().
str() );
471 m_t <<
"</computeroutput></literallayout>";
475 m_t <<
"<literallayout><computeroutput>";
482 m_t <<
"</computeroutput></literallayout>";
496 m_t <<
"<literallayout>";
498 m_t <<
"</literallayout>";
502 m_t <<
"<literallayout><computeroutput>";
511 m_t <<
"</computeroutput></literallayout>";
523 m_t <<
"<programlisting linenumbering=\"unnumbered\">";
536 std::unique_ptr<FileDef> fd;
576 else m_t <<
" <mediaobject>\n";
577 m_t <<
" <imageobject>\n";
578 m_t <<
" <imagedata ";
579 m_t <<
"align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << f.
relPath() << f.
name() <<
".png\"/>\n";
580 m_t <<
" </imageobject>\n";
582 else m_t <<
" </mediaobject>\n";
589 m_t <<
"<indexterm><primary>";
591 m_t <<
"</primary></indexterm>\n";
619 m_t <<
"<orderedlist>\n";
623 m_t <<
"<itemizedlist>\n";
628 m_t <<
"</orderedlist>\n";
632 m_t <<
"</itemizedlist>\n";
643 m_t <<
"<listitem override=\"unchecked\">";
647 m_t <<
"<listitem override=\"checked\">";
654 m_t <<
"</listitem>";
845 m_t <<
"<formalpara>\n";
853 std::visit(*
this,*s.
title());
863 m_t <<
"</formalpara>\n";
871 m_t <<
"</caution>\n";
874 m_t <<
"</important>\n";
877 m_t <<
"</warning>\n";
880 m_t <<
"</formalpara>\n";
898 m_t <<
"<itemizedlist>\n";
900 m_t <<
"</itemizedlist>\n";
912 m_t <<
"</listitem>\n";
924 std::visit(*
this,*s.
title());
927 m_t <<
"</section>\n";
938 m_t <<
"<itemizedlist>\n";
941 m_t <<
"</orderedlist>\n";
943 m_t <<
"</itemizedlist>\n";
950 const DocHtmlList *l = std::get_if<DocHtmlList>(s.
parent());
953 bool isFirst = &std::get<DocHtmlListItem>(l->
children().
front())==&s;
956 for (
const auto &opt : s.
attribs())
958 if (opt.name==
"value")
961 int val = opt.value.toInt(&ok);
966 if (value>0 || isFirst)
968 for (
const auto &opt : l->
attribs())
970 if (opt.name==
"type")
973 type =
" numeration=\"arabic\"";
974 else if (opt.value==
"a")
975 type =
" numeration=\"loweralpha\"";
976 else if (opt.value==
"A")
977 type =
" numeration=\"upperalpha\"";
978 else if (opt.value==
"i")
979 type =
" numeration=\"lowerroman\"";
980 else if (opt.value==
"I")
981 type =
" numeration=\"upperroman\"";
983 else if (value==0 && opt.name==
"start")
986 int val = opt.value.toInt(&ok);
992 if (value>0 && !isFirst)
994 m_t <<
"</orderedlist>\n";
996 if (value>0 || isFirst)
998 m_t <<
"<orderedlist";
1000 if (value>0)
m_t <<
" startingnumber=\"" << value <<
"\"";
1004 m_t <<
"<listitem>\n";
1006 m_t <<
"</listitem>\n";
1013 m_t <<
"<variablelist>\n";
1015 m_t <<
"</variablelist>\n";
1022 m_t <<
"<varlistentry><term>";
1024 m_t <<
"</term></varlistentry>\n";
1031 m_t <<
"<listitem>";
1033 m_t <<
"</listitem>\n";
1041 m_t <<
"<informaltable frame=\"all\">\n";
1042 m_t <<
" <tgroup cols=\"" << t.
numColumns() <<
"\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n";
1046 m_t <<
" <colspec colname='c" << i+1 <<
"'/>\n";
1050 std::visit(*
this,*t.
caption());
1055 m_t <<
" </tgroup>\n";
1056 m_t <<
"</informaltable>\n";
1079 for (
const auto &opt : tr.
attribs())
1092 m_t <<
"</thead><tbody>\n";
1104 for (
const auto &opt : c.
attribs())
1106 if (opt.name==
"colspan")
1109 int cols = opt.value.toInt();
1113 else if (opt.name==
"rowspan")
1115 int extraRows = opt.value.toInt() - 1;
1116 m_t <<
" morerows='" << extraRows <<
"'";
1118 else if (opt.name==
"class")
1120 if (opt.value.startsWith(
"markdownTable"))
1122 if (opt.value.endsWith(
"Right"))
1124 m_t <<
" align='right'";
1126 else if (opt.value.endsWith(
"Left"))
1128 m_t <<
" align='left'";
1130 else if (opt.value.endsWith(
"Center"))
1132 m_t <<
" align='center'";
1162 m_t <<
"</caption>\n";
1176 if (href.
url().
at(0) !=
'#')
1192 m_t <<
"<para><emphasis role=\"bold\">";
1194 m_t <<
"</emphasis></para>";
1205 std::visit(*
this,*summary);
1217 m_t <<
"<formalpara><title>";
1219 m_t <<
"</title></formalpara>\n";
1319 m_t <<
"<tocentry>";
1321 m_t <<
"</tocentry>\n";
1338 m_t <<
" <formalpara>\n";
1339 m_t <<
" <title>\n";
1349 m_t <<
"</title>\n";
1351 m_t <<
" <table frame=\"all\">\n";
1357 if (hasInOutSpecs && hasTypeSpecs) ncols += 2;
1358 else if (hasInOutSpecs || hasTypeSpecs) ncols += 1;
1360 m_t <<
" <tgroup cols=\"" << ncols <<
"\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n";
1361 for (
int i = 1; i <= ncols; i++)
1363 if (i == ncols)
m_t <<
" <colspec colwidth=\"4*\"/>\n";
1364 else m_t <<
" <colspec colwidth=\"1*\"/>\n";
1366 m_t <<
" <tbody>\n";
1368 m_t <<
" </tbody>\n";
1369 m_t <<
" </tgroup>\n";
1370 m_t <<
" </table>\n";
1371 m_t <<
" </para>\n";
1372 m_t <<
" </formalpara>\n";
1389 const DocParamSect *sect = std::get_if<DocParamSect>(pl.
parent());
1416 std::visit(*
this,type);
1423 m_t <<
"<entry></entry>\n";
1435 std::visit(*
this,param);
1443 std::visit(*
this,par);
1445 m_t <<
"</entry>\n";
1454 m_t <<
"<para><link linkend=\"_";
1486 m_t <<
"<blockquote>";
1488 m_t <<
"</blockquote>";
1569 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1593 baseName.prepend(
"msc_");
1597 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1631 baseName.prepend(
"dia_");
1635 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1669 baseName.prepend(
"dot_");
1674 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
"." + imgExt, width, height);
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, bool isExampleBlock, const QCString &exampleName=QCString(), const FileDef *fileDef=nullptr, int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, const MemberDef *memberDef=nullptr, bool showLineNumbers=TRUE, const Definition *searchCtx=nullptr, bool collectXRefs=TRUE)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
Node representing an anchor.
Node representing an auto List.
Node representing an item of a auto list.
Node representing a citation of some bibliographic reference.
Node representing a dia file.
Node representing a dot file.
Node representing an emoji.
Node representing a Hypertext reference.
Node representing a horizontal ruler.
Node representing an HTML blockquote.
Node representing a HTML table caption.
Node representing a HTML table cell.
const HtmlAttribList & attribs() const
Node representing a HTML description data.
Node representing a Html description list.
Node representing a Html description item.
const DocNodeVariant * summary() const
Node representing a Html list.
const HtmlAttribList & attribs() const
Node representing a HTML list item.
const HtmlAttribList & attribs() const
Node representing a HTML table row.
const HtmlAttribList & attribs() const
Node representing a HTML table.
size_t numColumns() const
const DocNodeVariant * caption() const
Node representing an image.
bool isInlineImage() const
Node representing a include/dontinclude operator block.
bool stripCodeComments() const
QCString includeFileName() const
QCString exampleFile() const
Node representing an included text block from file.
QCString extension() const
bool stripCodeComments() const
QCString exampleFile() const
Node representing an entry in the index.
Node representing an internal section of documentation.
Node representing an internal reference to some item.
Node representing a line break.
Node representing a link to some item.
Node representing a word that can be linked to something.
Node representing a msc file.
DocNodeVariant * parent()
Node representing an block of paragraphs.
Node representing a paragraph in the documentation tree.
Node representing a parameter list.
const DocNodeList & parameters() const
const DocNodeList & paramTypes() const
DocParamSect::Direction direction() const
const DocNodeList & paragraphs() const
Node representing a parameter section.
bool hasInOutSpecifier() const
bool hasTypeSpecifier() const
Node representing a uml file.
Node representing a reference to some item.
QCString targetTitle() const
Root node of documentation tree.
Node representing a reference to a section.
Node representing a list of section references.
Node representing a normal section.
const DocNodeVariant * title() const
Node representing a separator.
Node representing a simple list.
Node representing a simple list item.
const DocNodeVariant * paragraph() const
Node representing a simple section.
const DocNodeVariant * title() const
Node representing a separator between two simple sections of the same type.
Node representing a style change.
Node representing a special symbol.
HtmlEntityMapper::SymType symbol() const
Root node of a text fragment.
Node representing a simple section title.
Node representing a URL (or email address)
Node representing a verbatim, unparsed text fragment.
QCString language() const
const DocNodeList & children() const
QCString exampleFile() const
Node representing a VHDL flow chart.
CodeParserInterface & getCodeParser(const QCString &langExt)
void pushHidden(bool hide)
Node representing some amount of white space.
Node representing a word.
Node representing an item of a cross-referenced list.
void writeDotFile(const QCString &fileName, const DocVerbatim &s)
void visitPreStart(TextStream &t, const DocNodeList &children, bool hasCaption, const QCString &name, const QCString &width, const QCString &height, bool inlineImage=FALSE)
void endDiaFile(bool hasCaption)
void operator()(const DocWord &)
void filter(const QCString &str, const bool retainNewLine=false)
void visitChildren(const T &t)
void startLink(const QCString &file, const QCString &anchor)
void writeMscFile(const QCString &fileName, const DocVerbatim &s)
void startDiaFile(const QCString &fileName, const QCString &relPath, const QCString &width, const QCString &height, bool hasCaption, const DocNodeList &children, const QCString &srcFile, int srcLine)
void startMscFile(const QCString &fileName, const QCString &relPath, const QCString &width, const QCString &height, bool hasCaption, const DocNodeList &children, const QCString &srcFile, int srcLine)
void startDotFile(const QCString &fileName, const QCString &relPath, const QCString &width, const QCString &height, bool hasCaption, const DocNodeList &children, const QCString &srcFile, int srcLine)
void endPlantUmlFile(bool hasCaption)
void visitCaption(const DocNodeList &children)
void writeDiaFile(const QCString &fileName, const DocVerbatim &s)
void endDotFile(bool hasCaption)
void visitPostEnd(TextStream &t, bool hasCaption, bool inlineImage=FALSE)
void writePlantUMLFile(const QCString &fileName, const DocVerbatim &s)
void endMscFile(bool hasCaption)
DocbookDocVisitor(TextStream &t, OutputCodeList &ci, const QCString &langExt)
void startPlantUmlFile(const QCString &fileName, const QCString &relPath, const QCString &width, const QCString &height, bool hasCaption, const DocNodeList &children, const QCString &srcFile, int srcLine)
static FileNameLinkedMap * imageNameLinkedMap
const char * unicode(int index) const
Access routine to the unicode sequence for the Emoji entity.
static EmojiEntityMapper & instance()
Returns the one and only instance of the Emoji entity mapper.
virtual QCString absFilePath() const =0
std::string fileName() const
std::string dirPath(bool absPath=true) const
Class representing a string buffer optimized for growing.
void addStr(const QCString &s)
bool empty() const
checks whether the container is empty
T & front()
access the first element
static HtmlEntityMapper & instance()
Returns the one and only instance of the HTML entity mapper.
const char * docbook(SymType symb) const
Access routine to the docbook code of the HTML entity.
Class representing a list of different code generators.
QCString 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.
static PlantumlManager & instance()
void generatePlantUMLOutput(const QCString &baseName, const QCString &outDir, OutputFormat format)
Convert a PlantUML file to an image.
This is an alternative implementation of QCString.
int find(char c, int index=0, bool cs=TRUE) const
size_t length() const
Returns the length of the string, not counting the 0-terminator.
QCString mid(size_t index, size_t len=static_cast< size_t >(-1)) const
char & at(size_t i)
Returns a reference to the character at index i.
bool isEmpty() const
Returns TRUE iff the string is empty.
const std::string & str() const
QCString & sprintf(const char *format,...)
int findRev(char c, int index=-1, bool cs=TRUE) const
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
QCString left(size_t len) const
Text streaming class that buffers data.
virtual QCString trPrecondition()=0
virtual QCString trSince()=0
virtual QCString trVersion()=0
virtual QCString trReturns()=0
virtual QCString trExceptions()=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 trParameters()=0
virtual QCString trTemplateParameters()=0
virtual QCString trAuthor(bool first_capital, bool singular)=0
virtual QCString trWarning()=0
virtual QCString trSeeAlso()=0
virtual QCString trImportant()=0
virtual QCString trReturnValues()=0
virtual QCString trInvariant()=0
#define Config_getBool(name)
#define Config_getString(name)
void writeDiaGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, DiaOutputFormat format, const QCString &srcFile, int srcLine)
QCString convertToDocBook(const QCString &s, const bool retainNewline)
static QCString filterId(const QCString &s)
static QCString makeBaseName(const QCString &name)
static QCString makeShortName(const QCString &baseName)
static bool supportedHtmlAttribute(const QCString &name)
void writeDotGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, GraphOutputFormat format, const QCString &srcFile, int srcLine)
std::unique_ptr< FileDef > createFileDef(const QCString &p, const QCString &n, const QCString &ref, const QCString &dn)
Translator * theTranslator
void writeMscGraphFromFile(const QCString &inFile, const QCString &outDir, const QCString &outFile, MscOutputFormat format, const QCString &srcFile, int srcLine)
std::ofstream openOutputStream(const QCString &name, bool append=false)
Portable versions of functions that are platform dependent.
const char * qPrint(const char *s)
SrcLangExt
Language as given by extension.
SrcLangExt getLanguageFromFileName(const QCString &fileName, SrcLangExt defLang)
QCString stripPath(const QCString &s)
bool readInputFile(const QCString &fileName, std::string &contents, bool filter, bool isSourceCode)
read a file name fileName and optionally filter and transcode it
SrcLangExt getLanguageFromCodeLang(QCString &fileName)
Routine to handle the language attribute of the \code command.
QCString getDotImageExtension()
bool copyFile(const QCString &src, const QCString &dest)
Copies the contents of file with name src to the newly created file with name dest.
QCString getFileNameExtension(const QCString &fn)
FileDef * findFileDef(const FileNameLinkedMap *fnMap, const QCString &n, bool &ambig)
A bunch of utility functions.