summaryrefslogtreecommitdiffstats
path: root/src/htmldocvisitor.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/htmldocvisitor.cpp')
-rw-r--r--src/htmldocvisitor.cpp85
1 files changed, 65 insertions, 20 deletions
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index ee8aab3..37f6bd0 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -211,6 +211,34 @@ static bool isInvisibleNode(DocNode *node)
;
}
+static void mergeHtmlAttributes(const HtmlAttribList &attribs, HtmlAttribList *mergeInto)
+{
+ HtmlAttribListIterator li(attribs);
+ HtmlAttrib *att;
+ for (li.toFirst();(att=li.current());++li)
+ {
+ HtmlAttribListIterator ml(*mergeInto);
+ HtmlAttrib *opt;
+ bool found = false;
+ for (ml.toFirst();(opt=ml.current());++ml)
+ {
+ if (opt->name == att -> name)
+ {
+ found = true;
+ break;
+ }
+ }
+ if (found)
+ {
+ opt->value = opt->value + " " + att->value;
+ }
+ else
+ {
+ mergeInto->append(att);
+ }
+ }
+}
+
static QCString htmlAttribsToString(const HtmlAttribList &attribs, QCString *pAltValue = 0)
{
QCString result;
@@ -649,7 +677,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -657,7 +685,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd, // fileDef,
+ fd, // fileDef,
-1, // start line
-1, // end line
FALSE, // inline fragment
@@ -665,11 +693,14 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line numbers
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
break;
- case DocInclude::DontInclude:
+ case DocInclude::DontInclude:
+ case DocInclude::LatexInclude:
+ case DocInclude::DontIncWithLines:
break;
case DocInclude::HtmlInclude:
{
@@ -678,8 +709,6 @@ void HtmlDocVisitor::visit(DocInclude *inc)
if (inc->isBlock()) forceStartParagraph(inc);
}
break;
- case DocInclude::LatexInclude:
- break;
case DocInclude::VerbInclude:
forceEndParagraph(inc);
m_t << /*PREFRAG_START <<*/ "<pre class=\"fragment\">";
@@ -715,7 +744,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
forceEndParagraph(inc);
m_t << PREFRAG_START;
QFileInfo cfi( inc->file() );
- FileDef fd( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ FileDef *fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
Doxygen::parserManager->getParser(inc->extension())
->parseCode(m_ci,
inc->context(),
@@ -723,7 +752,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
langExt,
inc->isExample(),
inc->exampleFile(),
- &fd,
+ fd,
lineBlock(inc->text(),inc->blockId()),
-1, // endLine
FALSE, // inlineFragment
@@ -731,6 +760,7 @@ void HtmlDocVisitor::visit(DocInclude *inc)
TRUE, // show line number
m_ctx // search context
);
+ delete fd;
m_t << PREFRAG_END;
forceStartParagraph(inc);
}
@@ -760,6 +790,12 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
popEnabled();
if (!m_hide)
{
+ FileDef *fd;
+ if (!op->includeFileName().isEmpty())
+ {
+ QFileInfo cfi( op->includeFileName() );
+ fd = createFileDef( cfi.dirPath().utf8(), cfi.fileName().utf8() );
+ }
Doxygen::parserManager->getParser(m_langExt)
->parseCode(
m_ci,
@@ -768,14 +804,15 @@ void HtmlDocVisitor::visit(DocIncOperator *op)
langExt,
op->isExample(),
op->exampleFile(),
- 0, // fileDef
- -1, // startLine
+ fd, // fileDef
+ op->line(), // startLine
-1, // endLine
FALSE, // inline fragment
0, // memberDef
- TRUE, // show line numbers
+ op->showLineNo(), // show line numbers
m_ctx // search context
);
+ if (fd) delete fd;
}
pushEnabled();
m_hide=TRUE;
@@ -1651,8 +1688,18 @@ void HtmlDocVisitor::visitPre(DocImage *img)
sizeAttribs+=" height=\""+img->height()+"\"";
}
// 16 cases: url.isEmpty() | typeSVG | inlineImage | img->hasCaption()
+
+ HtmlAttribList extraAttribs;
+ if (typeSVG)
+ {
+ HtmlAttrib opt;
+ opt.name = "style";
+ opt.value = "pointer-events: none;";
+ extraAttribs.append(&opt);
+ }
QCString alt;
- QCString attrs = htmlAttribsToString(img->attribs(),&alt);
+ mergeHtmlAttributes(img->attribs(),&extraAttribs);
+ QCString attrs = htmlAttribsToString(extraAttribs,&alt);
QCString src;
if (url.isEmpty())
{
@@ -1664,7 +1711,7 @@ void HtmlDocVisitor::visitPre(DocImage *img)
}
if (typeSVG)
{
- m_t << "<object type=\"image/svg+xml\" style=\"pointer-events: none;\" data=\"" << src
+ m_t << "<object type=\"image/svg+xml\" data=\"" << src
<< "\"" << sizeAttribs << attrs;
if (inlineImage)
{
@@ -1871,8 +1918,8 @@ void HtmlDocVisitor::visitPre(DocSecRefList *s)
{
if (m_hide) return;
forceEndParagraph(s);
- m_t << "<div class=\"multicol\">" << endl;
- m_t << "<ul>" << endl;
+ m_t << "<div>" << endl;
+ m_t << "<ul class=\"multicol\">" << endl;
}
void HtmlDocVisitor::visitPost(DocSecRefList *s)
@@ -2375,16 +2422,14 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n)
DocPara *para = (DocPara*)n->parent();
int nodeIndex = para->children().findRef(n);
nodeIndex--;
- if (nodeIndex<0) return; // first node
+ if (nodeIndex<0) return; // first node in paragraph
while (nodeIndex>=0 && isInvisibleNode(para->children().at(nodeIndex)))
{
nodeIndex--;
}
- if (nodeIndex>=0)
- {
- DocNode *n = para->children().at(nodeIndex);
- if (mustBeOutsideParagraph(n)) return;
- }
+ if (nodeIndex<0) return; // first visible node in paragraph
+ DocNode *n = para->children().at(nodeIndex);
+ if (mustBeOutsideParagraph(n)) return; // previous node already outside paragraph context
nodeIndex--;
bool styleOutsideParagraph=insideStyleChangeThatIsOutsideParagraph(para,nodeIndex);
bool isFirst;