diff -r 42188c7ea2d9 -r 82f11024044a Orb/Doxygen/src/xmlditadocvisitor.cpp --- a/Orb/Doxygen/src/xmlditadocvisitor.cpp Thu Jan 21 17:29:01 2010 +0000 +++ b/Orb/Doxygen/src/xmlditadocvisitor.cpp Thu Mar 18 18:26:18 2010 +0000 @@ -1,5 +1,7 @@ +#include "xmldita.h" #include "xmlditadocvisitor.h" +#include "xmlditatrace.h" #include "docparser.h" #include "language.h" #include "doxygen.h" @@ -11,11 +13,19 @@ #include #include "parserintf.h" +//#define DITA_DOT_HACK_REMOVE_XREFS +#undef DITA_DOT_HACK_REMOVE_XREFS +// If 0 there is no support +// Need to lazily evaluate this so that is only written if +// there is content in the table +#define DITA_SIMPLETABLE_SUPPORT 0 XmlDitaDocVisitor::XmlDitaDocVisitor(XmlStream &s,CodeOutputInterface &ci) : DocVisitor(DocVisitor_XML), xmlStream(s), xmlElemStack(s), m_ci(ci), m_insidePre(FALSE), m_hide(FALSE), m_insideParamlist(FALSE), paramMap(), paramDict(), currParam() -{} +{ + paramDict.setAutoDelete(true); +} //-------------------------------------- @@ -24,6 +34,7 @@ void XmlDitaDocVisitor::visit(DocWord *w) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocWord*)", w) if (m_hide) { return; } @@ -37,20 +48,40 @@ void XmlDitaDocVisitor::visit(DocLinkedWord *w) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocLinkedWord*)", w) if (m_hide) { return; } - if (w->getDefinition() != 0) { - startLink("", w->getDefinition()->qualifiedName(), ""); + //printf("XmlDitaDocVisitor calling startLink() DocLinkedWord=`%s'\n", w->word().data()); + Definition *d = w->getDefinition(); + if (0) { + QString myName; + myName = d->qualifiedName(); + //printf("XmlDitaDocVisitor calling startLink() DocLinkedWord [name]=`%s'\n", myName.data()); + startLink("", myName, ""); } else { + //printf("XmlDitaDocVisitor calling startLink() DocLinkedWord [file]=`%s'\n", w->file().data()); +#if DITA_SUPRESS_NAMESPACE_LINKS + if (w->file().find("namespace") != 0) { + startLink(w->ref(), w->file(), w->anchor()); + } +#else startLink(w->ref(), w->file(), w->anchor()); +#endif } write(w->word()); +#if DITA_SUPRESS_NAMESPACE_LINKS + if (w->file().find("namespace") != 0) { + endLink(); + } +#else endLink(); +#endif } void XmlDitaDocVisitor::visit(DocWhiteSpace *w) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocWhiteSpace*)", w) if (m_hide) { return; } @@ -63,6 +94,7 @@ void XmlDitaDocVisitor::visit(DocSymbol *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocSymbol*)", s) if (m_hide) { return; } @@ -108,19 +140,27 @@ void XmlDitaDocVisitor::visit(DocURL *u) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocURL*)", u) if (m_hide) { return; } if (u->isEmail()) { startXref(QString("mailto:")+QString(u->url()), u->url()); } else { - startXref(u->url(), u->url()); + // Need format attribute + AttributeMap myMap; + myMap["href"] = u->url(); + myMap["format"] = "html"; + push("xref", myMap); + write(u->url()); + //startXref(u->url(), u->url()); } endXref(); } void XmlDitaDocVisitor::visit(DocLineBreak *lb) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocLineBreak*)", lb) if (m_hide){ return; } @@ -133,6 +173,7 @@ void XmlDitaDocVisitor::visit(DocHorRuler *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHorRuler*)") if (m_hide) { return; } @@ -142,6 +183,7 @@ void XmlDitaDocVisitor::visit(DocStyleChange *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocStyleChange*)", s) if (m_hide) { return; } @@ -215,6 +257,7 @@ void XmlDitaDocVisitor::visit(DocVerbatim *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocVerbatim*)", s) if (m_hide) { return; } @@ -251,6 +294,7 @@ void XmlDitaDocVisitor::visit(DocAnchor *anc) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocAnchor*)", anc) if (m_hide) { return; } @@ -261,6 +305,7 @@ void XmlDitaDocVisitor::visit(DocInclude *inc) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocInclude*)", inc) if (m_hide) { return; } @@ -301,7 +346,7 @@ void XmlDitaDocVisitor::visit(DocIncOperator *op) { - DITA_DOC_VISITOR_TRACE("visit(DocIncOperator*)",op); + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocIncOperator*)", op) if (op->isFirst()) { if (!m_hide) { @@ -333,6 +378,7 @@ void XmlDitaDocVisitor::visit(DocFormula *f) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocFormula*)", f) write(f->text()); #if 0 if (m_hide) { @@ -348,6 +394,7 @@ void XmlDitaDocVisitor::visit(DocIndexEntry *ie) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visit(DocIndexEntry*)", ie) if (m_hide) { return; } @@ -376,6 +423,7 @@ void XmlDitaDocVisitor::visitPre(DocAutoList *l) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocAutoList*)", l) if (m_hide) { return; } @@ -388,6 +436,7 @@ void XmlDitaDocVisitor::visitPost(DocAutoList *l) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocAutoList*)", l) if (l->isEnumList()) { visitPostDefault("ol"); } else { @@ -397,36 +446,45 @@ void XmlDitaDocVisitor::visitPre(DocAutoListItem *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocAutoListItem*)") visitPreDefault("li"); } void XmlDitaDocVisitor::visitPost(DocAutoListItem *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocAutoListItem*)") visitPostDefault("li"); } void XmlDitaDocVisitor::visitPre(DocPara *p) { - if (xmlElemStack.isEmpty() || xmlElemStack.peek().getElemName() != "p") { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocPara*)", p) + if (canPushPara()) { visitPreDefault("p"); } } void XmlDitaDocVisitor::visitPost(DocPara *) { - if (!xmlElemStack.isEmpty() && xmlElemStack.peek().getElemName() == "p") { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocPara*)") + if (canPopPara()) { visitPostDefault("p"); } } void XmlDitaDocVisitor::visitPre(DocRoot *) -{} +{ + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocRoot*)") +} void XmlDitaDocVisitor::visitPost(DocRoot *) -{} +{ + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocRoot*)") +} void XmlDitaDocVisitor::visitPre(DocSimpleSect *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocSimpleSect*)", s) if (m_hide) { return; } @@ -445,7 +503,7 @@ case DocSimpleSect::Invar: case DocSimpleSect::User: case DocSimpleSect::Rcs: - if (xmlElemStack.isEmpty() || xmlElemStack.peek().getElemName() != "p") { + if (canPushPara()) { push("p"); } break; @@ -489,6 +547,7 @@ void XmlDitaDocVisitor::visitPost(DocSimpleSect *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocSimpleSect*)", s) if (m_hide) { return; } @@ -504,7 +563,7 @@ case DocSimpleSect::Unknown: break; default: - if (!xmlElemStack.isEmpty() && xmlElemStack.peek().getElemName() == "p") { + if (canPopPara()) { pop("p"); } break; @@ -514,10 +573,11 @@ void XmlDitaDocVisitor::visitPre(DocTitle *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocTitle*)") if (!xmlElemStack.isEmpty() && xmlElemStack.peek().getElemName() == "concept") { visitPreDefault("title"); } else { - if (xmlElemStack.isEmpty() || xmlElemStack.peek().getElemName() != "p") { + if (canPushPara()) { visitPreDefault("p"); } visitPreDefault("b"); @@ -527,11 +587,12 @@ void XmlDitaDocVisitor::visitPost(DocTitle *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocTitle*)") if (xmlElemStack.peek().getElemName() == "title") { visitPostDefault("title"); } else { visitPostDefault("b"); - if (!xmlElemStack.isEmpty() && xmlElemStack.peek().getElemName() == "p") { + if (canPopPara()) { visitPostDefault("p"); } } @@ -539,26 +600,31 @@ void XmlDitaDocVisitor::visitPre(DocSimpleList *) { - visitPreDefault("ul"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocSimpleList*)") + visitPreDefault("ul"); } void XmlDitaDocVisitor::visitPost(DocSimpleList *) { - visitPostDefault("ul"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocSimpleList*)") + visitPostDefault("ul"); } void XmlDitaDocVisitor::visitPre(DocSimpleListItem *) { - visitPreDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocSimpleListItem*)") + visitPreDefault("li"); } void XmlDitaDocVisitor::visitPost(DocSimpleListItem *) { - visitPostDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocSimpleListItem*)") + visitPostDefault("li"); } void XmlDitaDocVisitor::visitPre(DocSection *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocSection*)", s) // Currently unsupported #if 0 if (m_hide) { @@ -578,6 +644,7 @@ void XmlDitaDocVisitor::visitPost(DocSection *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocSection*)", s) #if 0 // The original did not have the if(m_hide) test. // I assume that is an error so visitPostDefault() uses it. @@ -589,6 +656,7 @@ void XmlDitaDocVisitor::visitPre(DocHtmlList *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocHtmlList*)", s) if (m_hide) { return; } @@ -601,6 +669,7 @@ void XmlDitaDocVisitor::visitPost(DocHtmlList *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocHtmlList*)", s) if (s->type()==DocHtmlList::Ordered) { visitPostDefault("ol"); } else { @@ -610,26 +679,31 @@ void XmlDitaDocVisitor::visitPre(DocHtmlListItem *) { - visitPreDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlListItem*)") + visitPreDefault("li"); } void XmlDitaDocVisitor::visitPost(DocHtmlListItem *) { - visitPostDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlListItem*)") + visitPostDefault("li"); } void XmlDitaDocVisitor::visitPre(DocHtmlDescList *) { - visitPreDefault("dl"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlDescList*)") + visitPreDefault("dl"); } void XmlDitaDocVisitor::visitPost(DocHtmlDescList *) { - visitPostDefault("dl"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlDescList*)") + visitPostDefault("dl"); } void XmlDitaDocVisitor::visitPre(DocHtmlDescTitle *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlDescTitle*)") if (m_hide) { return; } @@ -641,6 +715,7 @@ void XmlDitaDocVisitor::visitPost(DocHtmlDescTitle *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlDescTitle*)") if (m_hide) { return; } @@ -652,23 +727,28 @@ void XmlDitaDocVisitor::visitPre(DocHtmlDescData *) { - push("dd"); - //visitPreDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlDescData*)") + push("dd"); + //visitPreDefault("li"); } void XmlDitaDocVisitor::visitPost(DocHtmlDescData *) { - pop("dd"); - pop("dlentry"); - //visitPostDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlDescData*)") + pop("dd"); + pop("dlentry"); + //visitPostDefault("li"); } void XmlDitaDocVisitor::visitPre(DocHtmlTable *t) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocHtmlTable*)", t) if (m_hide) { return; } +#if DITA_SIMPLETABLE_SUPPORT push("simpletable"); +#endif #if 0 AttributeMap attrs; QString vR, vC; @@ -682,11 +762,15 @@ void XmlDitaDocVisitor::visitPost(DocHtmlTable *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlTable*)") +#if DITA_SIMPLETABLE_SUPPORT visitPostDefault("simpletable"); +#endif } void XmlDitaDocVisitor::visitPre(DocHtmlRow *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlRow*)") // FIXME look ahead to first cell // if isHeading is true do // visitPreDefault("sthead"); @@ -696,11 +780,13 @@ void XmlDitaDocVisitor::visitPost(DocHtmlRow *) { - visitPostDefault("strow"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlRow*)") + visitPostDefault("strow"); } void XmlDitaDocVisitor::visitPre(DocHtmlCell *c) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocHtmlCell*)", c) visitPreDefault("stentry"); #if 0 if (m_hide) { @@ -716,41 +802,49 @@ void XmlDitaDocVisitor::visitPost(DocHtmlCell *c) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocHtmlCell*)", c) visitPostDefault("stentry"); } void XmlDitaDocVisitor::visitPre(DocHtmlCaption *) { - // Caption is unsupported + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocHtmlCaption*)") + // Caption is unsupported } void XmlDitaDocVisitor::visitPost(DocHtmlCaption *) { - // Caption is unsupported + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlCaption*)") + // Caption is unsupported } void XmlDitaDocVisitor::visitPre(DocInternal *) { - //visitPreDefault("internal"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocInternal*)") + //visitPreDefault("internal"); } void XmlDitaDocVisitor::visitPost(DocInternal *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocInternal*)") //visitPostDefault("internal"); } void XmlDitaDocVisitor::visitPre(DocHRef *href) { - push("xref", "href", href->url()); + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocHRef*)", href) + push("xref", "href", href->url()); } void XmlDitaDocVisitor::visitPost(DocHRef *) { - visitPostDefault("xref"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHRef*)") + visitPostDefault("xref"); } void XmlDitaDocVisitor::visitPre(DocHtmlHeader *header) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocHtmlHeader*)", header) visitPreDefault("b"); #if 0 QString hdgLevel; @@ -761,11 +855,13 @@ void XmlDitaDocVisitor::visitPost(DocHtmlHeader *) { - visitPostDefault("b"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocHtmlHeader*)") + visitPostDefault("b"); } void XmlDitaDocVisitor::visitPre(DocImage *img) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocImage*)", img) // Currently unsupported #if 0 AttributeMap imgAttrs; @@ -825,11 +921,13 @@ void XmlDitaDocVisitor::visitPost(DocImage *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocImage*)") //visitPostDefault("image"); } void XmlDitaDocVisitor::visitPre(DocDotFile *df) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocDotFile*)", df) // Currently unsupported #if 0 if (m_hide) { @@ -841,23 +939,31 @@ void XmlDitaDocVisitor::visitPost(DocDotFile *) { -// visitPostDefault("dotfile"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocDotFile*)") + //visitPostDefault("dotfile"); } void XmlDitaDocVisitor::visitPre(DocLink *lnk) { + // The result of a \link...\endlink command + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocLink*)", lnk) if (m_hide) { return; } - if (lnk->getDefinition() != 0) { + if (0) {//lnk->getDefinition() != 0) { + //printf("XmlDitaDocVisitor calling startLink() DocLink [name]=`%s'\n", lnk->getDefinition()->qualifiedName().data()); startLink("", lnk->getDefinition()->qualifiedName(), ""); } else { - startLink(lnk->ref(),lnk->file(),lnk->anchor()); + //printf("XmlDitaDocVisitor calling startLink() DocLink [file]=`%s'\n", lnk->file().data()); + //startLink(lnk->ref(),lnk->file(),lnk->anchor()); + startLink(lnk->ref(), lnk->file(), lnk->anchor()); } } void XmlDitaDocVisitor::visitPost(DocLink *) { + // The result of a \link...\endlink command + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocLink*)") if (m_hide) { return; } @@ -866,13 +972,16 @@ void XmlDitaDocVisitor::visitPre(DocRef *ref) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocRef*)", ref) if (m_hide) { return; } if (!ref->file().isEmpty()) { if (ref->getDefinition() != 0) { + //printf("XmlDitaDocVisitor calling startLink() DocRef [name]=`%s'\n", ref->getDefinition()->qualifiedName().data()); startLink("", ref->getDefinition()->qualifiedName(), ""); } else { + //printf("XmlDitaDocVisitor calling startLink() DocRef [file]=`%s'\n", ref->file().data()); startLink(ref->ref(), ref->file(), ref->anchor()); } } @@ -883,6 +992,7 @@ void XmlDitaDocVisitor::visitPost(DocRef *ref) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPost(DocRef*)", ref) if (m_hide) { return; } @@ -894,6 +1004,7 @@ void XmlDitaDocVisitor::visitPre(DocSecRefItem *ref) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocSecRefItem*)", ref) if (m_hide) { return; } @@ -902,21 +1013,25 @@ void XmlDitaDocVisitor::visitPost(DocSecRefItem *) { - visitPostDefault("li"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocSecRefItem*)") + visitPostDefault("li"); } void XmlDitaDocVisitor::visitPre(DocSecRefList *) { - visitPreDefault("ul"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocSecRefList*)") + visitPreDefault("ul"); } void XmlDitaDocVisitor::visitPost(DocSecRefList *) { - visitPostDefault("ul"); + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocSecRefList*)") + visitPostDefault("ul"); } void XmlDitaDocVisitor::visitPre(DocParamSect *s) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocParamSect*)", s) m_insideParamlist = TRUE; if (m_hide) { return; @@ -941,12 +1056,14 @@ void XmlDitaDocVisitor::visitPost(DocParamSect *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocParamSect*)") visitPostDefault("paraml"); m_insideParamlist = FALSE; } void XmlDitaDocVisitor::visitPre(DocParamList *pl) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocParamList*)", pl) if (m_hide) { return; } @@ -1000,6 +1117,7 @@ void XmlDitaDocVisitor::visitPost(DocParamList *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocParamList*)") if (m_hide) { return; } @@ -1009,6 +1127,7 @@ void XmlDitaDocVisitor::visitPre(DocXRefItem *x) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocXRefItem*)", x) if (m_hide) { return; } @@ -1016,9 +1135,14 @@ // with "deprecated" as the filename if (x->file() == "deprecated"){ // Fall through to start new paragraph for deprecated description - }else - { - push("xref", "id", x->file()+"_1"+x->anchor()); + } else { + QString hrefStr = x->file(); + hrefStr.append(Config_getString("XML_DITA_EXTENSION")); + hrefStr.append("#"); + hrefStr.append(x->file()); + hrefStr.append("_1"); + hrefStr.append(x->anchor()); + push("xref", "href", hrefStr); write(x->title()); } #if 0 @@ -1030,6 +1154,7 @@ void XmlDitaDocVisitor::visitPost(DocXRefItem *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocXRefItem*)") if (m_hide) { return; } @@ -1047,14 +1172,17 @@ void XmlDitaDocVisitor::visitPre(DocInternalRef *ref) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocInternalRef*)", ref) if (m_hide) { return; } + //printf("XmlDitaDocVisitor calling startLink() DocInternalRef [file]=`%s'\n", ref->file().data()); startLink(0, ref->file(), ref->anchor()); } void XmlDitaDocVisitor::visitPost(DocInternalRef *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocXRefItem*)") if (m_hide) { return; } @@ -1064,6 +1192,7 @@ void XmlDitaDocVisitor::visitPre(DocCopy *c) { + DITA_DOC_VISITOR_TRACE("XmlDitaDocVisitor::visitPre(DocCopy*)", c) // Currently unsupported #if 0 if (m_hide) { @@ -1075,35 +1204,52 @@ void XmlDitaDocVisitor::visitPost(DocCopy *) { + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocCopy*)") // visitPostDefault("copydoc"); } void XmlDitaDocVisitor::visitPre(DocText *) -{} +{ + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPre(DocText*)") +} void XmlDitaDocVisitor::visitPost(DocText *) -{} +{ + DITA_DOC_VISITOR_TRACE_NOARG("XmlDitaDocVisitor::visitPost(DocText*)") +} void XmlDitaDocVisitor::startXref(const QString &href,const QString &text) { +#ifndef DITA_DOT_HACK_REMOVE_XREFS push("xref", "href", href); +#endif write(text); } void XmlDitaDocVisitor::endXref() { +#ifndef DITA_DOT_HACK_REMOVE_XREFS pop("xref"); +#endif } void XmlDitaDocVisitor::startLink(const QString &ref,const QString &file,const QString &anchor) { AttributeMap refAttrs; + /* + printf("XmlDitaDocVisitor::startLink(): ref: \"%s\", file: \"%s\", anchor: \"%s\"\n", + ref.data(), + file.data(), + anchor.data()); + */ if (!anchor.isEmpty()) { - refAttrs["href"] = file+"_1"+anchor; + refAttrs["href"] = file+".xml#"+file+"_1"+anchor; } else { - refAttrs["href"] = file; + refAttrs["href"] = file+".xml#"+file; } +#ifndef DITA_DOT_HACK_REMOVE_XREFS push("xref", refAttrs); +#endif #if 0 AttributeMap refAttrs; if (!anchor.isEmpty()) { @@ -1122,7 +1268,9 @@ void XmlDitaDocVisitor::endLink() { +#ifndef DITA_DOT_HACK_REMOVE_XREFS visitPostDefault("xref"); +#endif } void XmlDitaDocVisitor::pushEnabled() @@ -1219,6 +1367,26 @@ } } +/// Returns true if it is OK to write a para element +bool XmlDitaDocVisitor::canPushPara() const +{ + if (!xmlElemStack.isEmpty()) { + QString e = xmlElemStack.peek().getElemName(); + if (e == "xref" || e == "p") { + return false; + } + } + return true; +} + +bool XmlDitaDocVisitor::canPopPara() const +{ + if (!xmlElemStack.isEmpty() && xmlElemStack.peek().getElemName() == "p") { + return true; + } + return false; +} + /** Default treatment of a post traversal visit, this just pushes a single element with no attributes. */ void XmlDitaDocVisitor::visitPreDefault(const QString& elem)