diff options
Diffstat (limited to 'trunk/src/rtfdocvisitor.cpp')
-rw-r--r-- | trunk/src/rtfdocvisitor.cpp | 1750 |
1 files changed, 0 insertions, 1750 deletions
diff --git a/trunk/src/rtfdocvisitor.cpp b/trunk/src/rtfdocvisitor.cpp deleted file mode 100644 index 4cde286..0000000 --- a/trunk/src/rtfdocvisitor.cpp +++ /dev/null @@ -1,1750 +0,0 @@ -/****************************************************************************** - * - * - * - * - * Copyright (C) 1997-2012 by Dimitri van Heesch. - * - * Permission to use, copy, modify, and distribute this software and its - * documentation under the terms of the GNU General Public License is hereby - * granted. No representations are made about the suitability of this software - * for any purpose. It is provided "as is" without express or implied warranty. - * See the GNU General Public License for more details. - * - * Documents produced by Doxygen are derivative works derived from the - * input used in their production; they are not affected by this license. - * - */ - -#include "rtfdocvisitor.h" -#include "docparser.h" -#include "language.h" -#include "doxygen.h" -#include "outputgen.h" -#include "dot.h" -#include "msc.h" -#include "util.h" -#include "rtfstyle.h" -#include "message.h" -#include <qfileinfo.h> -#include "parserintf.h" -#include "msc.h" - - -//#define DBG_RTF(x) m_t << x -#define DBG_RTF(x) do {} while(0) - -static QCString align(DocHtmlCell *cell) -{ - HtmlAttribList attrs = cell->attribs(); - uint i; - for (i=0; i<attrs.count(); ++i) - { - if (attrs.at(i)->name.lower()=="align") - { - if (attrs.at(i)->value.lower()=="center") - return "\\qc "; - else if (attrs.at(i)->value.lower()=="right") - return "\\qr "; - else return ""; - } - } - return ""; -} - -RTFDocVisitor::RTFDocVisitor(FTextStream &t,CodeOutputInterface &ci, - const char *langExt) - : DocVisitor(DocVisitor_RTF), m_t(t), m_ci(ci), m_insidePre(FALSE), - m_hide(FALSE), m_indentLevel(0), m_lastIsPara(FALSE), m_langExt(langExt) -{ -} - -QCString RTFDocVisitor::getStyle(const char *name) -{ - QCString n; - n.sprintf("%s%d",name,m_indentLevel); - StyleData *sd = rtf_Style[n]; - ASSERT(sd!=0); - return sd->reference; -} - -void RTFDocVisitor::incIndentLevel() -{ - if (m_indentLevel<rtf_maxIndentLevels-1) m_indentLevel++; -} - -void RTFDocVisitor::decIndentLevel() -{ - if (m_indentLevel>0) m_indentLevel--; -} - - //-------------------------------------- - // visitor functions for leaf nodes - //-------------------------------------- - -void RTFDocVisitor::visit(DocWord *w) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocWord)}\n"); - filter(w->word()); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocLinkedWord *w) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocLinkedWord)}\n"); - startLink(w->ref(),w->file(),w->anchor()); - filter(w->word()); - endLink(w->ref()); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocWhiteSpace *w) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocWhiteSpace)}\n"); - if (m_insidePre) - { - m_t << w->chars(); - } - else - { - m_t << " "; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocSymbol *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocSymbol)}\n"); - switch(s->symbol()) - { - case DocSymbol::BSlash: m_t << "\\\\"; break; - case DocSymbol::At: m_t << "@"; break; - case DocSymbol::Less: m_t << "<"; break; - case DocSymbol::Greater: m_t << ">"; break; - case DocSymbol::Amp: m_t << "&"; break; - case DocSymbol::Dollar: m_t << "$"; break; - case DocSymbol::Hash: m_t << "#"; break; - case DocSymbol::DoubleColon: m_t << "::"; break; - case DocSymbol::Percent: m_t << "%"; break; - case DocSymbol::Copy: m_t << "(C)"; break; - case DocSymbol::Tm: m_t << "(TM)"; break; - case DocSymbol::Reg: m_t << "(R)"; break; - case DocSymbol::Apos: m_t << "'"; break; - case DocSymbol::Quot: m_t << "\""; break; - case DocSymbol::Lsquo: m_t << "`"; break; - case DocSymbol::Rsquo: m_t << "'"; break; - case DocSymbol::Ldquo: m_t << "\""; break; - case DocSymbol::Rdquo: m_t << "\""; break; - case DocSymbol::Ndash: m_t << "-"; break; - case DocSymbol::Mdash: m_t << "--"; break; - case DocSymbol::Uml: switch(s->letter()) - { - case 'A' : m_t << '\304'; break; - case 'E' : m_t << '\313'; break; - case 'I' : m_t << '\317'; break; - case 'O' : m_t << '\326'; break; - case 'U' : m_t << '\334'; break; - case 'Y' : m_t << 'Y'; break; - case 'a' : m_t << '\344'; break; - case 'e' : m_t << '\353'; break; - case 'i' : m_t << '\357'; break; - case 'o' : m_t << '\366'; break; - case 'u' : m_t << '\374'; break; - case 'y' : m_t << '\377'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Acute: switch(s->letter()) - { - case 'A' : m_t << '\301'; break; - case 'E' : m_t << '\311'; break; - case 'I' : m_t << '\315'; break; - case 'O' : m_t << '\323'; break; - case 'U' : m_t << '\332'; break; - case 'Y' : m_t << '\335'; break; - case 'a' : m_t << '\341'; break; - case 'e' : m_t << '\351'; break; - case 'i' : m_t << '\355'; break; - case 'o' : m_t << '\363'; break; - case 'u' : m_t << '\372'; break; - case 'y' : m_t << '\375'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Grave: switch(s->letter()) - { - case 'A' : m_t << '\300'; break; - case 'E' : m_t << '\310'; break; - case 'I' : m_t << '\314'; break; - case 'O' : m_t << '\322'; break; - case 'U' : m_t << '\331'; break; - case 'a' : m_t << '\340'; break; - case 'e' : m_t << '\350'; break; - case 'i' : m_t << '\354'; break; - case 'o' : m_t << '\362'; break; - case 'u' : m_t << '\371'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Circ: switch(s->letter()) - { - case 'A' : m_t << '\302'; break; - case 'E' : m_t << '\312'; break; - case 'I' : m_t << '\316'; break; - case 'O' : m_t << '\324'; break; - case 'U' : m_t << '\333'; break; - case 'a' : m_t << '\342'; break; - case 'e' : m_t << '\352'; break; - case 'i' : m_t << '\356'; break; - case 'o' : m_t << '\364'; break; - case 'u' : m_t << '\373'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Tilde: switch(s->letter()) - { - case 'A' : m_t << '\303'; break; - case 'N' : m_t << '\321'; break; - case 'O' : m_t << '\325'; break; - case 'a' : m_t << '\343'; break; - case 'n' : m_t << '\361'; break; - case 'o' : m_t << '\365'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Cedil: switch(s->letter()) - { - case 'C' : m_t << '\307'; break; - case 'c' : m_t << '\347'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Slash: switch(s->letter()) - { - case 'O' : m_t << '\330'; break; - case 'o' : m_t << '\370'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Ring: switch(s->letter()) - { - case 'A' : m_t << '\305'; break; - case 'a' : m_t << '\345'; break; - default: m_t << '?'; break; - } - break; - case DocSymbol::Szlig: m_t << "\337"; break; - case DocSymbol::Nbsp: m_t << "\\~ "; break; - case DocSymbol::Aelig: m_t << "\346"; break; - case DocSymbol::AElig: m_t << "\306"; break; - default: - err("error: unknown symbol found\n"); - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocURL *u) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocURL)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) - { - m_t << "{\\field " - "{\\*\\fldinst " - "{ HYPERLINK \\\\l \""; - if (u->isEmail()) m_t << "mailto:"; - m_t << u->url(); - m_t << "\" }" - "{}"; - m_t << "}" - "{\\fldrslt " - "{\\cs37\\ul\\cf2 "; - filter(u->url()); - m_t << "}" - "}" - "}" << endl; - } - else - { - m_t << "{\\f2 "; - filter(u->url()); - m_t << "}"; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocLineBreak *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocLineBreak)}\n"); - m_t << "\\par"; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visit(DocHorRuler *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocHorRuler)}\n"); - m_t << "{\\pard\\widctlpar\\brdrb\\brdrs\\brdrw5\\brsp20 \\adjustright \\par}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visit(DocStyleChange *s) -{ - if (m_hide) return; - m_lastIsPara=FALSE; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocStyleChange)}\n"); - switch (s->style()) - { - case DocStyleChange::Bold: - if (s->enable()) m_t << "{\\b "; else m_t << "} "; - break; - case DocStyleChange::Italic: - if (s->enable()) m_t << "{\\i "; else m_t << "} "; - break; - case DocStyleChange::Code: - if (s->enable()) m_t << "{\\f2 "; else m_t << "} "; - break; - case DocStyleChange::Subscript: - if (s->enable()) m_t << "{\\sub "; else m_t << "} "; - break; - case DocStyleChange::Superscript: - if (s->enable()) m_t << "{\\super "; else m_t << "} "; - break; - case DocStyleChange::Center: - if (s->enable()) m_t << "{\\qc "; else m_t << "} "; - break; - case DocStyleChange::Small: - if (s->enable()) m_t << "{\\sub "; else m_t << "} "; - break; - case DocStyleChange::Preformatted: - if (s->enable()) - { - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - m_insidePre=TRUE; - } - else - { - m_insidePre=FALSE; - m_t << "\\par"; - m_t << "}" << endl; - } - m_lastIsPara=TRUE; - break; - case DocStyleChange::Div: /* HTML only */ break; - case DocStyleChange::Span: /* HTML only */ break; - } -} - -void RTFDocVisitor::visit(DocVerbatim *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocVerbatim)}\n"); - QCString lang = m_langExt; - if (!s->language().isEmpty()) // explicit language setting - { - lang = s->language(); - } - switch(s->type()) - { - case DocVerbatim::Code: // fall though - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - Doxygen::parserManager->getParser(lang) - ->parseCode(m_ci,s->context(),s->text(), - s->isExample(),s->exampleFile()); - //m_t << "\\par" << endl; - m_t << "}" << endl; - break; - case DocVerbatim::Verbatim: - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - filter(s->text(),TRUE); - //m_t << "\\par" << endl; - m_t << "}" << endl; - break; - case DocVerbatim::HtmlOnly: - case DocVerbatim::LatexOnly: - case DocVerbatim::XmlOnly: - case DocVerbatim::ManOnly: - /* nothing */ - break; - case DocVerbatim::Dot: - { - static int dotindex = 1; - QCString fileName(4096); - - fileName.sprintf("%s%d%s", - (Config_getString("RTF_OUTPUT")+"/inline_dotgraph_").data(), - dotindex++, - ".dot" - ); - QFile file(fileName); - if (!file.open(IO_WriteOnly)) - { - err("Could not open file %s for writing\n",fileName.data()); - } - file.writeBlock( s->text(), s->text().length() ); - file.close(); - m_t << "\\par{\\qc "; // center picture - writeDotFile(fileName); - m_t << "} "; - if (Config_getBool("DOT_CLEANUP")) file.remove(); - } - break; - case DocVerbatim::Msc: - { - static int mscindex = 1; - QCString baseName(4096); - - baseName.sprintf("%s%d", - (Config_getString("RTF_OUTPUT")+"/inline_mscgraph_").data(), - mscindex++ - ); - QFile file(baseName+".msc"); - if (!file.open(IO_WriteOnly)) - { - err("Could not open file %s for writing\n",baseName.data()); - } - QCString text = "msc {"; - text+=s->text(); - text+="}"; - file.writeBlock( text, text.length() ); - file.close(); - m_t << "\\par{\\qc "; // center picture - writeMscFile(baseName); - m_t << "} "; - if (Config_getBool("DOT_CLEANUP")) file.remove(); - } - break; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocAnchor *anc) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocAnchor)}\n"); - QCString anchor; - if (!anc->file().isEmpty()) - { - anchor+=anc->file(); - } - if (!anc->file().isEmpty() && !anc->anchor().isEmpty()) - { - anchor+="_"; - } - if (!anc->anchor().isEmpty()) - { - anchor+=anc->anchor(); - } - m_t << "{\\bkmkstart " << rtfFormatBmkStr(anchor) << "}" << endl; - m_t << "{\\bkmkend " << rtfFormatBmkStr(anchor) << "}" << endl; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocInclude *inc) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocInclude)}\n"); - switch(inc->type()) - { - case DocInclude::IncWithLines: - { - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - QFileInfo cfi( inc->file() ); - FileDef fd( cfi.dirPath(), cfi.fileName() ); - Doxygen::parserManager->getParser(inc->extension()) - ->parseCode(m_ci,inc->context(), - inc->text(), - inc->isExample(), - inc->exampleFile(), &fd); - m_t << "\\par"; - m_t << "}" << endl; - } - break; - case DocInclude::Include: - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - Doxygen::parserManager->getParser(inc->extension()) - ->parseCode(m_ci,inc->context(), - inc->text(),inc->isExample(), - inc->exampleFile()); - m_t << "\\par"; - m_t << "}" << endl; - break; - case DocInclude::DontInclude: - break; - case DocInclude::HtmlInclude: - break; - case DocInclude::VerbInclude: - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - filter(inc->text()); - m_t << "\\par"; - m_t << "}" << endl; - break; - case DocInclude::Snippet: - m_t << "{" << endl; - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - Doxygen::parserManager->getParser(inc->extension()) - ->parseCode(m_ci, - inc->context(), - extractBlock(inc->text(),inc->blockId()), - inc->isExample(), - inc->exampleFile() - ); - m_t << "}"; - break; - } - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visit(DocIncOperator *op) -{ - //printf("DocIncOperator: type=%d first=%d, last=%d text=`%s'\n", - // op->type(),op->isFirst(),op->isLast(),op->text().data()); - DBG_RTF("{\\comment RTFDocVisitor::visit(DocIncOperator)}\n"); - if (op->isFirst()) - { - if (!m_hide) - { - m_t << "{" << endl; - m_t << "\\par" << endl; - m_t << rtf_Style_Reset << getStyle("CodeExample"); - } - pushEnabled(); - m_hide = TRUE; - } - if (op->type()!=DocIncOperator::Skip) - { - popEnabled(); - if (!m_hide) - { - Doxygen::parserManager->getParser(m_langExt) - ->parseCode(m_ci,op->context(),op->text(), - op->isExample(),op->exampleFile()); - } - pushEnabled(); - m_hide=TRUE; - } - if (op->isLast()) - { - popEnabled(); - if (!m_hide) - { - m_t << "\\par"; - m_t << "}" << endl; - } - m_lastIsPara=TRUE; - } - else - { - if (!m_hide) m_t << endl; - m_lastIsPara=FALSE; - } -} - -void RTFDocVisitor::visit(DocFormula *f) -{ - if (m_hide) return; - // TODO: do something sensible here, like including a bitmap - DBG_RTF("{\\comment RTFDocVisitor::visit(DocFormula)}\n"); - m_t << f->text(); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocIndexEntry *i) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visit(DocIndexEntry)}\n"); - m_t << "{\\xe \\v " << i->entry() << "}" << endl; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visit(DocSimpleSectSep *) -{ -} - -void RTFDocVisitor::visit(DocCite *cite) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocCite)}\n"); - if (!cite->file().isEmpty()) - { - startLink(cite->ref(),cite->file(),cite->anchor()); - } - else - { - m_t << "{\\b "; - } - filter(cite->text()); - if (!cite->file().isEmpty()) - { - endLink(cite->ref()); - } - else - { - m_t << "}"; - } -} - - -//-------------------------------------- -// visitor functions for compound nodes -//-------------------------------------- - -void RTFDocVisitor::visitPre(DocAutoList *l) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocAutoList)}\n"); - m_t << "{" << endl; - rtf_listItemInfo[m_indentLevel].isEnum = l->isEnumList(); - rtf_listItemInfo[m_indentLevel].number = 1; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocAutoList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocAutoList)}\n"); - m_t << "\\par"; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocAutoListItem *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocAutoListItem)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << rtf_Style_Reset; - if (rtf_listItemInfo[m_indentLevel].isEnum) - { - m_t << getStyle("ListEnum") << endl; - m_t << rtf_listItemInfo[m_indentLevel].number << ".\\tab "; - rtf_listItemInfo[m_indentLevel].number++; - } - else - { - m_t << getStyle("ListBullet") << endl; - } - incIndentLevel(); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocAutoListItem *) -{ - decIndentLevel(); - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocAutoListItem)}\n"); -} - -void RTFDocVisitor::visitPre(DocPara *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocPara)}\n"); -} - -void RTFDocVisitor::visitPost(DocPara *p) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocPara)}\n"); - if (!m_lastIsPara && - !p->isLast() && // omit <p> for last paragraph - !(p->parent() && // and for parameters & sections - p->parent()->kind()==DocNode::Kind_ParamSect - ) - ) - { - m_t << "\\par" << endl; - m_lastIsPara=TRUE; - } -} - -void RTFDocVisitor::visitPre(DocRoot *r) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocRoot)}\n"); - if (r->indent()) incIndentLevel(); - m_t << "{" << rtf_Style["BodyText"]->reference << endl; -} - -void RTFDocVisitor::visitPost(DocRoot *r) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocRoot)}\n"); - if (!m_lastIsPara && !r->singleLine()) m_t << "\\par" << endl; - m_t << "}"; - m_lastIsPara=TRUE; - if (r->indent()) decIndentLevel(); -} - -void RTFDocVisitor::visitPre(DocSimpleSect *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleSect)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{"; // start desc - //m_t << "{\\b "; // start bold - m_t << "{" << rtf_Style["Heading5"]->reference << endl; - switch(s->type()) - { - case DocSimpleSect::See: - m_t << theTranslator->trSeeAlso(); break; - case DocSimpleSect::Return: - m_t << theTranslator->trReturns(); break; - case DocSimpleSect::Author: - m_t << theTranslator->trAuthor(TRUE,TRUE); break; - case DocSimpleSect::Authors: - m_t << theTranslator->trAuthor(TRUE,FALSE); break; - case DocSimpleSect::Version: - m_t << theTranslator->trVersion(); break; - case DocSimpleSect::Since: - m_t << theTranslator->trSince(); break; - case DocSimpleSect::Date: - m_t << theTranslator->trDate(); break; - case DocSimpleSect::Note: - m_t << theTranslator->trNote(); break; - case DocSimpleSect::Warning: - m_t << theTranslator->trWarning(); break; - case DocSimpleSect::Pre: - m_t << theTranslator->trPrecondition(); break; - case DocSimpleSect::Post: - m_t << theTranslator->trPostcondition(); break; - case DocSimpleSect::Copyright: - m_t << theTranslator->trCopyright(); break; - case DocSimpleSect::Invar: - m_t << theTranslator->trInvariant(); break; - case DocSimpleSect::Remark: - m_t << theTranslator->trRemarks(); break; - case DocSimpleSect::Attention: - m_t << theTranslator->trAttention(); break; - case DocSimpleSect::User: break; - case DocSimpleSect::Rcs: break; - case DocSimpleSect::Unknown: break; - } - - // special case 1: user defined title - if (s->type()!=DocSimpleSect::User && s->type()!=DocSimpleSect::Rcs) - { - m_t << ":"; - m_t << "\\par"; - m_t << "}"; // end bold - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("DescContinue"); - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocSimpleSect *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleSect)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - decIndentLevel(); - m_t << "}"; // end desc - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocTitle *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocTitle)}\n"); -} - -void RTFDocVisitor::visitPost(DocTitle *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocTitle)}\n"); - m_t << "\\par" << endl; - m_t << "}"; // end bold - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("DescContinue"); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPre(DocSimpleList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleSect)}\n"); - m_t << "{" << endl; - rtf_listItemInfo[m_indentLevel].isEnum = FALSE; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocSimpleList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleSect)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocSimpleListItem *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSimpleListItem)}\n"); - m_t << "\\par" << rtf_Style_Reset << getStyle("ListBullet") << endl; - m_lastIsPara=FALSE; - incIndentLevel(); -} - -void RTFDocVisitor::visitPost(DocSimpleListItem *) -{ - decIndentLevel(); - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSimpleListItem)}\n"); -} - -void RTFDocVisitor::visitPre(DocSection *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSection)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{\\bkmkstart " << rtfFormatBmkStr(s->file()+"_"+s->anchor()) << "}" << endl; - m_t << "{\\bkmkend " << rtfFormatBmkStr(s->file()+"_"+s->anchor()) << "}" << endl; - m_t << "{{" // start section - << rtf_Style_Reset; - QCString heading; - int level = QMIN(s->level()+1,4); - heading.sprintf("Heading%d",level); - // set style - m_t << rtf_Style[heading]->reference << endl; - // make table of contents entry - filter(s->title()); - m_t << endl << "\\par" << "}" << endl; - m_t << "{\\tc\\tcl" << level << " \\v "; - filter(s->title()); - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPost(DocSection *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSection)}\n"); - m_t << "\\par}" << endl; // end section - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlList *l) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlList)}\n"); - m_t << "{" << endl; - rtf_listItemInfo[m_indentLevel].isEnum = l->type()==DocHtmlList::Ordered; - rtf_listItemInfo[m_indentLevel].number = 1; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlList)}\n"); - m_t << "\\par" << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlListItem *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlListItem)}\n"); - m_t << "\\par" << endl; - m_t << rtf_Style_Reset; - if (rtf_listItemInfo[m_indentLevel].isEnum) - { - m_t << getStyle("ListEnum") << endl; - m_t << rtf_listItemInfo[m_indentLevel].number << ".\\tab "; - rtf_listItemInfo[m_indentLevel].number++; - } - else - { - m_t << getStyle("ListBullet") << endl; - } - incIndentLevel(); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlListItem *) -{ - decIndentLevel(); - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlListItem)}\n"); -} - -void RTFDocVisitor::visitPre(DocHtmlDescList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescList)}\n"); - //m_t << "{" << endl; - //m_t << rtf_Style_Reset << getStyle("ListContinue"); - //m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlDescList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescList)}\n"); - //m_t << "}" << endl; - //m_t << "\\par" << endl; - //m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlDescTitle *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescTitle)}\n"); - //m_t << "\\par" << endl; - //m_t << "{\\b "; - m_t << "{" << rtf_Style["Heading5"]->reference << endl; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlDescTitle *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescTitle)}\n"); - m_t << "\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlDescData *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlDescData)}\n"); - incIndentLevel(); - m_t << "{" << rtf_Style_Reset << getStyle("DescContinue"); -} - -void RTFDocVisitor::visitPost(DocHtmlDescData *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlDescData)}\n"); - m_t << "\\par"; - m_t << "}" << endl; - decIndentLevel(); - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlTable *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlTable)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPost(DocHtmlTable *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlTable)}\n"); - m_t << "\\pard\\plain" << endl; - m_t << "\\par" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHtmlCaption *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlCaption)}\n"); -} - -void RTFDocVisitor::visitPost(DocHtmlCaption *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlCaption)}\n"); -} - -void RTFDocVisitor::visitPre(DocHtmlRow *r) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlRow)}\n"); - uint i,columnWidth=r->numCells()>0 ? rtf_pageWidth/r->numCells() : 10; - m_t << "\\trowd \\trgaph108\\trleft-108" - "\\trbrdrt\\brdrs\\brdrw10 " - "\\trbrdrl\\brdrs\\brdrw10 " - "\\trbrdrb\\brdrs\\brdrw10 " - "\\trbrdrr\\brdrs\\brdrw10 " - "\\trbrdrh\\brdrs\\brdrw10 " - "\\trbrdrv\\brdrs\\brdrw10 "<< endl; - for (i=0;i<r->numCells();i++) - { - if (r->isHeading()) - { - m_t << "\\clcbpat16"; // set cell shading to light grey (color 16 in the clut) - } - m_t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10 " - "\\clbrdrl\\brdrs\\brdrw10 " - "\\clbrdrb\\brdrs\\brdrw10 " - "\\clbrdrr \\brdrs\\brdrw10 " - "\\cltxlrtb " - "\\cellx" << ((i+1)*columnWidth) << endl; - } - m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlRow *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlRow)}\n"); - m_t << endl; - m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; - m_t << "{\\row }" << endl; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPre(DocHtmlCell *c) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlCell)}\n"); - m_t << "{" << align(c); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHtmlCell *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlCell)}\n"); - m_t << "\\cell }"; - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPre(DocInternal *) -{ - if (m_hide) return; - //DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternal)}\n"); - //m_t << "{"; // start desc - //m_t << "{\\b "; // start bold - //m_t << theTranslator->trForInternalUseOnly(); - //m_t << "}"; // end bold - //m_t << "\\par" << endl; - //incIndentLevel(); - //m_t << rtf_Style_Reset << getStyle("DescContinue"); - //m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocInternal *) -{ - if (m_hide) return; - //DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternal)}\n"); - //m_t << "\\par"; - //decIndentLevel(); - //m_t << "}"; // end desc - //m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocHRef *href) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHRef)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) - { - m_t << "{\\field " - "{\\*\\fldinst " - "{ HYPERLINK \\\\l \"" << href->url() << "\" " - "}{}" - "}" - "{\\fldrslt " - "{\\cs37\\ul\\cf2 "; - - } - else - { - m_t << "{\\f2 "; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocHRef *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHRef)}\n"); - if (Config_getBool("RTF_HYPERLINKS")) - { - m_t << "}" - "}" - "}"; - } - else - { - m_t << "}"; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPre(DocHtmlHeader *header) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlHeader)}\n"); - m_t << "{" // start section - << rtf_Style_Reset; - QCString heading; - int level = QMIN(header->level()+2,4); - heading.sprintf("Heading%d",level); - // set style - m_t << rtf_Style[heading]->reference; - // make table of contents entry - m_t << "{\\tc\\tcl \\v " << level << "}"; - m_lastIsPara=FALSE; - -} - -void RTFDocVisitor::visitPost(DocHtmlHeader *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlHeader)}\n"); - m_t << "\\par"; - m_t << "}" << endl; // end section - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocImage *img) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocImage)}\n"); - if (img->type()==DocImage::Rtf) - { - m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset << endl; - m_t << "\\par\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << img->name(); - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; - } - else // other format -> skip - { - } - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; -} - -void RTFDocVisitor::visitPost(DocImage *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocImage)}\n"); - popEnabled(); -} - -void RTFDocVisitor::visitPre(DocDotFile *df) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDotFile)}\n"); - writeDotFile(df->file()); - - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; -} - -void RTFDocVisitor::visitPost(DocDotFile *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDotFile)}\n"); - popEnabled(); -} -void RTFDocVisitor::visitPre(DocMscFile *df) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocMscFile)}\n"); - writeMscFile(df->file()); - - // hide caption since it is not supported at the moment - pushEnabled(); - m_hide=TRUE; -} - -void RTFDocVisitor::visitPost(DocMscFile *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocMscFile)}\n"); - popEnabled(); -} - -void RTFDocVisitor::visitPre(DocLink *lnk) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLink)}\n"); - startLink(lnk->ref(),lnk->file(),lnk->anchor()); -} - -void RTFDocVisitor::visitPost(DocLink *lnk) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLink)}\n"); - endLink(lnk->ref()); -} - -void RTFDocVisitor::visitPre(DocRef *ref) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocRef)}\n"); - // when ref->isSubPage()==TRUE we use ref->file() for HTML and - // ref->anchor() for LaTeX/RTF - if (ref->isSubPage()) - { - startLink(ref->ref(),0,ref->anchor()); - } - else - { - if (!ref->file().isEmpty()) startLink(ref->ref(),ref->file(),ref->anchor()); - } - if (!ref->hasLinkText()) filter(ref->targetTitle()); -} - -void RTFDocVisitor::visitPost(DocRef *ref) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocRef)}\n"); - if (!ref->file().isEmpty()) endLink(ref->ref()); - //m_t << " "; -} - - -void RTFDocVisitor::visitPre(DocSecRefItem *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSecRefItem)}\n"); -} - -void RTFDocVisitor::visitPost(DocSecRefItem *) -{ - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSecRefItem)}\n"); -} - -void RTFDocVisitor::visitPre(DocSecRefList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocSecRefList)}\n"); - m_t << "{" << endl; - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("LatexTOC") << endl; - m_t << "\\par" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPost(DocSecRefList *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocSecRefList)}\n"); - decIndentLevel(); - m_t << "\\par"; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -//void RTFDocVisitor::visitPre(DocLanguage *l) -//{ -// DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocLanguage)}\n"); -// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); -// if (l->id().lower()!=langId.lower()) -// { -// pushEnabled(); -// m_hide = TRUE; -// } -//} -// -//void RTFDocVisitor::visitPost(DocLanguage *l) -//{ -// DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocLanguage)}\n"); -// QCString langId = Config_getEnum("OUTPUT_LANGUAGE"); -// if (l->id().lower()!=langId.lower()) -// { -// popEnabled(); -// } -//} - -void RTFDocVisitor::visitPre(DocParamSect *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocParamSect)}\n"); - m_t << "{"; // start param list - if (!m_lastIsPara) m_t << "\\par" << endl; - //m_t << "{\\b "; // start bold - m_t << "{" << rtf_Style["Heading5"]->reference << endl; - switch(s->type()) - { - case DocParamSect::Param: - m_t << theTranslator->trParameters(); break; - case DocParamSect::RetVal: - m_t << theTranslator->trReturnValues(); break; - case DocParamSect::Exception: - m_t << theTranslator->trExceptions(); break; - case DocParamSect::TemplateParam: - /* TODO: add this - m_t << theTranslator->trTemplateParam(); break; - */ - m_t << "Template Parameters"; break; - default: - ASSERT(0); - } - m_t << ":"; - m_t << "\\par"; - m_t << "}" << endl; - bool useTable = s->type()==DocParamSect::Param || - s->type()==DocParamSect::RetVal || - s->type()==DocParamSect::Exception || - s->type()==DocParamSect::TemplateParam; - if (!useTable) - { - incIndentLevel(); - } - m_t << rtf_Style_Reset << getStyle("DescContinue"); - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPost(DocParamSect *s) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocParamSect)}\n"); - //m_t << "\\par" << endl; - bool useTable = s->type()==DocParamSect::Param || - s->type()==DocParamSect::RetVal || - s->type()==DocParamSect::Exception || - s->type()==DocParamSect::TemplateParam; - if (!useTable) - { - decIndentLevel(); - } - m_t << "}" << endl; -} - -void RTFDocVisitor::visitPre(DocParamList *pl) -{ - static int columnPos[4][5] = - { { 2, 25, 100, 100, 100 }, // no inout, no type - { 3, 14, 35, 100, 100 }, // inout, no type - { 3, 25, 50, 100, 100 }, // no inout, type - { 4, 14, 35, 55, 100 }, // inout, type - }; - int config=0; - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocParamList)}\n"); - - DocParamSect::Type parentType = DocParamSect::Unknown; - DocParamSect *sect = 0; - if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect) - { - parentType = ((DocParamSect*)pl->parent())->type(); - sect=(DocParamSect*)pl->parent(); - } - bool useTable = parentType==DocParamSect::Param || - parentType==DocParamSect::RetVal || - parentType==DocParamSect::Exception || - parentType==DocParamSect::TemplateParam; - if (sect && sect->hasInOutSpecifier()) config+=1; - if (sect && sect->hasTypeSpecifier()) config+=2; - if (useTable) - { - int i; - m_t << "\\trowd \\trgaph108\\trleft426\\tblind426" - "\\trbrdrt\\brdrs\\brdrw10\\brdrcf15 " - "\\trbrdrl\\brdrs\\brdrw10\\brdrcf15 " - "\\trbrdrb\\brdrs\\brdrw10\\brdrcf15 " - "\\trbrdrr\\brdrs\\brdrw10\\brdrcf15 " - "\\trbrdrh\\brdrs\\brdrw10\\brdrcf15 " - "\\trbrdrv\\brdrs\\brdrw10\\brdrcf15 "<< endl; - for (i=0;i<columnPos[config][0];i++) - { - m_t << "\\clvertalt\\clbrdrt\\brdrs\\brdrw10\\brdrcf15 " - "\\clbrdrl\\brdrs\\brdrw10\\brdrcf15 " - "\\clbrdrb\\brdrs\\brdrw10\\brdrcf15 " - "\\clbrdrr \\brdrs\\brdrw10\\brdrcf15 " - "\\cltxlrtb " - "\\cellx" << (rtf_pageWidth*columnPos[config][i+1]/100) << endl; - } - m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; - } - - if (sect && sect->hasInOutSpecifier()) - { - if (useTable) - { - m_t << "{"; - } - - // Put in the direction: in/out/in,out if specified. - if (pl->direction()!=DocParamSect::Unspecified) - { - if (pl->direction()==DocParamSect::In) - { - m_t << "in"; - } - else if (pl->direction()==DocParamSect::Out) - { - m_t << "out"; - } - else if (pl->direction()==DocParamSect::InOut) - { - m_t << "in,out"; - } - } - - if (useTable) - { - m_t << "\\cell }"; - } - } - - if (sect && sect->hasTypeSpecifier()) - { - if (useTable) - { - m_t << "{"; - } - QListIterator<DocNode> li(pl->paramTypes()); - DocNode *type; - bool first=TRUE; - for (li.toFirst();(type=li.current());++li) - { - if (!first) m_t << " | "; else first=FALSE; - if (type->kind()==DocNode::Kind_Word) - { - visit((DocWord*)type); - } - else if (type->kind()==DocNode::Kind_LinkedWord) - { - visit((DocLinkedWord*)type); - } - } - if (useTable) - { - m_t << "\\cell }"; - } - } - - - if (useTable) - { - m_t << "{"; - } - - m_t << "{\\i "; - //QStrListIterator li(pl->parameters()); - //const char *s; - QListIterator<DocNode> li(pl->parameters()); - DocNode *param; - bool first=TRUE; - for (li.toFirst();(param=li.current());++li) - { - if (!first) m_t << ","; else first=FALSE; - if (param->kind()==DocNode::Kind_Word) - { - visit((DocWord*)param); - } - else if (param->kind()==DocNode::Kind_LinkedWord) - { - visit((DocLinkedWord*)param); - } - } - m_t << "} "; - - if (useTable) - { - m_t << "\\cell }{"; - } - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPost(DocParamList *pl) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocParamList)}\n"); - - DocParamSect::Type parentType = DocParamSect::Unknown; - //DocParamSect *sect = 0; - if (pl->parent() && pl->parent()->kind()==DocNode::Kind_ParamSect) - { - parentType = ((DocParamSect*)pl->parent())->type(); - //sect=(DocParamSect*)pl->parent(); - } - bool useTable = parentType==DocParamSect::Param || - parentType==DocParamSect::RetVal || - parentType==DocParamSect::Exception || - parentType==DocParamSect::TemplateParam; - if (useTable) - { - m_t << "\\cell }" << endl; - //m_t << "\\pard \\widctlpar\\intbl\\adjustright" << endl; - m_t << "{\\row }" << endl; - } - else - { - m_t << "\\par" << endl; - } - - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocXRefItem *x) -{ - if (m_hide) return; - bool anonymousEnum = x->file()=="@"; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocXRefItem)}\n"); - m_t << "{"; // start param list - //m_t << "{\\b "; // start bold - m_t << "{" << rtf_Style["Heading5"]->reference << endl; - if (Config_getBool("RTF_HYPERLINKS") && !anonymousEnum) - { - QCString refName; - if (!x->file().isEmpty()) - { - refName+=x->file(); - } - if (!x->file().isEmpty() && !x->anchor().isEmpty()) - { - refName+="_"; - } - if (!x->anchor().isEmpty()) - { - refName+=x->anchor(); - } - - m_t << "{\\field " - "{\\*\\fldinst " - "{ HYPERLINK \\\\l \"" << refName << "\" " - "}{}" - "}" - "{\\fldrslt " - "{\\cs37\\ul\\cf2 "; - filter(x->title()); - m_t << "}" - "}" - "}"; - } - else - { - filter(x->title()); - } - m_t << ":"; - m_t << "\\par"; - m_t << "}"; // end bold - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("DescContinue"); - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::visitPost(DocXRefItem *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocXRefItem)}\n"); - m_t << "\\par" << endl; - decIndentLevel(); - m_t << "}" << endl; // end xref item - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::visitPre(DocInternalRef *ref) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocInternalRef)}\n"); - startLink("",ref->file(),ref->anchor()); -} - -void RTFDocVisitor::visitPost(DocInternalRef *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocInternalRef)}\n"); - endLink(""); - m_t << " "; -} - -void RTFDocVisitor::visitPre(DocCopy *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocCopy)}\n"); -} - -void RTFDocVisitor::visitPost(DocCopy *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocCopy)}\n"); -} - -void RTFDocVisitor::visitPre(DocText *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocText)}\n"); -} - -void RTFDocVisitor::visitPost(DocText *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocText)}\n"); -} - -void RTFDocVisitor::visitPre(DocHtmlBlockQuote *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocHtmlBlockQuote)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{"; // start desc - incIndentLevel(); - m_t << rtf_Style_Reset << getStyle("DescContinue"); -} - -void RTFDocVisitor::visitPost(DocHtmlBlockQuote *) -{ - if (m_hide) return; - DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocHtmlBlockQuote)}\n"); - if (!m_lastIsPara) m_t << "\\par" << endl; - decIndentLevel(); - m_t << "}"; // end desc - m_lastIsPara=TRUE; -} - - -//static char* getMultiByte(int c) -//{ -// static char s[10]; -// sprintf(s,"\\'%X",c); -// return s; -//} - -void RTFDocVisitor::filter(const char *str,bool verbatim) -{ - if (str) - { - const unsigned char *p=(const unsigned char *)str; - unsigned char c; - unsigned char pc='\0'; - while (*p) - { - //static bool MultiByte = FALSE; - c=*p++; - - //if ( MultiByte ) - //{ - // m_t << getMultiByte( c ); - // MultiByte = FALSE; - // continue; - //} - //if ( c >= 0x80 ) - //{ - // MultiByte = TRUE; - // m_t << getMultiByte( c ); - // continue; - //} - - switch (c) - { - case '{': m_t << "\\{"; break; - case '}': m_t << "\\}"; break; - case '\\': m_t << "\\\\"; break; - case '\n': if (verbatim) - { - m_t << "\\par" << endl; - } - else - { - m_t << '\n'; - } - break; - default: m_t << (char)c; - } - pc = c; - } - } -} - -void RTFDocVisitor::startLink(const QCString &ref,const QCString &file,const QCString &anchor) -{ - if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) - { - QCString refName; - if (!file.isEmpty()) - { - refName+=file; - } - if (!file.isEmpty() && anchor) - { - refName+='_'; - } - if (anchor) - { - refName+=anchor; - } - - m_t << "{\\field {\\*\\fldinst { HYPERLINK \\\\l \""; - m_t << rtfFormatBmkStr(refName); - m_t << "\" }{}"; - m_t << "}{\\fldrslt {\\cs37\\ul\\cf2 "; - } - else - { - m_t << "{\\b "; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::endLink(const QCString &ref) -{ - if (ref.isEmpty() && Config_getBool("RTF_HYPERLINKS")) - { - m_t << "}}}"; - } - else - { - m_t << "}"; - } - m_lastIsPara=FALSE; -} - -void RTFDocVisitor::pushEnabled() -{ - m_enabled.push(new bool(m_hide)); -} - -void RTFDocVisitor::popEnabled() -{ - bool *v=m_enabled.pop(); - ASSERT(v!=0); - m_hide = *v; - delete v; -} - -void RTFDocVisitor::writeDotFile(const QCString &fileName) -{ - QCString baseName=fileName; - int i; - if ((i=baseName.findRev('/'))!=-1) - { - baseName=baseName.right(baseName.length()-i-1); - } - QCString outDir = Config_getString("RTF_OUTPUT"); - writeDotGraphFromFile(fileName,outDir,baseName,BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << baseName << "." << Config_getEnum("DOT_IMAGE_FORMAT"); - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - -void RTFDocVisitor::writeMscFile(const QCString &fileName) -{ - QCString baseName=fileName; - int i; - if ((i=baseName.findRev('/'))!=-1) - { - baseName=baseName.right(baseName.length()-i-1); - } - QCString outDir = Config_getString("RTF_OUTPUT"); - writeMscGraphFromFile(fileName+".msc",outDir,baseName,MSC_BITMAP); - if (!m_lastIsPara) m_t << "\\par" << endl; - m_t << "{" << endl; - m_t << rtf_Style_Reset; - m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \""; - m_t << baseName << ".png"; - m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl; - m_t << "}" << endl; - m_lastIsPara=TRUE; -} - |