Doxygen
Loading...
Searching...
No Matches
mangen.cpp
Go to the documentation of this file.
1/******************************************************************************
2 *
3 * Copyright (C) 1997-2022 by Dimitri van Heesch.
4 *
5 * Permission to use, copy, modify, and distribute this software and its
6 * documentation under the terms of the GNU General Public License is hereby
7 * granted. No representations are made about the suitability of this software
8 * for any purpose. It is provided "as is" without express or implied warranty.
9 * See the GNU General Public License for more details.
10 *
11 * Documents produced by Doxygen are derivative works derived from the
12 * input used in their production; they are not affected by this license.
13 *
14 */
15
16/* http://www.cubic.org/source/archive/fileform/txt/man/ has some
17 nice introductions to groff and man pages. */
18
19#include <stdlib.h>
20#include <string.h>
21
22#include "message.h"
23#include "mangen.h"
24#include "config.h"
25#include "util.h"
26#include "doxygen.h"
27#include "docparser.h"
28#include "mandocvisitor.h"
29#include "language.h"
30#include "dir.h"
31#include "utf8.h"
32#include "datetime.h"
33#include "portable.h"
34#include "outputlist.h"
35
37{
38 /*
39 * [.][number][rest]
40 * in case of . missing, just ignore it
41 * in case number missing, just place a 3 in front of it
42 */
43 DString ext = Config_getString(MAN_EXTENSION);
44 if (ext.empty())
45 {
46 ext = "3";
47 }
48 else
49 {
50 if (ext.at(0)=='.')
51 {
52 if (ext.length()==1)
53 {
54 ext = "3";
55 }
56 else // strip .
57 {
58 ext = ext.mid(1);
59 }
60 }
61 if (ext.at(0)<'0' || ext.at(0)>'9')
62 {
63 ext.prepend("3");
64 }
65 }
66 return ext;
67}
68
70{
71 DString dir = Config_getString(MAN_SUBDIR);
72 if (dir.empty())
73 {
74 dir = "man" + getExtension();
75 }
76 return dir;
77}
78
79static DString docifyToString(const DString &str)
80{
81 DString result;
82 result.reserve(str.length());
83 if (!str.empty())
84 {
85 const char *p=str.data();
86 char c=0;
87 while ((c=*p++))
88 {
89 switch(c)
90 {
91 case '-': result += "\\-"; break; // see bug747780
92 case '.': result += "\\&."; break; // see bug652277
93 case '\\': result += "\\\\"; break;
94 case '\n': result += "\n"; break;
95 case '\"': c = '\''; // no break!
96 default: result += c; break;
97 }
98 }
99 //printf("%s",str);fflush(stdout);
100 }
101 return result;
102}
103
105{
106 return "\\fB" + docifyToString(text) + "\\fP";
107}
108
109//-------------------------------------------------------------------------------
110
114
116{
117 *m_t << "\n";
118 *m_t << ".nf\n";
119}
120
122{
123 if (m_col>0) *m_t << "\n";
124 *m_t << ".PP\n";
125 *m_t << ".fi\n";
126 m_col=0;
127}
128
129void ManCodeGenerator::writeLineNumber(const DString &,const DString &,const DString &,int l, bool)
130{
131 if (m_hide) return;
132 *m_t << l << " ";
133 m_col=0;
134}
135
137 const DString &,const DString &,
138 const DString &, const DString &name,
139 const DString &)
140{
141 if (m_hide) return;
142 if (!name.empty())
143 {
144 const char *p=name.data();
145 char c=0;
146 while ((c=*p++))
147 {
148 switch(c)
149 {
150 case '-': *m_t << "\\-"; break; // see bug747780
151 case '.': *m_t << "\\&."; break; // see bug652277
152 case '\\': *m_t << "\\\\"; m_col++; break;
153 case '\n': *m_t << "\n"; m_col=0; break;
154 case '\"': c = '\''; // no break!
155 default: *m_t << c; m_col++; break;
156 }
157 }
158 //printf("%s",str);fflush(stdout);
159 }
160}
161
163{
164 const int tabSize = Config_getInt(TAB_SIZE);
165 const size_t stripAmount = m_stripIndentAmount;
166 if (!str.empty())
167 {
168 char c;
169 const char *p=str.data();
170 if (m_hide)
171 {
173 }
174 else
175 {
176 while ((c=*p++))
177 {
178 switch(c)
179 {
180 case '-': *m_t << "\\-"; break; // see bug747780
181 case '.': *m_t << "\\&."; break; // see bug652277
182 case '\t': {
183 int spacesToNextTabStop = tabSize - (m_col%tabSize);
184 while (spacesToNextTabStop--)
185 {
186 if (m_col>=stripAmount) *m_t << " ";
187 m_col++;
188 }
189 }
190 break;
191 case ' ': if (m_col>=stripAmount) *m_t << " ";
192 m_col++;
193 break;
194 case '\n': *m_t << "\n"; m_col=0; break;
195 case '\\': *m_t << "\\\\"; m_col++; break;
196 case '\"': // no break!
197 default: p=writeUTF8Char(*m_t,p-1); m_col++; break;
198 }
199 }
200 //printf("%s",str);fflush(stdout);
201 }
202 }
203}
204
209
214
216{
217 m_hide = false;
218}
219
221{
222 m_stripIndentAmount = amount;
223}
224
225//-------------------------------------------------------------------------------
226
233
246
248{
249 if (this!=&og)
250 {
251 m_dir = og.m_dir;
252 m_codeList = std::make_unique<OutputCodeList>(*og.m_codeList);
256 m_col = og.m_col;
261 }
262 return *this;
263}
264
266
271
273{
274 DString manOutput = Config_getString(MAN_OUTPUT);
275
276 Dir d(manOutput.str());
277 if (!d.exists() && !d.mkdir(manOutput.str()))
278 {
279 term("Could not create output directory {}\n",manOutput);
280 }
281 std::string manDir = manOutput.str()+"/"+getSubdir().str();
282 if (!d.exists(manDir) && !d.mkdir(manDir))
283 {
284 term("Could not create output directory {}/{}\n",manOutput,getSubdir());
285 }
286 createSubDirs(d);
287}
288
290{
291 DString dname = Config_getString(MAN_OUTPUT);
292 Dir d(dname.str());
293 clearSubDirs(d);
294}
295
296static DString buildFileName(const DString &name)
297{
298 DString fileName;
299 if (name.empty()) return "noname";
300
301 const char *p=name.data();
302 char c = 0;
303 while ((c=*p++))
304 {
305 switch (c)
306 {
307 case ':':
308 fileName+="_";
309 if (*p==':') p++;
310 break;
311 case '<':
312 case '>':
313 case '&':
314 case '*':
315 case '!':
316 case '^':
317 case '~':
318 case '%':
319 case '+':
320 case '/':
321 fileName+="_";
322 break;
323 default:
324 fileName+=c;
325 }
326 }
327
328 DString manExtension = "." + getExtension();
329 if (fileName.right(manExtension.length())!=manExtension)
330 {
331 fileName+=manExtension;
332 }
333
334 return fileName;
335}
336
337void ManGenerator::startFile(const DString &,bool,const DString &manName,const DString &,int,int)
338{
339 startPlainFile( buildFileName( manName ) );
340 m_firstCol=true;
341}
342
344{
345 m_t << "\n";
346 endPlainFile();
347}
348
350{
351 m_t << ".TH \"" << name << "\" " << getExtension() << " \"";
352 switch (Config_getEnum(TIMESTAMP))
353 {
354 case TIMESTAMP_t::YES:
355 case TIMESTAMP_t::DATETIME:
357 break;
358 case TIMESTAMP_t::DATE:
359 m_t << dateToString(DateTimeType::Date) << "\" \"";
360 break;
361 case TIMESTAMP_t::NO:
362 break;
363 }
364 if (!Config_getString(PROJECT_NUMBER).empty())
365 m_t << "Version " << Config_getString(PROJECT_NUMBER) << "\" \"";
366 if (Config_getString(PROJECT_NAME).empty())
367 m_t << "Doxygen";
368 else
369 m_t << Config_getString(PROJECT_NAME);
370 m_t << "\" \\\" -*- nroff -*-\n";
371 m_t << ".ad l\n";
372 m_t << ".nh\n";
373 m_t << ".SH NAME\n";
374 m_t << name;
375 m_firstCol=false;
376 m_paragraph=true;
377 m_inHeader=true;
378}
379
381{
382 if (!m_paragraph)
383 {
384 if (!m_firstCol) m_t << "\n";
385 m_t << ".PP\n";
386 m_firstCol=true;
387 }
388 m_paragraph=true;
389}
390
392{
393 if (!m_paragraph)
394 {
395 if (!m_firstCol) m_t << "\n";
396 m_t << ".PP\n";
397 m_firstCol=true;
398 }
399 m_paragraph=true;
400}
401
405
407{
408 docify(text);
409}
410
412{
413}
414
416{
417}
418
420 const DString &,const DString &)
421{
422}
423
425 const DString &, const DString &name)
426{
427 startBold(); docify(name); endBold();
428}
429
431{
432 if (!m_firstCol) m_t << "\n";
433 m_t << ".SH \"";
434 m_upperCase=true;
435 m_firstCol=false;
436}
437
439{
440 m_t << "\"\n.PP \n";
441 m_firstCol=true;
442 m_paragraph=true;
443 m_upperCase=false;
444}
445
447{
448 if (!m_firstCol) m_t << "\n";
449 m_t << ".SS \"";
450}
451
453{
454 m_t << "\"\n";
455 m_firstCol=true;
456 m_paragraph=false;
457}
458
460{
461 if (!str.empty())
462 {
463 const char *p=str.data();
464 char c=0;
465 while ((c=*p++))
466 {
467 switch(c)
468 {
469 case '-': m_t << "\\-"; break; // see bug747780
470 case '.': m_t << "\\&."; break; // see bug652277
471 case '\\': m_t << "\\\\"; m_col++; break;
472 case '\n': m_t << "\n"; m_col=0; break;
473 case '\"': c = '\''; // no break!
474 default: m_t << c; m_col++; break;
475 }
476 }
477 m_firstCol=(c=='\n');
478 //printf("%s",str);fflush(stdout);
479 }
480 m_paragraph=false;
481}
482
484{
485 m_firstCol=(c=='\n');
486 if (m_firstCol) m_col=0; else m_col++;
487 switch (c)
488 {
489 case '\\': m_t << "\\\\"; break;
490 case '\"': c = '\''; // no break!
491 default: m_t << c; break;
492 }
493 //printf("%c",c);fflush(stdout);
494 m_paragraph=false;
495}
496
498{
499 if (!m_firstCol) m_t << "\n";
500 m_t << ".TP\n";
501 m_firstCol=true;
502 m_paragraph=false;
503 m_col=0;
504}
505
509
510void ManGenerator::startMemberDoc(const DString &,const DString &,const DString &,const DString &,int,int,bool)
511{
512 if (!m_firstCol) m_t << "\n";
513 m_t << ".SS \"";
514 m_firstCol=false;
515 m_paragraph=false;
516}
517
519 const DString &, const DString &name,
520 const DString &)
521{
522 // something to be done?
523 if( !Config_getBool(MAN_LINKS) )
524 {
525 return; // no
526 }
527
528 // the name of the link file is derived from the name of the anchor:
529 // - truncate after an (optional) ::
530 DString baseName = name;
531 if (size_t i=baseName.rfind("::"); i!=DString::npos)
532 {
533 baseName=baseName.mid(i+2);
534 }
535
536 //printf("Converting man link '%s'->'%s'->'%s'\n",
537 // name,qPrint(baseName),qPrint(buildFileName(baseName)));
538
539 // - remove dangerous characters and append suffix, then add dir prefix
540 DString fileName=dir()+"/"+buildFileName( baseName );
541 FileInfo fi(fileName.str());
542 if (!fi.exists())
543 {
544 std::ofstream linkStream = Portable::openOutputStream(fileName);
545 if (linkStream.is_open())
546 {
547 linkStream << ".so " << getSubdir() << "/" << buildFileName( manName ) << "\n";
548 }
549 }
550}
551
553{
554}
555
557{
558 m_t << "\"\n";
559}
560
562{
563 if (!m_firstCol) m_t << "\n";
564 m_t << "\n.SS \"";
565 m_firstCol=false;
566 m_paragraph=false;
567}
568
570{
571 m_t << "\"";
572}
574{
575 if (!m_firstCol) m_t << "\n";
576 m_t << ".SH SYNOPSIS\n.br\n.PP\n";
577 m_firstCol=true;
578 m_paragraph=false;
579}
580
582{
583 if (!m_firstCol) m_t << "\n";
584 if (!m_paragraph) m_t << ".in -1c\n";
585 m_t << ".in +1c\n";
586 m_firstCol=true;
587 m_paragraph=false;
588 m_col=0;
589}
590
594
596{
597 if (indentLevel==0)
598 {
599 m_insideTabbing=true;
600 }
601}
602
604{
605 if (indentLevel==0)
606 {
607 m_insideTabbing=false;
608 }
609}
610
611
613{
614 if (m_firstCol && !m_insideTabbing) m_t << ".in +1c\n";
615 m_t << "\n.ti -1c\n.RI \"";
616 m_firstCol=false;
617}
618
620{
621 m_t << "\"\n.br";
622}
623
625{
626 if (!m_insideTabbing)
627 {
628 m_t << "\n.in +1c"; m_firstCol=false;
629 }
630}
631
633{
634 if (!m_insideTabbing)
635 {
636 m_t << "\n.in -1c"; m_firstCol=false;
637 }
638}
639
641{
642 m_t << "\n.PP\n.RI \"\\fB";
643}
644
646{
647 m_t << "\\fP\"\n.br\n";
648 m_firstCol=true;
649}
650
654
656{
657 m_t << "\n.PP";
658}
659
661{
662 m_t << "\n.in +1c";
663}
664
666{
667 m_t << "\n.in -1c";
668 m_firstCol=false;
669}
670
672{
673 if( !m_inHeader )
674 {
675 switch(type.level())
676 {
677 case SectionType::Page: // fall through
678 case SectionType::Section: startGroupHeader("",0); break;
679 case SectionType::Subsection: // fall through
680 case SectionType::Subsubsection: // fall through
681 case SectionType::Paragraph: // fall through
682 case SectionType::Subparagraph: // fall through
684 default: ASSERT(0); break;
685 }
686 }
687}
688
690{
691 if( !m_inHeader )
692 {
693 switch(type.level())
694 {
695 case SectionType::Page: // fall through
696 case SectionType::Section: endGroupHeader(0); break;
697 case SectionType::Subsection: // fall through
698 case SectionType::Subsubsection: // fall through
699 case SectionType::Paragraph: // fall through
700 case SectionType::Subparagraph: // fall through
702 default: ASSERT(0); break;
703 }
704 }
705 else
706 {
707 m_t << "\n.PP\n";
708 m_firstCol=true;
709 m_paragraph=false;
710 m_inHeader=false;
711 }
712}
713
715{
716 if (!m_firstCol)
717 { m_t << "\n" << ".PP\n";
718 m_firstCol=true; m_paragraph=true;
719 m_col=0;
720 }
721 m_paragraph=false;
722 startBold();
724 endBold();
725 m_paragraph=true;
726}
727
731
732void ManGenerator::startDescTable(const DString &title,const bool hasInits)
733{
734 if (!m_firstCol)
735 { m_t << "\n.PP\n";
736 m_firstCol=true; m_paragraph=true;
737 m_col=0;
738 }
739 m_paragraph=false;
740 startBold();
741 docify(title);
742 endBold();
743 m_paragraph=true;
745}
746
751
752void ManGenerator::writeDoc(const IDocNodeAST *ast,const Definition *ctx,const MemberDef *,int,int)
753{
754 const DocNodeAST *astImpl = dynamic_cast<const DocNodeAST *>(ast);
755 if (astImpl)
756 {
757 ManDocVisitor visitor(m_t,*m_codeList,ctx?ctx->getDefFileExtension():DString(""));
758 std::visit(visitor,astImpl->root);
759 }
760 m_firstCol=false;
761 m_paragraph = false;
762}
763
765{
766 if (!m_firstCol)
767 { m_t << "\n.PP\n";
768 m_firstCol=true; m_paragraph=true;
769 m_col=0;
770 }
771 m_paragraph=false;
772 startBold();
773 docify(header);
774 endBold();
775 m_paragraph=true;
776}
777
783
785{
786 endEmphasis();
788 m_t << " : ";
789}
790
795
800
804
806{
807 m_t << "\n"; m_firstCol=true;
808}
809
813
814
816{
817 if (!m_firstCol)
818 {
819 m_t << "\n.PP\n" << ".in -1c\n";
820 }
821 m_t << ".RI \"\\fB";
822}
823
825{
826 m_t << "\\fP\"\n" << ".in +1c\n";
827 m_firstCol = false;
828}
829
831{
832 if (!m_firstCol)
833 {
834 m_t << "\n.PP\n";
835 }
836 m_t << "\\fB";
837 if (isEnum)
838 {
840 }
841 else
842 {
844 }
845 m_t << ":\\fP\n";
846 m_t << ".RS 4\n";
847}
848
850{
851 if (!m_firstCol) m_t << "\n";
852 m_t << ".RE\n";
853 m_t << ".PP\n";
854 m_firstCol=true;
855}
856
860
862{
863 m_t << " ";
864}
865
867{
868 m_t << "\\fI";
869}
870
872{
873 m_t << "\\fP ";
874}
875
879
881{
882 if (!m_firstCol) m_t << "\n";
883 m_t << ".br\n";
884 m_t << ".PP\n";
885 m_firstCol=true;
886}
887
891
892void ManGenerator::writeLabel(const DString &l,bool isLast)
893{
894 m_t << "\\fR [" << l << "]\\fP";
895 if (!isLast) m_t << ", ";
896}
897
899{
900}
901
905
907 const DString &/*id*/, const DString &/*ref*/,
908 const DString &/*file*/, const DString &/*anchor*/,
909 const DString &title, const DString &name)
910{
911 m_t << "\n\n";
913 m_firstCol = false;
914}
915
917{
918 if (openBracket) m_t << "(";
919}
920
921void ManGenerator::endParameterExtra(bool last,bool /* emptyList */, bool closeBracket)
922{
923 if (last && closeBracket)
924 {
925 m_t << ")";
926 }
927}
929{
930 m_t << " ";
931}
932
A String class for use with Doxygen wrapping std::string and adding some additional functionality off...
Definition dstring.h:89
DString()=default
size_t rfind(char c, size_t pos=npos) const
Definition dstring.h:249
DString mid(size_t index, size_t len=npos) const
Definition dstring.h:323
bool empty() const
Returns true iff the string is empty (std::string compatible alias for isEmpty()).
Definition dstring.h:153
static constexpr size_t npos
value used to indicate 'not found' or 'to the end of the string', matching std::string::npos
Definition dstring.h:183
char & at(size_t i)
Returns a reference to the character at index i.
Definition dstring.h:675
DString right(size_t len) const
Definition dstring.h:316
DString & prepend(const char *s)
Definition dstring.h:504
void reserve(size_t size)
Reserve space for size bytes without changing the string contents.
Definition dstring.h:222
const std::string & str() const
Definition dstring.h:634
const char * data() const
Returns a pointer to the contents of the string in the form of a 0-terminated C string.
Definition dstring.h:162
size_t length() const
Returns the length of the string, not counting the 0-terminator.
Definition dstring.h:156
The common base class of all entity definitions found in the sources.
Definition definition.h:77
virtual DString getDefFileExtension() const =0
Class representing a directory in the file system.
Definition dir.h:75
bool mkdir(const std::string &path, bool acceptsAbsPath=true) const
Definition dir.cpp:295
bool exists() const
Definition dir.cpp:257
Class representing the abstract syntax tree of a documentation block.
Definition docnode.h:1471
DocNodeVariant root
Definition docnode.h:1496
Minimal replacement for QFileInfo.
Definition fileinfo.h:23
bool exists() const
Definition fileinfo.cpp:30
opaque representation of the abstract syntax tree (AST)
Definition docparser.h:50
Generator for Man page code fragments.
Definition mangen.h:25
size_t m_stripIndentAmount
Definition mangen.h:64
void stripCodeComments(bool b) override
Definition mangen.cpp:205
ManCodeGenerator(TextStream *t)
Definition mangen.cpp:111
void writeLineNumber(const DString &, const DString &, const DString &, int l, bool) override
Definition mangen.cpp:129
void endSpecialComment() override
Definition mangen.cpp:215
void startCodeFragment(const DString &style) override
Definition mangen.cpp:115
void startSpecialComment() override
Definition mangen.cpp:210
size_t m_col
Definition mangen.h:60
void writeCodeLink(CodeSymbolType type, const DString &ref, const DString &file, const DString &anchor, const DString &name, const DString &tooltip) override
Definition mangen.cpp:136
TextStream * m_t
Definition mangen.h:61
void endCodeFragment(const DString &) override
Definition mangen.cpp:121
void codify(const DString &text) override
Definition mangen.cpp:162
void setStripIndentAmount(size_t amount) override
Definition mangen.cpp:220
bool m_stripCodeComments
Definition mangen.h:62
void setTextStream(TextStream *t)
Definition mangen.h:28
Concrete visitor implementation for LaTeX output.
void newParagraph()
Definition mangen.cpp:380
void startConstraintDocs() override
Definition mangen.cpp:801
OutputType type() const override
Definition mangen.h:84
void startAnonTypeScope(int) override
Definition mangen.cpp:595
void endMemberGroupHeader(bool) override
Definition mangen.cpp:645
void startBold() override
Definition mangen.h:168
void endMemberItem(MemberItemType) override
Definition mangen.cpp:619
void startEmphasis() override
Definition mangen.h:166
void endLabels() override
Definition mangen.cpp:898
void writeString(const DString &text) override
Definition mangen.cpp:406
void startConstraintList(const DString &) override
Definition mangen.cpp:764
void writeLabel(const DString &l, bool isLast) override
Definition mangen.cpp:892
void startDescTable(const DString &title, const bool hasInits) override
Definition mangen.cpp:732
ManCodeGenerator * m_codeGen
Definition mangen.h:303
void endSection(const DString &, SectionType) override
Definition mangen.cpp:689
void addCodeGen(OutputCodeList &list) override
Definition mangen.cpp:267
void endAnonTypeScope(int) override
Definition mangen.cpp:603
void endGroupHeader(int) override
Definition mangen.cpp:438
void startIndexItem(const DString &ref, const DString &file) override
Definition mangen.cpp:411
void endMemberGroup(bool) override
Definition mangen.cpp:665
void endConstraintDocs() override
Definition mangen.cpp:805
void cleanup() override
Definition mangen.cpp:289
void startFile(const DString &name, bool isSource, const DString &manName, const DString &title, int id, int hierarchyLevel) override
Definition mangen.cpp:337
std::unique_ptr< OutputCodeList > m_codeList
Definition mangen.h:302
void endMemberList() override
Definition mangen.cpp:632
void endParameterExtra(bool, bool, bool) override
Definition mangen.cpp:921
void endDescTable() override
Definition mangen.cpp:747
void writeStartAnnoItem(const DString &type, const DString &file, const DString &path, const DString &name) override
Definition mangen.cpp:419
void startSection(const DString &, const DString &, SectionType) override
Definition mangen.cpp:671
bool m_paragraph
Definition mangen.h:298
void endInlineMemberType() override
Definition mangen.cpp:861
void endMemberHeader() override
Definition mangen.cpp:452
void startMemberHeader(const DString &, int) override
Definition mangen.cpp:446
void writeObjectLink(const DString &ref, const DString &file, const DString &anchor, const DString &name) override
Definition mangen.cpp:424
void startMemberDocSimple(bool) override
Definition mangen.cpp:830
void startExamples() override
Definition mangen.cpp:714
void startConstraintParam() override
Definition mangen.cpp:778
void endInlineMemberDoc() override
Definition mangen.cpp:880
void writeInheritedSectionTitle(const DString &, const DString &, const DString &, const DString &, const DString &, const DString &) override
Definition mangen.cpp:906
void endDescForItem() override
Definition mangen.cpp:591
void endParagraph() override
Definition mangen.cpp:402
void endConstraintList() override
Definition mangen.cpp:810
void endItemListItem() override
Definition mangen.cpp:506
void endPlainFile() override
Definition mangen.h:290
void startParameterList(bool) override
Definition mangen.cpp:916
void startMemberGroupHeader(const DString &, bool) override
Definition mangen.cpp:640
void docify(const DString &text) override
Definition mangen.cpp:459
void startMemberGroupDocs() override
Definition mangen.cpp:651
void endInlineHeader() override
Definition mangen.cpp:824
bool m_inHeader
Definition mangen.h:301
void startItemListItem() override
Definition mangen.cpp:497
void startMemberDoc(const DString &, const DString &, const DString &, const DString &, int, int, bool) override
Definition mangen.cpp:510
void endExamples() override
Definition mangen.cpp:728
ManGenerator & operator=(const ManGenerator &)
Definition mangen.cpp:247
void endInlineMemberName() override
Definition mangen.cpp:871
void startInlineMemberType() override
Definition mangen.cpp:857
void startPlainFile(const DString &name) override
Definition mangen.h:289
void endBold() override
Definition mangen.h:169
void writeDoc(const IDocNodeAST *ast, const Definition *, const MemberDef *, int, int) override
Definition mangen.cpp:752
void writeSynopsis() override
Definition mangen.cpp:573
void endConstraintType() override
Definition mangen.cpp:796
void startMemberItem(const DString &, MemberItemType, const DString &) override
Definition mangen.cpp:612
void endCompoundTemplateParams() override
Definition mangen.cpp:569
bool m_firstCol
Definition mangen.h:296
void endIndexItem(const DString &ref, const DString &file) override
Definition mangen.cpp:415
void endMemberGroupDocs() override
Definition mangen.cpp:655
static void init()
Definition mangen.cpp:272
bool m_insideTabbing
Definition mangen.h:300
void startConstraintType() override
Definition mangen.cpp:791
void addLabel(const DString &, const DString &) override
Definition mangen.cpp:552
void startGroupHeader(const DString &, int) override
Definition mangen.cpp:430
void writeChar(char c) override
Definition mangen.cpp:483
void endParameterType() override
Definition mangen.cpp:928
void startDescForItem() override
Definition mangen.cpp:581
void startParagraph(const DString &classDef) override
Definition mangen.cpp:391
void startCompoundTemplateParams() override
Definition mangen.cpp:561
void startMemberList() override
Definition mangen.cpp:624
void endTitleHead(const DString &, const DString &) override
Definition mangen.cpp:349
void startInlineHeader() override
Definition mangen.cpp:815
void startMemberGroup() override
Definition mangen.cpp:660
void startDoxyAnchor(const DString &, const DString &, const DString &, const DString &, const DString &) override
Definition mangen.cpp:518
void endHeaderSection() override
Definition mangen.cpp:902
void startInlineMemberDoc() override
Definition mangen.cpp:876
void endConstraintParam() override
Definition mangen.cpp:784
void startLabels() override
Definition mangen.cpp:888
void startInlineMemberName() override
Definition mangen.cpp:866
bool m_upperCase
Definition mangen.h:299
void endFile() override
Definition mangen.cpp:343
void endMemberDocSimple(bool) override
Definition mangen.cpp:849
void endMemberDoc(bool) override
Definition mangen.cpp:556
void endEmphasis() override
Definition mangen.h:167
A model of a class/file/namespace member symbol.
Definition memberdef.h:48
Class representing a list of different code generators.
Definition outputlist.h:166
void add(OutputCodeIntfPtr &&p)
Definition outputlist.h:196
Abstract interface for output generators.
Definition outputgen.h:127
DString dir() const
Definition outputgen.cpp:52
TextStream m_t
Definition outputgen.h:116
DString fileName() const
Definition outputgen.cpp:57
static constexpr int Section
Definition section.h:33
static constexpr int Subsection
Definition section.h:34
static constexpr int Subsubsection
Definition section.h:35
constexpr int level() const
Definition section.h:46
static constexpr int Page
Definition section.h:31
static constexpr int Paragraph
Definition section.h:36
static constexpr int Subsubparagraph
Definition section.h:38
static constexpr int Subparagraph
Definition section.h:37
Text streaming class that buffers data.
Definition textstream.h:36
virtual DString trCompoundMembers()=0
virtual DString trInheritedFrom(const DString &members, const DString &what)=0
virtual DString trEnumerationValues()=0
virtual DString trExamples()=0
#define Config_getInt(name)
Definition config.h:34
#define Config_getBool(name)
Definition config.h:33
#define Config_getString(name)
Definition config.h:32
#define Config_getEnum(name)
Definition config.h:35
DString dateToString(DateTimeType includeTime)
Returns the current date, when includeTime is set also the time is provided.
Definition datetime.cpp:62
#define ASSERT(x)
Definition dstring.h:29
Translator * theTranslator
Definition language.cpp:71
static DString getSubdir()
Definition mangen.cpp:69
static DString objectLinkToString(const DString &text)
Definition mangen.cpp:104
static DString docifyToString(const DString &str)
Definition mangen.cpp:79
static DString buildFileName(const DString &name)
Definition mangen.cpp:296
static DString getExtension()
Definition mangen.cpp:36
#define term(fmt,...)
Definition message.h:137
std::ofstream openOutputStream(const DString &name, bool append=false)
Definition portable.cpp:648
Definition dstring.h:902
OutputCodeDefer< ManCodeGenerator > ManCodeGeneratorDefer
Definition outputlist.h:106
Portable versions of functions that are platform dependent.
CodeSymbolType
Definition types.h:481
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
Various UTF8 related helper functions.
size_t updateColumnCount(const char *s, size_t col)
Definition util.cpp:5951
void clearSubDirs(const Dir &d)
Definition util.cpp:3063
void createSubDirs(const Dir &d)
Definition util.cpp:3036
A bunch of utility functions.