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 ':': result+=
"_1";
break;
63 default: result+=c;
break;
71 return (name==
"align" ||
74 name==
"cellpadding" ||
75 name==
"cellspacing" ||
91 result=result.
mid(i+1);
99 int i = result.
find(
'.');
102 result=result.
left(i);
110 for (
const auto &n : children)
124 if (hasCaption && !inlineImage)
133 t <<
" <informalfigure>\n";
135 t <<
" <mediaobject>\n";
136 t <<
" <imageobject>\n";
144 if (!height.
isEmpty() && !inlineImage) t <<
" width=\"50%\"";
150 t <<
" align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << name <<
"\">";
151 t <<
"</imagedata>\n";
152 t <<
" </imageobject>\n";
153 if (hasCaption && !inlineImage)
162 if (hasCaption && !inlineImage)
166 t <<
" </mediaobject>\n";
167 if (hasCaption && !inlineImage)
173 t <<
" </informalfigure>\n";
252 m_t <<
"<link xlink:href=\"";
264 m_t <<
"<?linebreak?>";
273 m_t <<
"<informaltable frame='bottom'><tgroup cols='1'><colspec align='center'/><tbody><row><entry align='center'>\n";
274 m_t <<
"</entry></row></tbody></tgroup></informaltable>\n";
284 if (s.
enable())
m_t <<
"<emphasis role=\"bold\">";
else m_t <<
"</emphasis>";
287 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>";
351 m_t <<
"</computeroutput></literallayout>";
354 m_t <<
"<literallayout><computeroutput>";
356 m_t <<
"</computeroutput></literallayout>";
362 m_t <<
"<computeroutput>";
364 m_t <<
"</computeroutput>";
381 static int dotindex = 1;
386 name.
sprintf(
"%s%d",
"dot_inline_dotgraph_", dotindex);
391 QCString fileName = baseName+
".dot";
395 err(
"Could not open file {} for writing\n",fileName);
406 static int mscindex = 1;
411 name.
sprintf(
"%s%d",
"msc_inline_mscgraph_", mscindex);
416 QCString fileName = baseName+
".msc";
420 err(
"Could not open file {} for writing\n",fileName);
438 for (
const auto &baseName: baseNameVector)
465 m_t <<
"<literallayout><computeroutput>";
476 m_t <<
"</computeroutput></literallayout>";
480 m_t <<
"<literallayout><computeroutput>";
488 m_t <<
"</computeroutput></literallayout>";
502 m_t <<
"<literallayout>";
504 m_t <<
"</literallayout>";
508 m_t <<
"<literallayout><computeroutput>";
517 m_t <<
"</computeroutput></literallayout>";
529 m_t <<
"<programlisting linenumbering=\"unnumbered\">";
542 std::unique_ptr<FileDef> fd;
579 else m_t <<
" <mediaobject>\n";
580 m_t <<
" <imageobject>\n";
581 m_t <<
" <imagedata ";
582 m_t <<
"align=\"center\" valign=\"middle\" scalefit=\"0\" fileref=\"" << f.
relPath() << f.
name() <<
".png\"/>\n";
583 m_t <<
" </imageobject>\n";
585 else m_t <<
" </mediaobject>\n";
592 m_t <<
"<indexterm><primary>";
594 m_t <<
"</primary></indexterm>\n";
618 if (!opt.noPar())
filter(
"[");
620 if (!opt.noPar())
filter(
"]");
636 m_t <<
"<orderedlist>\n";
640 m_t <<
"<itemizedlist>\n";
645 m_t <<
"</orderedlist>\n";
649 m_t <<
"</itemizedlist>\n";
660 m_t <<
"<listitem override=\"unchecked\">";
664 m_t <<
"<listitem override=\"checked\">";
671 m_t <<
"</listitem>";
790 m_t <<
"<formalpara><title>" <<
theTranslator->trPrecondition() <<
"</title>\n";
800 m_t <<
"<formalpara><title>" <<
theTranslator->trPostcondition() <<
"</title>\n";
810 m_t <<
"<formalpara><title>" <<
theTranslator->trCopyright() <<
"</title>\n";
820 m_t <<
"<formalpara><title>" <<
theTranslator->trInvariant() <<
"</title>\n";
851 m_t <<
"<important><title>" <<
theTranslator->trImportant() <<
"</title>\n";
862 m_t <<
"<formalpara>\n";
870 std::visit(*
this,*s.
title());
880 m_t <<
"</formalpara>\n";
888 m_t <<
"</caution>\n";
891 m_t <<
"</important>\n";
894 m_t <<
"</warning>\n";
897 m_t <<
"</formalpara>\n";
915 m_t <<
"<itemizedlist>\n";
917 m_t <<
"</itemizedlist>\n";
929 m_t <<
"</listitem>\n";
941 std::visit(*
this,*s.
title());
944 m_t <<
"</section>\n";
955 m_t <<
"<itemizedlist>\n";
958 m_t <<
"</orderedlist>\n";
960 m_t <<
"</itemizedlist>\n";
970 bool isFirst = &std::get<DocHtmlListItem>(l->
children().
front())==&s;
973 for (
const auto &opt : s.
attribs())
975 if (opt.name==
"value")
978 int val = opt.value.toInt(&ok);
983 if (value>0 || isFirst)
985 for (
const auto &opt : l->
attribs())
987 if (opt.name==
"type")
990 type =
" numeration=\"arabic\"";
991 else if (opt.value==
"a")
992 type =
" numeration=\"loweralpha\"";
993 else if (opt.value==
"A")
994 type =
" numeration=\"upperalpha\"";
995 else if (opt.value==
"i")
996 type =
" numeration=\"lowerroman\"";
997 else if (opt.value==
"I")
998 type =
" numeration=\"upperroman\"";
1000 else if (value==0 && opt.name==
"start")
1003 int val = opt.value.toInt(&ok);
1004 if (ok) value = val;
1009 if (value>0 && !isFirst)
1011 m_t <<
"</orderedlist>\n";
1013 if (value>0 || isFirst)
1015 m_t <<
"<orderedlist";
1017 if (value>0)
m_t <<
" startingnumber=\"" << value <<
"\"";
1021 m_t <<
"<listitem>\n";
1023 m_t <<
"</listitem>\n";
1030 m_t <<
"<variablelist>\n";
1032 m_t <<
"</variablelist>\n";
1039 m_t <<
"<varlistentry><term>";
1041 m_t <<
"</term></varlistentry>\n";
1048 m_t <<
"<listitem>";
1050 m_t <<
"</listitem>\n";
1058 m_t <<
"<informaltable frame=\"all\">\n";
1059 m_t <<
" <tgroup cols=\"" << t.
numColumns() <<
"\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n";
1063 m_t <<
" <colspec colname='c" << i+1 <<
"'/>\n";
1067 std::visit(*
this,*t.
caption());
1072 m_t <<
" </tgroup>\n";
1073 m_t <<
"</informaltable>\n";
1096 for (
const auto &opt : tr.
attribs())
1109 m_t <<
"</thead><tbody>\n";
1121 for (
const auto &opt : c.
attribs())
1123 if (opt.name==
"colspan")
1126 int cols = opt.value.toInt();
1130 else if (opt.name==
"rowspan")
1132 int extraRows = opt.value.toInt() - 1;
1133 m_t <<
" morerows='" << extraRows <<
"'";
1135 else if (opt.name==
"class")
1137 if (opt.value.startsWith(
"markdownTable"))
1139 if (opt.value.endsWith(
"Right"))
1141 m_t <<
" align='right'";
1143 else if (opt.value.endsWith(
"Left"))
1145 m_t <<
" align='left'";
1147 else if (opt.value.endsWith(
"Center"))
1149 m_t <<
" align='center'";
1179 m_t <<
"</caption>\n";
1193 if (href.
url().
at(0) !=
'#')
1209 m_t <<
"<para><emphasis role=\"bold\">";
1211 m_t <<
"</emphasis></para>";
1222 std::visit(*
this,*summary);
1234 m_t <<
"<formalpara><title>";
1236 m_t <<
"</title></formalpara>\n";
1336 m_t <<
"<tocentry>";
1338 m_t <<
"</tocentry>\n";
1355 m_t <<
" <formalpara>\n";
1356 m_t <<
" <title>\n";
1366 m_t <<
"</title>\n";
1368 m_t <<
" <table frame=\"all\">\n";
1374 if (hasInOutSpecs && hasTypeSpecs) ncols += 2;
1375 else if (hasInOutSpecs || hasTypeSpecs) ncols += 1;
1377 m_t <<
" <tgroup cols=\"" << ncols <<
"\" align=\"left\" colsep=\"1\" rowsep=\"1\">\n";
1378 for (
int i = 1; i <= ncols; i++)
1380 if (i == ncols)
m_t <<
" <colspec colwidth=\"4*\"/>\n";
1381 else m_t <<
" <colspec colwidth=\"1*\"/>\n";
1383 m_t <<
" <tbody>\n";
1385 m_t <<
" </tbody>\n";
1386 m_t <<
" </tgroup>\n";
1387 m_t <<
" </table>\n";
1388 m_t <<
" </para>\n";
1389 m_t <<
" </formalpara>\n";
1433 std::visit(*
this,type);
1440 m_t <<
"<entry></entry>\n";
1452 std::visit(*
this,param);
1460 std::visit(*
this,par);
1462 m_t <<
"</entry>\n";
1471 m_t <<
"<para><link linkend=\"_";
1503 m_t <<
"<blockquote>";
1505 m_t <<
"</blockquote>";
1584 for (
const auto &bName: baseNameVector)
1591 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1616 baseName.prepend(
"msc_");
1620 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1654 baseName.prepend(
"dia_");
1658 visitPreStart(
m_t, children, hasCaption, relPath + baseName +
".png", width, height);
1692 baseName.prepend(
"dot_");
1697 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, const CodeParserOptions &options)=0
Parses a source file or fragment with the goal to produce highlighted and cross-referenced output.
Class representing a directory in the file system.
bool remove(const std::string &path, bool acceptsAbsPath=true) const
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.
CiteInfoOption option() const
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.
A model of a file symbol.
virtual QCString absFilePath() const =0
Minimal replacement for QFileInfo.
std::string fileName() const
std::string dirPath(bool absPath=true) const
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.
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.
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
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
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.
#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)
Options to configure the code parser.
CodeParserOptions & setStartLine(int lineNr)
CodeParserOptions & setShowLineNumbers(bool enable)
CodeParserOptions & setFileDef(const FileDef *fd)
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.