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