From 0e080f486f67008ef427c834f6ab6ebca7578124 Mon Sep 17 00:00:00 2001 From: Dimitri van Heesch Date: Tue, 11 Feb 2014 21:22:28 +0100 Subject: Improved handling of percent symbol --- src/docbookvisitor.cpp | 2 +- src/htmldocvisitor.cpp | 2 +- src/htmlentity.cpp | 30 ++++++++++++++++++++++++------ src/htmlentity.h | 4 ++-- src/latexdocvisitor.cpp | 2 +- src/perlmodgen.cpp | 2 +- src/printdocvisitor.h | 13 +++---------- src/rtfdocvisitor.cpp | 2 +- src/textdocvisitor.cpp | 2 +- src/xmldocvisitor.cpp | 2 +- 10 files changed, 36 insertions(+), 25 deletions(-) diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp index c748162..526ed49 100644 --- a/src/docbookvisitor.cpp +++ b/src/docbookvisitor.cpp @@ -81,7 +81,7 @@ void DocbookDocVisitor::visit(DocSymbol *s) } else { - err("DocBook: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("DocBook: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp index 647007b..f6878b9 100644 --- a/src/htmldocvisitor.cpp +++ b/src/htmldocvisitor.cpp @@ -190,7 +190,7 @@ void HtmlDocVisitor::visit(DocSymbol *s) } else { - err("HTML: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("HTML: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } diff --git a/src/htmlentity.cpp b/src/htmlentity.cpp index 7f07b57..c7ff1da 100644 --- a/src/htmlentity.cpp +++ b/src/htmlentity.cpp @@ -354,23 +354,41 @@ void HtmlEntityMapper::deleteInstance() /*! @brief Access routine to the UTF8 code of the HTML entity * * @param symb Code of the requested HTML entity + * @param useInPrintf If TRUE the result will be escaped such that it can be + * used in a printf string pattern * @return the UTF8 code of the HTML entity, * in case the UTF code is unknown \c NULL is returned. */ -const char *HtmlEntityMapper::utf8(DocSymbol::SymType symb) const +const char *HtmlEntityMapper::utf8(DocSymbol::SymType symb,bool useInPrintf) const { - return g_htmlEntities[symb].UTF8; + if (useInPrintf && symb==DocSymbol::Sym_Percent) + { + return "%%"; // escape for printf + } + else + { + return g_htmlEntities[symb].UTF8; + } } /*! @brief Access routine to the html code of the HTML entity * - * @param symb Code of the requested HTML entity - * @return the html of the HTML entity, + * @param symb Code of the requested HTML entity + * @param useInPrintf If TRUE the result will be escaped such that it can be + * used in a printf string pattern + * @return the html representation of the HTML entity, * in case the html code is unknown \c NULL is returned. */ -const char *HtmlEntityMapper::html(DocSymbol::SymType symb) const +const char *HtmlEntityMapper::html(DocSymbol::SymType symb,bool useInPrintf) const { - return g_htmlEntities[symb].html; + if (useInPrintf && symb==DocSymbol::Sym_Percent) + { + return "%%"; // escape for printf + } + else + { + return g_htmlEntities[symb].html; + } } /*! @brief Access routine to the XML code of the HTML entity diff --git a/src/htmlentity.h b/src/htmlentity.h index b92eb1d..9cebeb3 100644 --- a/src/htmlentity.h +++ b/src/htmlentity.h @@ -27,8 +27,8 @@ class HtmlEntityMapper static HtmlEntityMapper *instance(); static void deleteInstance(); DocSymbol::SymType name2sym(const QCString &symName) const; - const char *utf8(DocSymbol::SymType symb) const; - const char *html(DocSymbol::SymType symb) const; + const char *utf8(DocSymbol::SymType symb,bool useInPrintf=FALSE) const; + const char *html(DocSymbol::SymType symb,bool useInPrintf=FALSE) const; const char *xml(DocSymbol::SymType symb) const; const char *docbook(DocSymbol::SymType symb) const; const char *latex(DocSymbol::SymType symb) const; diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp index c2c884b..aefcac3 100644 --- a/src/latexdocvisitor.cpp +++ b/src/latexdocvisitor.cpp @@ -154,7 +154,7 @@ void LatexDocVisitor::visit(DocSymbol *s) } else { - err("LaTeX: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("LaTeX: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp index 276313c..7fa0153 100644 --- a/src/perlmodgen.cpp +++ b/src/perlmodgen.cpp @@ -606,7 +606,7 @@ void PerlModDocVisitor::visit(DocSymbol *sy) } else { - err("perl: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(sy->symbol())); + err("perl: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(sy->symbol(),TRUE)); } } diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h index 7a077e9..ee4104e 100644 --- a/src/printdocvisitor.h +++ b/src/printdocvisitor.h @@ -57,21 +57,14 @@ class PrintDocVisitor : public DocVisitor void visit(DocSymbol *s) { indent_leaf(); - const char *res = HtmlEntityMapper::instance()->utf8(s->symbol()); + const char *res = HtmlEntityMapper::instance()->utf8(s->symbol(),TRUE); if (res) { - if (qstrcmp(res,"%")==0) - { - printf("%%"); - } - else - { - printf("%s",res); - } + printf("%s",res); } else { - printf("print: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + printf("print: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } void visit(DocURL *u) diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp index 2b60d5b..05c8247 100644 --- a/src/rtfdocvisitor.cpp +++ b/src/rtfdocvisitor.cpp @@ -129,7 +129,7 @@ void RTFDocVisitor::visit(DocSymbol *s) } else { - err("RTF: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("RTF: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } m_lastIsPara=FALSE; } diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp index a313b0a..6f3151f 100644 --- a/src/textdocvisitor.cpp +++ b/src/textdocvisitor.cpp @@ -33,7 +33,7 @@ void TextDocVisitor::visit(DocSymbol *s) } else { - err("text: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("text: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp index 27c8bb9..b906fc1 100644 --- a/src/xmldocvisitor.cpp +++ b/src/xmldocvisitor.cpp @@ -78,7 +78,7 @@ void XmlDocVisitor::visit(DocSymbol *s) } else { - err("XML: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol())); + err("XML: non supported HTML-entity found: %s\n",HtmlEntityMapper::instance()->html(s->symbol(),TRUE)); } } -- cgit v0.12