Skip to content

Commit

Permalink
Bug 760086 - Figure title needs to be on separate line in order for i…
Browse files Browse the repository at this point in the history
…t to work

Implemented caption possibility in RTF documentation for the different image formats, including some streamlining of the code.
  • Loading branch information
albert-github committed Jan 6, 2016
1 parent 1cfdf7b commit 07521a7
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 85 deletions.
171 changes: 90 additions & 81 deletions src/rtfdocvisitor.cpp
Expand Up @@ -231,6 +231,13 @@ void RTFDocVisitor::visit(DocStyleChange *s)
}
}

static void visitCaption(RTFDocVisitor *parent, QList<DocNode> children)
{
QListIterator<DocNode> cli(children);
DocNode *n;
for (cli.toFirst();(n=cli.current());++cli) n->accept(parent);
}

void RTFDocVisitor::visit(DocVerbatim *s)
{
if (m_hide) return;
Expand Down Expand Up @@ -288,9 +295,11 @@ void RTFDocVisitor::visit(DocVerbatim *s)
}
file.writeBlock( s->text(), s->text().length() );
file.close();
m_t << "\\par{\\qc "; // center picture
writeDotFile(fileName);
m_t << "} ";

writeDotFile(fileName, s->hasCaption());
visitCaption(this, s->children());
includePicturePostRTF(true, s->hasCaption());

if (Config_getBool("DOT_CLEANUP")) file.remove();
}
break;
Expand All @@ -314,9 +323,11 @@ void RTFDocVisitor::visit(DocVerbatim *s)
text+="}";
file.writeBlock( text, text.length() );
file.close();
m_t << "\\par{\\qc "; // center picture
writeMscFile(baseName);
m_t << "} ";

writeMscFile(baseName, s->hasCaption());
visitCaption(this, s->children());
includePicturePostRTF(true, s->hasCaption());

if (Config_getBool("DOT_CLEANUP")) file.remove();
}
break;
Expand All @@ -325,9 +336,9 @@ void RTFDocVisitor::visit(DocVerbatim *s)
static QCString rtfOutput = Config_getString("RTF_OUTPUT");
QCString baseName = writePlantUMLSource(rtfOutput,s->exampleFile(),s->text());

m_t << "\\par{\\qc "; // center picture
writePlantUMLFile(baseName);
m_t << "} ";
writePlantUMLFile(baseName, s->hasCaption());
visitCaption(this, s->children());
includePicturePostRTF(true, s->hasCaption());
}
break;
}
Expand Down Expand Up @@ -1022,76 +1033,95 @@ void RTFDocVisitor::visitPost(DocHtmlHeader *)
void RTFDocVisitor::visitPre(DocImage *img)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocImage)}\n");
if (img->type()==DocImage::Rtf)
includePicturePreRTF(img->name(), img->type()==DocImage::Rtf, img->hasCaption());
}

void RTFDocVisitor::includePicturePreRTF(const QCString name, const bool isTypeRTF, const bool hasCaption)
{
if (isTypeRTF)
{
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;
if (hasCaption || m_lastIsPara) m_t << "\\par" << endl;
m_t << "\\pard \\qc { \\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
m_t << name;
m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt Image}}" << endl;
m_t << "\\par" << endl;
if (hasCaption)
{
m_t << "\\pard \\qc \\b";
m_t << "{Image \\field\\flddirty{\\*\\fldinst { SEQ Image \\\\*Arabic }}{\\fldrslt {\\noproof 1}} ";
}
m_lastIsPara=TRUE;
}
else // other format -> skip
{
pushEnabled();
m_hide=TRUE;
}
// hide caption since it is not supported at the moment
pushEnabled();
m_hide=TRUE;
}

void RTFDocVisitor::visitPost(DocImage *)
void RTFDocVisitor::visitPost(DocImage *img)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocImage)}\n");
popEnabled();
includePicturePostRTF(img->type()==DocImage::Rtf, img->hasCaption());
}

void RTFDocVisitor::includePicturePostRTF(const bool isTypeRTF, const bool hasCaption)
{
if (isTypeRTF)
{
if (m_hide) return;
if (hasCaption)
{
m_t << "}" <<endl;
m_t << "\\par}" <<endl;
}
else
{
m_t << "}" <<endl;
}
}
else
{
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;
writeDotFile(df);
}

void RTFDocVisitor::visitPost(DocDotFile *)
void RTFDocVisitor::visitPost(DocDotFile *df)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDotFile)}\n");
popEnabled();
includePicturePostRTF(true, df->hasCaption());
}
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;
writeMscFile(df);
}

void RTFDocVisitor::visitPost(DocMscFile *)
void RTFDocVisitor::visitPost(DocMscFile *df)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocMscFile)}\n");
popEnabled();
includePicturePostRTF(true, df->hasCaption());
}

