Example #1
0
void InPrint(Tree T)
{
	if(T){
		InPrint(T -> Left);
		printf("%c ", T -> Element);
		InPrint(T -> Right);
	}
}
Example #2
0
int main(void)
{
	Tree T = PreBuild();

	printf("PrePrint:\t");
	PrePrint(T);
	printf("\n");

	printf("InPrint:\t");
	InPrint(T);
	printf("\n");

	printf("InPrint_Iter:\t");
	InPrint_Iterative(T);
	printf("\n");

	printf("PostPrint:\t");
	PostPrint(T);
	printf("\n");

	printf("LevelPrint:\t");
	LevelPrint(T);
	printf("\n");

	ListDirectory(T);

	return 0;
}
Example #3
0
/*! Dumps the contents of a documentation block to stdout.
 *  @note This function will call itself recursively.
 *  @param doc The root of the documentation tree.
 *  @param level The indent level.
 */
void DumpDoc(IDoc *doc,int level)
{
  if (doc==0) return;
  QString indent;
  indent.fill(' ',level);
  //printf("      doc node kind=`%d'\n",doc->kind());
  switch (doc->kind())
  {
    case IDoc::Para: 
      {
        InPrint(("<para>\n"));
        IDocPara *par = dynamic_cast<IDocPara*>(doc);
        ASSERT(par!=0);
        IDocIterator *di = par->contents();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</para>\n"));
      }
      break;
    case IDoc::Text:
      {
        IDocText *txt = dynamic_cast<IDocText*>(doc);
        ASSERT(txt!=0);
        InPrint(("<text value=`%s' markup=%d headingLevel=%d/>\n",
              txt->text()->latin1(),txt->markup(),txt->headingLevel()));
      }
      break;
    case IDoc::MarkupModifier:
      {
        IDocMarkupModifier *md = dynamic_cast<IDocMarkupModifier*>(doc);
        ASSERT(md!=0);
        InPrint(("<markup modifier enabled=%d markup=%d headingLevel=%d/>\n",
              md->enabled(),md->markup(),md->headingLevel()));
      }
      break;
    case IDoc::ItemizedList:
      {
        InPrint(("<itemized list>\n"));
        IDocItemizedList *list = dynamic_cast<IDocItemizedList*>(doc);
        ASSERT(list!=0);
        IDocIterator *di = list->elements();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</itemized list>\n"));
      }
      break;
    case IDoc::OrderedList:
      {
        InPrint(("<ordered list>\n"));
        IDocOrderedList *list = dynamic_cast<IDocOrderedList*>(doc);
        ASSERT(list!=0);
        IDocIterator *di = list->elements();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</ordered list>\n"));
      }
      break;
    case IDoc::ListItem:
      {
        InPrint(("<list item>\n"));
        IDocListItem *li = dynamic_cast<IDocListItem*>(doc);
        ASSERT(li!=0);
        IDocIterator *di = li->contents();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</list item>\n"));
      }
      break;
    case IDoc::ParameterItem:
      {
        IDocParameterItem *item = dynamic_cast<IDocParameterItem*>(doc);
        InPrint(("<parameter item>\n"));
        IDocIterator *di = item->paramNames();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        DumpDoc(item->description(),level+1);
        InPrint(("</parameter item>\n"));
      }
      break;
    case IDoc::ParameterList:
      {
        IDocParameterList *list = dynamic_cast<IDocParameterList*>(doc);
        InPrint(("<parameter list type=%d>\n",list->sectType()));
        IDocIterator *di = list->params();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</parameter list>\n"));
        ASSERT(list!=0);
      }
      break;
    case IDoc::Parameter:
      {
        IDocParameter *par = dynamic_cast<IDocParameter*>(doc);
        ASSERT(par!=0);
        InPrint(("<parameter name=%s/>\n",par->name()->latin1()));
      }
      break;
    case IDoc::SimpleSect:
      {
        IDocSimpleSect *ss = dynamic_cast<IDocSimpleSect*>(doc);
        ASSERT(ss!=0);
        InPrint(("<simplesect type=%s>\n",ss->typeString()->latin1()));
        DumpDoc(ss->title(),level+1);
        DumpDoc(ss->description(),level+1);
        InPrint(("<simplesect/>\n"));
      }
      break;
    case IDoc::Title:
      {
        InPrint(("<title>\n"));
        IDocTitle *t = dynamic_cast<IDocTitle*>(doc);
        ASSERT(t!=0);
        IDocIterator *di = t->title();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        InPrint(("<title/>\n"));
      }
      break;
    case IDoc::Ref:
      {
        IDocRef *ref = dynamic_cast<IDocRef*>(doc);
        ASSERT(ref!=0);
        InPrint(("<ref id=%s text=%s/>\n",
            ref->refId()->latin1(),ref->text()->latin1()));
      }
      break;
    case IDoc::VariableList:
      {
        InPrint(("<variablelist>\n"));
        IDocVariableList *vl = dynamic_cast<IDocVariableList*>(doc);
        ASSERT(vl!=0);
        IDocIterator *di = vl->entries();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("<variablelist/>\n"));
      }
      break;
    case IDoc::VariableListEntry:
      {
        IDocVariableListEntry *vle = dynamic_cast<IDocVariableListEntry*>(doc);
        ASSERT(vle!=0);
        ILinkedTextIterator *lti = vle->term();
        QString term = linkedTextToString(lti);
        lti->release();
        InPrint(("<variablelistentry term=%s>\n",term.latin1()));
        DumpDoc(vle->description(),level+1);
        InPrint(("<variablelistentry/>\n"));
      }
      break;
    case IDoc::HRuler:
      {
        IDocHRuler *hr = dynamic_cast<IDocHRuler*>(doc);
        ASSERT(hr!=0);
        InPrint(("<hruler/>\n"));
      }
      break;
    case IDoc::LineBreak:
      {
        IDocLineBreak *lb = dynamic_cast<IDocLineBreak*>(doc);
        ASSERT(lb!=0);
        InPrint(("<linebreak/>\n"));
      }
      break;
    case IDoc::ULink:
      {
        IDocULink *ul = dynamic_cast<IDocULink*>(doc);
        ASSERT(ul!=0);
        InPrint(("<ulink url=`%s' text=`%s'/>\n",ul->url()->latin1(),ul->text()->latin1()));
      }
      break;
    case IDoc::EMail:
      {
        IDocEMail *em = dynamic_cast<IDocEMail*>(doc);
        ASSERT(em!=0);
        InPrint(("<email address=`%s'/>\n",em->address()->latin1()));
      }
      break;
    case IDoc::Link:
      {
        IDocLink *lk = dynamic_cast<IDocLink*>(doc);
        ASSERT(lk!=0);
        InPrint(("<link refid=`%s' text=`%s'/>\n",lk->refId()->latin1(),lk->text()->latin1()));
      }
      break;
    case IDoc::ProgramListing:
      {
        IDocProgramListing *pl = dynamic_cast<IDocProgramListing*>(doc);
        ASSERT(pl!=0);
        InPrint(("<programlisting>\n"));
        IDocIterator *cli = pl->codeLines();
        IDoc *cl;
        for (cli->toFirst();(cl=cli->current());cli->toNext())
        {
          DumpDoc(cl,level+1);
        }
        cli->release();
        InPrint(("</programlisting>\n"));
      }
      break;
    case IDoc::CodeLine:
      {
        IDocCodeLine *cl = dynamic_cast<IDocCodeLine*>(doc);
        ASSERT(cl!=0);
        InPrint(("<codeline lineNumber=%d refId=`%s'>\n",cl->lineNumber(),cl->refId()->latin1()));
        IDocIterator *cei = cl->codeElements();
        IDoc *ce;
        for (cei->toFirst();(ce=cei->current());cei->toNext())
        {
          DumpDoc(ce,level+1);
        }
        cei->release();
        InPrint(("</codeline>\n"));
      }
      break;
    case IDoc::Highlight:
      {
        IDocHighlight *hl = dynamic_cast<IDocHighlight*>(doc);
        ASSERT(hl!=0);
        InPrint(("<highlight kind=%d>\n",hl->kind()));
        IDocIterator *cei = hl->codeElements();
        IDoc *ce;
        for (cei->toFirst();(ce=cei->current());cei->toNext())
        {
          DumpDoc(ce,level+1);
        }
        cei->release();
        InPrint(("</highlight>\n"));
      }
      break;
    case IDoc::Formula:
      {
        IDocFormula *fm = dynamic_cast<IDocFormula*>(doc);
        ASSERT(fm!=0);
        InPrint(("<formula id=`%s' text=`%s'/>\n",fm->id()->latin1(),fm->text()->latin1()));
      }
      break;
    case IDoc::Image:
      {
        IDocImage *img = dynamic_cast<IDocImage*>(doc);
        ASSERT(img!=0);
        InPrint(("<image name=`%s' caption=`%s'/>\n",img->name()->latin1(),img->caption()->latin1()));
      }
      break;
    case IDoc::DotFile:
      {
        IDocDotFile *df = dynamic_cast<IDocDotFile*>(doc);
        ASSERT(df!=0);
        InPrint(("<dotfile name=`%s' caption=`%s'/>\n",df->name()->latin1(),df->caption()->latin1()));
      }
      break;
    case IDoc::IndexEntry:
      {
        IDocIndexEntry *ie = dynamic_cast<IDocIndexEntry*>(doc);
        ASSERT(ie!=0);
        InPrint(("<indexentry primary=`%s' secondary=`%s'/>\n",ie->primary()->latin1(),ie->secondary()->latin1()));
      }
      break;
    case IDoc::Table:
      {
        IDocTable *tbl = dynamic_cast<IDocTable*>(doc);
        ASSERT(tbl!=0);
        InPrint(("<table numcols=%d caption=`%s'>\n",tbl->numColumns(),tbl->caption()->latin1()));
        IDocIterator *ri = tbl->rows();
        IDoc *row;
        for (ri->toFirst();(row=ri->current());ri->toNext())
        {
          DumpDoc(row,level+1);
        }
        ri->release();
        InPrint(("</table>\n"));
      }
      break;
    case IDoc::Row:
      {
        IDocRow *row = dynamic_cast<IDocRow*>(doc);
        ASSERT(row!=0);
        InPrint(("<row>\n"));
        IDocIterator *ei = row->entries();
        IDoc *e;
        for (ei->toFirst();(e=ei->current());ei->toNext())
        {
          DumpDoc(e,level+1);
        }
        ei->release();
        InPrint(("</row>\n"));
      }
      break;
    case IDoc::Entry:
      {
        IDocEntry *ent = dynamic_cast<IDocEntry*>(doc);
        ASSERT(ent!=0);
        InPrint(("<entry>\n"));
        IDocIterator *di = ent->contents();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</entry>\n"));
      }
      break;
    case IDoc::Section:
      {
        IDocSection *sec = dynamic_cast<IDocSection*>(doc);
        ASSERT(sec!=0);
        InPrint(("<section id=`%s' level=%d>\n",
            sec->id()->latin1(),sec->level()));
        DumpDoc(sec->title(),level+1);
        IDocIterator *di = sec->paragraphs();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di=sec->subSections();
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        IDocInternal *intern = sec->internal();
        if (intern)
        {
          DumpDoc(intern,level+1);
        }
        InPrint(("</section>\n"));
      }
      break;
    case IDoc::Internal:
      {
        IDocInternal *intern = dynamic_cast<IDocInternal*>(doc);
        ASSERT(intern!=0);
        InPrint(("<internal>\n"));
        IDocIterator *di = intern->paragraphs();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di=intern->subSections();
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        InPrint(("</internal>\n"));
      }
      break;
    case IDoc::Copy:
      {
        IDocCopy *cpy = dynamic_cast<IDocCopy*>(doc);
        ASSERT(cpy!=0);
        InPrint(("<copydoc>\n"));
        IDocIterator *di = cpy->contents();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("<copydoc/>\n"));
      }
      break;
    case IDoc::TocItem:
      {
        IDocTocItem *ti = dynamic_cast<IDocTocItem*>(doc);
        ASSERT(ti!=0);
        InPrint(("<tocitem id=\"%s\" title=\"%s\"/>\n",
                 ti->id()->latin1(),ti->title()->latin1()));
      }
      break;
    case IDoc::TocList:
      {
        IDocTocList *tl = dynamic_cast<IDocTocList*>(doc);
        ASSERT(tl!=0);
        InPrint(("<toclist>\n"));
        IDocIterator *di = tl->elements();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("<toclist/>\n"));
      }
      break;
    case IDoc::Verbatim:
      {
        IDocVerbatim *vt = dynamic_cast<IDocVerbatim*>(doc);
        ASSERT(vt!=0);
        const char *s=0;
        switch (vt->type())
        {
          case IDocVerbatim::Verbatim:  s="verbatim"; break;
          case IDocVerbatim::HtmlOnly:  s="htmlonly"; break;
          case IDocVerbatim::LatexOnly: s="latexonly"; break;
          default:
            printf("Invalid verbatim type!\n");
        }
        InPrint(("<verbatim %s>\n",s));
        InPrint(("%s",vt->text()->latin1()));
        InPrint(("</verbatim>\n"));
      }
      break;
    case IDoc::Anchor:
      {
        IDocAnchor *anc = dynamic_cast<IDocAnchor*>(doc);
        ASSERT(anc!=0);
        InPrint(("<anchor id='%s'/>\n",anc->id()->latin1()));
      }
      break;
    case IDoc::Symbol:
      {
        IDocSymbol *sym = dynamic_cast<IDocSymbol*>(doc);
        ASSERT(sym!=0);
        InPrint(("<symbol type=%s letter=%c/>\n",
              sym->typeString()->latin1(),sym->letter()));
      }
      break;
    case IDoc::Root:
      {
        InPrint(("<root>\n"));
        IDocRoot *root = dynamic_cast<IDocRoot*>(doc);
        ASSERT(root!=0);
        IDocIterator *di = root->contents();
        IDoc *pdoc;
        for (di->toFirst();(pdoc=di->current());di->toNext())
        {
          DumpDoc(pdoc,level+1);
        }
        di->release();
        InPrint(("</root>\n"));
      }
      break;

    default:
      printf("Found unsupported node type %d!\n",doc->kind());
      break;
  }
}