summaryrefslogtreecommitdiff
path: root/src/htmldocvisitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/htmldocvisitor.cpp')
-rw-r--r--src/htmldocvisitor.cpp178
1 files changed, 47 insertions, 131 deletions
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 6ccbda4..c70f2c5 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -3,7 +3,7 @@
*
*
*
- * Copyright (C) 1997-2013 by Dimitri van Heesch.
+ * Copyright (C) 1997-2014 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
@@ -33,6 +33,7 @@
#include "vhdldocgen.h"
#include "filedef.h"
#include "memberdef.h"
+#include "htmlentity.h"
static const int NUM_HTML_LIST_TYPES = 4;
static const char types[][NUM_HTML_LIST_TYPES] = {"1", "a", "i", "A"};
@@ -43,27 +44,30 @@ static QCString convertIndexWordToAnchor(const QString &word)
QCString result;
const char *str = word.data();
unsigned char c;
- while ((c = *str++))
- {
- if ((c >= 'a' && c <= 'z') || // ALPHA
- (c >= 'A' && c <= 'A') || // ALPHA
- (c >= '0' && c <= '9') || // DIGIT
- c == '-' ||
- c == '.' ||
- c == '_' ||
- c == '~'
- )
- {
- result += c;
- }
- else
+ if (str)
+ {
+ while ((c = *str++))
{
- char enc[4];
- enc[0] = '%';
- enc[1] = hex[(c & 0xf0) >> 4];
- enc[2] = hex[c & 0xf];
- enc[3] = 0;
- result += enc;
+ if ((c >= 'a' && c <= 'z') || // ALPHA
+ (c >= 'A' && c <= 'A') || // ALPHA
+ (c >= '0' && c <= '9') || // DIGIT
+ c == '-' ||
+ c == '.' ||
+ c == '_' ||
+ c == '~'
+ )
+ {
+ result += c;
+ }
+ else
+ {
+ char enc[4];
+ enc[0] = '%';
+ enc[1] = hex[(c & 0xf0) >> 4];
+ enc[2] = hex[c & 0xf];
+ enc[3] = 0;
+ result += enc;
+ }
}
}
return result;
@@ -91,7 +95,6 @@ static bool mustBeOutsideParagraph(DocNode *n)
case DocNode::Kind_Internal:
/* <div> */
case DocNode::Kind_Include:
- case DocNode::Kind_Verbatim:
case DocNode::Kind_Image:
case DocNode::Kind_SecRefList:
/* <hr> */
@@ -106,6 +109,11 @@ static bool mustBeOutsideParagraph(DocNode *n)
/* \parblock */
case DocNode::Kind_ParBlock:
return TRUE;
+ case DocNode::Kind_Verbatim:
+ {
+ DocVerbatim *dv = (DocVerbatim*)n;
+ return dv->type()!=DocVerbatim::HtmlOnly || dv->isBlock();
+ }
case DocNode::Kind_StyleChange:
return ((DocStyleChange*)n)->style()==DocStyleChange::Preformatted ||
((DocStyleChange*)n)->style()==DocStyleChange::Div ||
@@ -182,110 +190,14 @@ void HtmlDocVisitor::visit(DocWhiteSpace *w)
void HtmlDocVisitor::visit(DocSymbol *s)
{
if (m_hide) return;
- switch(s->symbol())
- {
- case DocSymbol::BSlash: m_t << "\\"; break;
- case DocSymbol::At: m_t << "@"; break;
- case DocSymbol::Less: m_t << "&lt;"; break;
- case DocSymbol::Greater: m_t << "&gt;"; break;
- case DocSymbol::Amp: m_t << "&amp;"; 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::Pipe: m_t << "|"; break;
- case DocSymbol::Copy: m_t << "&copy;"; break;
- case DocSymbol::Tm: m_t << "&trade;"; break;
- case DocSymbol::Reg: m_t << "&reg;"; break;
- case DocSymbol::Apos: m_t << "'"; break;
- case DocSymbol::Quot: m_t << "\""; break;
- case DocSymbol::Lsquo: m_t << "&lsquo;"; break;
- case DocSymbol::Rsquo: m_t << "&rsquo;"; break;
- case DocSymbol::Ldquo: m_t << "&ldquo;"; break;
- case DocSymbol::Rdquo: m_t << "&rdquo;"; break;
- case DocSymbol::Ndash: m_t << "&ndash;"; break;
- case DocSymbol::Mdash: m_t << "&mdash;"; break;
- case DocSymbol::Uml: m_t << "&" << s->letter() << "uml;"; break;
- case DocSymbol::Acute: m_t << "&" << s->letter() << "acute;"; break;
- case DocSymbol::Grave: m_t << "&" << s->letter() << "grave;"; break;
- case DocSymbol::Circ: m_t << "&" << s->letter() << "circ;"; break;
- case DocSymbol::Slash: m_t << "&" << s->letter() << "slash;"; break;
- case DocSymbol::Tilde: m_t << "&" << s->letter() << "tilde;"; break;
- case DocSymbol::Szlig: m_t << "&szlig;"; break;
- case DocSymbol::Cedil: m_t << "&" << s->letter() << "cedil;"; break;
- case DocSymbol::Ring: m_t << "&" << s->letter() << "ring;"; break;
- case DocSymbol::Nbsp: m_t << "&#160;"; break;
- case DocSymbol::AElig: m_t << "&AElig;"; break;
- case DocSymbol::Aelig: m_t << "&aelig;"; break;
- case DocSymbol::GrkGamma: m_t << "&Gamma;"; break;
- case DocSymbol::GrkDelta: m_t << "&Delta;"; break;
- case DocSymbol::GrkTheta: m_t << "&Theta;"; break;
- case DocSymbol::GrkLambda: m_t << "&Lambda;"; break;
- case DocSymbol::GrkXi: m_t << "&Xi;"; break;
- case DocSymbol::GrkPi: m_t << "&Pi;"; break;
- case DocSymbol::GrkSigma: m_t << "&Sigma;"; break;
- case DocSymbol::GrkUpsilon: m_t << "&Upsilon;"; break;
- case DocSymbol::GrkPhi: m_t << "&Phi;"; break;
- case DocSymbol::GrkPsi: m_t << "&Psi;"; break;
- case DocSymbol::GrkOmega: m_t << "&Omega;"; break;
- case DocSymbol::Grkalpha: m_t << "&alpha;"; break;
- case DocSymbol::Grkbeta: m_t << "&beta;"; break;
- case DocSymbol::Grkgamma: m_t << "&gamma;"; break;
- case DocSymbol::Grkdelta: m_t << "&delta;"; break;
- case DocSymbol::Grkepsilon: m_t << "&epsilon;"; break;
- case DocSymbol::Grkzeta: m_t << "&zeta;"; break;
- case DocSymbol::Grketa: m_t << "&eta;"; break;
- case DocSymbol::Grktheta: m_t << "&theta;"; break;
- case DocSymbol::Grkiota: m_t << "&iota;"; break;
- case DocSymbol::Grkkappa: m_t << "&kappa;"; break;
- case DocSymbol::Grklambda: m_t << "&lambda;"; break;
- case DocSymbol::Grkmu: m_t << "&mu;"; break;
- case DocSymbol::Grknu: m_t << "&nu;"; break;
- case DocSymbol::Grkxi: m_t << "&xi;"; break;
- case DocSymbol::Grkpi: m_t << "&pi;"; break;
- case DocSymbol::Grkrho: m_t << "&rho;"; break;
- case DocSymbol::Grksigma: m_t << "&sigma;"; break;
- case DocSymbol::Grktau: m_t << "&tau;"; break;
- case DocSymbol::Grkupsilon: m_t << "&upsilon;"; break;
- case DocSymbol::Grkphi: m_t << "&phi;"; break;
- case DocSymbol::Grkchi: m_t << "&chi;"; break;
- case DocSymbol::Grkpsi: m_t << "&psi;"; break;
- case DocSymbol::Grkomega: m_t << "&omega;"; break;
- case DocSymbol::Grkvarsigma: m_t << "&sigmaf;"; break;
- case DocSymbol::Section: m_t << "&sect;"; break;
- case DocSymbol::Degree: m_t << "&deg;"; break;
- case DocSymbol::Prime: m_t << "&prime;"; break;
- case DocSymbol::DoublePrime: m_t << "&Prime;"; break;
- case DocSymbol::Infinity: m_t << "&infin;"; break;
- case DocSymbol::EmptySet: m_t << "&empty;"; break;
- case DocSymbol::PlusMinus: m_t << "&plusmn;"; break;
- case DocSymbol::Times: m_t << "&times;"; break;
- case DocSymbol::Minus: m_t << "&minus;"; break;
- case DocSymbol::CenterDot: m_t << "&sdot;"; break;
- case DocSymbol::Partial: m_t << "&part;"; break;
- case DocSymbol::Nabla: m_t << "&nabla;"; break;
- case DocSymbol::SquareRoot: m_t << "&radic;"; break;
- case DocSymbol::Perpendicular: m_t << "&perp;"; break;
- case DocSymbol::Sum: m_t << "&sum;"; break;
- case DocSymbol::Integral: m_t << "&int;"; break;
- case DocSymbol::Product: m_t << "&prod;"; break;
- case DocSymbol::Similar: m_t << "&sim;"; break;
- case DocSymbol::Approx: m_t << "&asymp;"; break;
- case DocSymbol::NotEqual: m_t << "&ne;"; break;
- case DocSymbol::Equivalent: m_t << "&equiv;"; break;
- case DocSymbol::Proportional: m_t << "&prop;"; break;
- case DocSymbol::LessEqual: m_t << "&le;"; break;
- case DocSymbol::GreaterEqual: m_t << "&ge;"; break;
- case DocSymbol::LeftArrow: m_t << "&larr;"; break;
- case DocSymbol::RightArrow: m_t << "&rarr;"; break;
- case DocSymbol::SetIn: m_t << "&isin;"; break;
- case DocSymbol::SetNotIn: m_t << "&notin;"; break;
- case DocSymbol::LeftCeil: m_t << "&lceil;"; break;
- case DocSymbol::RightCeil: m_t << "&rceil;"; break;
- case DocSymbol::LeftFloor: m_t << "&lfloor;"; break;
- case DocSymbol::RightFloor: m_t << "&rfloor;"; break;
- default:
- err("unknown symbol found\n");
+ const char *res = HtmlEntityMapper::instance()->html(s->symbol());
+ if (res)
+ {
+ m_t << res;
+ }
+ else
+ {
+ err("HTML: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE));
}
}
@@ -332,7 +244,7 @@ void HtmlDocVisitor::visit(DocURL *u)
void HtmlDocVisitor::visit(DocLineBreak *)
{
if (m_hide) return;
- m_t << "<br/>\n";
+ m_t << "<br />\n";
}
void HtmlDocVisitor::visit(DocHorRuler *hr)
@@ -452,7 +364,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
forceStartParagraph(s);
break;
case DocVerbatim::HtmlOnly:
+ if (s->isBlock()) forceEndParagraph(s);
m_t << s->text();
+ if (s->isBlock()) forceStartParagraph(s);
break;
case DocVerbatim::ManOnly:
case DocVerbatim::LatexOnly:
@@ -585,6 +499,8 @@ void HtmlDocVisitor::visit(DocInclude *inc)
case DocInclude::HtmlInclude:
m_t << inc->text();
break;
+ case DocInclude::LatexInclude:
+ break;
case DocInclude::VerbInclude:
forceEndParagraph(inc);
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
@@ -1873,7 +1789,7 @@ void HtmlDocVisitor::visitPre(DocVhdlFlow *vf)
m_t << "</a>";
if (vf->hasCaption())
{
- m_t << "<br/>";
+ m_t << "<br />";
}
}
}
@@ -2040,7 +1956,7 @@ void HtmlDocVisitor::writeMscFile(const QCString &fileName,
}
void HtmlDocVisitor::writeDiaFile(const QCString &fileName,
- const QCString &,
+ const QCString &relPath,
const QCString &)
{
QCString baseName=fileName;
@@ -2057,7 +1973,7 @@ void HtmlDocVisitor::writeDiaFile(const QCString &fileName,
QCString outDir = Config_getString("HTML_OUTPUT");
writeDiaGraphFromFile(fileName,outDir,baseName,DIA_BITMAP);
- m_t << "<img src=\"" << outDir << '/' << baseName << ".png" << "\" />" << endl;
+ m_t << "<img src=\"" << relPath << baseName << ".png" << "\" />" << endl;
}
/** Used for items found inside a paragraph, which due to XHTML restrictions
@@ -2092,7 +2008,7 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n)
//printf("forceEnd first=%d last=%d\n",isFirst,isLast);
if (isFirst && isLast) return;
- m_t << "</p>" << endl;
+ m_t << "</p>";
}
}