Commit 842c816a authored by Dimitri van Heesch's avatar Dimitri van Heesch

Added optional [block] option to \htmlonly

parent a7c7f36e
...@@ -2729,7 +2729,7 @@ class Receiver ...@@ -2729,7 +2729,7 @@ class Receiver
\sa section \ref cmdfcurlyopen "\\f{" and section \ref formulas "formulas". \sa section \ref cmdfcurlyopen "\\f{" and section \ref formulas "formulas".
<hr> <hr>
\section cmdhtmlonly \\htmlonly \section cmdhtmlonly \\htmlonly ["[block]"]
\addindex \\htmlonly \addindex \\htmlonly
Starts a block of text that will be verbatim included in the Starts a block of text that will be verbatim included in the
...@@ -2738,9 +2738,14 @@ class Receiver ...@@ -2738,9 +2738,14 @@ class Receiver
This command can be used to include HTML code that is too complex This command can be used to include HTML code that is too complex
for doxygen (i.e. applets, java-scripts, and HTML tags that for doxygen (i.e. applets, java-scripts, and HTML tags that
require attributes). You can use the \ref cmdlatexonly "\\latexonly" and require specific attributes).
\ref cmdendlatexonly "\\endlatexonly"
pair to provide a proper \f$\mbox{\LaTeX}\f$ alternative. Normally the contents between \ref cmdhtmlonly "\\htmlonly" and
\ref cmdendhtmlonly "\\endhtmlonly" is inserted as-is. When you
want to insert a HTML fragment that has block scope like a table or list
which should appear outside \<p\>..\</p\>, this can lead to invalid HTML.
You can use \\htmlonly[block] to make doxygen
end the current paragraph and restart it after \\endhtmlonly.
\note environment variables (like \$(HOME) ) are resolved inside a \note environment variables (like \$(HOME) ) are resolved inside a
HTML-only block. HTML-only block.
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
First go to the First go to the
<a href="http://www.doxygen.org/download.html">download</a> page <a href="http://www.doxygen.org/download.html">download</a> page
to get the latest distribution, if you did not downloaded doxygen already. to get the latest distribution, if you have not downloaded doxygen already.
\section install_src_unix Compiling from source on UNIX \section install_src_unix Compiling from source on UNIX
......
...@@ -1320,7 +1320,7 @@ reparsetoken: ...@@ -1320,7 +1320,7 @@ reparsetoken:
{ {
doctokenizerYYsetStateHtmlOnly(); doctokenizerYYsetStateHtmlOnly();
tok = doctokenizerYYlex(); tok = doctokenizerYYlex();
children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName)); children.append(new DocVerbatim(parent,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName,g_token->name=="block"));
if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker"); if (tok==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
} }
...@@ -1745,10 +1745,10 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor) ...@@ -1745,10 +1745,10 @@ DocAnchor::DocAnchor(DocNode *parent,const QCString &id,bool newAnchor)
DocVerbatim::DocVerbatim(DocNode *parent,const QCString &context, DocVerbatim::DocVerbatim(DocNode *parent,const QCString &context,
const QCString &text, Type t,bool isExample, const QCString &text, Type t,bool isExample,
const QCString &exampleFile,const QCString &lang) const QCString &exampleFile,bool isBlock,const QCString &lang)
: m_context(context), m_text(text), m_type(t), : m_context(context), m_text(text), m_type(t),
m_isExample(isExample), m_exampleFile(exampleFile), m_isExample(isExample), m_exampleFile(exampleFile),
m_relPath(g_relPath), m_lang(lang) m_relPath(g_relPath), m_lang(lang), m_isBlock(isBlock)
{ {
m_parent = parent; m_parent = parent;
} }
...@@ -5280,7 +5280,7 @@ int DocPara::handleStartCode() ...@@ -5280,7 +5280,7 @@ int DocPara::handleStartCode()
if (g_token->verb.at(i)=='\n') li=i+1; if (g_token->verb.at(i)=='\n') li=i+1;
i++; i++;
} }
m_children.append(new DocVerbatim(this,g_context,stripIndentation(g_token->verb.mid(li)),DocVerbatim::Code,g_isExample,g_exampleName,lang)); m_children.append(new DocVerbatim(this,g_context,stripIndentation(g_token->verb.mid(li)),DocVerbatim::Code,g_isExample,g_exampleName,FALSE,lang));
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"code section ended without end marker"); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"code section ended without end marker");
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
return retval; return retval;
...@@ -5468,7 +5468,7 @@ int DocPara::handleCommand(const QCString &cmdName) ...@@ -5468,7 +5468,7 @@ int DocPara::handleCommand(const QCString &cmdName)
{ {
doctokenizerYYsetStateHtmlOnly(); doctokenizerYYsetStateHtmlOnly();
retval = doctokenizerYYlex(); retval = doctokenizerYYlex();
m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName)); m_children.append(new DocVerbatim(this,g_context,g_token->verb,DocVerbatim::HtmlOnly,g_isExample,g_exampleName,g_token->name=="block"));
if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker"); if (retval==0) warn_doc_error(g_fileName,doctokenizerYYlineno,"htmlonly section ended without end marker");
doctokenizerYYsetStatePara(); doctokenizerYYsetStatePara();
} }
......
...@@ -436,7 +436,7 @@ class DocVerbatim : public DocNode ...@@ -436,7 +436,7 @@ class DocVerbatim : public DocNode
enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly }; enum Type { Code, HtmlOnly, ManOnly, LatexOnly, RtfOnly, XmlOnly, Verbatim, Dot, Msc, DocbookOnly };
DocVerbatim(DocNode *parent,const QCString &context, DocVerbatim(DocNode *parent,const QCString &context,
const QCString &text, Type t,bool isExample, const QCString &text, Type t,bool isExample,
const QCString &exampleFile,const QCString &lang=QCString()); const QCString &exampleFile,bool isBlock=FALSE,const QCString &lang=QCString());
Kind kind() const { return Kind_Verbatim; } Kind kind() const { return Kind_Verbatim; }
Type type() const { return m_type; } Type type() const { return m_type; }
QCString text() const { return m_text; } QCString text() const { return m_text; }
...@@ -446,6 +446,7 @@ class DocVerbatim : public DocNode ...@@ -446,6 +446,7 @@ class DocVerbatim : public DocNode
QCString exampleFile() const { return m_exampleFile; } QCString exampleFile() const { return m_exampleFile; }
QCString relPath() const { return m_relPath; } QCString relPath() const { return m_relPath; }
QCString language() const { return m_lang; } QCString language() const { return m_lang; }
bool isBlock() const { return m_isBlock; }
private: private:
QCString m_context; QCString m_context;
...@@ -455,6 +456,7 @@ class DocVerbatim : public DocNode ...@@ -455,6 +456,7 @@ class DocVerbatim : public DocNode
QCString m_exampleFile; QCString m_exampleFile;
QCString m_relPath; QCString m_relPath;
QCString m_lang; QCString m_lang;
bool m_isBlock;
}; };
......
...@@ -406,6 +406,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2} ...@@ -406,6 +406,7 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
%x St_CodeOpt %x St_CodeOpt
%x St_XmlCode %x St_XmlCode
%x St_HtmlOnly %x St_HtmlOnly
%x St_HtmlOnlyOption
%x St_ManOnly %x St_ManOnly
%x St_LatexOnly %x St_LatexOnly
%x St_RtfOnly %x St_RtfOnly
...@@ -767,6 +768,14 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2} ...@@ -767,6 +768,14 @@ REFWORD {LABELID}|{REFWORD2}|{REFWORD3}|{LNKWORD2}
<St_Code,St_XmlCode>. { <St_Code,St_XmlCode>. {
g_token->verb+=yytext; g_token->verb+=yytext;
} }
<St_HtmlOnlyOption>" [block]" { // the space is added in commentscan.l
g_token->name="block";
BEGIN(St_HtmlOnly);
}
<St_HtmlOnlyOption>.|\n {
unput(*yytext);
BEGIN(St_HtmlOnly);
}
<St_HtmlOnly>{CMD}"endhtmlonly" { <St_HtmlOnly>{CMD}"endhtmlonly" {
return RetVal_OK; return RetVal_OK;
} }
...@@ -1255,7 +1264,8 @@ void doctokenizerYYsetStateXmlCode() ...@@ -1255,7 +1264,8 @@ void doctokenizerYYsetStateXmlCode()
void doctokenizerYYsetStateHtmlOnly() void doctokenizerYYsetStateHtmlOnly()
{ {
g_token->verb=""; g_token->verb="";
BEGIN(St_HtmlOnly); g_token->name="";
BEGIN(St_HtmlOnlyOption);
} }
void doctokenizerYYsetStateManOnly() void doctokenizerYYsetStateManOnly()
......
...@@ -357,7 +357,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s) ...@@ -357,7 +357,9 @@ void HtmlDocVisitor::visit(DocVerbatim *s)
forceStartParagraph(s); forceStartParagraph(s);
break; break;
case DocVerbatim::HtmlOnly: case DocVerbatim::HtmlOnly:
if (s->isBlock()) forceEndParagraph(s);
m_t << s->text(); m_t << s->text();
if (s->isBlock()) forceStartParagraph(s);
break; break;
case DocVerbatim::ManOnly: case DocVerbatim::ManOnly:
case DocVerbatim::LatexOnly: case DocVerbatim::LatexOnly:
...@@ -1999,7 +2001,7 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n) ...@@ -1999,7 +2001,7 @@ void HtmlDocVisitor::forceEndParagraph(DocNode *n)
//printf("forceEnd first=%d last=%d\n",isFirst,isLast); //printf("forceEnd first=%d last=%d\n",isFirst,isLast);
if (isFirst && isLast) return; if (isFirst && isLast) return;
m_t << "</p>" << endl; m_t << "</p>";
} }
} }
......
...@@ -175,7 +175,7 @@ void LatexDocVisitor::visit(DocURL *u) ...@@ -175,7 +175,7 @@ void LatexDocVisitor::visit(DocURL *u)
void LatexDocVisitor::visit(DocLineBreak *) void LatexDocVisitor::visit(DocLineBreak *)
{ {
if (m_hide) return; if (m_hide) return;
m_t << "\\newline\n"; m_t << "~\\newline\n";
} }
void LatexDocVisitor::visit(DocHorRuler *) void LatexDocVisitor::visit(DocHorRuler *)
......
...@@ -6,6 +6,8 @@ ...@@ -6,6 +6,8 @@
<detaileddescription> <detaileddescription>
<para>Text. <htmlonly> <para>Text. <htmlonly>
HTML HTML
</htmlonly> <htmlonly>
HTML with block
</htmlonly> <rtfonly> </htmlonly> <rtfonly>
RTF RTF
</rtfonly> <manonly> </rtfonly> <manonly>
......
...@@ -5,6 +5,9 @@ ...@@ -5,6 +5,9 @@
* \htmlonly * \htmlonly
* HTML * HTML
* \endhtmlonly * \endhtmlonly
* \htmlonly[block]
* HTML with block
* \endhtmlonly
* \rtfonly * \rtfonly
* RTF * RTF
* \endrtfonly * \endrtfonly
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment