Chameleon

Chameleon Svn Source Tree

Root/branches/xZenu/src/util/doxygen/addon/doxmlparser/test/main.cpp

Source at commit 1322 created 9 years 5 months ago.
By meklort, Add doxygen to utils folder
1/******************************************************************************
2 *
3 * $Id: $
4 *
5 *
6 * Copyright (C) 1997-2006 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 */
15
16#include <stdio.h>
17#include <stdlib.h>
18#include <doxmlintf.h>
19#include <qstring.h>
20
21/*! Dumps the contents of a hyperlinked text fragment as plain text to the
22 * output.
23 */
24QString linkedTextToString(ILinkedTextIterator *ti)
25{
26 QString result;
27 ILinkedText *lt=0;
28 for (ti->toFirst();(lt=ti->current());ti->toNext())
29 {
30 switch (lt->kind())
31 {
32 case ILinkedText::Kind_Text: // plain text
33 result+=dynamic_cast<ILT_Text*>(lt)->text()->latin1(); break;
34 case ILinkedText::Kind_Ref: // a link
35 result+=dynamic_cast<ILT_Ref *>(lt)->text()->latin1(); break;
36 }
37 }
38 return result;
39}
40
41/*! Macro for printing an indented message. */
42#define InPrint(x) printf("%s",indent.latin1()), printf x;
43
44/*! Dumps the contents of a documentation block to stdout.
45 * @note This function will call itself recursively.
46 * @param doc The root of the documentation tree.
47 * @param level The indent level.
48 */
49void DumpDoc(IDoc *doc,int level)
50{
51 if (doc==0) return;
52 QString indent;
53 indent.fill(' ',level);
54 //printf(" doc node kind=`%d'\n",doc->kind());
55 switch (doc->kind())
56 {
57 case IDoc::Para:
58 {
59 InPrint(("<para>\n"));
60 IDocPara *par = dynamic_cast<IDocPara*>(doc);
61 ASSERT(par!=0);
62 IDocIterator *di = par->contents();
63 IDoc *pdoc;
64 for (di->toFirst();(pdoc=di->current());di->toNext())
65 {
66 DumpDoc(pdoc,level+1);
67 }
68 di->release();
69 InPrint(("</para>\n"));
70 }
71 break;
72 case IDoc::Text:
73 {
74 IDocText *txt = dynamic_cast<IDocText*>(doc);
75 ASSERT(txt!=0);
76 InPrint(("<text value=`%s' markup=%d headingLevel=%d/>\n",
77 txt->text()->latin1(),txt->markup(),txt->headingLevel()));
78 }
79 break;
80 case IDoc::MarkupModifier:
81 {
82 IDocMarkupModifier *md = dynamic_cast<IDocMarkupModifier*>(doc);
83 ASSERT(md!=0);
84 InPrint(("<markup modifier enabled=%d markup=%d headingLevel=%d/>\n",
85 md->enabled(),md->markup(),md->headingLevel()));
86 }
87 break;
88 case IDoc::ItemizedList:
89 {
90 InPrint(("<itemized list>\n"));
91 IDocItemizedList *list = dynamic_cast<IDocItemizedList*>(doc);
92 ASSERT(list!=0);
93 IDocIterator *di = list->elements();
94 IDoc *pdoc;
95 for (di->toFirst();(pdoc=di->current());di->toNext())
96 {
97 DumpDoc(pdoc,level+1);
98 }
99 di->release();
100 InPrint(("</itemized list>\n"));
101 }
102 break;
103 case IDoc::OrderedList:
104 {
105 InPrint(("<ordered list>\n"));
106 IDocOrderedList *list = dynamic_cast<IDocOrderedList*>(doc);
107 ASSERT(list!=0);
108 IDocIterator *di = list->elements();
109 IDoc *pdoc;
110 for (di->toFirst();(pdoc=di->current());di->toNext())
111 {
112 DumpDoc(pdoc,level+1);
113 }
114 di->release();
115 InPrint(("</ordered list>\n"));
116 }
117 break;
118 case IDoc::ListItem:
119 {
120 InPrint(("<list item>\n"));
121 IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
122 ASSERT(li!=0);
123 IDocIterator *di = li->contents();
124 IDoc *pdoc;
125 for (di->toFirst();(pdoc=di->current());di->toNext())
126 {
127 DumpDoc(pdoc,level+1);
128 }
129 di->release();
130 InPrint(("</list item>\n"));
131 }
132 break;
133 case IDoc::ParameterItem:
134 {
135 IDocParameterItem *item = dynamic_cast<IDocParameterItem*>(doc);
136 InPrint(("<parameter item>\n"));
137 IDocIterator *di = item->paramNames();
138 IDoc *pdoc;
139 for (di->toFirst();(pdoc=di->current());di->toNext())
140 {
141 DumpDoc(pdoc,level+1);
142 }
143 di->release();
144 DumpDoc(item->description(),level+1);
145 InPrint(("</parameter item>\n"));
146 }
147 break;
148 case IDoc::ParameterList:
149 {
150 IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
151 InPrint(("<parameter list type=%d>\n",list->sectType()));
152 IDocIterator *di = list->params();
153 IDoc *pdoc;
154 for (di->toFirst();(pdoc=di->current());di->toNext())
155 {
156 DumpDoc(pdoc,level+1);
157 }
158 di->release();
159 InPrint(("</parameter list>\n"));
160 ASSERT(list!=0);
161 }
162 break;
163 case IDoc::Parameter:
164 {
165 IDocParameter *par = dynamic_cast<IDocParameter*>(doc);
166 ASSERT(par!=0);
167 InPrint(("<parameter name=%s/>\n",par->name()->latin1()));
168 }
169 break;
170 case IDoc::SimpleSect:
171 {
172 IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(doc);
173 ASSERT(ss!=0);
174 InPrint(("<simplesect type=%s>\n",ss->typeString()->latin1()));
175 DumpDoc(ss->title(),level+1);
176 DumpDoc(ss->description(),level+1);
177 InPrint(("<simplesect/>\n"));
178 }
179 break;
180 case IDoc::Title:
181 {
182 InPrint(("<title>\n"));
183 IDocTitle *t = dynamic_cast<IDocTitle*>(doc);
184 ASSERT(t!=0);
185 IDocIterator *di = t->title();
186 IDoc *pdoc;
187 for (di->toFirst();(pdoc=di->current());di->toNext())
188 {
189 DumpDoc(pdoc,level+1);
190 }
191 InPrint(("<title/>\n"));
192 }
193 break;
194 case IDoc::Ref:
195 {
196 IDocRef *ref = dynamic_cast<IDocRef*>(doc);
197 ASSERT(ref!=0);
198 InPrint(("<ref id=%s text=%s/>\n",
199 ref->refId()->latin1(),ref->text()->latin1()));
200 }
201 break;
202 case IDoc::VariableList:
203 {
204 InPrint(("<variablelist>\n"));
205 IDocVariableList *vl = dynamic_cast<IDocVariableList*>(doc);
206 ASSERT(vl!=0);
207 IDocIterator *di = vl->entries();
208 IDoc *pdoc;
209 for (di->toFirst();(pdoc=di->current());di->toNext())
210 {
211 DumpDoc(pdoc,level+1);
212 }
213 di->release();
214 InPrint(("<variablelist/>\n"));
215 }
216 break;
217 case IDoc::VariableListEntry:
218 {
219 IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(doc);
220 ASSERT(vle!=0);
221 ILinkedTextIterator *lti = vle->term();
222 QString term = linkedTextToString(lti);
223 lti->release();
224 InPrint(("<variablelistentry term=%s>\n",term.latin1()));
225 DumpDoc(vle->description(),level+1);
226 InPrint(("<variablelistentry/>\n"));
227 }
228 break;
229 case IDoc::HRuler:
230 {
231 IDocHRuler *hr = dynamic_cast<IDocHRuler*>(doc);
232 ASSERT(hr!=0);
233 InPrint(("<hruler/>\n"));
234 }
235 break;
236 case IDoc::LineBreak:
237 {
238 IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(doc);
239 ASSERT(lb!=0);
240 InPrint(("<linebreak/>\n"));
241 }
242 break;
243 case IDoc::ULink:
244 {
245 IDocULink *ul = dynamic_cast<IDocULink*>(doc);
246 ASSERT(ul!=0);
247 InPrint(("<ulink url=`%s' text=`%s'/>\n",ul->url()->latin1(),ul->text()->latin1()));
248 }
249 break;
250 case IDoc::EMail:
251 {
252 IDocEMail *em = dynamic_cast<IDocEMail*>(doc);
253 ASSERT(em!=0);
254 InPrint(("<email address=`%s'/>\n",em->address()->latin1()));
255 }
256 break;
257 case IDoc::Link:
258 {
259 IDocLink *lk = dynamic_cast<IDocLink*>(doc);
260 ASSERT(lk!=0);
261 InPrint(("<link refid=`%s' text=`%s'/>\n",lk->refId()->latin1(),lk->text()->latin1()));
262 }
263 break;
264 case IDoc::ProgramListing:
265 {
266 IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(doc);
267 ASSERT(pl!=0);
268 InPrint(("<programlisting>\n"));
269 IDocIterator *cli = pl->codeLines();
270 IDoc *cl;
271 for (cli->toFirst();(cl=cli->current());cli->toNext())
272 {
273 DumpDoc(cl,level+1);
274 }
275 cli->release();
276 InPrint(("</programlisting>\n"));
277 }
278 break;
279 case IDoc::CodeLine:
280 {
281 IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(doc);
282 ASSERT(cl!=0);
283 InPrint(("<codeline lineNumber=%d refId=`%s'>\n",cl->lineNumber(),cl->refId()->latin1()));
284 IDocIterator *cei = cl->codeElements();
285 IDoc *ce;
286 for (cei->toFirst();(ce=cei->current());cei->toNext())
287 {
288 DumpDoc(ce,level+1);
289 }
290 cei->release();
291 InPrint(("</codeline>\n"));
292 }
293 break;
294 case IDoc::Highlight:
295 {
296 IDocHighlight *hl = dynamic_cast<IDocHighlight*>(doc);
297 ASSERT(hl!=0);
298 InPrint(("<highlight kind=%d>\n",hl->kind()));
299 IDocIterator *cei = hl->codeElements();
300 IDoc *ce;
301 for (cei->toFirst();(ce=cei->current());cei->toNext())
302 {
303 DumpDoc(ce,level+1);
304 }
305 cei->release();
306 InPrint(("</highlight>\n"));
307 }
308 break;
309 case IDoc::Formula:
310 {
311 IDocFormula *fm = dynamic_cast<IDocFormula*>(doc);
312 ASSERT(fm!=0);
313 InPrint(("<formula id=`%s' text=`%s'/>\n",fm->id()->latin1(),fm->text()->latin1()));
314 }
315 break;
316 case IDoc::Image:
317 {
318 IDocImage *img = dynamic_cast<IDocImage*>(doc);
319 ASSERT(img!=0);
320 InPrint(("<image name=`%s' caption=`%s'/>\n",img->name()->latin1(),img->caption()->latin1()));
321 }
322 break;
323 case IDoc::DotFile:
324 {
325 IDocDotFile *df = dynamic_cast<IDocDotFile*>(doc);
326 ASSERT(df!=0);
327 InPrint(("<dotfile name=`%s' caption=`%s'/>\n",df->name()->latin1(),df->caption()->latin1()));
328 }
329 break;
330 case IDoc::IndexEntry:
331 {
332 IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(doc);
333 ASSERT(ie!=0);
334 InPrint(("<indexentry primary=`%s' secondary=`%s'/>\n",ie->primary()->latin1(),ie->secondary()->latin1()));
335 }
336 break;
337 case IDoc::Table:
338 {
339 IDocTable *tbl = dynamic_cast<IDocTable*>(doc);
340 ASSERT(tbl!=0);
341 InPrint(("<table numcols=%d caption=`%s'>\n",tbl->numColumns(),tbl->caption()->latin1()));
342 IDocIterator *ri = tbl->rows();
343 IDoc *row;
344 for (ri->toFirst();(row=ri->current());ri->toNext())
345 {
346 DumpDoc(row,level+1);
347 }
348 ri->release();
349 InPrint(("</table>\n"));
350 }
351 break;
352 case IDoc::Row:
353 {
354 IDocRow *row = dynamic_cast<IDocRow*>(doc);
355 ASSERT(row!=0);
356 InPrint(("<row>\n"));
357 IDocIterator *ei = row->entries();
358 IDoc *e;
359 for (ei->toFirst();(e=ei->current());ei->toNext())
360 {
361 DumpDoc(e,level+1);
362 }
363 ei->release();
364 InPrint(("</row>\n"));
365 }
366 break;
367 case IDoc::Entry:
368 {
369 IDocEntry *ent = dynamic_cast<IDocEntry*>(doc);
370 ASSERT(ent!=0);
371 InPrint(("<entry>\n"));
372 IDocIterator *di = ent->contents();
373 IDoc *pdoc;
374 for (di->toFirst();(pdoc=di->current());di->toNext())
375 {
376 DumpDoc(pdoc,level+1);
377 }
378 di->release();
379 InPrint(("</entry>\n"));
380 }
381 break;
382 case IDoc::Section:
383 {
384 IDocSection *sec = dynamic_cast<IDocSection*>(doc);
385 ASSERT(sec!=0);
386 InPrint(("<section id=`%s' level=%d>\n",
387 sec->id()->latin1(),sec->level()));
388 DumpDoc(sec->title(),level+1);
389 IDocIterator *di = sec->paragraphs();
390 IDoc *pdoc;
391 for (di->toFirst();(pdoc=di->current());di->toNext())
392 {
393 DumpDoc(pdoc,level+1);
394 }
395 di=sec->subSections();
396 for (di->toFirst();(pdoc=di->current());di->toNext())
397 {
398 DumpDoc(pdoc,level+1);
399 }
400 IDocInternal *intern = sec->internal();
401 if (intern)
402 {
403 DumpDoc(intern,level+1);
404 }
405 InPrint(("</section>\n"));
406 }
407 break;
408 case IDoc::Internal:
409 {
410 IDocInternal *intern = dynamic_cast<IDocInternal*>(doc);
411 ASSERT(intern!=0);
412 InPrint(("<internal>\n"));
413 IDocIterator *di = intern->paragraphs();
414 IDoc *pdoc;
415 for (di->toFirst();(pdoc=di->current());di->toNext())
416 {
417 DumpDoc(pdoc,level+1);
418 }
419 di=intern->subSections();
420 for (di->toFirst();(pdoc=di->current());di->toNext())
421 {
422 DumpDoc(pdoc,level+1);
423 }
424 InPrint(("</internal>\n"));
425 }
426 break;
427 case IDoc::Copy:
428 {
429 IDocCopy *cpy = dynamic_cast<IDocCopy*>(doc);
430 ASSERT(cpy!=0);
431 InPrint(("<copydoc>\n"));
432 IDocIterator *di = cpy->contents();
433 IDoc *pdoc;
434 for (di->toFirst();(pdoc=di->current());di->toNext())
435 {
436 DumpDoc(pdoc,level+1);
437 }
438 di->release();
439 InPrint(("<copydoc/>\n"));
440 }
441 break;
442 case IDoc::TocItem:
443 {
444 IDocTocItem *ti = dynamic_cast<IDocTocItem*>(doc);
445 ASSERT(ti!=0);
446 InPrint(("<tocitem id=\"%s\" title=\"%s\"/>\n",
447 ti->id()->latin1(),ti->title()->latin1()));
448 }
449 break;
450 case IDoc::TocList:
451 {
452 IDocTocList *tl = dynamic_cast<IDocTocList*>(doc);
453 ASSERT(tl!=0);
454 InPrint(("<toclist>\n"));
455 IDocIterator *di = tl->elements();
456 IDoc *pdoc;
457 for (di->toFirst();(pdoc=di->current());di->toNext())
458 {
459 DumpDoc(pdoc,level+1);
460 }
461 di->release();
462 InPrint(("<toclist/>\n"));
463 }
464 break;
465 case IDoc::Verbatim:
466 {
467 IDocVerbatim *vt = dynamic_cast<IDocVerbatim*>(doc);
468 ASSERT(vt!=0);
469 const char *s=0;
470 switch (vt->type())
471 {
472 case IDocVerbatim::Verbatim: s="verbatim"; break;
473 case IDocVerbatim::HtmlOnly: s="htmlonly"; break;
474 case IDocVerbatim::LatexOnly: s="latexonly"; break;
475 default:
476 printf("Invalid verbatim type!\n");
477 }
478 InPrint(("<verbatim %s>\n",s));
479 InPrint(("%s",vt->text()->latin1()));
480 InPrint(("</verbatim>\n"));
481 }
482 break;
483 case IDoc::Anchor:
484 {
485 IDocAnchor *anc = dynamic_cast<IDocAnchor*>(doc);
486 ASSERT(anc!=0);
487 InPrint(("<anchor id='%s'/>\n",anc->id()->latin1()));
488 }
489 break;
490 case IDoc::Symbol:
491 {
492 IDocSymbol *sym = dynamic_cast<IDocSymbol*>(doc);
493 ASSERT(sym!=0);
494 InPrint(("<symbol type=%s letter=%c/>\n",
495 sym->typeString()->latin1(),sym->letter()));
496 }
497 break;
498 case IDoc::Root:
499 {
500 InPrint(("<root>\n"));
501 IDocRoot *root = dynamic_cast<IDocRoot*>(doc);
502 ASSERT(root!=0);
503 IDocIterator *di = root->contents();
504 IDoc *pdoc;
505 for (di->toFirst();(pdoc=di->current());di->toNext())
506 {
507 DumpDoc(pdoc,level+1);
508 }
509 di->release();
510 InPrint(("</root>\n"));
511 }
512 break;
513
514 default:
515 printf("Found unsupported node type %d!\n",doc->kind());
516 break;
517 }
518}
519
520void DumpGraph(IGraph *graph)
521{
522 if (graph==0) { printf(" --- no graph ---\n"); return; }
523 printf(" --- graph ----\n");
524 INodeIterator *ni = graph->nodes();
525 INode *node;
526 for (ni->toFirst();(node=ni->current());ni->toNext())
527 {
528 printf(" --- node id=%s label=%s linkId=%s\n",
529 node->id()->latin1(),
530 node->label()->latin1(),
531 node->linkId()->latin1()
532 );
533 IChildNodeIterator *cni = node->children();
534 IChildNode *cn;
535 for (cni->toFirst();(cn=cni->current());cni->toNext())
536 {
537 printf(" + child id=%s label=%s relation=%s\n",
538 cn->node()->id()->latin1(),
539 cn->node()->label()->latin1(),
540 cn->relationString()->latin1()
541 );
542 IEdgeLabelIterator *eli = cn->edgeLabels();
543 IEdgeLabel *el;
544 for (eli->toFirst();(el=eli->current());eli->toNext())
545 {
546 printf(" edgeLabel=%s\n",el->label()->latin1());
547 }
548 eli->release();
549 }
550 cni->release();
551 }
552 ni->release();
553 printf(" --- end graph ----\n");
554
555}
556
557void DumpParamList(IParamIterator *pli,int indent)
558{
559 QString indentStr;
560 indentStr.fill(' ',indent);
561 IParam *par;
562 for (pli->toFirst();(par=pli->current());pli->toNext())
563 {
564 ILinkedTextIterator *lti = par->type();
565 QString parType = linkedTextToString(lti);
566 lti->release();
567 lti = par->defaultValue();
568 QString defVal = linkedTextToString(lti);
569 lti->release();
570 printf("%sParam type=%s decl_name=%s def_name=%s defvalue=%s\n",
571 indentStr.data(), parType.latin1(),
572 par->declarationName()->latin1(),
573 par->definitionName()->latin1(),
574 defVal.latin1());
575 }
576}
577
578int main(int argc,char **argv)
579{
580 if (argc!=2)
581 {
582 printf("Usage: %s xmldir\n",argv[0]);
583 exit(1);
584 }
585
586 IDoxygen *dox = createObjectModel();
587
588 dox->setDebugLevel(4);
589
590 if (!dox->readXMLDir(argv[1]))
591 {
592 printf("Error reading %s/index.xml\n",argv[1]);
593 exit(1);
594 }
595
596 ICompoundIterator *cli = dox->compounds();
597 ICompound *comp;
598 printf("--- compound list ---------\n");
599 for (cli->toFirst();(comp=cli->current());cli->toNext())
600 {
601 printf("Compound name=%s id=%s kind=%s\n",
602 comp->name()->latin1(),comp->id()->latin1(),comp->kindString()->latin1());
603
604 ISectionIterator *sli = comp->sections();
605 ISection *sec;
606 for (sli->toFirst();(sec=sli->current());sli->toNext())
607 {
608 printf(" Section kind=%s\n",sec->kindString()->latin1());
609 IMemberIterator *mli = sec->members();
610 IMember *mem;
611 if( sec->kind() == ISection::UserDefined )
612 {
613IUserDefined *group = dynamic_cast<IUserDefined*>(sec);
614printf(" Title=%s\n", group->header()->latin1() );
615 }
616 for (mli->toFirst();(mem=mli->current());mli->toNext())
617 {
618 ILinkedTextIterator *lti = mem->type();
619 printf(" Member type=%s name=%s\n",
620 linkedTextToString(lti).latin1(),mem->name()->latin1());
621 lti->release();
622
623 IParamIterator *pli = mem->parameters();
624 DumpParamList(pli,6);
625 pli->release();
626 IMemberReferenceIterator *mri = mem->references();
627 IMemberReference *mr;
628 for (mri->toFirst();(mr=mri->current());mri->toNext())
629 {
630 IMember *memr = mr->member();
631 printf(" References %s at line %d\n",
632 mr->name()->latin1(),memr->bodyStart());
633 }
634
635 mri->release();
636 mri = mem->referencedBy();
637 for (mri->toFirst();(mr=mri->current());mri->toNext())
638 {
639 IMember *memr = mr->member();
640 printf(" ReferencedBy %s at line %d\n",
641 mr->name()->latin1(),memr->bodyStart());
642 }
643 mri->release();
644
645 if (mem->kind()==IMember::Enum) // we have found an enum
646 {
647 IEnum *e = dynamic_cast<IEnum*>(mem);
648 IMemberIterator *evi = e->enumValues(); // get the enum values
649 IMember *mev;
650 for (evi->toFirst();(mev=evi->current());evi->toNext())
651 {
652 IEnumValue *ev = dynamic_cast<IEnumValue*>(mev);
653 ILinkedTextIterator *lti = ev->initializer();
654 QString init = linkedTextToString(lti);
655 lti->release();
656 printf(" Enum value `%s' init=`%s'\n",
657 ev->name()->latin1(),init.latin1());
658 }
659 evi->release();
660 }
661
662 pli = mem->templateParameters();
663 if (pli)
664 {
665 printf(" Template parameters\n");
666 DumpParamList(pli,8);
667 pli->release();
668 }
669
670 IDoc *doc = mem->briefDescription();
671 if (doc)
672 {
673 printf("===== brief description ==== \n");
674 DumpDoc(doc,0);
675 }
676
677 doc = mem->detailedDescription();
678 if (doc)
679 {
680 printf("===== detailed description ==== \n");
681 DumpDoc(doc,0);
682 }
683 }
684 mli->release();
685 }
686 sli->release();
687
688 IDoc *doc = comp->briefDescription();
689 if (doc)
690 {
691 printf("===== brief description ==== \n");
692 DumpDoc(doc,0);
693 }
694
695 doc = comp->detailedDescription();
696 if (doc)
697 {
698 printf("===== detailed description ==== \n");
699 DumpDoc(doc,0);
700 }
701
702 if (comp->kind()==ICompound::Class)
703 {
704 IClass *cls = dynamic_cast<IClass*>(comp);
705 ASSERT(cls!=0);
706
707 printf("==== inheritance graph ==== \n");
708 DumpGraph(cls->inheritanceGraph());
709
710 printf("==== collabration graph ==== \n");
711 DumpGraph(cls->collaborationGraph());
712
713 printf("==== base classes ==== \n");
714 IRelatedCompoundIterator *bcli = cls->baseCompounds();
715 IRelatedCompound *bClass;
716 for (bcli->toFirst();(bClass=bcli->current());bcli->toNext())
717 {
718 ICompound *bc = bClass->compound();
719 printf(" + class %s\n",bc->name()->latin1());
720 bc->release();
721 }
722 bcli->release();
723
724 printf("==== derived classes ==== \n");
725 IRelatedCompoundIterator *dcli = cls->derivedCompounds();
726 IRelatedCompound *dClass;
727 for (dcli->toFirst();(dClass=dcli->current());dcli->toNext())
728 {
729 ICompound *dc = dClass->compound();
730 printf(" + class %s\n",dc->name()->latin1());
731 dc->release();
732 }
733 dcli->release();
734 }
735 else if (comp->kind()==ICompound::File)
736 {
737 IFile *file = dynamic_cast<IFile*>(comp);
738 ASSERT(file!=0);
739
740 printf("==== include dependency graph ==== \n");
741 DumpGraph(file->includeDependencyGraph());
742
743 printf("==== included by dependency graph ==== \n");
744 DumpGraph(file->includedByDependencyGraph());
745
746 printf("==== source ====\n");
747 DumpDoc(file->source(),0);
748 }
749
750 comp->release();
751 }
752 cli->release();
753 printf("---------------------------\n");
754
755 dox->release();
756
757 return 0;
758}
759
760

Archive Download this file

Revision: 1322