mandocvisitor.cpp
Go to the documentation of this file.
1 /******************************************************************************
2  *
3  *
4  *
5  *
6  * Copyright (C) 1997-2015 by Dimitri van Heesch.
7  *
8  * Permission to use, copy, modify, and distribute this software and its
9  * documentation under the terms of the GNU General Public License is hereby
10  * granted. No representations are made about the suitability of this software
11  * for any purpose. It is provided "as is" without express or implied warranty.
12  * See the GNU General Public License for more details.
13  *
14  * Documents produced by Doxygen are derivative works derived from the
15  * input used in their production; they are not affected by this license.
16  *
17  */
18 
19 #include <qfileinfo.h>
20 
21 #include "mandocvisitor.h"
22 #include "docparser.h"
23 #include "language.h"
24 #include "doxygen.h"
25 #include "outputgen.h"
26 #include "code.h"
27 #include "dot.h"
28 #include "util.h"
29 #include "message.h"
30 #include "parserintf.h"
31 #include "filedef.h"
32 #include "htmlentity.h"
33 
35  const char *langExt)
36  : DocVisitor(DocVisitor_Man), m_t(t), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_firstCol(FALSE),
37  m_indent(0), m_langExt(langExt)
38 {
39 }
40 
41  //--------------------------------------
42  // visitor functions for leaf nodes
43  //--------------------------------------
44 
46 {
47  if (m_hide) return;
48  filter(w->word());
50 }
51 
53 {
54  if (m_hide) return;
55  m_t << "\\fB";
56  filter(w->word());
57  m_t << "\\fP";
59 }
60 
62 {
63  if (m_hide) return;
64  if (m_insidePre)
65  {
66  m_t << w->chars();
67  m_firstCol=w->chars().at(w->chars().length()-1)=='\n';
68  }
69  else
70  {
71  m_t << " ";
73  }
74 }
75 
77 {
78  if (m_hide) return;
79  const char *res = HtmlEntityMapper::instance()->man(s->symbol());
80  if (res)
81  {
82  m_t << res;
83  }
84  else
85  {
86  // no error or warning to be supplied
87  // err("man: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
88  }
90 }
91 
93 {
94  if (m_hide) return;
95  m_t << u->url();
97 }
98 
100 {
101  if (m_hide) return;
102  m_t << endl << ".br" << endl;
104 }
105 
107 {
108  if (m_hide) return;
109  if (!m_firstCol) m_t << endl;
110  m_t << ".PP" << endl;
112 }
113 
115 {
116  if (m_hide) return;
117  switch (s->style())
118  {
120  if (s->enable()) m_t << "\\fB"; else m_t << "\\fP";
122  break;
124  if (s->enable()) m_t << "\\fI"; else m_t << "\\fP";
126  break;
128  if (s->enable()) m_t << "\\fC"; else m_t << "\\fP";
130  break;
132  if (s->enable()) m_t << "\\*<"; else m_t << "\\*> ";
134  break;
136  if (s->enable()) m_t << "\\*{"; else m_t << "\\*} ";
138  break;
140  /* not supported */
141  break;
143  /* not supported */
144  break;
146  if (s->enable())
147  {
148  if (!m_firstCol) m_t << endl;
149  m_t << ".PP" << endl;
150  m_t << ".nf" << endl;
152  }
153  else
154  {
156  if (!m_firstCol) m_t << endl;
157  m_t << ".fi" << endl;
158  m_t << ".PP" << endl;
160  }
161  break;
162  case DocStyleChange::Div: /* HTML only */ break;
163  case DocStyleChange::Span: /* HTML only */ break;
164  }
165 }
166 
168 {
169  if (m_hide) return;
170  QCString lang = m_langExt;
171  if (!s->language().isEmpty()) // explicit language setting
172  {
173  lang = s->language();
174  }
175  SrcLangExt langExt = getLanguageFromFileName(lang);
176  switch (s->type())
177  {
178  case DocVerbatim::Code: // fall though
179  if (!m_firstCol) m_t << endl;
180  m_t << ".PP" << endl;
181  m_t << ".nf" << endl;
183  ->parseCode(m_ci,s->context(),s->text(),
184  langExt,
185  s->isExample(),s->exampleFile());
186  if (!m_firstCol) m_t << endl;
187  m_t << ".fi" << endl;
188  m_t << ".PP" << endl;
190  break;
191  case DocVerbatim::Verbatim:
192  if (!m_firstCol) m_t << endl;
193  m_t << ".PP" << endl;
194  m_t << ".nf" << endl;
195  m_t << s->text();
196  if (!m_firstCol) m_t << endl;
197  m_t << ".fi" << endl;
198  m_t << ".PP" << endl;
200  break;
201  case DocVerbatim::ManOnly:
202  m_t << s->text();
203  break;
204  case DocVerbatim::HtmlOnly:
205  case DocVerbatim::XmlOnly:
209  case DocVerbatim::Dot:
210  case DocVerbatim::Msc:
211  case DocVerbatim::PlantUML:
212  /* nothing */
213  break;
214  }
215 }
216 
218 {
219  /* no support for anchors in man pages */
220 }
221 
223 {
224  if (m_hide) return;
225  SrcLangExt langExt = getLanguageFromFileName(inc->extension());
226  switch(inc->type())
227  {
229  {
230  if (!m_firstCol) m_t << endl;
231  m_t << ".PP" << endl;
232  m_t << ".nf" << endl;
233  QFileInfo cfi( inc->file() );
234  FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
236  ->parseCode(m_ci,inc->context(),
237  inc->text(),
238  langExt,
239  inc->isExample(),
240  inc->exampleFile(), &fd);
241  if (!m_firstCol) m_t << endl;
242  m_t << ".fi" << endl;
243  m_t << ".PP" << endl;
245  }
246  break;
247  case DocInclude::Include:
248  if (!m_firstCol) m_t << endl;
249  m_t << ".PP" << endl;
250  m_t << ".nf" << endl;
252  ->parseCode(m_ci,inc->context(),
253  inc->text(),
254  langExt,
255  inc->isExample(),
256  inc->exampleFile());
257  if (!m_firstCol) m_t << endl;
258  m_t << ".fi" << endl;
259  m_t << ".PP" << endl;
261  break;
263  break;
265  break;
267  break;
269  if (!m_firstCol) m_t << endl;
270  m_t << ".PP" << endl;
271  m_t << ".nf" << endl;
272  m_t << inc->text();
273  if (!m_firstCol) m_t << endl;
274  m_t << ".fi" << endl;
275  m_t << ".PP" << endl;
277  break;
278  case DocInclude::Snippet:
279  if (!m_firstCol) m_t << endl;
280  m_t << ".PP" << endl;
281  m_t << ".nf" << endl;
283  ->parseCode(m_ci,
284  inc->context(),
285  extractBlock(inc->text(),inc->blockId()),
286  langExt,
287  inc->isExample(),
288  inc->exampleFile()
289  );
290  if (!m_firstCol) m_t << endl;
291  m_t << ".fi" << endl;
292  m_t << ".PP" << endl;
294  break;
295  }
296 }
297 
299 {
301  //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n",
302  // op->type(),op->isFirst(),op->isLast(),op->text().data());
303  if (op->isFirst())
304  {
305  if (!m_hide)
306  {
307  if (!m_firstCol) m_t << endl;
308  m_t << ".PP" << endl;
309  m_t << ".nf" << endl;
310  }
311  pushEnabled();
312  m_hide = TRUE;
313  }
314  if (op->type()!=DocIncOperator::Skip)
315  {
316  popEnabled();
317  if (!m_hide)
318  {
320  ->parseCode(m_ci,op->context(),op->text(),langExt,
321  op->isExample(),op->exampleFile());
322  }
323  pushEnabled();
324  m_hide=TRUE;
325  }
326  if (op->isLast())
327  {
328  popEnabled();
329  if (!m_hide)
330  {
331  if (!m_firstCol) m_t << endl;
332  m_t << ".fi" << endl;
333  m_t << ".PP" << endl;
335  }
336  }
337  else
338  {
339  if (!m_hide) m_t << endl;
340  }
341 }
342 
344 {
345  if (m_hide) return;
346  m_t << f->text();
347 }
348 
350 {
351 }
352 
354 {
355 }
356 
358 {
359  if (m_hide) return;
360  m_t << "\\fB";
361  if (cite->file().isEmpty()) m_t << "[";
362  filter(cite->text());
363  if (cite->file().isEmpty()) m_t << "]";
364  m_t << "\\fP";
365 }
366 
367 
368 //--------------------------------------
369 // visitor functions for compound nodes
370 //--------------------------------------
371 
373 {
374  if (m_hide) return;
375  m_indent+=2;
376 }
377 
379 {
380  if (m_hide) return;
381  m_indent-=2;
382  m_t << ".PP" << endl;
383 }
384 
386 {
387  if (m_hide) return;
388  QCString ws;
389  ws.fill(' ',m_indent-2);
390  if (!m_firstCol) m_t << endl;
391  m_t << ".IP \"" << ws;
392  if (((DocAutoList *)li->parent())->isEnumList())
393  {
394  m_t << li->itemNumber() << ".\" " << m_indent+2;
395  }
396  else // bullet list
397  {
398  m_t << "\\(bu\" " << m_indent;
399  }
400  m_t << endl;
402 }
403 
405 {
406  if (m_hide) return;
407  m_t << endl;
409 }
410 
412 {
413 }
414 
416 {
417  if (m_hide) return;
418  if (!p->isLast() && // omit <p> for last paragraph
419  !(p->parent() && // and for parameter sections
421  )
422  )
423  {
424  if (!m_firstCol) m_t << endl;
425  m_t << ".PP" << endl;
427  }
428 }
429 
431 {
432 }
433 
435 {
436 }
437 
439 {
440  if (m_hide) return;
441  if (!m_firstCol)
442  {
443  m_t << endl;
444  m_t << ".PP" << endl;
445  }
446  m_t << "\\fB";
447  switch(s->type())
448  {
449  case DocSimpleSect::See:
450  m_t << theTranslator->trSeeAlso(); break;
451  case DocSimpleSect::Return:
452  m_t << theTranslator->trReturns(); break;
453  case DocSimpleSect::Author:
454  m_t << theTranslator->trAuthor(TRUE,TRUE); break;
456  m_t << theTranslator->trAuthor(TRUE,FALSE); break;
458  m_t << theTranslator->trVersion(); break;
459  case DocSimpleSect::Since:
460  m_t << theTranslator->trSince(); break;
461  case DocSimpleSect::Date:
462  m_t << theTranslator->trDate(); break;
463  case DocSimpleSect::Note:
464  m_t << theTranslator->trNote(); break;
466  m_t << theTranslator->trWarning(); break;
467  case DocSimpleSect::Pre:
468  m_t << theTranslator->trPrecondition(); break;
469  case DocSimpleSect::Post:
470  m_t << theTranslator->trPostcondition(); break;
472  m_t << theTranslator->trCopyright(); break;
474  m_t << theTranslator->trInvariant(); break;
476  m_t << theTranslator->trRemarks(); break;
478  m_t << theTranslator->trAttention(); break;
479  case DocSimpleSect::User: break;
480  case DocSimpleSect::Rcs: break;
481  case DocSimpleSect::Unknown: break;
482  }
483 
484  // special case 1: user defined title
485  if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs)
486  {
487  m_t << ":\\fP" << endl;
488  m_t << ".RS 4" << endl;
489  }
490 }
491 
493 {
494  if (m_hide) return;
495  if (!m_firstCol) m_t << endl;
496  m_t << ".RE" << endl;
497  m_t << ".PP" << endl;
499 }
500 
502 {
503 }
504 
506 {
507  if (m_hide) return;
508  m_t << "\\fP" << endl;
509  m_t << ".RS 4" << endl;
510 }
511 
513 {
514  if (m_hide) return;
515  m_indent+=2;
516  if (!m_firstCol) m_t << endl;
517  m_t << ".PD 0" << endl;
518 }
519 
521 {
522  if (m_hide) return;
523  m_indent-=2;
524  m_t << ".PP" << endl;
525 }
526 
528 {
529  if (m_hide) return;
530  QCString ws;
531  ws.fill(' ',m_indent-2);
532  if (!m_firstCol) m_t << endl;
533  m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
535 }
536 
538 {
539  if (m_hide) return;
540  m_t << endl;
542 }
543 
545 {
546  if (m_hide) return;
547  if (!m_firstCol) m_t << endl;
548  if (s->level()==1) m_t << ".SH"; else m_t << ".SS";
549  m_t << " \"";
550  filter(s->title());
551  m_t << "\"" << endl;
552  if (s->level()==1) m_t << ".PP" << endl;
554 }
555 
557 {
558 }
559 
561 {
562  if (m_hide) return;
563  m_indent+=2;
564  if (!m_firstCol) m_t << endl;
565  m_t << ".PD 0" << endl;
566 }
567 
569 {
570  if (m_hide) return;
571  m_indent-=2;
572  if (!m_firstCol) m_t << endl;
573  m_t << ".PP" << endl;
574 }
575 
577 {
578  if (m_hide) return;
579  QCString ws;
580  ws.fill(' ',m_indent-2);
581  if (!m_firstCol) m_t << endl;
582  m_t << ".IP \"" << ws;
583  if (((DocHtmlList *)li->parent())->type()==DocHtmlList::Ordered)
584  {
585  m_t << li->itemNumber() << ".\" " << m_indent+2;
586  }
587  else // bullet list
588  {
589  m_t << "\\(bu\" " << m_indent;
590  }
591  m_t << endl;
593 }
594 
596 {
597  if (m_hide) return;
598  m_t << endl;
600 }
601 
602 //void ManDocVisitor::visitPre(DocHtmlPre *)
603 //{
604 // if (!m_firstCol) m_t << endl;
605 // m_t << ".PP" << endl;
606 // m_t << ".nf" << endl;
607 // m_insidePre=TRUE;
608 //}
609 //
610 //void ManDocVisitor::visitPost(DocHtmlPre *)
611 //{
612 // m_insidePre=FALSE;
613 // if (!m_firstCol) m_t << endl;
614 // m_t << ".fi" << endl;
615 // m_t << ".PP" << endl;
616 // m_firstCol=TRUE;
617 //}
618 
620 {
621 }
622 
624 {
625  if (m_hide) return;
626  if (!m_firstCol) m_t << endl;
627  m_t << ".PP" << endl;
629 }
630 
632 {
633  if (m_hide) return;
634  if (!m_firstCol) m_t << endl;
635  m_t << ".IP \"\\fB";
637 }
638 
640 {
641  if (m_hide) return;
642  m_t << "\\fP\" 1c" << endl;
644 }
645 
647 {
648 }
649 
651 {
652 }
653 
655 {
656 }
657 
659 {
660 }
661 
663 {
664 }
665 
667 {
668 }
669 
671 {
672 }
673 
675 {
676 }
677 
679 {
680 }
681 
683 {
684 }
685 
687 {
688  if (m_hide) return;
689  //if (!m_firstCol) m_t << endl;
690  //m_t << ".PP" << endl;
691  //m_t << "\\fB" << theTranslator->trForInternalUseOnly() << "\\fP" << endl;
692  //m_t << ".RS 4" << endl;
693 }
694 
696 {
697  if (m_hide) return;
698  //if (!m_firstCol) m_t << endl;
699  //m_t << ".RE" << endl;
700  //m_t << ".PP" << endl;
701  //m_firstCol=TRUE;
702 }
703 
705 {
706  if (m_hide) return;
707  m_t << "\\fC";
708 }
709 
711 {
712  if (m_hide) return;
713  m_t << "\\fP";
714 }
715 
717 {
718  if (m_hide) return;
719  if (!m_firstCol) m_t << endl;
720  if (header->level()==1) m_t << ".SH"; else m_t << ".SS";
721  m_t << " \"";
722 }
723 
725 {
726  if (m_hide) return;
727  m_t << "\"" << endl;
728  if (header->level()==1) m_t << ".PP" << endl;
730 }
731 
733 {
734 }
735 
737 {
738 }
739 
741 {
742 }
743 
745 {
746 }
748 {
749 }
750 
752 {
753 }
754 
756 {
757 }
758 
760 {
761 }
762 
764 {
765  if (m_hide) return;
766  m_t << "\\fB";
767 }
768 
770 {
771  if (m_hide) return;
772  m_t << "\\fP";
773 }
774 
776 {
777  if (m_hide) return;
778  m_t << "\\fB";
779  if (!ref->hasLinkText()) filter(ref->targetTitle());
780 }
781 
783 {
784  if (m_hide) return;
785  m_t << "\\fP";
786 }
787 
789 {
790  if (m_hide) return;
791  QCString ws;
792  ws.fill(' ',m_indent-2);
793  if (!m_firstCol) m_t << endl;
794  m_t << ".IP \"" << ws << "\\(bu\" " << m_indent << endl;
796 }
797 
799 {
800  if (m_hide) return;
801  m_t << endl;
803 }
804 
806 {
807  if (m_hide) return;
808  m_indent+=2;
809 }
810 
812 {
813  if (m_hide) return;
814  m_indent-=2;
815  if (!m_firstCol) m_t << endl;
816  m_t << ".PP" << endl;
817 }
818 
819 //void ManDocVisitor::visitPre(DocLanguage *l)
820 //{
821 // QString langId = Config_getEnum("OUTPUT_LANGUAGE");
822 // if (l->id().lower()!=langId.lower())
823 // {
824 // pushEnabled();
825 // m_hide = TRUE;
826 // }
827 //}
828 //
829 //void ManDocVisitor::visitPost(DocLanguage *l)
830 //{
831 // QString langId = Config_getEnum("OUTPUT_LANGUAGE");
832 // if (l->id().lower()!=langId.lower())
833 // {
834 // popEnabled();
835 // }
836 //}
837 
839 {
840  if (m_hide) return;
841  if (!m_firstCol)
842  {
843  m_t << endl;
844  m_t << ".PP" << endl;
845  }
846  m_t << "\\fB";
847  switch(s->type())
848  {
849  case DocParamSect::Param:
850  m_t << theTranslator->trParameters(); break;
851  case DocParamSect::RetVal:
852  m_t << theTranslator->trReturnValues(); break;
854  m_t << theTranslator->trExceptions(); break;
856  /* TODO: add this
857  m_t << theTranslator->trTemplateParam(); break;
858  */
859  m_t << "Template Parameters"; break;
860  default:
861  ASSERT(0);
862  }
863  m_t << ":\\fP" << endl;
864  m_t << ".RS 4" << endl;
865 }
866 
868 {
869  if (m_hide) return;
870  if (!m_firstCol) m_t << endl;
871  m_t << ".RE" << endl;
872  m_t << ".PP" << endl;
874 }
875 
877 {
878  if (m_hide) return;
879  m_t << "\\fI";
880  //QStrListIterator li(pl->parameters());
881  //const char *s;
883  DocNode *param;
884  bool first=TRUE;
885  for (li.toFirst();(param=li.current());++li)
886  {
887  if (!first) m_t << ","; else first=FALSE;
888  if (param->kind()==DocNode::Kind_Word)
889  {
890  visit((DocWord*)param);
891  }
892  else if (param->kind()==DocNode::Kind_LinkedWord)
893  {
894  visit((DocLinkedWord*)param);
895  }
896  }
897  m_t << "\\fP ";
898 }
899 
901 {
902  if (m_hide) return;
903  if (!pl->isLast())
904  {
905  if (!m_firstCol) m_t << endl;
906  m_t << ".br" << endl;
907  }
908 }
909 
911 {
912  if (m_hide) return;
913  if (x->title().isEmpty()) return;
914  if (!m_firstCol)
915  {
916  m_t << endl;
917  m_t << ".PP" << endl;
918  }
919  m_t << "\\fB";
920  filter(x->title());
921  m_t << "\\fP" << endl;
922  m_t << ".RS 4" << endl;
923 }
924 
926 {
927  if (m_hide) return;
928  if (x->title().isEmpty()) return;
929  if (!m_firstCol) m_t << endl;
930  m_t << ".RE" << endl;
931  m_t << ".PP" << endl;
933 }
934 
936 {
937  if (m_hide) return;
938  m_t << "\\fB";
939 }
940 
942 {
943  if (m_hide) return;
944  m_t << "\\fP";
945 }
946 
948 {
949 }
950 
952 {
953 }
954 
956 {
957 }
958 
960 {
961 }
962 
964 {
965  if (m_hide) return;
966  if (!m_firstCol)
967  {
968  m_t << endl;
969  m_t << ".PP" << endl;
970  }
971  m_t << ".RS 4" << endl; // TODO: add support for nested block quotes
972 }
973 
975 {
976  if (m_hide) return;
977  if (!m_firstCol) m_t << endl;
978  m_t << ".RE" << endl;
979  m_t << ".PP" << endl;
981 }
982 
984 {
985 }
986 
988 {
989 }
990 
992 {
993 }
994 
996 {
997 }
998 
999 
1000 void ManDocVisitor::filter(const char *str)
1001 {
1002  if (str)
1003  {
1004  const char *p=str;
1005  char c=0;
1006  while ((c=*p++))
1007  {
1008  switch(c)
1009  {
1010  case '.': m_t << "\\&."; break; // see bug652277
1011  case '\\': m_t << "\\\\"; break;
1012  case '"': c = '\''; // fall through
1013  default: m_t << c; break;
1014  }
1015  }
1016  }
1017 }
1018 
1020 {
1021  m_enabled.push(new bool(m_hide));
1022 }
1023 
1025 {
1026  bool *v=m_enabled.pop();
1027  ASSERT(v!=0);
1028  m_hide = *v;
1029  delete v;
1030 }
1031 
DocNode * parent() const
Definition: docparser.h:147
QCString exampleFile() const
Definition: docparser.h:454
Type type() const
Definition: docparser.h:532
virtual QCString trPrecondition()=0
const char * man(DocSymbol::SymType symb) const
Access routine to the man code of the HTML entity.
Definition: htmlentity.cpp:437
virtual QCString trSince()=0
ParserInterface * getParser(const char *extension)
Definition: parserintf.h:191
const int DocVisitor_Man
Definition: docvisitor.h:27
QCString url() const
Definition: docparser.h:239
QCString text() const
Definition: docparser.h:296
virtual QCString trAttention()=0
bool isFirst() const
Definition: docparser.h:537
bool isEmpty() const
Definition: qcstring.h:189
static TemplateVariant parseCode(MemberDef *md, const QCString &scopeName, const QCString &relPath, const QCString &code, int startLine=-1, int endLine=-1, bool showLineNumbers=FALSE)
Definition: context.cpp:1266
uint length() const
Definition: qcstring.h:195
int itemNumber() const
Definition: docparser.h:1225
int level() const
Definition: docparser.h:942
virtual QCString trInvariant()=0
QCString blockId() const
Definition: docparser.h:505
char & at(uint i) const
Definition: qcstring.h:326
FTextStream & m_t
virtual QCString trPostcondition()=0
QCString text() const
Definition: docparser.h:503
CodeOutputInterface & m_ci
Type type() const
Definition: docparser.h:1101
const bool FALSE
Definition: qglobal.h:370
virtual QCString trWarning()=0
virtual QCString trCopyright()=0
static HtmlEntityMapper * instance()
Definition: htmlentity.cpp:341
Simplified and optimized version of QTextStream.
Definition: ftextstream.h:11
Type type() const
Definition: docparser.h:502
virtual Kind kind() const =0
SrcLangExt
Definition: types.h:41
virtual QCString trReturns()=0
virtual QCString trDate()=0
void visitPre(DocAutoList *)
virtual QCString trNote()=0
void push(const type *d)
Definition: qstack.h:58
QCString exampleFile() const
Definition: docparser.h:542
QCString extractBlock(const QCString text, const QCString marker)
Definition: util.cpp:7998
int level() const
Definition: docparser.h:894
Abstract visitor that participates in the visitor pattern.
Definition: docvisitor.h:90
bool isExample() const
Definition: docparser.h:453
virtual QCString trExceptions()=0
static ParserManager * parserManager
Definition: doxygen.h:141
QCString targetTitle() const
Definition: docparser.h:831
QCString file() const
Definition: docparser.h:292
virtual QCString trParameters()=0
QCString text() const
Definition: docparser.h:450
QCString text() const
Definition: docparser.h:563
void visit(DocWord *)
QCString word() const
Definition: docparser.h:199
virtual QCString trAuthor(bool first_capital, bool singular)=0
bool isExample() const
Definition: docparser.h:541
QCString context() const
Definition: docparser.h:535
virtual QCString trReturnValues()=0
p
Definition: test.py:223
bool isLast() const
Definition: docparser.h:1176
QCString text() const
Definition: docparser.h:533
A bunch of utility functions.
bool isLast() const
Definition: docparser.h:538
type * current() const
Definition: qlist.h:146
virtual QCString trVersion()=0
Type type() const
Definition: docparser.h:1057
Style style() const
Definition: docparser.h:329
bool isExample() const
Definition: docparser.h:506
type * pop()
Definition: qstack.h:59
QCString word() const
Definition: docparser.h:215
QCString language() const
Definition: docparser.h:456
QCString title() const
Definition: docparser.h:943
QCString file() const
Definition: docparser.h:495
const QList< DocNode > & parameters()
Definition: docparser.h:1169
QCString context() const
Definition: docparser.h:451
SrcLangExt getLanguageFromFileName(const QCString fileName)
Definition: util.cpp:7061
void visitPost(DocAutoList *)
QCString m_langExt
SymType symbol() const
Definition: docparser.h:418
bool hasLinkText() const
Definition: docparser.h:832
void filter(const char *str)
static QCString type
Definition: declinfo.cpp:672
bool fill(char c, int len=-1)
Definition: qcstring.h:243
Translator * theTranslator
Definition: language.cpp:157
int itemNumber() const
Definition: docparser.h:639
QCString exampleFile() const
Definition: docparser.h:507
QCString context() const
Definition: docparser.h:504
list x
Definition: train.py:276
virtual QCString trRemarks()=0
bool enable() const
Definition: docparser.h:331
QCString chars() const
Definition: docparser.h:434
virtual QCString trSeeAlso()=0
QCString title() const
Definition: docparser.h:671
QCString extension() const
Definition: docparser.h:496
The QFileInfo class provides system-independent file information.
Definition: qfileinfo.h:51
Type type() const
Definition: docparser.h:449
ManDocVisitor(FTextStream &t, CodeOutputInterface &ci, const char *langExt)
QStack< bool > m_enabled
virtual void parseCode(CodeOutputInterface &codeOutIntf, const char *scopeName, const QCString &input, SrcLangExt lang, bool isExampleBlock, const char *exampleName=0, FileDef *fileDef=0, int startLine=-1, int endLine=-1, bool inlineFragment=FALSE, MemberDef *memberDef=0, bool showLineNumbers=TRUE, Definition *searchCtx=0, bool collectXRefs=TRUE)=0
bool isLast() const
Definition: docparser.h:1125
static QCString * s
Definition: config.cpp:1042
const bool TRUE
Definition: qglobal.h:371
static QCString str
QTextStream & endl(QTextStream &s)
#define ASSERT(x)
Definition: qglobal.h:590