void RTFDocVisitor::visitPre(DocDiaFile *df)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPre(DocDiaFile)}\n");
writeDiaFile(df->file());

// hide caption since it is not supported at the moment
pushEnabled();
m_hide=TRUE;
writeDiaFile(df);
}

void RTFDocVisitor::visitPost(DocDiaFile *)
void RTFDocVisitor::visitPost(DocDiaFile *df)
{
DBG_RTF("{\\comment RTFDocVisitor::visitPost(DocDiaFile)}\n");
popEnabled();
includePicturePostRTF(true, df->hasCaption());
}

void RTFDocVisitor::visitPre(DocLink *lnk)
Expand Down Expand Up @@ -1662,28 +1692,29 @@ void RTFDocVisitor::popEnabled()
delete v;
}

void RTFDocVisitor::writeDotFile(const QCString &fileName)
void RTFDocVisitor::writeDotFile(DocDotFile *df)
{
QCString baseName=fileName;
writeDotFile(df->file(), df->hasCaption());
}
void RTFDocVisitor::writeDotFile(const QCString &filename, const bool hasCaption)
{
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,GOF_BITMAP);
if (!m_lastIsPara) m_t << "\\par" << endl;
m_t << "{" << endl;
m_t << rtf_Style_Reset;
m_t << "\\pard \\qc {\\field\\flddirty {\\*\\fldinst INCLUDEPICTURE \"";
writeDotGraphFromFile(filename,outDir,baseName,GOF_BITMAP);
QCString imgExt = getDotImageExtension();
m_t << baseName << "." << imgExt;
m_t << "\" \\\\d \\\\*MERGEFORMAT}{\\fldrslt IMAGE}}\\par" << endl;
m_t << "}" << endl;
m_lastIsPara=TRUE;
includePicturePreRTF(baseName + "." + imgExt, true, hasCaption);
}

void RTFDocVisitor::writeMscFile(const QCString &fileName)
void RTFDocVisitor::writeMscFile(DocMscFile *df)
{
writeMscFile(df->file(), df->hasCaption());
}
void RTFDocVisitor::writeMscFile(const QCString &fileName, const bool hasCaption)
{
QCString baseName=fileName;
int i;
Expand All @@ -1693,37 +1724,23 @@ void RTFDocVisitor::writeMscFile(const QCString &fileName)
}
QCString outDir = Config_getString("RTF_OUTPUT");
writeMscGraphFromFile(fileName,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;
includePicturePreRTF(baseName + ".png", true, hasCaption);
}

void RTFDocVisitor::writeDiaFile(const QCString &fileName)
void RTFDocVisitor::writeDiaFile(DocDiaFile *df)
{
QCString baseName=fileName;
QCString baseName=df->file();
int i;
if ((i=baseName.findRev('/'))!=-1)
{
baseName=baseName.right(baseName.length()-i-1);
}
QCString outDir = Config_getString("RTF_OUTPUT");
writeDiaGraphFromFile(fileName,outDir,baseName,DIA_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;
writeDiaGraphFromFile(df->file(),outDir,baseName,DIA_BITMAP);
includePicturePreRTF(baseName + ".png", true, df->hasCaption());
}

void RTFDocVisitor::writePlantUMLFile(const QCString &fileName)
void RTFDocVisitor::writePlantUMLFile(const QCString &fileName, const bool hasCaption)
{
QCString baseName=fileName;
int i;
Expand All @@ -1733,13 +1750,5 @@ void RTFDocVisitor::writePlantUMLFile(const QCString &fileName)
}
QCString outDir = Config_getString("RTF_OUTPUT");
generatePlantUMLOutput(fileName,outDir,PUML_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;
includePicturePreRTF(baseName + ".png", true, hasCaption);
}

12 changes: 8 additions & 4 deletions src/rtfdocvisitor.h
Expand Up @@ -152,10 +152,14 @@ class RTFDocVisitor : public DocVisitor

void pushEnabled();
void popEnabled();
void writeDotFile(const QCString &fileName);
void writeMscFile(const QCString &fileName);
void writeDiaFile(const QCString &fileName);
void writePlantUMLFile(const QCString &fileName);
void includePicturePreRTF(const QCString name, const bool isTypeRTF, const bool hasCaption);
void includePicturePostRTF(const bool isTypeRTF, const bool hasCaption);
void writeDotFile(const QCString &fileName, const bool hasCaption);
void writeDotFile(DocDotFile *);
void writeMscFile(const QCString &fileName, const bool hasCaption);
void writeMscFile(DocMscFile *);
void writeDiaFile(DocDiaFile *);
void writePlantUMLFile(const QCString &fileName, const bool hasCaption);

//--------------------------------------
// state variables
Expand Down

0 comments on commit 07521a7

Please sign in to comment.