From 1bd64ac0e925ba2ff069ec64c026ea3c32f85600 Mon Sep 17 00:00:00 2001
From: albert-github <albert.tests@gmail.com>
Date: Sat, 8 Feb 2014 20:46:56 +0100
Subject: Recognize all HTML4 special character entities

In doxygen a limited number of HTML4 special character entities are recognized, with this patch the full list of HTML4 special character entities (see http://www.w3.org/TR/html4/sgml/entities.html) is supported (as far as they can be represented in the output format).

- doxygen_manual.tex
- latexgen.cpp
  Added wasysym package to support per thousand sign (perthousand command from textcomp didn't work properly)
  Added option for textcomp package so currency symbol would work properly

- htmlcmds.doc
  Adjusted documentation, listing all entities

- compound.xsd
- xmlgen.cpp
  Removed in xsd file all references for special HTML4 character entities and placed placeholder so doxygen (in xmlgen.cpp)can automatically add the right element names.

- util.cpp
- util.h
  Define all entities with their representation for all output formats.
  Define access routines to the different representations
  Mapping (for recognition of the entities) based on running through the list of available entities, after validation of the order of the entities. A few entities contain now besides letters also numbers at the end.

- docparser.h
  Define symbols for all entities as well as a helper struct and enum. The member m_letter is not used anymore and thus removed.
  All existing symbols were renamed so no confusion (i.e. errors when forgetting to rename some symbols) can occur.
  Obsolete references to letter removed, all letters with accents etc. are explicitly defined and not through the generic accent name plus an extra letter.

- docparser.cpp
  Adjust used symbols to their new names.
  Remove references to letter (as used for accents etc.)
  Replace list of explicitly supported entities with call to symbol code access routine.

- docbookvisitor.cpp
- htmldocvisitor.cpp
- latexdocvisitor.cpp
- mandocvisitor.cpp
- perlmodgen.cpp
- printdocvisitor.h
- rtfdocvisitor.cpp
- textdocvisitor.cpp
- xmldocvisitor.cpp
  Replace list of explicitly supported entities with call to access routine and use returned value to output.
---
 doc/doxygen_manual.tex  |   2 +
 doc/htmlcmds.doc        | 362 ++++++++++++++++++++++--------
 src/compound.xsd        |  93 +-------
 src/docbookvisitor.cpp  | 109 +--------
 src/docparser.cpp       | 254 +++++----------------
 src/docparser.h         |  92 ++++++--
 src/htmldocvisitor.cpp  | 112 +---------
 src/latexdocvisitor.cpp | 148 ++----------
 src/latexgen.cpp        |   2 +
 src/mandocvisitor.cpp   |  43 +---
 src/perlmodgen.cpp      | 191 +++++-----------
 src/printdocvisitor.h   | 106 +--------
 src/rtfdocvisitor.cpp   | 198 +---------------
 src/textdocvisitor.cpp  | 111 +--------
 src/util.cpp            | 582 +++++++++++++++++++++++++++++++++++++-----------
 src/util.h              |  15 ++
 src/xmldocvisitor.cpp   | 110 +--------
 src/xmlgen.cpp          |  43 +++-
 18 files changed, 1036 insertions(+), 1537 deletions(-)

diff --git a/doc/doxygen_manual.tex b/doc/doxygen_manual.tex
index 58615ed..8c4af34 100644
--- a/doc/doxygen_manual.tex
+++ b/doc/doxygen_manual.tex
@@ -24,7 +24,9 @@
 \usepackage{color}
 \usepackage{ifthen}
 \usepackage[table]{xcolor}
+\PassOptionsToPackage{warn}{textcomp}
 \usepackage{textcomp}
+\usepackage[nointegrals]{wasysym}
 \usepackage{alltt}
 \usepackage{ifpdf}
 \ifpdf
diff --git a/doc/htmlcmds.doc b/doc/htmlcmds.doc
index 7038e99..96abe0a 100644
--- a/doc/htmlcmds.doc
+++ b/doc/htmlcmds.doc
@@ -109,106 +109,270 @@ of a HTML tag are passed on to the HTML output only
 <li><tt>\</VAR\></tt>  Ends a <tt>\<VAR\></tt> section.
 </ul>
 
-The special HTML character entities that are recognized by Doxygen:
-
+The special HTML4 character entities.<br>
+The list of entities with their descriptions has been taken from <a href="http://www.w3.org/TR/html4/sgml/entities.html">Character entity references in HTML 4</a>.
+( Portions &copy; International Organization for Standardization 1986
+  Permission to copy in any form is granted for use with
+  conforming SGML systems and applications as defined in
+  ISO 8879, provided this notice is included in all copies.)
+<ul>
+<li><tt>\&nbsp;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            no-break space = non-breaking space: &nbsp;
+<li><tt>\&iexcl;</tt>`&nbsp;&nbsp;&nbsp;`                 inverted exclamation mark: &iexcl;
+<li><tt>\&cent;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            cent sign: &cent;
+<li><tt>\&pound;</tt>`&nbsp;&nbsp;&nbsp;`                 pound sign: &pound;
+<li><tt>\&curren;</tt>`&nbsp;&nbsp;`                      currency sign: &curren;
+<li><tt>\&yen;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       yen sign = yuan sign: &yen;
+<li><tt>\&brvbar;</tt>`&nbsp;&nbsp;`                      broken bar = broken vertical bar: &brvbar;
+<li><tt>\&sect;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            section sign: &sect;
+<li><tt>\&uml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       diaeresis = spacing diaeresis: &uml;
+<li><tt>\&copy;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            copyright sign: &copy;
+<li><tt>\&ordf;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            feminine ordinal indicator: &ordf;
+<li><tt>\&laquo;</tt>`&nbsp;&nbsp;&nbsp;`                 left-pointing double angle quotation mark = left pointing guillemet: &laquo;
+<li><tt>\&not;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       not sign: &not;
+<li><tt>\&shy;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       soft hyphen = discretionary hyphen: &shy;
+<li><tt>\&reg;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       registered sign = registered trade mark sign: &reg;
+<li><tt>\&macr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            macron = spacing macron = overline = APL overbar: &macr;
+<li><tt>\&deg;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       degree sign: &deg;
+<li><tt>\&plusmn;</tt>`&nbsp;&nbsp;`                      plus-minus sign = plus-or-minus sign: &plusmn;
+<li><tt>\&sup2;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            superscript two = superscript digit two = squared: &sup2;
+<li><tt>\&sup3;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            superscript three = superscript digit three = cubed: &sup3;
+<li><tt>\&acute;</tt>`&nbsp;&nbsp;&nbsp;`                 acute accent = spacing acute: &acute;
+<li><tt>\&micro;</tt>`&nbsp;&nbsp;&nbsp;`                 micro sign: &micro;
+<li><tt>\&para;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            pilcrow sign = paragraph sign: &para;
+<li><tt>\&middot;</tt>`&nbsp;&nbsp;`                      middle dot = Georgian comma = Greek middle dot: &middot;
+<li><tt>\&cedil;</tt>`&nbsp;&nbsp;&nbsp;`                 cedilla = spacing cedilla: &cedil;
+<li><tt>\&sup1;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            superscript one = superscript digit one: &sup1;
+<li><tt>\&ordm;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            masculine ordinal indicator: &ordm;
+<li><tt>\&raquo;</tt>`&nbsp;&nbsp;&nbsp;`                 right-pointing double angle quotation mark = right pointing guillemet: &raquo;
+<li><tt>\&frac14;</tt>`&nbsp;&nbsp;`                      vulgar fraction one quarter = fraction one quarter: &frac14;
+<li><tt>\&frac12;</tt>`&nbsp;&nbsp;`                      vulgar fraction one half = fraction one half: &frac12;
+<li><tt>\&frac34;</tt>`&nbsp;&nbsp;`                      vulgar fraction three quarters = fraction three quarters: &frac34;
+<li><tt>\&iquest;</tt>`&nbsp;&nbsp;`                      inverted question mark = turned question mark: &iquest;
+<li><tt>\&Agrave;</tt>`&nbsp;&nbsp;`                      latin capital letter A with grave = latin capital letter A grave: &Agrave;
+<li><tt>\&Aacute;</tt>`&nbsp;&nbsp;`                      latin capital letter A with acute: &Aacute;
+<li><tt>\&Acirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter A with circumflex: &Acirc;
+<li><tt>\&Atilde;</tt>`&nbsp;&nbsp;`                      latin capital letter A with tilde: &Atilde;
+<li><tt>\&Auml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter A with diaeresis: &Auml;
+<li><tt>\&Aring;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter A with ring above = latin capital letter A ring: &Aring;
+<li><tt>\&AElig;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter AE = latin capital ligature AE: &AElig;
+<li><tt>\&Ccedil;</tt>`&nbsp;&nbsp;`                      latin capital letter C with cedilla: &Ccedil;
+<li><tt>\&Egrave;</tt>`&nbsp;&nbsp;`                      latin capital letter E with grave: &Egrave;
+<li><tt>\&Eacute;</tt>`&nbsp;&nbsp;`                      latin capital letter E with acute: &Eacute;
+<li><tt>\&Ecirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter E with circumflex: &Ecirc;
+<li><tt>\&Euml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter E with diaeresis: &Euml;
+<li><tt>\&Igrave;</tt>`&nbsp;&nbsp;`                      latin capital letter I with grave: &Igrave;
+<li><tt>\&Iacute;</tt>`&nbsp;&nbsp;`                      latin capital letter I with acute: &Iacute;
+<li><tt>\&Icirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter I with circumflex: &Icirc;
+<li><tt>\&Iuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter I with diaeresis: &Iuml;
+<li><tt>\&ETH;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       latin capital letter ETH: &ETH;
+<li><tt>\&Ntilde;</tt>`&nbsp;&nbsp;`                      latin capital letter N with tilde: &Ntilde;
+<li><tt>\&Ograve;</tt>`&nbsp;&nbsp;`                      latin capital letter O with grave: &Ograve;
+<li><tt>\&Oacute;</tt>`&nbsp;&nbsp;`                      latin capital letter O with acute: &Oacute;
+<li><tt>\&Ocirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter O with circumflex: &Ocirc;
+<li><tt>\&Otilde;</tt>`&nbsp;&nbsp;`                      latin capital letter O with tilde: &Otilde;
+<li><tt>\&Ouml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter O with diaeresis: &Ouml;
+<li><tt>\&times;</tt>`&nbsp;&nbsp;&nbsp;`                 multiplication sign: &times;
+<li><tt>\&Oslash;</tt>`&nbsp;&nbsp;`                      latin capital letter O with stroke = latin capital letter O slash: &Oslash;
+<li><tt>\&Ugrave;</tt>`&nbsp;&nbsp;`                      latin capital letter U with grave: &Ugrave;
+<li><tt>\&Uacute;</tt>`&nbsp;&nbsp;`                      latin capital letter U with acute: &Uacute;
+<li><tt>\&Ucirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter U with circumflex: &Ucirc;
+<li><tt>\&Uuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter U with diaeresis: &Uuml;
+<li><tt>\&Yacute;</tt>`&nbsp;&nbsp;`                      latin capital letter Y with acute: &Yacute;
+<li><tt>\&THORN;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital letter THORN: &THORN;
+<li><tt>\&szlig;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter sharp s = ess-zed: &szlig;
+<li><tt>\&agrave;</tt>`&nbsp;&nbsp;`                      latin small letter a with grave = latin small letter a grave: &agrave;
+<li><tt>\&aacute;</tt>`&nbsp;&nbsp;`                      latin small letter a with acute: &aacute;
+<li><tt>\&acirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter a with circumflex: &acirc;
+<li><tt>\&atilde;</tt>`&nbsp;&nbsp;`                      latin small letter a with tilde: &atilde;
+<li><tt>\&auml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter a with diaeresis: &auml;
+<li><tt>\&aring;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter a with ring above = latin small letter a ring: &aring;
+<li><tt>\&aelig;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter ae = latin small ligature ae: &aelig;
+<li><tt>\&ccedil;</tt>`&nbsp;&nbsp;`                      latin small letter c with cedilla: &ccedil;
+<li><tt>\&egrave;</tt>`&nbsp;&nbsp;`                      latin small letter e with grave: &egrave;
+<li><tt>\&eacute;</tt>`&nbsp;&nbsp;`                      latin small letter e with acute: &eacute;
+<li><tt>\&ecirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter e with circumflex: &ecirc;
+<li><tt>\&euml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter e with diaeresis: &euml;
+<li><tt>\&igrave;</tt>`&nbsp;&nbsp;`                      latin small letter i with grave: &igrave;
+<li><tt>\&iacute;</tt>`&nbsp;&nbsp;`                      latin small letter i with acute: &iacute;
+<li><tt>\&icirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter i with circumflex: &icirc;
+<li><tt>\&iuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter i with diaeresis: &iuml;
+<li><tt>\&eth;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       latin small letter eth: &eth;
+<li><tt>\&ntilde;</tt>`&nbsp;&nbsp;`                      latin small letter n with tilde: &ntilde;
+<li><tt>\&ograve;</tt>`&nbsp;&nbsp;`                      latin small letter o with grave: &ograve;
+<li><tt>\&oacute;</tt>`&nbsp;&nbsp;`                      latin small letter o with acute: &oacute;
+<li><tt>\&ocirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter o with circumflex: &ocirc;
+<li><tt>\&otilde;</tt>`&nbsp;&nbsp;`                      latin small letter o with tilde: &otilde;
+<li><tt>\&ouml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter o with diaeresis: &ouml;
+<li><tt>\&divide;</tt>`&nbsp;&nbsp;`                      division sign: &divide;
+<li><tt>\&oslash;</tt>`&nbsp;&nbsp;`                      latin small letter o with stroke, = latin small letter o slash: &oslash;
+<li><tt>\&ugrave;</tt>`&nbsp;&nbsp;`                      latin small letter u with grave: &ugrave;
+<li><tt>\&uacute;</tt>`&nbsp;&nbsp;`                      latin small letter u with acute: &uacute;
+<li><tt>\&ucirc;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter u with circumflex: &ucirc;
+<li><tt>\&uuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter u with diaeresis: &uuml;
+<li><tt>\&yacute;</tt>`&nbsp;&nbsp;`                      latin small letter y with acute: &yacute;
+<li><tt>\&thorn;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small letter thorn: &thorn;
+<li><tt>\&yuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small letter y with diaeresis: &yuml;
+<li><tt>\&fnof;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin small f with hook = function = florin: &fnof;
+<li><tt>\&Alpha;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter alpha: &Alpha;
+<li><tt>\&Beta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek capital letter beta: &Beta;
+<li><tt>\&Gamma;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter gamma: &Gamma;
+<li><tt>\&Delta;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter delta: &Delta;
+<li><tt>\&Epsilon;</tt>`&nbsp;`                           greek capital letter epsilon: &Epsilon;
+<li><tt>\&Zeta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek capital letter zeta: &Zeta;
+<li><tt>\&Eta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter eta: &Eta;
+<li><tt>\&Theta;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter theta: &Theta;
+<li><tt>\&Iota;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek capital letter iota: &Iota;
+<li><tt>\&Kappa;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter kappa: &Kappa;
+<li><tt>\&Lambda;</tt>`&nbsp;&nbsp;`                      greek capital letter lambda: &Lambda;
+<li><tt>\&Mu;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek capital letter mu: &Mu;
+<li><tt>\&Nu;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek capital letter nu: &Nu;
+<li><tt>\&Xi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek capital letter xi: &Xi;
+<li><tt>\&Omicron;</tt>`&nbsp;`                           greek capital letter omicron: &Omicron;
+<li><tt>\&Pi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek capital letter pi: &Pi;
+<li><tt>\&Rho;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter rho: &Rho;
+<li><tt>\&Sigma;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter sigma: &Sigma;
+<li><tt>\&Tau;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter tau: &Tau;
+<li><tt>\&Upsilon;</tt>`&nbsp;`                           greek capital letter upsilon: &Upsilon;
+<li><tt>\&Phi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter phi: &Phi;
+<li><tt>\&Chi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter chi: &Chi;
+<li><tt>\&Psi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek capital letter psi: &Psi;
+<li><tt>\&Omega;</tt>`&nbsp;&nbsp;&nbsp;`                 greek capital letter omega: &Omega;
+<li><tt>\&alpha;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter alpha: &alpha;
+<li><tt>\&beta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek small letter beta: &beta;
+<li><tt>\&gamma;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter gamma: &gamma;
+<li><tt>\&delta;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter delta: &delta;
+<li><tt>\&epsilon;</tt>`&nbsp;`                           greek small letter epsilon: &epsilon;
+<li><tt>\&zeta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek small letter zeta: &zeta;
+<li><tt>\&eta;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter eta: &eta;
+<li><tt>\&theta;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter theta: &theta;
+<li><tt>\&iota;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            greek small letter iota: &iota;
+<li><tt>\&kappa;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter kappa: &kappa;
+<li><tt>\&lambda;</tt>`&nbsp;&nbsp;`                      greek small letter lambda: &lambda;
+<li><tt>\&mu;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek small letter mu: &mu;
+<li><tt>\&nu;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek small letter nu: &nu;
+<li><tt>\&xi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek small letter xi: &xi;
+<li><tt>\&omicron;</tt>`&nbsp;`                           greek small letter omicron: &omicron;
+<li><tt>\&pi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greek small letter pi: &pi;
+<li><tt>\&rho;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter rho: &rho;
+<li><tt>\&sigmaf;</tt>`&nbsp;&nbsp;`                      greek small letter final sigma: &sigmaf;
+<li><tt>\&sigma;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter sigma: &sigma;
+<li><tt>\&tau;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter tau: &tau;
+<li><tt>\&upsilon;</tt>`&nbsp;`                           greek small letter upsilon: &upsilon;
+<li><tt>\&phi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter phi: &phi;
+<li><tt>\&chi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter chi: &chi;
+<li><tt>\&psi;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek small letter psi: &psi;
+<li><tt>\&omega;</tt>`&nbsp;&nbsp;&nbsp;`                 greek small letter omega: &omega;
+<li><tt>\&thetasym;</tt>                                  greek small letter theta symbol: &thetasym;
+<li><tt>\&upsih;</tt>`&nbsp;&nbsp;&nbsp;`                 greek upsilon with hook symbol: &upsih;
+<li><tt>\&piv;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       greek pi symbol: &piv;
+<li><tt>\&bull;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            bullet = black small circle: &bull;
+<li><tt>\&hellip;</tt>`&nbsp;&nbsp;`                      horizontal ellipsis = three dot leader: &hellip;
+<li><tt>\&prime;</tt>`&nbsp;&nbsp;&nbsp;`                 prime = minutes = feet: &prime;
+<li><tt>\&Prime;</tt>`&nbsp;&nbsp;&nbsp;`                 double prime = seconds = inches: &Prime;
+<li><tt>\&oline;</tt>`&nbsp;&nbsp;&nbsp;`                 overline = spacing overscore: &oline;
+<li><tt>\&frasl;</tt>`&nbsp;&nbsp;&nbsp;`                 fraction slash: &frasl;
+<li><tt>\&weierp;</tt>`&nbsp;&nbsp;`                      script capital P = power set = Weierstrass p: &weierp;
+<li><tt>\&image;</tt>`&nbsp;&nbsp;&nbsp;`                 blackletter capital I = imaginary part: &image;
+<li><tt>\&real;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            blackletter capital R = real part symbol: &real;
+<li><tt>\&trade;</tt>`&nbsp;&nbsp;&nbsp;`                 trade mark sign: &trade;
+<li><tt>\&alefsym;</tt>`&nbsp;`                           alef symbol = first transfinite cardinal: &alefsym;
+<li><tt>\&larr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            leftwards arrow: &larr;
+<li><tt>\&uarr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            upwards arrow: &uarr;
+<li><tt>\&rarr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            rightwards arrow: &rarr;
+<li><tt>\&darr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            downwards arrow: &darr;
+<li><tt>\&harr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            left right arrow: &harr;
+<li><tt>\&crarr;</tt>`&nbsp;&nbsp;&nbsp;`                 downwards arrow with corner leftwards = carriage return: &crarr;
+<li><tt>\&lArr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            leftwards double arrow: &lArr;
+<li><tt>\&uArr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            upwards double arrow: &uArr;
+<li><tt>\&rArr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            rightwards double arrow: &rArr;
+<li><tt>\&dArr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            downwards double arrow: &dArr;
+<li><tt>\&hArr;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            left right double arrow: &hArr;
+<li><tt>\&forall;</tt>`&nbsp;&nbsp;`                      for all: &forall;
+<li><tt>\&part;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            partial differential: &part;
+<li><tt>\&exist;</tt>`&nbsp;&nbsp;&nbsp;`                 there exists: &exist;
+<li><tt>\&empty;</tt>`&nbsp;&nbsp;&nbsp;`                 empty set = null set = diameter: &empty;
+<li><tt>\&nabla;</tt>`&nbsp;&nbsp;&nbsp;`                 nabla = backward difference: &nabla;
+<li><tt>\&isin;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            element of: &isin;
+<li><tt>\&notin;</tt>`&nbsp;&nbsp;&nbsp;`                 not an element of: &notin;
+<li><tt>\&ni;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  contains as member: &ni;
+<li><tt>\&prod;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            n-ary product = product sign: &prod;
+<li><tt>\&sum;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       n-ary sumation: &sum;
+<li><tt>\&minus;</tt>`&nbsp;&nbsp;&nbsp;`                 minus sign: &minus;
+<li><tt>\&lowast;</tt>`&nbsp;&nbsp;`                      asterisk operator: &lowast;
+<li><tt>\&radic;</tt>`&nbsp;&nbsp;&nbsp;`                 square root = radical sign: &radic;
+<li><tt>\&prop;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            proportional to: &prop;
+<li><tt>\&infin;</tt>`&nbsp;&nbsp;&nbsp;`                 infinity: &infin;
+<li><tt>\&ang;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       angle: &ang;
+<li><tt>\&and;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       logical and = wedge: &and;
+<li><tt>\&or;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  logical or = vee: &or;
+<li><tt>\&cap;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       intersection = cap: &cap;
+<li><tt>\&cup;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       union = cup: &cup;
+<li><tt>\&int;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       integral: &int;
+<li><tt>\&there4;</tt>`&nbsp;&nbsp;`                      therefore: &there4;
+<li><tt>\&sim;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       tilde operator = varies with = similar to: &sim;
+<li><tt>\&cong;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            approximately equal to: &cong;
+<li><tt>\&asymp;</tt>`&nbsp;&nbsp;&nbsp;`                 almost equal to = asymptotic to: &asymp;
+<li><tt>\&ne;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  not equal to: &ne;
+<li><tt>\&equiv;</tt>`&nbsp;&nbsp;&nbsp;`                 identical to: &equiv;
+<li><tt>\&le;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  less-than or equal to: &le;
+<li><tt>\&ge;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greater-than or equal to: &ge;
+<li><tt>\&sub;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       subset of: &sub;
+<li><tt>\&sup;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       superset of: &sup;
+<li><tt>\&nsub;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            not a subset of: &nsub;
+<li><tt>\&sube;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            subset of or equal to: &sube;
+<li><tt>\&supe;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            superset of or equal to: &supe;
+<li><tt>\&oplus;</tt>`&nbsp;&nbsp;&nbsp;`                 circled plus = direct sum: &oplus;
+<li><tt>\&otimes;</tt>`&nbsp;&nbsp;`                      circled times = vector product: &otimes;
+<li><tt>\&perp;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            up tack = orthogonal to = perpendicular: &perp;
+<li><tt>\&sdot;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            dot operator: &sdot;
+<li><tt>\&lceil;</tt>`&nbsp;&nbsp;&nbsp;`                 left ceiling = apl upstile: &lceil;
+<li><tt>\&rceil;</tt>`&nbsp;&nbsp;&nbsp;`                 right ceiling: &rceil;
+<li><tt>\&lfloor;</tt>`&nbsp;&nbsp;`                      left floor = apl downstile: &lfloor;
+<li><tt>\&rfloor;</tt>`&nbsp;&nbsp;`                      right floor: &rfloor;
+<li><tt>\&lang;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            left-pointing angle bracket = bra: &lang;
+<li><tt>\&rang;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            right-pointing angle bracket = ket: &rang;
+<li><tt>\&loz;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       lozenge: &loz;
+<li><tt>\&spades;</tt>`&nbsp;&nbsp;`                      black spade suit: &spades;
+<li><tt>\&clubs;</tt>`&nbsp;&nbsp;&nbsp;`                 black club suit = shamrock: &clubs;
+<li><tt>\&hearts;</tt>`&nbsp;&nbsp;`                      black heart suit = valentine: &hearts;
+<li><tt>\&diams;</tt>`&nbsp;&nbsp;&nbsp;`                 black diamond suit: &diams;
+<li><tt>\&quot;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            quotation mark = APL quote: &quot;
+<li><tt>\&amp;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       ampersand: &amp;
+<li><tt>\&lt;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  less-than sign: &lt;
+<li><tt>\&gt;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  greater-than sign: &gt;
+<li><tt>\&OElig;</tt>`&nbsp;&nbsp;&nbsp;`                 latin capital ligature OE: &OElig;
+<li><tt>\&oelig;</tt>`&nbsp;&nbsp;&nbsp;`                 latin small ligature oe: &oelig;
+<li><tt>\&Scaron;</tt>`&nbsp;&nbsp;`                      latin capital letter S with caron: &Scaron;
+<li><tt>\&scaron;</tt>`&nbsp;&nbsp;`                      latin small letter s with caron: &scaron;
+<li><tt>\&Yuml;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            latin capital letter Y with diaeresis: &Yuml;
+<li><tt>\&circ;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            modifier letter circumflex accent: &circ;
+<li><tt>\&tilde;</tt>`&nbsp;&nbsp;&nbsp;`                 small tilde: &tilde;
+<li><tt>\&ensp;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            en space: &ensp;
+<li><tt>\&emsp;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            em space: &emsp;
+<li><tt>\&thinsp;</tt>`&nbsp;&nbsp;`                      thin space: &thinsp;
+<li><tt>\&zwnj;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            zero width non-joiner: &zwnj;
+<li><tt>\&zwj;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       zero width joiner: &zwj;
+<li><tt>\&lrm;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       left-to-right mark: &lrm;
+<li><tt>\&rlm;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`       right-to-left mark: &rlm;
+<li><tt>\&ndash;</tt>`&nbsp;&nbsp;&nbsp;`                 en dash: &ndash;
+<li><tt>\&mdash;</tt>`&nbsp;&nbsp;&nbsp;`                 em dash: &mdash;
+<li><tt>\&lsquo;</tt>`&nbsp;&nbsp;&nbsp;`                 left single quotation mark: &lsquo;
+<li><tt>\&rsquo;</tt>`&nbsp;&nbsp;&nbsp;`                 right single quotation mark: &rsquo;
+<li><tt>\&sbquo;</tt>`&nbsp;&nbsp;&nbsp;`                 single low-9 quotation mark: &sbquo;
+<li><tt>\&ldquo;</tt>`&nbsp;&nbsp;&nbsp;`                 left double quotation mark: &ldquo;
+<li><tt>\&rdquo;</tt>`&nbsp;&nbsp;&nbsp;`                 right double quotation mark: &rdquo;
+<li><tt>\&bdquo;</tt>`&nbsp;&nbsp;&nbsp;`                 double low-9 quotation mark: &bdquo;
+<li><tt>\&dagger;</tt>`&nbsp;&nbsp;`                      dagger: &dagger;
+<li><tt>\&Dagger;</tt>`&nbsp;&nbsp;`                      double dagger: &Dagger;
+<li><tt>\&permil;</tt>`&nbsp;&nbsp;`                      per mille sign: &permil;
+<li><tt>\&lsaquo;</tt>`&nbsp;&nbsp;`                      single left-pointing angle quotation mark: &lsaquo;
+<li><tt>\&rsaquo;</tt>`&nbsp;&nbsp;`                      single right-pointing angle quotation mark: &rsaquo;
+<li><tt>\&euro;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;`            euro sign: &euro;
+</ul>
+Doxygen extensions:
 <ul>
-<li><tt>\&copy;</tt> the copyright symbol
-<li><tt>\&trade;</tt> the trade mark symbol
-<li><tt>\&reg;</tt> the registered trade mark symbol
-<li><tt>\&lt;</tt> less-than symbol
-<li><tt>\&gt;</tt> greater-than symbol
-<li><tt>\&amp;</tt> ampersand
-<li><tt>\&apos;</tt> single quotation mark (straight)
-<li><tt>\&quot;</tt> double quotation mark (straight)
-<li><tt>\&lsquo;</tt> left single quotation mark
-<li><tt>\&rsquo;</tt> right single quotation mark
-<li><tt>\&ldquo;</tt> left double quotation mark
-<li><tt>\&rdquo;</tt> right double quotation mark
-<li><tt>\&ndash;</tt> n-dash (for numeric ranges, e.g. 2&ndash;8)
-<li><tt>\&mdash;</tt> m-dash (for parenthetical punctuation &mdash; like this)
-<li><tt>\&?uml;</tt>   where ? is one of {A,E,I,O,U,Y,a,e,i,o,u,y}, 
-       writes a character with a diaeresis accent (like &auml;).
-<li><tt>\&?acute;</tt> where ? is one of {A,E,I,O,U,Y,a,e,i,o,u,y},
-       writes a character with an acute accent (like &aacute;). 
-<li><tt>\&?grave;</tt> where ? is one of {A,E,I,O,U,a,e,i,o,u,y},
-       writes a character with a grave accent (like &agrave;).
-<li><tt>\&?circ;</tt>  where ? is one of {A,E,I,O,U,a,e,i,o,u,y},
-       writes a character with a circumflex accent (like &acirc;).
-<li><tt>\&?tilde;</tt> where ? is one of {A,N,O,a,n,o},
-       writes a character with a tilde accent (like &atilde;).
-<li><tt>\&szlig;</tt> write a sharp s (i.e. &szlig;) to the output.
-<li><tt>\&?cedil;</tt> where ? is one of {c,C},
-       writes a c-cedille (like &ccedil;).
-<li><tt>\&?ring;</tt> where ? is one of {a,A},
-       writes an <tt>a</tt> with a ring (like &aring;).
-<li><tt>\&nbsp;</tt> a non breakable space.
-<li><tt>\&Gamma;</tt> Greek letter Gamma &Gamma;.
-<li><tt>\&Delta;</tt> Greek letter Delta &Delta;.
-<li><tt>\&Theta;</tt> Greek letter Theta &Theta;.
-<li><tt>\&Lambda;</tt> Greek letter Lambda &Lambda;.
-<li><tt>\&Xi;</tt> Greek letter Xi &Xi;.
-<li><tt>\&Pi;</tt> Greek letter Pi &Pi;.
-<li><tt>\&Sigma;</tt> Greek letter Sigma &Sigma;.
-<li><tt>\&Upsilon;</tt> Greek letter Upsilon &Upsilon;.
-<li><tt>\&Phi;</tt> Greek letter Phi &Phi;.
-<li><tt>\&Psi;</tt> Greek letter Psi &Psi;.
-<li><tt>\&Omega;</tt> Greek letter Omega &Omega;.
-<li><tt>\&alpha;</tt> Greek letter alpha &alpha;.
-<li><tt>\&beta;</tt> Greek letter beta &beta;.
-<li><tt>\&gamma;</tt> Greek letter gamma &gamma;.
-<li><tt>\&delta;</tt> Greek letter delta &delta;.
-<li><tt>\&epsilon;</tt> Greek letter epsilon &epsilon;.
-<li><tt>\&zeta;</tt> Greek letter zeta &zeta;.
-<li><tt>\&eta;</tt> Greek letter eta &eta;.
-<li><tt>\&theta;</tt> Greek letter theta &theta;.
-<li><tt>\&iota;</tt> Greek letter iota &iota;.
-<li><tt>\&kappa;</tt> Greek letter kappa &kappa;.
-<li><tt>\&lambda;</tt> Greek letter lambda &lambda;.
-<li><tt>\&mu;</tt> Greek letter mu &mu;.
-<li><tt>\&nu;</tt> Greek letter nu &nu;.
-<li><tt>\&xi;</tt> Greek letter xi &xi;.
-<li><tt>\&pi;</tt> Greek letter pi &pi;.
-<li><tt>\&rho;</tt> Greek letter rho &rho;.
-<li><tt>\&sigma;</tt> Greek letter sigma &sigma;.
-<li><tt>\&tau;</tt> Greek letter tau &tau;.
-<li><tt>\&upsilon;</tt> Greek letter upsilon &upsilon;.
-<li><tt>\&phi;</tt> Greek letter phi &phi;.
-<li><tt>\&chi;</tt> Greek letter chi &chi;.
-<li><tt>\&psi;</tt> Greek letter psi &psi;.
-<li><tt>\&omega;</tt> Greek letter omega &omega;.
-<li><tt>\&sigmaf;</tt> Greek final sigma &sigmaf;.
-<li><tt>\&sect;</tt> section sign &sect;.
-<li><tt>\&deg;</tt> degree &deg;.
-<li><tt>\&prime;</tt> prime &prime;.
-<li><tt>\&Prime;</tt> double prime &Prime;.
-<li><tt>\&infin;</tt> infinity &infin;.
-<li><tt>\&empty;</tt> empty set &empty;.
-<li><tt>\&plusmn;</tt> plus or minus &plusmn;.
-<li><tt>\&times;</tt> multiplication sign &times;.
-<li><tt>\&minus;</tt> minus sign &minus;.
-<li><tt>\&sdot;</tt> centered dot &sdot;.
-<li><tt>\&part;</tt> partial derivative &part;.
-<li><tt>\&nabla;</tt> nabla symbol &nabla;.
-<li><tt>\&radic;</tt> square root &radic;.
-<li><tt>\&perp;</tt> perpendicular symbol &perp;.
-<li><tt>\&sum;</tt> sum &sum;.
-<li><tt>\&int;</tt> integral &int;.
-<li><tt>\&prod;</tt> product &prod;.
-<li><tt>\&sim;</tt> similar to &sim;.
-<li><tt>\&asymp;</tt> approximately equal to &asymp;.
-<li><tt>\&ne;</tt> not equal to &ne;.
-<li><tt>\&equiv;</tt> equivalent to &equiv;.
-<li><tt>\&prop;</tt> proportional to &prop;.
-<li><tt>\&le;</tt> less than or equal to &le;.
-<li><tt>\&ge;</tt> greater than or equal to &ge;.
-<li><tt>\&larr;</tt> left arrow &larr;.
-<li><tt>\&rarr;</tt> right arrow &rarr;.
-<li><tt>\&isin;</tt> in the set &isin;.
-<li><tt>\&notin;</tt> not in the set &notin;.
-<li><tt>\&lceil;</tt> left ceiling sign &lceil;.
-<li><tt>\&rceil;</tt> right ceiling sign &rceil;.
-<li><tt>\&lfloor;</tt> left floor sign &lfloor;.
-<li><tt>\&rfloor;</tt> right floor sign &rfloor;.
+<li><tt>\&tm;</tt>`&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;`  trade mark sign: &tm;
+<li><tt>\&apos;</tt>`&nbsp;&nbsp;&nbsp;`            apostrophe: &apos;
 </ul>
 
 Finally, to put invisible comments inside comment blocks, HTML style
diff --git a/src/compound.xsd b/src/compound.xsd
index c1eb0ab..a1c9784 100644
--- a/src/compound.xsd
+++ b/src/compound.xsd
@@ -390,94 +390,7 @@
       <xsd:element name="anchor" type="docAnchorType" />
       <xsd:element name="formula" type="docFormulaType" />
       <xsd:element name="ref" type="docRefTextType" />
-      <xsd:element name="copy" type="docEmptyType" />
-      <xsd:element name="trademark" type="docEmptyType" />
-      <xsd:element name="registered" type="docEmptyType" />
-      <xsd:element name="lsquo" type="docEmptyType" />
-      <xsd:element name="rsquo" type="docEmptyType" />
-      <xsd:element name="ldquo" type="docEmptyType" />
-      <xsd:element name="rdquo" type="docEmptyType" />
-      <xsd:element name="ndash" type="docEmptyType" />
-      <xsd:element name="mdash" type="docEmptyType" />
-      <xsd:element name="umlaut" type="docCharType" />
-      <xsd:element name="acute" type="docCharType" />
-      <xsd:element name="grave" type="docCharType" />
-      <xsd:element name="circ" type="docCharType" />
-      <xsd:element name="slash" type="docCharType" />
-      <xsd:element name="tilde" type="docCharType" />
-      <xsd:element name="cedil" type="docCharType" />
-      <xsd:element name="ring" type="docCharType" />
-      <xsd:element name="szlig" type="docEmptyType" />
-      <xsd:element name="nonbreakablespace" type="docEmptyType" />
-      <xsd:element name="aelig" type="docEmptyType" />
-      <xsd:element name="AElig" type="docEmptyType" />
-      <xsd:element name="Gamma" type="docEmptyType" />
-      <xsd:element name="Delta" type="docEmptyType" />
-      <xsd:element name="Theta" type="docEmptyType" />
-      <xsd:element name="Lambda" type="docEmptyType" />
-      <xsd:element name="Xi" type="docEmptyType" />
-      <xsd:element name="Pi" type="docEmptyType" />
-      <xsd:element name="Sigma" type="docEmptyType" />
-      <xsd:element name="Upsilon" type="docEmptyType" />
-      <xsd:element name="Phi" type="docEmptyType" />
-      <xsd:element name="Psi" type="docEmptyType" />
-      <xsd:element name="Omega" type="docEmptyType" />
-      <xsd:element name="alpha" type="docEmptyType" />
-      <xsd:element name="beta" type="docEmptyType" />
-      <xsd:element name="gamma" type="docEmptyType" />
-      <xsd:element name="delta" type="docEmptyType" />
-      <xsd:element name="epsilon" type="docEmptyType" />
-      <xsd:element name="zeta" type="docEmptyType" />
-      <xsd:element name="eta" type="docEmptyType" />
-      <xsd:element name="theta" type="docEmptyType" />
-      <xsd:element name="iota" type="docEmptyType" />
-      <xsd:element name="kappa" type="docEmptyType" />
-      <xsd:element name="lambda" type="docEmptyType" />
-      <xsd:element name="mu" type="docEmptyType" />
-      <xsd:element name="nu" type="docEmptyType" />
-      <xsd:element name="xi" type="docEmptyType" />
-      <xsd:element name="pi" type="docEmptyType" />
-      <xsd:element name="rho" type="docEmptyType" />
-      <xsd:element name="sigma" type="docEmptyType" />
-      <xsd:element name="tau" type="docEmptyType" />
-      <xsd:element name="upsilon" type="docEmptyType" />
-      <xsd:element name="phi" type="docEmptyType" />
-      <xsd:element name="chi" type="docEmptyType" />
-      <xsd:element name="psi" type="docEmptyType" />
-      <xsd:element name="omega" type="docEmptyType" />
-      <xsd:element name="sigmaf" type="docEmptyType" />
-      <xsd:element name="sect" type="docEmptyType" />
-      <xsd:element name="deg" type="docEmptyType" />
-      <xsd:element name="prime" type="docEmptyType" />
-      <xsd:element name="Prime" type="docEmptyType" />
-      <xsd:element name="infin" type="docEmptyType" />
-      <xsd:element name="empty" type="docEmptyType" />
-      <xsd:element name="plusmn" type="docEmptyType" />
-      <xsd:element name="times" type="docEmptyType" />
-      <xsd:element name="minus" type="docEmptyType" />
-      <xsd:element name="sdot" type="docEmptyType" />
-      <xsd:element name="part" type="docEmptyType" />
-      <xsd:element name="nabla" type="docEmptyType" />
-      <xsd:element name="radic" type="docEmptyType" />
-      <xsd:element name="perp" type="docEmptyType" />
-      <xsd:element name="sum" type="docEmptyType" />
-      <xsd:element name="int" type="docEmptyType" />
-      <xsd:element name="prod" type="docEmptyType" />
-      <xsd:element name="sim" type="docEmptyType" />
-      <xsd:element name="asymp" type="docEmptyType" />
-      <xsd:element name="ne" type="docEmptyType" />
-      <xsd:element name="equiv" type="docEmptyType" />
-      <xsd:element name="prop" type="docEmptyType" />
-      <xsd:element name="le" type="docEmptyType" />
-      <xsd:element name="ge" type="docEmptyType" />
-      <xsd:element name="larr" type="docEmptyType" />
-      <xsd:element name="rarr" type="docEmptyType" />
-      <xsd:element name="isin" type="docEmptyType" />
-      <xsd:element name="notin" type="docEmptyType" />
-      <xsd:element name="lceil" type="docEmptyType" />
-      <xsd:element name="rceil" type="docEmptyType" />
-      <xsd:element name="lfloor" type="docEmptyType" />
-      <xsd:element name="rfloor" type="docEmptyType" />
+      <!-- Automatically insert here the HTML entities -->
     </xsd:choice>
   </xsd:group>
 
@@ -717,10 +630,6 @@
     </xsd:sequence>
   </xsd:complexType>
 
-  <xsd:complexType name="docCharType">
-    <xsd:attribute name="char" type="DoxCharRange"/> 
-  </xsd:complexType>
-
   <xsd:complexType name="docEmptyType"/>
 
   <!-- Simple types -->
diff --git a/src/docbookvisitor.cpp b/src/docbookvisitor.cpp
index aaea045..cb79015 100644
--- a/src/docbookvisitor.cpp
+++ b/src/docbookvisitor.cpp
@@ -73,109 +73,14 @@ void DocbookDocVisitor::visit(DocWhiteSpace *w)
 void DocbookDocVisitor::visit(DocSymbol *s)
 {
   if (m_hide) return;
-  switch(s->symbol())
+  const char *res = get_symbol_docbook(s->symbol());
+  if (res)
   {
-    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::Copy:    m_t << "&#x00A9;"; break;
-    case DocSymbol::Tm:      m_t << "&#8482;"; break;
-    case DocSymbol::Reg:     m_t << "&#174;"; break;
-    case DocSymbol::Apos:    m_t << "&apos;"; break;
-    case DocSymbol::Quot:    m_t << "&quot;"; break;
-    case DocSymbol::Lsquo:   m_t << "&#8216;"; break;
-    case DocSymbol::Rsquo:   m_t << "&#8217;"; break;
-    case DocSymbol::Ldquo:   m_t << "&#8220;"; break;
-    case DocSymbol::Rdquo:   m_t << "&#8221;"; break;
-    case DocSymbol::Ndash:   m_t << "&#8211;"; break;
-    case DocSymbol::Mdash:   m_t << "&#8212;"; break;
-    case DocSymbol::Uml:     m_t << "&#168;"; break;
-    case DocSymbol::Acute:   m_t << "&#180;"; break;
-    case DocSymbol::Grave:   m_t << "&#192;"; break;
-    case DocSymbol::Circ:    m_t << "&#710;"; break;
-    case DocSymbol::Tilde:   m_t << "&#732;"; break;
-    case DocSymbol::Szlig:   m_t << "&#223;"; break;
-    case DocSymbol::Cedil:   m_t << "&#184;"; break;
-    case DocSymbol::Ring:    m_t << "&#197;"; break;
-    case DocSymbol::Slash:   m_t << "&#216;"; break;
-    case DocSymbol::Nbsp:    m_t << "&#160;"; break;
-    case DocSymbol::Aelig:   m_t << "&#230;"; break;
-    case DocSymbol::AElig:   m_t << "&#198;"; break;
-    case DocSymbol::GrkGamma:      m_t << "&#915;"; break;
-    case DocSymbol::GrkDelta:      m_t << "&#916;"; break;
-    case DocSymbol::GrkTheta:      m_t << "&#920;"; break;
-    case DocSymbol::GrkLambda:     m_t << "&#923;"; break;
-    case DocSymbol::GrkXi:         m_t << "&#926;"; break;
-    case DocSymbol::GrkPi:         m_t << "&#928;"; break;
-    case DocSymbol::GrkSigma:      m_t << "&#931;"; break;
-    case DocSymbol::GrkUpsilon:    m_t << "&#933;"; break;
-    case DocSymbol::GrkPhi:        m_t << "&#934;"; break;
-    case DocSymbol::GrkPsi:        m_t << "&#936;"; break;
-    case DocSymbol::GrkOmega:      m_t << "&#937;"; break;
-    case DocSymbol::Grkalpha:      m_t << "&#945;"; break;
-    case DocSymbol::Grkbeta:       m_t << "&#946;"; break;
-    case DocSymbol::Grkgamma:      m_t << "&#947;"; break;
-    case DocSymbol::Grkdelta:      m_t << "&#948;"; break;
-    case DocSymbol::Grkepsilon:    m_t << "&#949;"; break;
-    case DocSymbol::Grkzeta:       m_t << "&#950;"; break;
-    case DocSymbol::Grketa:        m_t << "&#951;"; break;
-    case DocSymbol::Grktheta:      m_t << "&#952;"; break;
-    case DocSymbol::Grkiota:       m_t << "&#953;"; break;
-    case DocSymbol::Grkkappa:      m_t << "&#954;"; break;
-    case DocSymbol::Grklambda:     m_t << "&#955;"; break;
-    case DocSymbol::Grkmu:         m_t << "&#956;"; break;
-    case DocSymbol::Grknu:         m_t << "&#957;"; break;
-    case DocSymbol::Grkxi:         m_t << "&#958;"; break;
-    case DocSymbol::Grkpi:         m_t << "&#960;"; break;
-    case DocSymbol::Grkrho:        m_t << "&#961;"; break;
-    case DocSymbol::Grksigma:      m_t << "&#963;"; break;
-    case DocSymbol::Grktau:        m_t << "&#964;"; break;
-    case DocSymbol::Grkupsilon:    m_t << "&#965;"; break;
-    case DocSymbol::Grkphi:        m_t << "&#966;"; break;
-    case DocSymbol::Grkchi:        m_t << "&#967;"; break;
-    case DocSymbol::Grkpsi:        m_t << "&#968;"; break;
-    case DocSymbol::Grkomega:      m_t << "&#969;"; break;
-    case DocSymbol::Grkvarsigma:   m_t << "&#962;"; break;
-    case DocSymbol::Section:       m_t << "<simplesect/>"; break;
-    case DocSymbol::Degree:        m_t << "&#176;"; break;
-    case DocSymbol::Prime:         m_t << "&#8242;"; break;
-    case DocSymbol::DoublePrime:   m_t << "&#8243;"; break;
-    case DocSymbol::Infinity:      m_t << "&#8734;"; break;
-    case DocSymbol::EmptySet:      m_t << "&#8709;"; break;
-    case DocSymbol::PlusMinus:     m_t << "&#177;"; break;
-    case DocSymbol::Times:         m_t << "&#215;"; break;
-    case DocSymbol::Minus:         m_t << "&#8722;"; break;
-    case DocSymbol::CenterDot:     m_t << "&#8901;"; break;
-    case DocSymbol::Partial:       m_t << "&#8706;"; break;
-    case DocSymbol::Nabla:         m_t << "&#8711;"; break;
-    case DocSymbol::SquareRoot:    m_t << "&#8730;"; break;
-    case DocSymbol::Perpendicular: m_t << "&#8869;"; break;
-    case DocSymbol::Sum:           m_t << "&#8721;"; break;
-    case DocSymbol::Integral:      m_t << "&#8747;"; break;
-    case DocSymbol::Product:       m_t << "&#8719;"; break;
-    case DocSymbol::Similar:       m_t << "&#8764;"; break;
-    case DocSymbol::Approx:        m_t << "&#8776;"; break;
-    case DocSymbol::NotEqual:      m_t << "&#8800;"; break;
-    case DocSymbol::Equivalent:    m_t << "&#8801;"; break;
-    case DocSymbol::Proportional:  m_t << "&#8733;"; break;
-    case DocSymbol::LessEqual:     m_t << "&#8804;"; break;
-    case DocSymbol::GreaterEqual:  m_t << "&#8805;"; break;
-    case DocSymbol::LeftArrow:     m_t << "&#8592;"; break;
-    case DocSymbol::RightArrow:    m_t << "&#8594;"; break;
-    case DocSymbol::SetIn:         m_t << "&#8712;"; break;
-    case DocSymbol::SetNotIn:      m_t << "&#8713;"; break;
-    case DocSymbol::LeftCeil:      m_t << "&#8968;"; break;
-    case DocSymbol::RightCeil:     m_t << "&#8969;"; break;
-    case DocSymbol::LeftFloor:     m_t << "&#8970;"; break;
-    case DocSymbol::RightFloor:    m_t << "&#8971;"; break;
-    default:
-                                   err("unknown symbol found\n");
+    m_t << res;
+  }
+  else
+  {
+    err("DocBook: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
 }
 
diff --git a/src/docparser.cpp b/src/docparser.cpp
index 7e34ad0..0a132a8 100644
--- a/src/docparser.cpp
+++ b/src/docparser.cpp
@@ -1244,34 +1244,34 @@ reparsetoken:
       switch (Mappers::cmdMapper->map(tokenName))
       {
         case CMD_BSLASH:
-          children.append(new DocSymbol(parent,DocSymbol::BSlash));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_BSlash));
           break;
         case CMD_AT:
-          children.append(new DocSymbol(parent,DocSymbol::At));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_At));
           break;
         case CMD_LESS:
-          children.append(new DocSymbol(parent,DocSymbol::Less));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Less));
           break;
         case CMD_GREATER:
-          children.append(new DocSymbol(parent,DocSymbol::Greater));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Greater));
           break;
         case CMD_AMP:
-          children.append(new DocSymbol(parent,DocSymbol::Amp));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Amp));
           break;
         case CMD_DOLLAR:
-          children.append(new DocSymbol(parent,DocSymbol::Dollar));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Dollar));
           break;
         case CMD_HASH:
-          children.append(new DocSymbol(parent,DocSymbol::Hash));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Hash));
           break;
         case CMD_DCOLON:
-          children.append(new DocSymbol(parent,DocSymbol::DoubleColon));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_DoubleColon));
           break;
         case CMD_PERCENT:
-          children.append(new DocSymbol(parent,DocSymbol::Percent));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Percent));
           break;
         case CMD_QUOTE:
-          children.append(new DocSymbol(parent,DocSymbol::Quot));
+          children.append(new DocSymbol(parent,DocSymbol::Sym_Quot));
           break;
         case CMD_EMPHASIS:
           {
@@ -1488,11 +1488,10 @@ reparsetoken:
       break;
     case TK_SYMBOL: 
       {
-        char letter='\0';
-        DocSymbol::SymType s = DocSymbol::decodeSymbol(tokenName,&letter);
-        if (s!=DocSymbol::Unknown)
+        DocSymbol::SymType s = DocSymbol::decodeSymbol(tokenName);
+        if (s!=DocSymbol::Sym_Unknown)
         {
-          children.append(new DocSymbol(parent,s,letter));
+          children.append(new DocSymbol(parent,s));
         }
         else
         {
@@ -1571,138 +1570,10 @@ static void handleImg(DocNode *parent,QList<DocNode> &children,const HtmlAttribL
 
 //---------------------------------------------------------------------------
 
-DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName,char *letter)
-{
-  int l=symName.length();
-  DBG(("decodeSymbol(%s) l=%d\n",qPrint(symName),l));
-  // TODO: replace this with a hash
-  if      (symName=="&copy;")  return DocSymbol::Copy;
-  else if (symName=="&trade;") return DocSymbol::Tm;
-  else if (symName=="&tm;")    return DocSymbol::Tm; // alias for &trade;
-  else if (symName=="&reg;")   return DocSymbol::Reg;
-  else if (symName=="&lt;")    return DocSymbol::Less;
-  else if (symName=="&gt;")    return DocSymbol::Greater;
-  else if (symName=="&amp;")   return DocSymbol::Amp;
-  else if (symName=="&apos;")  return DocSymbol::Apos;
-  else if (symName=="&quot;")  return DocSymbol::Quot;
-  else if (symName=="&lsquo;") return DocSymbol::Lsquo;
-  else if (symName=="&rsquo;") return DocSymbol::Rsquo;
-  else if (symName=="&ldquo;") return DocSymbol::Ldquo;
-  else if (symName=="&rdquo;") return DocSymbol::Rdquo;
-  else if (symName=="&ndash;") return DocSymbol::Ndash;
-  else if (symName=="&mdash;") return DocSymbol::Mdash;
-  else if (symName=="&szlig;") return DocSymbol::Szlig;
-  else if (symName=="&nbsp;")  return DocSymbol::Nbsp;
-  else if (symName=="&AElig;") return DocSymbol::AElig;
-  else if (symName=="&aelig;") return DocSymbol::Aelig;
-  else if (symName=="&Gamma;")     return DocSymbol::GrkGamma;
-  else if (symName=="&Delta;")     return DocSymbol::GrkDelta;
-  else if (symName=="&Theta;")     return DocSymbol::GrkTheta;
-  else if (symName=="&Lambda;")    return DocSymbol::GrkLambda;
-  else if (symName=="&Xi;")        return DocSymbol::GrkXi;
-  else if (symName=="&Pi;")        return DocSymbol::GrkPi;
-  else if (symName=="&Sigma;")     return DocSymbol::GrkSigma;
-  else if (symName=="&Upsilon;")   return DocSymbol::GrkUpsilon;
-  else if (symName=="&Phi;")       return DocSymbol::GrkPhi;
-  else if (symName=="&Psi;")       return DocSymbol::GrkPsi;
-  else if (symName=="&Omega;")     return DocSymbol::GrkOmega;
-  else if (symName=="&alpha;")     return DocSymbol::Grkalpha;
-  else if (symName=="&beta;")      return DocSymbol::Grkbeta;
-  else if (symName=="&gamma;")     return DocSymbol::Grkgamma;
-  else if (symName=="&delta;")     return DocSymbol::Grkdelta;
-  else if (symName=="&epsilon;")   return DocSymbol::Grkepsilon;
-  else if (symName=="&zeta;")      return DocSymbol::Grkzeta;
-  else if (symName=="&eta;")       return DocSymbol::Grketa;
-  else if (symName=="&theta;")     return DocSymbol::Grktheta;
-  else if (symName=="&iota;")      return DocSymbol::Grkiota;
-  else if (symName=="&kappa;")     return DocSymbol::Grkkappa;
-  else if (symName=="&lambda;")    return DocSymbol::Grklambda;
-  else if (symName=="&mu;")        return DocSymbol::Grkmu;
-  else if (symName=="&nu;")        return DocSymbol::Grknu;
-  else if (symName=="&xi;")        return DocSymbol::Grkxi;
-  else if (symName=="&pi;")        return DocSymbol::Grkpi;
-  else if (symName=="&rho;")       return DocSymbol::Grkrho;
-  else if (symName=="&sigma;")     return DocSymbol::Grksigma;
-  else if (symName=="&tau;")       return DocSymbol::Grktau;
-  else if (symName=="&upsilon;")   return DocSymbol::Grkupsilon;
-  else if (symName=="&phi;")       return DocSymbol::Grkphi;
-  else if (symName=="&chi;")       return DocSymbol::Grkchi;
-  else if (symName=="&psi;")       return DocSymbol::Grkpsi;
-  else if (symName=="&omega;")     return DocSymbol::Grkomega;
-  else if (symName=="&sigmaf;")    return DocSymbol::Grkvarsigma;
-  else if (symName=="&sect;")      return DocSymbol::Section;
-  else if (symName=="&deg;")       return DocSymbol::Degree;
-  else if (symName=="&prime;")     return DocSymbol::Prime;
-  else if (symName=="&Prime;")     return DocSymbol::DoublePrime;
-  else if (symName=="&infin;")     return DocSymbol::Infinity;
-  else if (symName=="&empty;")     return DocSymbol::EmptySet;
-  else if (symName=="&plusmn;")    return DocSymbol::PlusMinus;
-  else if (symName=="&times;")     return DocSymbol::Times;
-  else if (symName=="&minus;")     return DocSymbol::Minus;
-  else if (symName=="&sdot;")      return DocSymbol::CenterDot;
-  else if (symName=="&part;")      return DocSymbol::Partial;
-  else if (symName=="&nabla;")     return DocSymbol::Nabla;
-  else if (symName=="&radic;")     return DocSymbol::SquareRoot;
-  else if (symName=="&perp;")      return DocSymbol::Perpendicular;
-  else if (symName=="&sum;")       return DocSymbol::Sum;
-  else if (symName=="&int;")       return DocSymbol::Integral;
-  else if (symName=="&prod;")      return DocSymbol::Product;
-  else if (symName=="&sim;")       return DocSymbol::Similar;
-  else if (symName=="&asymp;")     return DocSymbol::Approx;
-  else if (symName=="&ne;")        return DocSymbol::NotEqual;
-  else if (symName=="&equiv;")     return DocSymbol::Equivalent;
-  else if (symName=="&prop;")      return DocSymbol::Proportional;
-  else if (symName=="&le;")        return DocSymbol::LessEqual;
-  else if (symName=="&ge;")        return DocSymbol::GreaterEqual;
-  else if (symName=="&larr;")      return DocSymbol::LeftArrow;
-  else if (symName=="&rarr;")      return DocSymbol::RightArrow;
-  else if (symName=="&isin;")      return DocSymbol::SetIn;
-  else if (symName=="&notin;")     return DocSymbol::SetNotIn;
-  else if (symName=="&lceil;")     return DocSymbol::LeftCeil;
-  else if (symName=="&rceil;")     return DocSymbol::RightCeil;
-  else if (symName=="&lfloor;")    return DocSymbol::LeftFloor;
-  else if (symName=="&rfloor;")    return DocSymbol::RightFloor;
-  else if (l==6 && symName.right(4)=="uml;")  
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Uml;
-  }
-  else if (l==8 && symName.right(6)=="acute;")  
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Acute;
-  }
-  else if (l==8 && symName.right(6)=="grave;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Grave;
-  }
-  else if (l==7 && symName.right(5)=="circ;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Circ;
-  }
-  else if (l==8 && symName.right(6)=="tilde;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Tilde;
-  }
-  else if (l==8 && symName.right(6)=="cedil;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Cedil;
-  }
-  else if (l==7 && symName.right(5)=="ring;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Ring;
-  }
-  else if (l==8 && symName.right(6)=="slash;")
-  {
-    *letter=symName.at(1);
-    return DocSymbol::Slash;
-  }
-  return DocSymbol::Unknown;
+DocSymbol::SymType DocSymbol::decodeSymbol(const QCString &symName)
+{
+  DBG(("decodeSymbol(%s)\n",qPrint(symName)));
+  return code_symbol(symName);
 }
 
 //---------------------------------------------------------------------------
@@ -3369,26 +3240,25 @@ int DocIndexEntry::parse()
         break;
       case TK_SYMBOL:
         {
-          char letter='\0';
-          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
+          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name);
           switch (s)
           {
-            case DocSymbol::BSlash:  m_entry+='\\'; break;
-            case DocSymbol::At:      m_entry+='@';  break;
-            case DocSymbol::Less:    m_entry+='<';  break;
-            case DocSymbol::Greater: m_entry+='>';  break;
-            case DocSymbol::Amp:     m_entry+='&';  break;
-            case DocSymbol::Dollar:  m_entry+='$';  break;
-            case DocSymbol::Hash:    m_entry+='#';  break;
-            case DocSymbol::Percent: m_entry+='%';  break;
-            case DocSymbol::Apos:    m_entry+='\''; break;
-            case DocSymbol::Quot:    m_entry+='"';  break;
-            case DocSymbol::Lsquo:   m_entry+='`';  break;
-            case DocSymbol::Rsquo:   m_entry+='\'';  break;
-            case DocSymbol::Ldquo:   m_entry+="``";  break;
-            case DocSymbol::Rdquo:   m_entry+="''";  break;
-            case DocSymbol::Ndash:   m_entry+="--";  break;
-            case DocSymbol::Mdash:   m_entry+="---";  break;
+            case DocSymbol::Sym_BSlash:  m_entry+='\\'; break;
+            case DocSymbol::Sym_At:      m_entry+='@';  break;
+            case DocSymbol::Sym_Less:    m_entry+='<';  break;
+            case DocSymbol::Sym_Greater: m_entry+='>';  break;
+            case DocSymbol::Sym_Amp:     m_entry+='&';  break;
+            case DocSymbol::Sym_Dollar:  m_entry+='$';  break;
+            case DocSymbol::Sym_Hash:    m_entry+='#';  break;
+            case DocSymbol::Sym_Percent: m_entry+='%';  break;
+            case DocSymbol::Sym_apos:    m_entry+='\''; break;
+            case DocSymbol::Sym_Quot:    m_entry+='"';  break;
+            case DocSymbol::Sym_lsquo:   m_entry+='`';  break;
+            case DocSymbol::Sym_rsquo:   m_entry+='\'';  break;
+            case DocSymbol::Sym_ldquo:   m_entry+="``";  break;
+            case DocSymbol::Sym_rdquo:   m_entry+="''";  break;
+            case DocSymbol::Sym_ndash:   m_entry+="--";  break;
+            case DocSymbol::Sym_mdash:   m_entry+="---";  break;
             default:
               warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected symbol found as argument of \\addindex");
               break;
@@ -5470,37 +5340,37 @@ int DocPara::handleCommand(const QCString &cmdName)
       if (retval!=TK_WORD) m_children.append(new DocWhiteSpace(this," "));
       break;
     case CMD_BSLASH:
-      m_children.append(new DocSymbol(this,DocSymbol::BSlash));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_BSlash));
       break;
     case CMD_AT:
-      m_children.append(new DocSymbol(this,DocSymbol::At));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_At));
       break;
     case CMD_LESS:
-      m_children.append(new DocSymbol(this,DocSymbol::Less));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Less));
       break;
     case CMD_GREATER:
-      m_children.append(new DocSymbol(this,DocSymbol::Greater));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Greater));
       break;
     case CMD_AMP:
-      m_children.append(new DocSymbol(this,DocSymbol::Amp));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Amp));
       break;
     case CMD_DOLLAR:
-      m_children.append(new DocSymbol(this,DocSymbol::Dollar));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Dollar));
       break;
     case CMD_HASH:
-      m_children.append(new DocSymbol(this,DocSymbol::Hash));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Hash));
       break;
     case CMD_PIPE:
-      m_children.append(new DocSymbol(this,DocSymbol::Pipe));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Pipe));
       break;
     case CMD_DCOLON:
-      m_children.append(new DocSymbol(this,DocSymbol::DoubleColon));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
       break;
     case CMD_PERCENT:
-      m_children.append(new DocSymbol(this,DocSymbol::Percent));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Percent));
       break;
     case CMD_QUOTE:
-      m_children.append(new DocSymbol(this,DocSymbol::Quot));
+      m_children.append(new DocSymbol(this,DocSymbol::Sym_Quot));
       break;
     case CMD_SA:
       g_inSeeBlock=TRUE;
@@ -6691,11 +6561,10 @@ reparsetoken:
         break;
       case TK_SYMBOL:     
         {
-          char letter='\0';
-          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
-          if (s!=DocSymbol::Unknown)
+          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name);
+          if (s!=DocSymbol::Sym_Unknown)
           {
-            m_children.append(new DocSymbol(this,s,letter));
+            m_children.append(new DocSymbol(this,s));
           }
           else
           {
@@ -6910,11 +6779,10 @@ void DocText::parse()
 	break;
       case TK_SYMBOL:     
         {
-          char letter='\0';
-          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name,&letter);
-          if (s!=DocSymbol::Unknown)
+          DocSymbol::SymType s = DocSymbol::decodeSymbol(g_token->name);
+          if (s!=DocSymbol::Sym_Unknown)
           {
-            m_children.append(new DocSymbol(this,s,letter));
+            m_children.append(new DocSymbol(this,s));
           }
           else
           {
@@ -6927,34 +6795,34 @@ void DocText::parse()
         switch (Mappers::cmdMapper->map(g_token->name))
         {
           case CMD_BSLASH:
-            m_children.append(new DocSymbol(this,DocSymbol::BSlash));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_BSlash));
             break;
           case CMD_AT:
-            m_children.append(new DocSymbol(this,DocSymbol::At));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_At));
             break;
           case CMD_LESS:
-            m_children.append(new DocSymbol(this,DocSymbol::Less));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Less));
             break;
           case CMD_GREATER:
-            m_children.append(new DocSymbol(this,DocSymbol::Greater));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Greater));
             break;
           case CMD_AMP:
-            m_children.append(new DocSymbol(this,DocSymbol::Amp));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Amp));
             break;
           case CMD_DOLLAR:
-            m_children.append(new DocSymbol(this,DocSymbol::Dollar));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Dollar));
             break;
           case CMD_HASH:
-            m_children.append(new DocSymbol(this,DocSymbol::Hash));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Hash));
             break;
           case CMD_DCOLON:
-            m_children.append(new DocSymbol(this,DocSymbol::DoubleColon));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_DoubleColon));
             break;
           case CMD_PERCENT:
-            m_children.append(new DocSymbol(this,DocSymbol::Percent));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Percent));
             break;
           case CMD_QUOTE:
-            m_children.append(new DocSymbol(this,DocSymbol::Quot));
+            m_children.append(new DocSymbol(this,DocSymbol::Sym_Quot));
             break;
           default:
             warn_doc_error(g_fileName,doctokenizerYYlineno,"Unexpected command `%s' found",
diff --git a/src/docparser.h b/src/docparser.h
index 050c871..8d89102 100644
--- a/src/docparser.h
+++ b/src/docparser.h
@@ -336,34 +336,84 @@ class DocStyleChange : public DocNode
 class DocSymbol : public DocNode
 {
   public:
-    enum SymType { Unknown=0, BSlash, At, Less, Greater, Amp, Dollar, Hash,
-                   DoubleColon, Percent, Copy, Tm, Reg, Apos, Quot, Uml, Acute, 
-                   Grave, Circ, Tilde, Szlig, Cedil, Ring, Nbsp, Slash, 
-                   Lsquo, Rsquo, Ldquo, Rdquo, Ndash, Mdash, Aelig, AElig,
-                   GrkGamma, GrkDelta, GrkTheta, GrkLambda, GrkXi, GrkPi,
-                   GrkSigma, GrkUpsilon, GrkPhi, GrkPsi, GrkOmega, Grkalpha,
-                   Grkbeta, Grkgamma, Grkdelta, Grkepsilon, Grkzeta, Grketa,
-                   Grktheta, Grkiota, Grkkappa, Grklambda, Grkmu, Grknu, Grkxi,
-                   Grkpi, Grkrho, Grksigma, Grktau, Grkupsilon, Grkphi, Grkchi,
-                   Grkpsi, Grkomega, Grkvarsigma, Section, Degree, Prime,
-                   DoublePrime, Infinity, EmptySet, PlusMinus, Times, Minus,
-                   CenterDot, Partial, Nabla, SquareRoot, Perpendicular, Sum,
-                   Integral, Product, Similar, Approx, NotEqual, Equivalent,
-                   Proportional, LessEqual, GreaterEqual, LeftArrow, RightArrow,
-                   SetIn, SetNotIn, LeftCeil, RightCeil, LeftFloor, RightFloor,
-                   Pipe
+    enum SymType { Sym_Unknown = -1,
+                   Sym_nbsp, Sym_iexcl, Sym_cent, Sym_pound, Sym_curren,
+                   Sym_yen, Sym_brvbar, Sym_sect, Sym_uml, Sym_copy,
+                   Sym_ordf, Sym_laquo, Sym_not, Sym_shy, Sym_reg,
+                   Sym_macr, Sym_deg, Sym_plusmn, Sym_sup2, Sym_sup3,
+                   Sym_acute, Sym_micro, Sym_para, Sym_middot, Sym_cedil,
+                   Sym_sup1, Sym_ordm, Sym_raquo, Sym_frac14, Sym_frac12,
+                   Sym_frac34, Sym_iquest, Sym_Agrave, Sym_Aacute, Sym_Acirc,
+                   Sym_Atilde, Sym_Auml, Sym_Aring, Sym_AElig, Sym_Ccedil,
+                   Sym_Egrave, Sym_Eacute, Sym_Ecirc, Sym_Euml, Sym_Igrave,
+                   Sym_Iacute, Sym_Icirc, Sym_Iuml, Sym_ETH, Sym_Ntilde,
+                   Sym_Ograve, Sym_Oacute, Sym_Ocirc, Sym_Otilde, Sym_Ouml,
+                   Sym_times, Sym_Oslash, Sym_Ugrave, Sym_Uacute, Sym_Ucirc,
+                   Sym_Uuml, Sym_Yacute, Sym_THORN, Sym_szlig, Sym_agrave,
+                   Sym_aacute, Sym_acirc, Sym_atilde, Sym_auml, Sym_aring,
+                   Sym_aelig, Sym_ccedil, Sym_egrave, Sym_eacute, Sym_ecirc,
+                   Sym_euml, Sym_igrave, Sym_iacute, Sym_icirc, Sym_iuml,
+                   Sym_eth, Sym_ntilde, Sym_ograve, Sym_oacute, Sym_ocirc,
+                   Sym_otilde, Sym_ouml, Sym_divide, Sym_oslash, Sym_ugrave,
+                   Sym_uacute, Sym_ucirc, Sym_uuml, Sym_yacute, Sym_thorn,
+                   Sym_yuml, Sym_fnof, Sym_Alpha, Sym_Beta, Sym_Gamma,
+                   Sym_Delta, Sym_Epsilon, Sym_Zeta, Sym_Eta, Sym_Theta,
+                   Sym_Iota, Sym_Kappa, Sym_Lambda, Sym_Mu, Sym_Nu,
+                   Sym_Xi, Sym_Omicron, Sym_Pi, Sym_Rho, Sym_Sigma,
+                   Sym_Tau, Sym_Upsilon, Sym_Phi, Sym_Chi, Sym_Psi,
+                   Sym_Omega, Sym_alpha, Sym_beta, Sym_gamma, Sym_delta,
+                   Sym_epsilon, Sym_zeta, Sym_eta, Sym_theta, Sym_iota,
+                   Sym_kappa, Sym_lambda, Sym_mu, Sym_nu, Sym_xi,
+                   Sym_omicron, Sym_pi, Sym_rho, Sym_sigmaf, Sym_sigma,
+                   Sym_tau, Sym_upsilon, Sym_phi, Sym_chi, Sym_psi,
+                   Sym_omega, Sym_thetasym, Sym_upsih, Sym_piv, Sym_bull,
+                   Sym_hellip, Sym_prime, Sym_Prime, Sym_oline, Sym_frasl,
+                   Sym_weierp, Sym_image, Sym_real, Sym_trade, Sym_alefsym,
+                   Sym_larr, Sym_uarr, Sym_rarr, Sym_darr, Sym_harr,
+                   Sym_crarr, Sym_lArr, Sym_uArr, Sym_rArr, Sym_dArr,
+                   Sym_hArr, Sym_forall, Sym_part, Sym_exist, Sym_empty,
+                   Sym_nabla, Sym_isin, Sym_notin, Sym_ni, Sym_prod,
+                   Sym_sum, Sym_minus, Sym_lowast, Sym_radic, Sym_prop,
+                   Sym_infin, Sym_ang, Sym_and, Sym_or, Sym_cap,
+                   Sym_cup, Sym_int, Sym_there4, Sym_sim, Sym_cong,
+                   Sym_asymp, Sym_ne, Sym_equiv, Sym_le, Sym_ge,
+                   Sym_sub, Sym_sup, Sym_nsub, Sym_sube, Sym_supe,
+                   Sym_oplus, Sym_otimes, Sym_perp, Sym_sdot, Sym_lceil,
+                   Sym_rceil, Sym_lfloor, Sym_rfloor, Sym_lang, Sym_rang,
+                   Sym_loz, Sym_spades, Sym_clubs, Sym_hearts, Sym_diams,
+                   Sym_quot, Sym_amp, Sym_lt, Sym_gt, Sym_OElig,
+                   Sym_oelig, Sym_Scaron, Sym_scaron, Sym_Yuml, Sym_circ,
+                   Sym_tilde, Sym_ensp, Sym_emsp, Sym_thinsp, Sym_zwnj,
+                   Sym_zwj, Sym_lrm, Sym_rlm, Sym_ndash, Sym_mdash,
+                   Sym_lsquo, Sym_rsquo, Sym_sbquo, Sym_ldquo, Sym_rdquo,
+                   Sym_bdquo, Sym_dagger, Sym_Dagger, Sym_permil, Sym_lsaquo,
+                   Sym_rsaquo, Sym_euro,
+
+                   /* doxygen extensions */
+                   Sym_tm, Sym_apos,
+
+                   /* doxygen commands mapped */
+                   Sym_BSlash, Sym_At, Sym_Less, Sym_Greater, Sym_Amp,
+                   Sym_Dollar, Sym_Hash, Sym_DoubleColon, Sym_Percent, Sym_Pipe,
+                   Sym_Quot
                  };
-    DocSymbol(DocNode *parent,SymType s,char letter='\0') : 
-      m_symbol(s), m_letter(letter) { m_parent = parent; }
+    enum PerlType { Perl_unknown = 0, Perl_string, Perl_char, Perl_symbol, Perl_umlaut,
+                    Perl_acute, Perl_grave, Perl_circ, Perl_slash, Perl_tilde,
+                    Perl_cedilla, Perl_ring
+                  };
+    typedef struct PerlSymb {
+      const char     *symb;
+      const PerlType  type;
+    }PerlSymb;
+    DocSymbol(DocNode *parent,SymType s) : 
+      m_symbol(s) { m_parent = parent; }
     SymType symbol() const     { return m_symbol; }
-    char letter() const        { return m_letter; }
     Kind kind() const          { return Kind_Symbol; }
     void accept(DocVisitor *v) { v->visit(this); }
-    static SymType decodeSymbol(const QCString &symName,char *letter);
+    static SymType decodeSymbol(const QCString &symName);
 
   private:
     SymType  m_symbol;
-    char     m_letter;
 };
 
 /** Node representing some amount of white space */
diff --git a/src/htmldocvisitor.cpp b/src/htmldocvisitor.cpp
index 536259a..d59acaf 100644
--- a/src/htmldocvisitor.cpp
+++ b/src/htmldocvisitor.cpp
@@ -182,110 +182,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 = get_symbol_html(s->symbol());
+  if (res)
+  {
+    m_t << res;
+  }
+  else
+  {
+    err("HTML: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
 }
 
diff --git a/src/latexdocvisitor.cpp b/src/latexdocvisitor.cpp
index bc8e5a5..7daa1d0 100644
--- a/src/latexdocvisitor.cpp
+++ b/src/latexdocvisitor.cpp
@@ -135,135 +135,25 @@ void LatexDocVisitor::visit(DocWhiteSpace *w)
 void LatexDocVisitor::visit(DocSymbol *s)
 {
   if (m_hide) return;
-  switch(s->symbol())
-  {
-    case DocSymbol::BSlash:  m_t << "\\textbackslash{}"; break;
-    case DocSymbol::At:      m_t << "@"; break;
-    case DocSymbol::Less:    if (m_insidePre) m_t << "<"; else m_t << "$<$"; 
-                             break;
-    case DocSymbol::Greater: if (m_insidePre) m_t << ">"; else m_t << "$>$"; break;
-    case DocSymbol::Amp:     m_t << "\\&"; 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 << "\\copyright{}"; break;
-    case DocSymbol::Tm:      m_t << "\\texttrademark{}"; break;
-    case DocSymbol::Reg:     m_t << "\\textregistered{}"; break;
-    case DocSymbol::Apos:    m_t << "'"; break;
-    case DocSymbol::Quot:    m_t << "\""; break;
-    case DocSymbol::Lsquo:   m_t << "`"; break;
-    case DocSymbol::Rsquo:   m_t << "'"; break;
-    case DocSymbol::Ldquo:   m_t << "``"; break;
-    case DocSymbol::Rdquo:   m_t << "''"; break;
-    case DocSymbol::Ndash:   m_t << "--"; break;
-    case DocSymbol::Mdash:   m_t << "---"; break;
-    case DocSymbol::Uml:     
-                             if (s->letter()=='i') 
-                               m_t << "\\\"{\\i}"; 
-                             else                  
-                               m_t << "\\\"{" << s->letter() << "}"; 
-                             break;
-    case DocSymbol::Acute:   
-                             if (s->letter()=='i') 
-                               m_t << "\\'{\\i}"; 
-                             else                  
-                               m_t << "\\'{" << s->letter() << "}"; 
-                             break;
-    case DocSymbol::Grave:   
-                             if (s->letter()=='i') 
-                               m_t << "\\`{\\i}"; 
-                             else                  
-                               m_t << "\\`{" << s->letter() << "}"; 
-                             break;
-    case DocSymbol::Circ:    
-                             if (s->letter()=='i') 
-                               m_t << "\\^{\\i}"; 
-                             else                  
-                               m_t << "\\^{" << s->letter() << "}"; 
-                             break;
-    case DocSymbol::Slash:   if (tolower(s->letter())=='o')
-                               m_t << "{\\" << s->letter() << "}";
-                             else
-                               m_t << s->letter();
-                             break;
-    case DocSymbol::Tilde:   m_t << "\\~{"  << s->letter() << "}"; break;
-    case DocSymbol::Szlig:   m_t << "{\\ss}"; break;
-    case DocSymbol::Cedil:   m_t << "\\c{" << s->letter() << "}"; break;
-    case DocSymbol::Ring:    m_t << "\\" << s->letter() << s->letter(); break;
-    case DocSymbol::Nbsp:    m_t << "~"; break;
-    case DocSymbol::AElig:   m_t << "{\\AE}"; break;
-    case DocSymbol::Aelig:   m_t << "{\\ae}"; 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 << "{$\\varepsilon$}"; 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 << "{$\\varphi$}"; 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 << "{$\\varsigma$}"; break;
-    case DocSymbol::Section:       m_t << "{$\\S$}"; break;
-    case DocSymbol::Degree:        m_t << "\\textdegree"; break;
-    case DocSymbol::Prime:         m_t << "'"; break;
-    case DocSymbol::DoublePrime:   m_t << "''"; break;
-    case DocSymbol::Infinity:      m_t << "{$\\infty$}"; break;
-    case DocSymbol::EmptySet:      m_t << "{$\\emptyset$}"; break;
-    case DocSymbol::PlusMinus:     m_t << "{$\\pm$}"; break;
-    case DocSymbol::Times:         m_t << "{$\\times$}"; break;
-    case DocSymbol::Minus:         m_t << "-"; break;
-    case DocSymbol::CenterDot:     m_t << "{$\\cdot$}"; break;
-    case DocSymbol::Partial:       m_t << "{$\\partial$}"; break;
-    case DocSymbol::Nabla:         m_t << "{$\\nabla$}"; break;
-    case DocSymbol::SquareRoot:    m_t << "{$\\surd$}"; 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 << "{$\\approx$}"; break;
-    case DocSymbol::NotEqual:      m_t << "{$\\ne$}"; break;
-    case DocSymbol::Equivalent:    m_t << "{$\\equiv$}"; break;
-    case DocSymbol::Proportional:  m_t << "{$\\propto$}"; break;
-    case DocSymbol::LessEqual:     m_t << "{$\\le$}"; break;
-    case DocSymbol::GreaterEqual:  m_t << "{$\\ge$}"; break;
-    case DocSymbol::LeftArrow:     m_t << "{$\\leftarrow$}"; break;
-    case DocSymbol::RightArrow:    m_t << "{$\\rightarrow$}"; break;
-    case DocSymbol::SetIn:         m_t << "{$\\in$}"; 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 = get_symbol_latex(s->symbol());
+  if (res)
+  {
+    if (((s->symbol() == DocSymbol::Sym_lt) || (s->symbol() == DocSymbol::Sym_Less))&& (!m_insidePre))
+    {
+      m_t << "$<$";
+    }
+    else if (((s->symbol() == DocSymbol::Sym_gt) || (s->symbol() == DocSymbol::Sym_Greater)) && (!m_insidePre))
+    {
+      m_t << "$>$";
+    }
+    else
+    {
+      m_t << res;
+    }
+  }
+  else
+  {
+    err("LaTeX: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
 }
 
diff --git a/src/latexgen.cpp b/src/latexgen.cpp
index 04750f5..9cdfc21 100644
--- a/src/latexgen.cpp
+++ b/src/latexgen.cpp
@@ -293,7 +293,9 @@ static void writeDefaultHeaderPart1(FTextStream &t)
        "\\usepackage{makeidx}\n"
        "\\usepackage{multicol}\n"
        "\\usepackage{multirow}\n"
+       "\\PassOptionsToPackage{warn}{textcomp}\n"
        "\\usepackage{textcomp}\n"
+       "\\usepackage[nointegrals]{wasysym}\n"
        "\\usepackage[table]{xcolor}\n"
        "\n";
 
diff --git a/src/mandocvisitor.cpp b/src/mandocvisitor.cpp
index 729f3d4..7669a0a 100644
--- a/src/mandocvisitor.cpp
+++ b/src/mandocvisitor.cpp
@@ -75,42 +75,15 @@ void ManDocVisitor::visit(DocWhiteSpace *w)
 void ManDocVisitor::visit(DocSymbol *s)
 {
   if (m_hide) return;
-  switch(s->symbol())
+  const char *res = get_symbol_man(s->symbol());
+  if (res)
   {
-    case DocSymbol::BSlash:  m_t << "\\\\"; break;
-    case DocSymbol::At:      m_t << "@"; break;
-    case DocSymbol::Less:    m_t << "<"; break;
-    case DocSymbol::Greater: m_t << ">"; break;
-    case DocSymbol::Amp:     m_t << "&"; 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 << "(C)"; break;
-    case DocSymbol::Tm:      m_t << "(TM)"; break;
-    case DocSymbol::Reg:     m_t << "(R)"; break;
-    case DocSymbol::Apos:    m_t << "'"; break;
-    case DocSymbol::Quot:    m_t << "\""; break;
-    case DocSymbol::Lsquo:   m_t << "`"; break;
-    case DocSymbol::Rsquo:   m_t << "'"; break;
-    case DocSymbol::Ldquo:   m_t << "``"; break;
-    case DocSymbol::Rdquo:   m_t << "''"; break;
-    case DocSymbol::Ndash:   m_t << "--"; break;
-    case DocSymbol::Mdash:   m_t << "---"; break;
-    case DocSymbol::Uml:     m_t << s->letter() << "\\*(4"; break;
-    case DocSymbol::Acute:   m_t << s->letter() << "\\*(`"; break;
-    case DocSymbol::Grave:   m_t << s->letter() << "\\*:"; break;
-    case DocSymbol::Circ:    m_t << s->letter() << "\\*^"; break;
-    case DocSymbol::Slash:   m_t << s->letter(); break; /* todo: implement this */
-    case DocSymbol::Tilde:   m_t << s->letter() << "\\*~"; break;
-    case DocSymbol::Szlig:   m_t << "s\\*:"; break;
-    case DocSymbol::Cedil:   m_t << s->letter() << "\\*,"; break;
-    case DocSymbol::Ring:    m_t << s->letter() << "\\*o"; break;
-    case DocSymbol::Nbsp:    m_t << " "; break;
-    default:
-         // unsupport symbol for man page :-(
-         break;
+    m_t << res;
+  }
+  else
+  {
+    // no error or warning to be supplied
+    // err("man: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
   m_firstCol=FALSE;
 }
diff --git a/src/perlmodgen.cpp b/src/perlmodgen.cpp
index 237cb8f..573400d 100644
--- a/src/perlmodgen.cpp
+++ b/src/perlmodgen.cpp
@@ -41,6 +41,7 @@
 #include "namespacedef.h"
 #include "membergroup.h"
 #include "section.h"
+#include "util.h"
 
 #define PERLOUTPUT_MAX_INDENTATION 40
 
@@ -540,140 +541,66 @@ void PerlModDocVisitor::visit(DocWhiteSpace *)
 
 void PerlModDocVisitor::visit(DocSymbol *sy)
 {
-  char c = 0;
-  const char *s = 0;
-  const char *accent = 0;
-  const char *symbol = 0;
-  switch(sy->symbol())
+  const DocSymbol::PerlSymb *res = get_symbol_perl(sy->symbol());
+  const char *accent;
+  if (res-> symb)
   {
-    case DocSymbol::At:      c = '@'; break;
-    case DocSymbol::Less:    c = '<'; break;
-    case DocSymbol::Greater: c = '>'; break;
-    case DocSymbol::Amp:     c = '&'; break;
-    case DocSymbol::Dollar:  c = '$'; break;
-    case DocSymbol::Hash:    c = '#'; break;
-    case DocSymbol::DoubleColon: s = "::"; break;
-    case DocSymbol::Percent: c = '%'; break;
-    case DocSymbol::Pipe:    c = '|'; break;
-    case DocSymbol::Quot:    c = '"'; break;
-    case DocSymbol::Lsquo:   s = "\\\'"; break;
-    case DocSymbol::Rsquo:   s = "\\\'"; break;
-    case DocSymbol::Ldquo:   c = '"'; break;
-    case DocSymbol::Rdquo:   c = '"'; break;
-    case DocSymbol::Ndash:   c = '-'; break;
-    case DocSymbol::Mdash:   s = "--"; break;
-    case DocSymbol::Nbsp:    c = ' '; break;
-    case DocSymbol::Uml:     accent = "umlaut"; break;
-    case DocSymbol::Acute:   accent = "acute"; break;
-    case DocSymbol::Grave:   accent = "grave"; break;
-    case DocSymbol::Circ:    accent = "circ"; break;
-    case DocSymbol::Slash:   accent = "slash"; break;
-    case DocSymbol::Tilde:   accent = "tilde"; break;
-    case DocSymbol::Cedil:   accent = "cedilla"; break;
-    case DocSymbol::Ring:    accent = "ring"; break;
-    case DocSymbol::BSlash:  s = "\\\\"; break;
-    case DocSymbol::Copy:    symbol = "copyright"; break;
-    case DocSymbol::Tm:      symbol = "trademark"; break;
-    case DocSymbol::Reg:     symbol = "registered"; break;
-    case DocSymbol::Szlig:   symbol = "szlig"; break;
-    case DocSymbol::Apos:    s = "\\\'"; break;
-    case DocSymbol::Aelig:   symbol = "aelig"; break;
-    case DocSymbol::AElig:   symbol = "AElig"; break;
-    case DocSymbol::GrkGamma:      symbol = "Gamma"; break;
-    case DocSymbol::GrkDelta:      symbol = "Delta"; break;
-    case DocSymbol::GrkTheta:      symbol = "Theta"; break;
-    case DocSymbol::GrkLambda:     symbol = "Lambda"; break;
-    case DocSymbol::GrkXi:         symbol = "Xi"; break;
-    case DocSymbol::GrkPi:         symbol = "Pi"; break;
-    case DocSymbol::GrkSigma:      symbol = "Sigma"; break;
-    case DocSymbol::GrkUpsilon:    symbol = "Upsilon"; break;
-    case DocSymbol::GrkPhi:        symbol = "Phi"; break;
-    case DocSymbol::GrkPsi:        symbol = "Psi"; break;
-    case DocSymbol::GrkOmega:      symbol = "Omega"; break;
-    case DocSymbol::Grkalpha:      symbol = "alpha"; break;
-    case DocSymbol::Grkbeta:       symbol = "beta"; break;
-    case DocSymbol::Grkgamma:      symbol = "gamma"; break;
-    case DocSymbol::Grkdelta:      symbol = "delta"; break;
-    case DocSymbol::Grkepsilon:    symbol = "epsilon"; break;
-    case DocSymbol::Grkzeta:       symbol = "zeta"; break;
-    case DocSymbol::Grketa:        symbol = "eta"; break;
-    case DocSymbol::Grktheta:      symbol = "theta"; break;
-    case DocSymbol::Grkiota:       symbol = "iota"; break;
-    case DocSymbol::Grkkappa:      symbol = "kappa"; break;
-    case DocSymbol::Grklambda:     symbol = "lambda"; break;
-    case DocSymbol::Grkmu:         symbol = "mu"; break;
-    case DocSymbol::Grknu:         symbol = "nu"; break;
-    case DocSymbol::Grkxi:         symbol = "xi"; break;
-    case DocSymbol::Grkpi:         symbol = "pi"; break;
-    case DocSymbol::Grkrho:        symbol = "rho"; break;
-    case DocSymbol::Grksigma:      symbol = "sigma"; break;
-    case DocSymbol::Grktau:        symbol = "tau"; break;
-    case DocSymbol::Grkupsilon:    symbol = "upsilon"; break;
-    case DocSymbol::Grkphi:        symbol = "phi"; break;
-    case DocSymbol::Grkchi:        symbol = "chi"; break;
-    case DocSymbol::Grkpsi:        symbol = "psi"; break;
-    case DocSymbol::Grkomega:      symbol = "omega"; break;
-    case DocSymbol::Grkvarsigma:   symbol = "sigma"; break;
-    case DocSymbol::Section:       symbol = "sect"; break;
-    case DocSymbol::Degree:        symbol = "deg"; break;
-    case DocSymbol::Prime:         s = "\\\'"; break;
-    case DocSymbol::DoublePrime:   c = '"'; break;
-    case DocSymbol::Infinity:      symbol = "inf"; break;
-    case DocSymbol::EmptySet:      symbol = "empty"; break;
-    case DocSymbol::PlusMinus:     s = "+/-"; break;
-    case DocSymbol::Times:         c = '*'; break;
-    case DocSymbol::Minus:         c = '-'; break;
-    case DocSymbol::CenterDot:     c = '.'; break;
-    case DocSymbol::Partial:       symbol = "partial"; break;
-    case DocSymbol::Nabla:         symbol = "nabla"; break;
-    case DocSymbol::SquareRoot:    symbol = "sqrt"; break;
-    case DocSymbol::Perpendicular: symbol = "perp"; break;
-    case DocSymbol::Sum:           symbol = "sum"; break;
-    case DocSymbol::Integral:      symbol = "int"; break;
-    case DocSymbol::Product:       symbol = "prod"; break;
-    case DocSymbol::Similar:       c = '~'; break;
-    case DocSymbol::Approx:        symbol = "approx"; break;
-    case DocSymbol::NotEqual:      s = "!="; break;
-    case DocSymbol::Equivalent:    symbol = "equiv"; break;
-    case DocSymbol::Proportional:  symbol = "propto"; break;
-    case DocSymbol::LessEqual:     s = "<="; break;
-    case DocSymbol::GreaterEqual:  s = ">="; break;
-    case DocSymbol::LeftArrow:     s = "<-"; break;
-    case DocSymbol::RightArrow:    s = "->"; break;
-    case DocSymbol::SetIn:         symbol = "in"; break;
-    case DocSymbol::SetNotIn:      symbol = "notin"; break;
-    case DocSymbol::LeftCeil:      symbol = "lceil"; break;
-    case DocSymbol::RightCeil:     symbol = "rceil"; break;
-    case DocSymbol::LeftFloor:     symbol = "lfloor"; break;
-    case DocSymbol::RightFloor:    symbol = "rfloor"; break;
-    case DocSymbol::Unknown: err("unknown symbol found\n");
-                             break;
-  }
-  if (c != 0) 
-  {
-    enterText();
-    m_output.add(c);
-  } 
-  else if (s != 0) 
-  {
-    enterText();
-    m_output.add(s);
-  } 
-  else if (symbol != 0) 
-  {
-    leaveText();
-    openItem("symbol");
-    m_output.addFieldQuotedString("symbol", symbol);
-    closeItem();
-  } 
-  else if (accent != 0) 
+    switch (res->type)
+    {
+      case DocSymbol::Perl_string:
+        enterText();
+        m_output.add(res->symb);
+        break;
+      case DocSymbol::Perl_char:
+        enterText();
+        m_output.add(res->symb[0]);
+        break;
+      case DocSymbol::Perl_symbol:
+        leaveText();
+        openItem("symbol");
+        m_output.addFieldQuotedString("symbol", res->symb);
+        closeItem();
+        break;
+      default:
+        switch(res->type)
+        {
+          case DocSymbol::Perl_umlaut:
+            accent = "umlaut";
+            break;
+          case DocSymbol::Perl_acute:
+            accent = "acute";
+            break;
+          case DocSymbol::Perl_grave:
+            accent = "grave";
+            break;
+          case DocSymbol::Perl_circ:
+            accent = "circ";
+            break;
+          case DocSymbol::Perl_slash:
+            accent = "slash";
+            break;
+          case DocSymbol::Perl_tilde:
+            accent = "tilde";
+            break;
+          case DocSymbol::Perl_cedilla:
+            accent = "cedilla";
+            break;
+          case DocSymbol::Perl_ring:
+            accent = "ring";
+            break;
+        }
+        leaveText();
+        openItem("accent");
+        m_output
+          .addFieldQuotedString("accent", accent)
+          .addFieldQuotedChar("letter", res->symb[0]);
+        closeItem();
+        break;
+    }
+  }
+  else
   {
-    leaveText();
-    openItem("accent");
-    m_output
-      .addFieldQuotedString("accent", accent)
-      .addFieldQuotedChar("letter", sy->letter());
-    closeItem();
+    err("perl: non supported HTML-entity found: &%s;\n",get_symbol_item(sy->symbol()));
   }
 }
 
diff --git a/src/printdocvisitor.h b/src/printdocvisitor.h
index 37929fc..4610d43 100644
--- a/src/printdocvisitor.h
+++ b/src/printdocvisitor.h
@@ -56,106 +56,14 @@ class PrintDocVisitor : public DocVisitor
     void visit(DocSymbol *s)
     {
       indent_leaf();
-      switch(s->symbol())
+      const char *res = get_symbol_print(s->symbol());
+      if (res)
       {
-        case DocSymbol::BSlash:  printf("\\"); break;
-        case DocSymbol::At:      printf("@"); break;
-        case DocSymbol::Less:    printf("<"); break;
-        case DocSymbol::Greater: printf(">"); break;
-        case DocSymbol::Amp:     printf("&"); break;
-        case DocSymbol::Dollar:  printf("$"); break;
-        case DocSymbol::Hash:    printf("#"); break;
-        case DocSymbol::Percent: printf("%%"); break;
-        case DocSymbol::Pipe:    printf("|"); break;
-        case DocSymbol::Copy:    printf("&copy;"); break;
-        case DocSymbol::Apos:    printf("'"); break;
-        case DocSymbol::Quot:    printf("\""); break;
-        case DocSymbol::Lsquo:   printf("&lsquo;"); break;
-        case DocSymbol::Rsquo:   printf("&rsquo;"); break;
-        case DocSymbol::Ldquo:   printf("&ldquo;"); break;
-        case DocSymbol::Rdquo:   printf("&rdquo;"); break;
-        case DocSymbol::Ndash:   printf("&ndash;"); break;
-        case DocSymbol::Mdash:   printf("&mdash;"); break;
-        case DocSymbol::Uml:     printf("&%cuml;",s->letter()); break;
-        case DocSymbol::Acute:   printf("&%cacute;",s->letter()); break;
-        case DocSymbol::Grave:   printf("&%cgrave;",s->letter()); break;
-        case DocSymbol::Circ:    printf("&%ccirc;",s->letter()); break;
-        case DocSymbol::Tilde:   printf("&%ctilde;",s->letter()); break;
-        case DocSymbol::Szlig:   printf("&szlig;"); break;
-        case DocSymbol::Cedil:   printf("&%ccedul;",s->letter()); break;
-        case DocSymbol::Ring:    printf("&%cring;",s->letter()); break;
-        case DocSymbol::Nbsp:    printf("&nbsp;"); break;
-        case DocSymbol::Aelig:   printf("&aelig;"); break;
-        case DocSymbol::AElig:   printf("&AElig;"); break;
-        case DocSymbol::GrkGamma:      printf("&Gamma;"); break;
-        case DocSymbol::GrkDelta:      printf("&Delta;"); break;
-        case DocSymbol::GrkTheta:      printf("&Theta;"); break;
-        case DocSymbol::GrkLambda:     printf("&Lambda;"); break;
-        case DocSymbol::GrkXi:         printf("&Xi;"); break;
-        case DocSymbol::GrkPi:         printf("&Pi;"); break;
-        case DocSymbol::GrkSigma:      printf("&Sigma;"); break;
-        case DocSymbol::GrkUpsilon:    printf("&Upsilon;"); break;
-        case DocSymbol::GrkPhi:        printf("&Phi;"); break;
-        case DocSymbol::GrkPsi:        printf("&Psi;"); break;
-        case DocSymbol::GrkOmega:      printf("&Omega;"); break;
-        case DocSymbol::Grkalpha:      printf("&alpha;"); break;
-        case DocSymbol::Grkbeta:       printf("&beta;"); break;
-        case DocSymbol::Grkgamma:      printf("&gamma;"); break;
-        case DocSymbol::Grkdelta:      printf("&delta;"); break;
-        case DocSymbol::Grkepsilon:    printf("&epsilon;"); break;
-        case DocSymbol::Grkzeta:       printf("&zeta;"); break;
-        case DocSymbol::Grketa:        printf("&eta;"); break;
-        case DocSymbol::Grktheta:      printf("&theta;"); break;
-        case DocSymbol::Grkiota:       printf("&iota;"); break;
-        case DocSymbol::Grkkappa:      printf("&kappa;"); break;
-        case DocSymbol::Grklambda:     printf("&lambda;"); break;
-        case DocSymbol::Grkmu:         printf("&mu;"); break;
-        case DocSymbol::Grknu:         printf("&nu;"); break;
-        case DocSymbol::Grkxi:         printf("&xi;"); break;
-        case DocSymbol::Grkpi:         printf("&pi;"); break;
-        case DocSymbol::Grkrho:        printf("&rho;"); break;
-        case DocSymbol::Grksigma:      printf("&sigma;"); break;
-        case DocSymbol::Grktau:        printf("&tau;"); break;
-        case DocSymbol::Grkupsilon:    printf("&upsilon;"); break;
-        case DocSymbol::Grkphi:        printf("&phi;"); break;
-        case DocSymbol::Grkchi:        printf("&chi;"); break;
-        case DocSymbol::Grkpsi:        printf("&psi;"); break;
-        case DocSymbol::Grkomega:      printf("&omega;"); break;
-        case DocSymbol::Grkvarsigma:   printf("&sigmaf;"); break;
-        case DocSymbol::Section:       printf("&sect;"); break;
-        case DocSymbol::Degree:        printf("&deg;"); break;
-        case DocSymbol::Prime:         printf("&prime;"); break;
-        case DocSymbol::DoublePrime:   printf("&Prime;"); break;
-        case DocSymbol::Infinity:      printf("&infin;"); break;
-        case DocSymbol::EmptySet:      printf("&empty;"); break;
-        case DocSymbol::PlusMinus:     printf("&plusmn;"); break;
-        case DocSymbol::Times:         printf("&times;"); break;
-        case DocSymbol::Minus:         printf("&minus;"); break;
-        case DocSymbol::CenterDot:     printf("&sdot;"); break;
-        case DocSymbol::Partial:       printf("&part;"); break;
-        case DocSymbol::Nabla:         printf("&nabla;"); break;
-        case DocSymbol::SquareRoot:    printf("&radic;"); break;
-        case DocSymbol::Perpendicular: printf("&perp;"); break;
-        case DocSymbol::Sum:           printf("&sum;"); break;
-        case DocSymbol::Integral:      printf("&int;"); break;
-        case DocSymbol::Product:       printf("&prod;"); break;
-        case DocSymbol::Similar:       printf("&sim;"); break;
-        case DocSymbol::Approx:        printf("&asymp;"); break;
-        case DocSymbol::NotEqual:      printf("&ne;"); break;
-        case DocSymbol::Equivalent:    printf("&equiv;"); break;
-        case DocSymbol::Proportional:  printf("&prop;"); break;
-        case DocSymbol::LessEqual:     printf("&le;"); break;
-        case DocSymbol::GreaterEqual:  printf("&ge;"); break;
-        case DocSymbol::LeftArrow:     printf("&larr;"); break;
-        case DocSymbol::RightArrow:    printf("&rarr;"); break;
-        case DocSymbol::SetIn:         printf("&isin;"); break;
-        case DocSymbol::SetNotIn:      printf("&notin;"); break;
-        case DocSymbol::LeftCeil:      printf("&lceil;"); break;
-        case DocSymbol::RightCeil:     printf("&rceil;"); break;
-        case DocSymbol::LeftFloor:     printf("&lfloor;"); break;
-        case DocSymbol::RightFloor:    printf("&rfloor;"); break;
-        default:
-          printf("unknown symbol found\n");
+        printf("%s",res);
+      }
+      else
+      {
+        printf("print: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
       }
     }
     void visit(DocURL *u)
diff --git a/src/rtfdocvisitor.cpp b/src/rtfdocvisitor.cpp
index 7c2fef8..5aaa16a 100644
--- a/src/rtfdocvisitor.cpp
+++ b/src/rtfdocvisitor.cpp
@@ -121,198 +121,14 @@ void RTFDocVisitor::visit(DocSymbol *s)
 {
   if (m_hide) return;
   DBG_RTF("{\\comment RTFDocVisitor::visit(DocSymbol)}\n");
-  switch(s->symbol())
+  const char *res = get_symbol_rtf(s->symbol());
+  if (res)
   {
-    case DocSymbol::BSlash:  m_t << "\\\\"; break;
-    case DocSymbol::At:      m_t << "@"; break;
-    case DocSymbol::Less:    m_t << "<"; break;
-    case DocSymbol::Greater: m_t << ">"; break;
-    case DocSymbol::Amp:     m_t << "&"; 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 << "(C)"; break;
-    case DocSymbol::Tm:      m_t << "(TM)"; break;
-    case DocSymbol::Reg:     m_t << "(R)"; break;
-    case DocSymbol::Apos:    m_t << "'"; break;
-    case DocSymbol::Quot:    m_t << "\""; break;
-    case DocSymbol::Lsquo:   m_t << "`"; break;
-    case DocSymbol::Rsquo:   m_t << "'"; break;
-    case DocSymbol::Ldquo:   m_t << "\""; break;
-    case DocSymbol::Rdquo:   m_t << "\""; break;
-    case DocSymbol::Ndash:   m_t << "-"; break;
-    case DocSymbol::Mdash:   m_t << "--"; break;
-    case DocSymbol::Uml:     switch(s->letter())
-                             {
-                               case 'A' : m_t << '\304'; break;
-                               case 'E' : m_t << '\313'; break;
-                               case 'I' : m_t << '\317'; break;
-                               case 'O' : m_t << '\326'; break;
-                               case 'U' : m_t << '\334'; break;
-                               case 'Y' : m_t << 'Y';    break;
-                               case 'a' : m_t << '\344'; break;
-                               case 'e' : m_t << '\353'; break;
-                               case 'i' : m_t << '\357'; break;
-                               case 'o' : m_t << '\366'; break;
-                               case 'u' : m_t << '\374'; break;
-                               case 'y' : m_t << '\377'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Acute:   switch(s->letter())
-                             {
-                               case 'A' : m_t << '\301'; break;
-                               case 'E' : m_t << '\311'; break;
-                               case 'I' : m_t << '\315'; break;
-                               case 'O' : m_t << '\323'; break;
-                               case 'U' : m_t << '\332'; break;
-                               case 'Y' : m_t << '\335'; break;
-                               case 'a' : m_t << '\341'; break;
-                               case 'e' : m_t << '\351'; break;
-                               case 'i' : m_t << '\355'; break;
-                               case 'o' : m_t << '\363'; break;
-                               case 'u' : m_t << '\372'; break;
-                               case 'y' : m_t << '\375'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Grave:   switch(s->letter())
-                             {
-                               case 'A' : m_t << '\300'; break;
-                               case 'E' : m_t << '\310'; break;
-                               case 'I' : m_t << '\314'; break;
-                               case 'O' : m_t << '\322'; break;
-                               case 'U' : m_t << '\331'; break;
-                               case 'a' : m_t << '\340'; break;
-                               case 'e' : m_t << '\350'; break;
-                               case 'i' : m_t << '\354'; break;
-                               case 'o' : m_t << '\362'; break;
-                               case 'u' : m_t << '\371'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Circ:    switch(s->letter())
-                             {
-                               case 'A' : m_t << '\302'; break;
-                               case 'E' : m_t << '\312'; break;
-                               case 'I' : m_t << '\316'; break;
-                               case 'O' : m_t << '\324'; break;
-                               case 'U' : m_t << '\333'; break;
-                               case 'a' : m_t << '\342'; break;
-                               case 'e' : m_t << '\352'; break;
-                               case 'i' : m_t << '\356'; break;
-                               case 'o' : m_t << '\364'; break;
-                               case 'u' : m_t << '\373'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Tilde:   switch(s->letter())
-                             {
-                               case 'A' : m_t << '\303'; break;
-                               case 'N' : m_t << '\321'; break;
-                               case 'O' : m_t << '\325'; break;
-                               case 'a' : m_t << '\343'; break;
-                               case 'n' : m_t << '\361'; break;
-                               case 'o' : m_t << '\365'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Cedil:   switch(s->letter())
-                             {
-                               case 'C' : m_t << '\307'; break;
-                               case 'c' : m_t << '\347'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Slash:   switch(s->letter())
-                             {
-                               case 'O' : m_t << '\330'; break;
-                               case 'o' : m_t << '\370'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Ring:    switch(s->letter())
-                             {
-                               case 'A' : m_t << '\305'; break;
-                               case 'a' : m_t << '\345'; break;
-                               default: m_t << '?'; break;
-                             }
-                             break;
-    case DocSymbol::Szlig:   m_t << "\337"; break;
-    case DocSymbol::Nbsp:    m_t << "\\~ "; break;
-    case DocSymbol::Aelig:   m_t << "\346"; break;
-    case DocSymbol::AElig:   m_t << "\306"; 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 << "sigma "; break;
-    case DocSymbol::Section:         m_t << "\247"; break;
-    case DocSymbol::Degree:          m_t << "\260"; break;
-    case DocSymbol::Prime:           m_t << "'"; break;
-    case DocSymbol::DoublePrime:     m_t << "\""; break;
-    case DocSymbol::Infinity:        m_t << "inf "; break;
-    case DocSymbol::EmptySet:        m_t << "empty "; break;
-    case DocSymbol::PlusMinus:       m_t << "\261"; break;
-    case DocSymbol::Times:           m_t << "\327"; break;
-    case DocSymbol::Minus:           m_t << "-"; break;
-    case DocSymbol::CenterDot:       m_t << "."; break;
-    case DocSymbol::Partial:         m_t << "partial "; break;
-    case DocSymbol::Nabla:           m_t << "nabla "; break;
-    case DocSymbol::SquareRoot:      m_t << "sqrt "; 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 << "~"; break;
-    case DocSymbol::Approx:          m_t << "approx "; break;
-    case DocSymbol::NotEqual:        m_t << "!="; break;
-    case DocSymbol::Equivalent:      m_t << "equiv "; break;
-    case DocSymbol::Proportional:    m_t << "propto "; break;
-    case DocSymbol::LessEqual:       m_t << "<="; break;
-    case DocSymbol::GreaterEqual:    m_t << ">="; break;
-    case DocSymbol::LeftArrow:       m_t << "<-"; break;
-    case DocSymbol::RightArrow:      m_t << "->"; break;
-    case DocSymbol::SetIn:           m_t << "in "; 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");
+    m_t << res;
+  }
+  else
+  {
+    err("RTF: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
   m_lastIsPara=FALSE;
 }
diff --git a/src/textdocvisitor.cpp b/src/textdocvisitor.cpp
index 9275846..1761d12 100644
--- a/src/textdocvisitor.cpp
+++ b/src/textdocvisitor.cpp
@@ -19,115 +19,20 @@
 #include <qdir.h>
 #include "textdocvisitor.h"
 #include "message.h"
+#include "util.h"
 
 //-------------------------------------------------------------------------
 
 void TextDocVisitor::visit(DocSymbol *s)
 {
-  switch(s->symbol())
+  const char *res = get_symbol_text(s->symbol());
+  if (res)
   {
-    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 << "&tm;"; 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 << "&nbsp;"; 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");
+    m_t << res;
+  }
+  else
+  {
+    err("text: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
 }
 
diff --git a/src/util.cpp b/src/util.cpp
index 91f6fda..66e2cfd 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,5 +1,4 @@
 /*****************************************************************************
- *
  * 
  *
  * Copyright (C) 1997-2013 by Dimitri van Heesch.
@@ -5680,141 +5679,16 @@ QCString convertCharEntitiesToUTF8(const QCString &s)
   static QDict<char> entityMap(127);
   static bool init=TRUE;
   QCString result;
-  static QRegExp entityPat("&[a-zA-Z]+;");
+  static QRegExp entityPat("&[a-zA-Z]+[0-9]*;");
 
   if (init)
   {
-    entityMap.insert("copy",       "\xC2\xA9");
-    entityMap.insert("tm",         "\xE2\x84\xA2");
-    entityMap.insert("trade",      "\xE2\x84\xA2");
-    entityMap.insert("reg",        "\xC2\xAE");
-    entityMap.insert("lsquo",      "\xE2\x80\x98");
-    entityMap.insert("rsquo",      "\xE2\x80\x99");
-    entityMap.insert("ldquo",      "\xE2\x80\x9C");
-    entityMap.insert("rdquo",      "\xE2\x80\x9D");
-    entityMap.insert("ndash",      "\xE2\x80\x93");
-    entityMap.insert("mdash",      "\xE2\x80\x94");
-    entityMap.insert("Auml",       "\xC3\x84");
-    entityMap.insert("Euml",       "\xC3\x8B");
-    entityMap.insert("Iuml",       "\xC3\x8F");
-    entityMap.insert("Ouml",       "\xC3\x96");
-    entityMap.insert("Uuml",       "\xC3\x9C");
-    entityMap.insert("Yuml",       "\xC5\xB8");
-    entityMap.insert("auml",       "\xC3\xA4");
-    entityMap.insert("euml",       "\xC3\xAB");
-    entityMap.insert("iuml",       "\xC3\xAF");
-    entityMap.insert("ouml",       "\xC3\xB6");
-    entityMap.insert("uuml",       "\xC3\xBC");
-    entityMap.insert("yuml",       "\xC3\xBF");
-    entityMap.insert("Aacute",     "\xC3\x81");
-    entityMap.insert("Eacute",     "\xC3\x89");
-    entityMap.insert("Iacute",     "\xC3\x8D");
-    entityMap.insert("Oacute",     "\xC3\x93");
-    entityMap.insert("Uacute",     "\xC3\x9A");
-    entityMap.insert("aacute",     "\xC3\xA1");
-    entityMap.insert("eacute",     "\xC3\xA9");
-    entityMap.insert("iacute",     "\xC3\xAD");
-    entityMap.insert("oacute",     "\xC3\xB3");
-    entityMap.insert("uacute",     "\xC3\xBA");
-    entityMap.insert("Agrave",     "\xC3\x80");
-    entityMap.insert("Egrave",     "\xC3\x88");
-    entityMap.insert("Igrave",     "\xC3\x8C");
-    entityMap.insert("Ograve",     "\xC3\x92");
-    entityMap.insert("Ugrave",     "\xC3\x99");
-    entityMap.insert("agrave",     "\xC3\xA0");
-    entityMap.insert("egrave",     "\xC3\xA8");
-    entityMap.insert("igrave",     "\xC3\xAC");
-    entityMap.insert("ograve",     "\xC3\xB2");
-    entityMap.insert("ugrave",     "\xC3\xB9");
-    entityMap.insert("Acirc",      "\xC3\x82");
-    entityMap.insert("Ecirc",      "\xC3\x8A");
-    entityMap.insert("Icirc",      "\xC3\x8E");
-    entityMap.insert("Ocirc",      "\xC3\x94");
-    entityMap.insert("Ucirc",      "\xC3\x9B");
-    entityMap.insert("acirc",      "\xC3\xA2");
-    entityMap.insert("ecirc",      "\xC3\xAA");
-    entityMap.insert("icirc",      "\xC3\xAE");
-    entityMap.insert("ocirc",      "\xC3\xB4");
-    entityMap.insert("ucirc",      "\xC3\xBB");
-    entityMap.insert("Atilde",     "\xC3\x83");
-    entityMap.insert("Ntilde",     "\xC3\x91");
-    entityMap.insert("Otilde",     "\xC3\x95");
-    entityMap.insert("atilde",     "\xC3\xA3");
-    entityMap.insert("ntilde",     "\xC3\xB1");
-    entityMap.insert("otilde",     "\xC3\xB5");
-    entityMap.insert("szlig",      "\xC3\x9F");
-    entityMap.insert("Ccedil",     "\xC3\x87");
-    entityMap.insert("ccedil",     "\xC3\xA7");
-    entityMap.insert("Aring",      "\xC3\x85");
-    entityMap.insert("aring",      "\xC3\xA5");
-    entityMap.insert("nbsp",       "\xC2\xA0");
-    entityMap.insert("Gamma",      "\xCE\x93");
-    entityMap.insert("Delta",      "\xCE\x94");
-    entityMap.insert("Theta",      "\xCE\x98");
-    entityMap.insert("Lambda",     "\xCE\x9B");
-    entityMap.insert("Xi",         "\xCE\x9E");
-    entityMap.insert("Pi",         "\xCE\xA0");
-    entityMap.insert("Sigma",      "\xCE\xA3");
-    entityMap.insert("Upsilon",    "\xCE\xA5");
-    entityMap.insert("Phi",        "\xCE\xA6");
-    entityMap.insert("Psi",        "\xCE\xA8");
-    entityMap.insert("Omega",      "\xCE\xA9");
-    entityMap.insert("alpha",      "\xCE\xB1");
-    entityMap.insert("beta",       "\xCE\xB2");
-    entityMap.insert("gamma",      "\xCE\xB3");
-    entityMap.insert("delta",      "\xCE\xB4");
-    entityMap.insert("epsilon",    "\xCE\xB5");
-    entityMap.insert("zeta",       "\xCE\xB6");
-    entityMap.insert("eta",        "\xCE\xB7");
-    entityMap.insert("theta",      "\xCE\xB8");
-    entityMap.insert("iota",       "\xCE\xB9");
-    entityMap.insert("kappa",      "\xCE\xBA");
-    entityMap.insert("lambda",     "\xCE\xBB");
-    entityMap.insert("mu",         "\xCE\xBC");
-    entityMap.insert("nu",         "\xCE\xBD");
-    entityMap.insert("xi",         "\xCE\xBE");
-    entityMap.insert("pi",         "\xCF\x80");
-    entityMap.insert("rho",        "\xCF\x81");
-    entityMap.insert("sigma",      "\xCF\x83");
-    entityMap.insert("tau",        "\xCF\x84");
-    entityMap.insert("upsilon",    "\xCF\x85");
-    entityMap.insert("phi",        "\xCF\x86");
-    entityMap.insert("chi",        "\xCF\x87");
-    entityMap.insert("psi",        "\xCF\x88");
-    entityMap.insert("omega",      "\xCF\x89");
-    entityMap.insert("sigmaf",     "\xCF\x82");
-    entityMap.insert("sect",       "\xC2\xA7");
-    entityMap.insert("deg",        "\xC2\xB0");
-    entityMap.insert("prime",      "\xE2\x80\xB2");
-    entityMap.insert("Prime",      "\xE2\x80\xB3");
-    entityMap.insert("infin",      "\xE2\x88\x9E");
-    entityMap.insert("empty",      "\xE2\x88\x85");
-    entityMap.insert("plusmn",     "\xC2\xB1");
-    entityMap.insert("times",      "\xC3\x97");
-    entityMap.insert("minus",      "\xE2\x88\x92");
-    entityMap.insert("sdot",       "\xE2\x8B\x85");
-    entityMap.insert("part",       "\xE2\x88\x82");
-    entityMap.insert("nabla",      "\xE2\x88\x87");
-    entityMap.insert("radic",      "\xE2\x88\x9A");
-    entityMap.insert("perp",       "\xE2\x8A\xA5");
-    entityMap.insert("sum",        "\xE2\x88\x91");
-    entityMap.insert("int",        "\xE2\x88\xAB");
-    entityMap.insert("prod",       "\xE2\x88\x8F");
-    entityMap.insert("sim",        "\xE2\x88\xBC");
-    entityMap.insert("asymp",      "\xE2\x89\x88");
-    entityMap.insert("ne",         "\xE2\x89\xA0");
-    entityMap.insert("equiv",      "\xE2\x89\xA1");
-    entityMap.insert("prop",       "\xE2\x88\x9D");
-    entityMap.insert("le",         "\xE2\x89\xA4");
-    entityMap.insert("ge",         "\xE2\x89\xA5");
-    entityMap.insert("larr",       "\xE2\x86\x90");
-    entityMap.insert("rarr",       "\xE2\x86\x92");
-    entityMap.insert("isin",       "\xE2\x88\x88");
-    entityMap.insert("notin",      "\xE2\x88\x89");
-    entityMap.insert("lceil",      "\xE2\x8C\x88");
-    entityMap.insert("rceil",      "\xE2\x8C\x89");
-    entityMap.insert("lfloor",     "\xE2\x8C\x8A");
-    entityMap.insert("rfloor",     "\xE2\x8C\x8B");
+    validate_html_entities();
+    int num_standard_symbols = get_num_standard_symbols();
+    for (int i = 0; i < num_standard_symbols; i++)
+    {
+      entityMap.insert(get_symbol_item((DocSymbol::SymType)i), get_symbol_UTF8((DocSymbol::SymType)i));
+    }
     init=FALSE;
   }
 
@@ -8339,3 +8213,445 @@ void convertProtectionLevel(
   //printf("convertProtectionLevel(type=%d prot=%d): %d,%d\n",
   //    inListType,inProt,*outListType1,*outListType2);
 }
+
+//! Number of doxygen commands mapped as if it were HTML entities
+static const int number_html_mapped_cmds = 11;
+
+//! @brief Structure defining all HTML4 entities, doxygen extensions and doxygen commands representing special symbols.
+//! @details In case an entity does not exist a NULL is given for the entity. The first column contains the symbolic code
+//!          for the entity, see also doxparser.h The second column contains the name of the enitity (without the starting \& and
+//!          ending ;)
+static struct html_ent
+{
+  DocSymbol::SymType symb;
+  const char *item;
+  const char *UTF8;
+  const char *html;
+  const char *print;
+  const char *text;
+  const char *xml;
+  const char *docbook;
+  const char *latex;
+  const char *man;
+  const char *rtf;
+  DocSymbol::PerlSymb perl;
+} html_entities[] = 
+{
+  // HTML4 entities
+  {DocSymbol::Sym_nbsp, "nbsp", "\xc2\xa0", "&#160;", "&nbsp;", "&nbsp;", "<nonbreakablespace/>", "&#160;", "~", " ", "\\~", {" ",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_iexcl, "iexcl", "\xc2\xa1", "&iexcl;", "&iexcl;", "&iexcl;", "<iexcl/>", "&#161;", "!`", NULL, "\\'A1", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_cent, "cent", "\xc2\xa2", "&cent;", "&cent;", "&cent;", "<cent/>", "&#162;", "\\textcent{}", NULL, "\\'A2", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_pound, "pound", "\xc2\xa3", "&pound;", "&pound;", "&pound;", "<pound/>", "&#163;", "{$\\pounds$}", NULL, "\\'A3", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_curren, "curren", "\xc2\xa4", "&curren;", "&curren;", "&curren;", "<curren/>", "&#164;", "\\textcurrency{}", NULL, "\\'A4", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_yen, "yen", "\xc2\xa5", "&yen;", "&yen;", "&yen;", "<yen/>", "&#165;", "{$\\yen$}", NULL, "\\'A5", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_brvbar, "brvbar", "\xc2\xa6", "&brvbar;", "&brvbar;", "&brvbar;", "<brvbar/>", "&#166;", "\\textbrokenbar{}", NULL, "\\'A6", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_sect, "sect", "\xc2\xa7", "&sect;", "&sect;", "&sect;", "<sect/>", "<simplesect/>", "{$\\S$}", NULL, "\\'A7", {"sect",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_uml, "uml", "\xc2\xa8", "&uml;", "&uml;", "&uml;", "<umlaut/>", "&#168;", "\\textasciidieresis{}", " \\*(4", "\\'A8", {" ",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_copy, "copy", "\xc2\xa9", "&copy;", "&copy;", "&copy;", "<copy/>", "&#169;", "\\copyright{}", "(C)", "\\'A9", {"copyright",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_ordf, "ordf", "\xc2\xaa", "&ordf;", "&ordf;", "&ordf;", "<ordf/>", "&#170;", "\\textordfeminine{}", NULL, "\\'AA", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_laquo, "laquo", "\xc2\xab", "&laquo;", "&laquo;", "&laquo;", "<laquo/>", "&#171;", "\\guillemotleft{}", NULL, "\\'AB", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_not, "not", "\xc2\xac", "&not;", "&not;", "&not;", "<not/>", "&#172;", "\\textlnot", NULL, "\\'AC", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_shy, "shy", "\xc2\xad", "&shy;", "&shy;", "&shy;", "<shy/>", "&#173;", "{$\\-$}", NULL, "\\-", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_reg, "reg", "\xc2\xae", "&reg;", "&reg;", "&reg;", "<registered/>", "&#174;", "\\textregistered{}", "(R)", "\\'AE", {"registered",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_macr, "macr", "\xc2\xaf", "&macr;", "&macr;", "&macr;", "<macr/>", "&#175;", "\\={}", NULL, "\\'AF ", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_deg, "deg", "\xc2\xb0", "&deg;", "&deg;", "&deg;", "<deg/>", "&#176;", "\\textdegree", NULL, "\\'B0", {"deg",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_plusmn, "plusmn", "\xc2\xb1", "&plusmn;", "&plusmn;", "&plusmn;", "<plusmn/>", "&#177;", "{$\\pm$}", NULL, "\\'B1", {"+/-",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_sup2, "sup2", "\xc2\xb2", "&sup2;", "&sup2;", "&sup2;", "<sup2/>", "&#178;", "\\texttwosuperior{}", NULL, "\\'B2", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_sup3, "sup3", "\xc2\xb3", "&sup3;", "&sup3;", "&sup3;", "<sup3/>", "&#179;", "\\textthreesuperior{}", NULL, "\\'B3", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_acute, "acute", "\xc2\xb4", "&acute;", "&acute;", "&acute;", "<acute/>", "&#180;", "\\'{}", NULL, "\\'B4", {" ",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_micro, "micro", "\xc2\xb5", "&micro;", "&micro;", "&micro;", "<micro/>", "&#181;", "{$\\mu$}", NULL, "\\'B5", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_para, "para", "\xc2\xb6", "&para;", "&para;", "&para;", "<para/>", "&#182;", "{$\\P$}", NULL, "\\'B6", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_middot, "middot", "\xc2\xb7", "&middot;", "&middot;", "&middot;", "<middot/>", "&#183;", "\\textperiodcentered{}", NULL, "\\'B7", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_cedil, "cedil", "\xc2\xb8", "&cedil;", "&cedil;", "&cedil;", "<cedil/>", "&#184;", "\\c{}", " \\*,", "\\'B8", {" ",DocSymbol::Perl_cedilla}},
+  {DocSymbol::Sym_sup1, "sup1", "\xc2\xb9", "&sup1;", "&sup1;", "&sup1;", "<sup1/>", "&#185;", "\\textonesuperior{}", NULL, "\\'B9", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_ordm, "ordm", "\xc2\xba", "&ordm;", "&ordm;", "&ordm;", "<ordm/>", "&#186;", "\\textordmasculine{}", NULL, "\\'BA", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_raquo, "raquo", "\xc2\xbb", "&raquo;", "&raquo;", "&raquo;", "<raquo/>", "&#187;", "\\guillemotright{}", NULL, "\\'BB", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_frac14, "frac14", "\xc2\xbc", "&frac14;", "&frac14;", "&frac14;", "<frac14/>", "&#188;", "{$\\frac14$}", "1/4", "\\'BC", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_frac12, "frac12", "\xc2\xbd", "&frac12;", "&frac12;", "&frac12;", "<frac12/>", "&#189;", "{$\\frac12$}", "1/2", "\\'BD", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_frac34, "frac34", "\xc2\xbe", "&frac34;", "&frac34;", "&frac34;", "<frac34/>", "&#190;", "{$\\frac34$}", "3/4", "\\'BE", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_iquest, "iquest", "\xc2\xbf", "&iquest;", "&iquest;", "&iquest;", "<iquest/>", "&#191;", "?`", NULL, "\\'BF", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Agrave, "Agrave", "\xc3\x80", "&Agrave;", "&Agrave;", "&Agrave;", "<Agrave/>", "&#192;", "\\`{A}", "A\\*:", "\\'C0", {"A",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_Aacute, "Aacute", "\xc3\x81", "&Aacute;", "&Aacute;", "&Aacute;", "<Aacute/>", "&#193;", "\\'{A}", "A\\*(`", "\\'C1", {"A",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_Acirc, "Acirc", "\xc3\x82", "&Acirc;", "&Acirc;", "&Acirc;", "<Acirc/>", "&#194;", "\\^{A}", "A\\*^", "\\'C2", {"A",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_Atilde, "Atilde", "\xc3\x83", "&Atilde;", "&Atilde;", "&Atilde;", "<Atilde/>", "&#195;", "\\~{A}", "A\\*~", "\\'C3", {"A",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_Auml, "Auml", "\xc3\x84", "&Auml;", "&Auml;", "&Auml;", "<Aumlaut/>", "&#196;", "\\\"{A}", "A\\*(4", "\\'C4", {"A",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_Aring, "Aring", "\xc3\x85", "&Aring;", "&Aring;", "&Aring;", "<Aring/>", "&#197;", "\\AA", "A\\*o", "\\'C5", {"A",DocSymbol::Perl_ring}},
+  {DocSymbol::Sym_AElig, "AElig", "\xc3\x86", "&AElig;", "&AElig;", "&AElig;", "<AElig/>", "&#198;", "{\\AE}", NULL, "\\'C6", {"AElig",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Ccedil, "Ccedil", "\xc3\x87", "&Ccedil;", "&Ccedil;", "&Ccedil;", "<Ccedil/>", "&#199;", "\\c{C}", "C\\*,", "\\'C7", {"C",DocSymbol::Perl_cedilla}},
+  {DocSymbol::Sym_Egrave, "Egrave", "\xc3\x88", "&Egrave;", "&Egrave;", "&Egrave;", "<Egrave/>", "&#200;", "\\`{E}", "E\\*:", "\\'C8", {"E",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_Eacute, "Eacute", "\xc3\x89", "&Eacute;", "&Eacute;", "&Eacute;", "<Eacute/>", "&#201;", "\\'{E}", "E\\*(`", "\\'C9", {"E",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_Ecirc, "Ecirc", "\xc3\x8a", "&Ecirc;", "&Ecirc;", "&Ecirc;", "<Ecirc/>", "&#202;", "\\^{E}", "E\\*^", "\\'CA", {"E",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_Euml, "Euml", "\xc3\x8b", "&Euml;", "&Euml;", "&Euml;", "<Eumlaut/>", "&#203;", "\\\"{E}", "E\\*(4", "\\'CB", {"E",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_Igrave, "Igrave", "\xc3\x8c", "&Igrave;", "&Igrave;", "&Igrave;", "<Igrave/>", "&#204;", "\\`{I}", "I\\*:", "\\'CC", {"I",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_Iacute, "Iacute", "\xc3\x8d", "&Iacute;", "&Iacute;", "&Iacute;", "<Iacute/>", "&#205;", "\\'{I}", "I\\*(`", "\\'CD", {"I",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_Icirc, "Icirc", "\xc3\x8e", "&Icirc;", "&Icirc;", "&Icirc;", "<Icirc/>", "&#206;", "\\^{I}", "I\\*^", "\\'CE", {"I",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_Iuml, "Iuml", "\xc3\x8f", "&Iuml;", "&Iuml;", "&Iuml;", "<Iumlaut/>", "&#207;", "\\\"{I}", "I\\*(4", "\\'CF", {"I",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_ETH, "ETH", "\xc3\x90", "&ETH;", "&ETH;", "&ETH;", "<ETH/>", "&#208;", "\\DH", NULL, "\\'D0", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Ntilde, "Ntilde", "\xc3\x91", "&Ntilde;", "&Ntilde;", "&Ntilde;", "<Ntilde/>", "&#209;", "\\~{N}", "N\\*~", "\\'D1", {"N",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_Ograve, "Ograve", "\xc3\x92", "&Ograve;", "&Ograve;", "&Ograve;", "<Ograve/>", "&#210;", "\\`{O}", "O\\*:", "\\'D2", {"O",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_Oacute, "Oacute", "\xc3\x93", "&Oacute;", "&Oacute;", "&Oacute;", "<Oacute/>", "&#211;", "\\'{O}", "O\\*(`", "\\'D3", {"O",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_Ocirc, "Ocirc", "\xc3\x94", "&Ocirc;", "&Ocirc;", "&Ocirc;", "<Ocirc/>", "&#212;", "\\^{O}", "O\\*^", "\\'D4", {"O",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_Otilde, "Otilde", "\xc3\x95", "&Otilde;", "&Otilde;", "&Otilde;", "<Otilde/>", "&#213;", "\\~{O}", "O\\*~", "\\'D5", {"O",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_Ouml, "Ouml", "\xc3\x96", "&Ouml;", "&Ouml;", "&Ouml;", "<Oumlaut/>", "&#214;", "\\\"{O}", "O\\*(4", "\\'D6", {"O",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_times, "times", "\xc3\x97", "&times;", "&times;", "&times;", "<imes/>", "&#215;", "{$\\times$}", NULL, "\\'D7", {"*",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Oslash, "Oslash", "\xc3\x98", "&Oslash;", "&Oslash;", "&Oslash;", "<Oslash/>", "&#216;", "{\\O}", "O\x08/", "\\'D8", {"O",DocSymbol::Perl_slash}},
+  {DocSymbol::Sym_Ugrave, "Ugrave", "\xc3\x99", "&Ugrave;", "&Ugrave;", "&Ugrave;", "<Ugrave/>", "&#217;", "\\`{U}", "U\\*:", "\\'D9", {"U",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_Uacute, "Uacute", "\xc3\x9a", "&Uacute;", "&Uacute;", "&Uacute;", "<Uacute/>", "&#218;", "\\'{U}", "U\\*(`", "\\'DA", {"U",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_Ucirc, "Ucirc", "\xc3\x9b", "&Ucirc;", "&Ucirc;", "&Ucirc;", "<Ucirc/>", "&#219;", "\\^{U}", "U\\*^", "\\'DB", {"U",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_Uuml, "Uuml", "\xc3\x9c", "&Uuml;", "&Uuml;", "&Uuml;", "<Uumlaut/>", "&#220;", "\\\"{U}", "U\\*(4", "\\'DC", {"U",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_Yacute, "Yacute", "\xc3\x9d", "&Yacute;", "&Yacute;", "&Yacute;", "<Yacute/>", "&#221;", "\\'{Y}", "Y\\*(`", "\\'DD", {"Y",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_THORN, "THORN", "\xc3\x9e", "&THORN;", "&THORN;", "&THORN;", "<THORN/>", "&#222;", "\\TH", NULL, "\\'DE", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_szlig, "szlig", "\xc3\x9f", "&szlig;", "&szlig;", "&szlig;", "<szlig/>", "&#223;", "{\\ss}", "s\\*:", "\\'DF", {"szlig",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_agrave, "agrave", "\xc3\xa0", "&agrave;", "&agrave;", "&agrave;", "<agrave/>", "&#224;", "\\`{a}", "a\\*:", "\\'E0", {"a",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_aacute, "aacute", "\xc3\xa1", "&aacute;", "&aacute;", "&aacute;", "<aacute/>", "&#225;", "\\'{a}", "a\\*(`", "\\'E1", {"a",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_acirc, "acirc", "\xc3\xa2", "&acirc;", "&acirc;", "&acirc;", "<acirc/>", "&#226;", "\\^{a}", "a\\*^", "\\'E2", {"a",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_atilde, "atilde", "\xc3\xa3", "&atilde;", "&atilde;", "&atilde;", "<atilde/>", "&#227;", "\\~{a}", "a\\*~", "\\'E3", {"a",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_auml, "auml", "\xc3\xa4", "&auml;", "&auml;", "&auml;", "<aumlaut/>", "&#228;", "\\\"{a}", "a\\*(4", "\\'E4", {"a",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_aring, "aring", "\xc3\xa5", "&aring;", "&aring;", "&aring;", "<aring/>", "&#229;", "\\aa", "a\\*o", "\\'E5", {"a",DocSymbol::Perl_ring}},
+  {DocSymbol::Sym_aelig, "aelig", "\xc3\xa6", "&aelig;", "&aelig;", "&aelig;", "<aelig/>", "&#230;", "{\\ae}", NULL, "\\'E6", {"aelig",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_ccedil, "ccedil", "\xc3\xa7", "&ccedil;", "&ccedil;", "&ccedil;", "<ccedil/>", "&#231;", "\\c{c}", "c\\*,", "\\'E7", {"c",DocSymbol::Perl_cedilla}},
+  {DocSymbol::Sym_egrave, "egrave", "\xc3\xa8", "&egrave;", "&egrave;", "&egrave;", "<egrave/>", "&#232;", "\\`{e}", "e\\*:", "\\'E8", {"e",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_eacute, "eacute", "\xc3\xa9", "&eacute;", "&eacute;", "&eacute;", "<eacute/>", "&#233;", "\\'{e}", "e\\*(`", "\\'E9", {"e",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_ecirc, "ecirc", "\xc3\xaa", "&ecirc;", "&ecirc;", "&ecirc;", "<ecirc/>", "&#234;", "\\^{e}", "e\\*^", "\\'EA", {"e",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_euml, "euml", "\xc3\xab", "&euml;", "&euml;", "&euml;", "<eumlaut/>", "&#235;", "\\\"{e}", "e\\*(4", "\\'EB", {"e",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_igrave, "igrave", "\xc3\xac", "&igrave;", "&igrave;", "&igrave;", "<igrave/>", "&#236;", "\\`{\\i}", "i\\*:", "\\'EC", {"i",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_iacute, "iacute", "\xc3\xad", "&iacute;", "&iacute;", "&iacute;", "<iacute/>", "&#237;", "\\'{\\i}", "i\\*(`", "\\'ED", {"i",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_icirc, "icirc", "\xc3\xae", "&icirc;", "&icirc;", "&icirc;", "<icirc/>", "&#238;", "\\^{\\i}", "i\\*^", "\\'EE", {"i",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_iuml, "iuml", "\xc3\xaf", "&iuml;", "&iuml;", "&iuml;", "<iumlaut/>", "&#239;", "\\\"{\\i}", "i\\*(4", "\\'EF", {"i",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_eth, "eth", "\xc3\xb0", "&eth;", "&eth;", "&eth;", "<eth/>", "&#240;", "\\dh", NULL, "\\'F0", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_ntilde, "ntilde", "\xc3\xb1", "&ntilde;", "&ntilde;", "&ntilde;", "<ntilde/>", "&#241;", "\\~{n}", "n\\*~", "\\'F1", {"n",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_ograve, "ograve", "\xc3\xb2", "&ograve;", "&ograve;", "&ograve;", "<ograve/>", "&#242;", "\\`{o}", "o\\*:", "\\'F2", {"o",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_oacute, "oacute", "\xc3\xb3", "&oacute;", "&oacute;", "&oacute;", "<oacute/>", "&#243;", "\\'{o}", "o\\*(`", "\\'F3", {"o",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_ocirc, "ocirc", "\xc3\xb4", "&ocirc;", "&ocirc;", "&ocirc;", "<ocirc/>", "&#244;", "\\^{o}", "o\\*^", "\\'F4", {"o",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_otilde, "otilde", "\xc3\xb5", "&otilde;", "&otilde;", "&otilde;", "<otilde/>", "&#245;", "\\~{o}", "o\\*~", "\\'F5", {"o",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_ouml, "ouml", "\xc3\xb6", "&ouml;", "&ouml;", "&ouml;", "<oumlaut/>", "&#246;", "\\\"{o}", "o\\*(4", "\\'F6", {"o",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_divide, "divide", "\xc3\xb7", "&divide;", "&divide;", "&divide;", "<divide/>", "&#247;", "{$\\div$}", NULL, "\\'F7", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_oslash, "oslash", "\xc3\xb8", "&oslash;", "&oslash;", "&oslash;", "<oslash/>", "&#248;", "{\\o}", "o\x08/", "\\'F8", {"o",DocSymbol::Perl_slash}},
+  {DocSymbol::Sym_ugrave, "ugrave", "\xc3\xb9", "&ugrave;", "&ugrave;", "&ugrave;", "<ugrave/>", "&#249;", "\\`{u}", "u\\*:", "\\'F9", {"u",DocSymbol::Perl_grave}},
+  {DocSymbol::Sym_uacute, "uacute", "\xc3\xba", "&uacute;", "&uacute;", "&uacute;", "<uacute/>", "&#250;", "\\'{u}", "u\\*(`", "\\'FA", {"u",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_ucirc, "ucirc", "\xc3\xbb", "&ucirc;", "&ucirc;", "&ucirc;", "<ucirc/>", "&#251;", "\\^{u}", "u\\*^", "\\'FB", {"u",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_uuml, "uuml", "\xc3\xbc", "&uuml;", "&uuml;", "&uuml;", "<uumlaut/>", "&#252;", "\\\"{u}", "u\\*(4", "\\'FC", {"u",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_yacute, "yacute", "\xc3\xbd", "&yacute;", "&yacute;", "&yacute;", "<yacute/>", "&#253;", "\\'{y}", "y\\*(`", "\\'FD", {"y",DocSymbol::Perl_acute}},
+  {DocSymbol::Sym_thorn, "thorn", "\xc3\xbe", "&thorn;", "&thorn;", "&thorn;", "<thorn/>", "&#254;", "\\th", NULL, "\\'FE", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_yuml, "yuml", "\xc3\xbf", "&yuml;", "&yuml;", "&yuml;", "<yumlaut/>", "&#255;", "\\\"{y}", "y\\*(4", "\\'FF", {"y",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_fnof, "fnof", "\xc6\x92", "&fnof;", "&fnof;", "&fnof;", "<fnof/>", "&#402;", "\\textflorin", NULL, "\\'83", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Alpha, "Alpha", "\xce\x91", "&Alpha;", "&Alpha;", "&Alpha;", "<Alpha/>", "&#913;", "A", NULL, "\\u0913?", {"A",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Beta, "Beta", "\xce\x92", "&Beta;", "&Beta;", "&Beta;", "<Beta/>", "&#914;", "B", NULL, "\\u0914?", {"B",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Gamma, "Gamma", "\xce\x93", "&Gamma;", "&Gamma;", "&Gamma;", "<Gamma/>", "&#915;", "{$\\Gamma$}", NULL, "\\u0915?", {"Gamma",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Delta, "Delta", "\xce\x94", "&Delta;", "&Delta;", "&Delta;", "<Delta/>", "&#916;", "{$\\Delta$}", NULL, "\\u0916?", {"Delta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Epsilon, "Epsilon", "\xce\x95", "&Epsilon;", "&Epsilon;", "&Epsilon;", "<Epsilon/>", "&#917;", "E", NULL, "\\u0917?", {"E",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Zeta, "Zeta", "\xce\x96", "&Zeta;", "&Zeta;", "&Zeta;", "<Zeta/>", "&#918;", "Z", NULL, "\\u0918?", {"Z",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Eta, "Eta", "\xce\x97", "&Eta;", "&Eta;", "&Eta;", "<Eta/>", "&#919;", "H", NULL, "\\u0919?", {"H",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Theta, "Theta", "\xce\x98", "&Theta;", "&Theta;", "&Theta;", "<Theta/>", "&#920;", "{$\\Theta$}", NULL, "\\u0920?", {"Theta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Iota, "Iota", "\xce\x99", "&Iota;", "&Iota;", "&Iota;", "<Iota/>", "&#921;", "I", NULL, "\\u0921?", {"I",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Kappa, "Kappa", "\xce\x9a", "&Kappa;", "&Kappa;", "&Kappa;", "<Kappa/>", "&#922;", "K", NULL, "\\u0922?", {"K",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Lambda, "Lambda", "\xce\x9b", "&Lambda;", "&Lambda;", "&Lambda;", "<Lambda/>", "&#923;", "{$\\Lambda$}", NULL, "\\u0923?", {"Lambda",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Mu, "Mu", "\xce\x9c", "&Mu;", "&Mu;", "&Mu;", "<Mu/>", "&#924;", "M", NULL, "\\u0924?", {"M",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Nu, "Nu", "\xce\x9d", "&Nu;", "&Nu;", "&Nu;", "<Nu/>", "&#925;", "N", NULL, "\\u0925?", {"N",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Xi, "Xi", "\xce\x9e", "&Xi;", "&Xi;", "&Xi;", "<Xi/>", "&#926;", "{$\\Xi$}", NULL, "\\u0926?", {"Xi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Omicron, "Omicron", "\xce\x9f", "&Omicron;", "&Omicron;", "&Omicron;", "<Omicron/>", "&#927;", "O", NULL, "\\u0927?", {"O",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Pi, "Pi", "\xce\xa0", "&Pi;", "&Pi;", "&Pi;", "<Pi/>", "&#928;", "{$\\Pi$}", NULL, "\\u0928?", {"Pi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Rho, "Rho", "\xce\xa1", "&Rho;", "&Rho;", "&Rho;", "<Rho/>", "&#929;", "P", NULL, "\\u0929?", {"P",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Sigma, "Sigma", "\xce\xa3", "&Sigma;", "&Sigma;", "&Sigma;", "<Sigma/>", "&#931;", "{$\\Sigma$}", NULL, "\\u0931?", {"Sigma",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Tau, "Tau", "\xce\xa4", "&Tau;", "&Tau;", "&Tau;", "<Tau/>", "&#932;", "T", NULL, "\\u0932?", {"T",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Upsilon, "Upsilon", "\xce\xa5", "&Upsilon;", "&Upsilon;", "&Upsilon;", "<Upsilon/>", "&#933;", "{$\\Upsilon$}", NULL, "\\u0933?", {"Upsilon",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Phi, "Phi", "\xce\xa6", "&Phi;", "&Phi;", "&Phi;", "<Phi/>", "&#934;", "{$\\Phi$}", NULL, "\\u0934?", {"Phi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Chi, "Chi", "\xce\xa7", "&Chi;", "&Chi;", "&Chi;", "<Chi/>", "&#935;", "X", NULL, "\\u0935?", {"X",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Psi, "Psi", "\xce\xa8", "&Psi;", "&Psi;", "&Psi;", "<Psi/>", "&#936;", "{$\\Psi$}", NULL, "\\u0936?", {"Psi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_Omega, "Omega", "\xce\xa9", "&Omega;", "&Omega;", "&Omega;", "<Omega/>", "&#937;", "{$\\Omega$}", NULL, "\\u0937?", {"Omega",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_alpha, "alpha", "\xce\xb1", "&alpha;", "&alpha;", "&alpha;", "<alpha/>", "&#945;", "{$\\alpha$}", NULL, "\\u0945?", {"alpha",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_beta, "beta", "\xce\xb2", "&beta;", "&beta;", "&beta;", "<beta/>", "&#946;", "{$\\beta$}", NULL, "\\u0946?", {"beta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_gamma, "gamma", "\xce\xb3", "&gamma;", "&gamma;", "&gamma;", "<gamma/>", "&#947;", "{$\\gamma$}", NULL, "\\u0947?", {"gamma",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_delta, "delta", "\xce\xb4", "&delta;", "&delta;", "&delta;", "<delta/>", "&#948;", "{$\\delta$}", NULL, "\\u0948?", {"delta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_epsilon, "epsilon", "\xce\xb5", "&epsilon;", "&epsilon;", "&epsilon;", "<epsilon/>", "&#949;", "{$\\varepsilon$}", NULL, "\\u0949?", {"epsilon",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_zeta, "zeta", "\xce\xb6", "&zeta;", "&zeta;", "&zeta;", "<zeta/>", "&#950;", "{$\\zeta$}", NULL, "\\u0950?", {"zeta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_eta, "eta", "\xce\xb7", "&eta;", "&eta;", "&eta;", "<eta/>", "&#951;", "{$\\eta$}", NULL, "\\u0951?", {"eta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_theta, "theta", "\xce\xb8", "&theta;", "&theta;", "&theta;", "<theta/>", "&#952;", "{$\\theta$}", NULL, "\\u0952?", {"theta",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_iota, "iota", "\xce\xb9", "&iota;", "&iota;", "&iota;", "<iota/>", "&#953;", "{$\\iota$}", NULL, "\\u0953?", {"iota",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_kappa, "kappa", "\xce\xba", "&kappa;", "&kappa;", "&kappa;", "<kappa/>", "&#954;", "{$\\kappa$}", NULL, "\\u0954?", {"kappa",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_lambda, "lambda", "\xce\xbb", "&lambda;", "&lambda;", "&lambda;", "<lambda/>", "&#955;", "{$\\lambda$}", NULL, "\\u0955?", {"lambda",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_mu, "mu", "\xce\xbc", "&mu;", "&mu;", "&mu;", "<mu/>", "&#956;", "{$\\mu$}", NULL, "\\u0956?", {"mu",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_nu, "nu", "\xce\xbd", "&nu;", "&nu;", "&nu;", "<nu/>", "&#957;", "{$\\nu$}", NULL, "\\u0957?", {"nu",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_xi, "xi", "\xce\xbe", "&xi;", "&xi;", "&xi;", "<xi/>", "&#958;", "{$\\xi$}", NULL, "\\u0958?", {"xi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_omicron, "omicron", "\xce\xbf", "&omicron;", "&omicron;", "&omicron;", "<omicron/>", "&#959;", "{$\\omicron$}", NULL, "\\u0959?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_pi, "pi", "\xcf\x80", "&pi;", "&pi;", "&pi;", "<pi/>", "&#960;", "{$\\pi$}", NULL, "\\u0960?", {"pi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_rho, "rho", "\xcf\x81", "&rho;", "&rho;", "&rho;", "<rho/>", "&#961;", "{$\\rho$}", NULL, "\\u0961?", {"rho",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_sigmaf, "sigmaf", "\xcf\x82", "&sigmaf;", "&sigmaf;", "&sigmaf;", "<sigmaf/>", "&#962;", "{$\\varsigma$}", NULL, "\\u0962?", {"sigma",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_sigma, "sigma", "\xcf\x83", "&sigma;", "&sigma;", "&sigma;", "<sigma/>", "&#963;", "{$\\sigma$}", NULL, "\\u0963?", {"sigma",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_tau, "tau", "\xcf\x84", "&tau;", "&tau;", "&tau;", "<tau/>", "&#964;", "{$\\tau$}", NULL, "\\u0964?", {"tau",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_upsilon, "upsilon", "\xcf\x85", "&upsilon;", "&upsilon;", "&upsilon;", "<upsilon/>", "&#965;", "{$\\upsilon$}", NULL, "\\u0965?", {"upsilon",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_phi, "phi", "\xcf\x86", "&phi;", "&phi;", "&phi;", "<phi/>", "&#966;", "{$\\varphi$}", NULL, "\\u0966?", {"phi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_chi, "chi", "\xcf\x87", "&chi;", "&chi;", "&chi;", "<chi/>", "&#967;", "{$\\chi$}", NULL, "\\u0967?", {"chi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_psi, "psi", "\xcf\x88", "&psi;", "&psi;", "&psi;", "<psi/>", "&#968;", "{$\\psi$}", NULL, "\\u0968?", {"psi",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_omega, "omega", "\xcf\x89", "&omega;", "&omega;", "&omega;", "<omega/>", "&#969;", "{$\\omega$}", NULL, "\\u0969?", {"omega",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_thetasym, "thetasym", "\xcf\x91", "&thetasym;", "&thetasym;", "&thetasym;", "<thetasym/>", "&#977;", "{$\\vartheta$}", NULL, "\\u977?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_upsih, "upsih", "\xcf\x92", "&upsih;", "&upsih;", "&upsih;", "<upsih/>", "&#978;", "{$\\Upsilon$}", NULL, "\\u978?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_piv, "piv", "\xcf\x96", "&piv;", "&piv;", "&piv;", "<piv/>", "&#982;", "{$\\varpi$}", NULL, "\\u982?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_bull, "bull", "\xe2\x80\xa2", "&bull;", "&bull;", "&bull;", "<bull/>", "&#8226;", "\\textbullet{}", NULL, "\\'95", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_hellip, "hellip", "\xe2\x80\xa6", "&hellip;", "&hellip;", "&hellip;", "<hellip/>", "&#8230;", "{$\\cdots$}", NULL, "\\'85", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_prime, "prime", "\xe2\x80\xb2", "&prime;", "&prime;", "&prime;", "<prime/>", "&#8242;", "'", NULL, "\\u8242?", {"\\\'",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_Prime, "Prime", "\xe2\x80\xb3", "&Prime;", "&Prime;", "&Prime;", "<Prime/>", "&#8243;", "''", NULL, "\\u8243?", {"\"",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_oline, "oline", "\xe2\x80\xbe", "&oline;", "&oline;", "&oline;", "<oline/>", "&#8254;", "{$\\overline{\\,}$}", NULL, "\\u8254?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_frasl, "frasl", "\xe2\x81\x84", "&frasl;", "&frasl;", "&frasl;", "<frasl/>", "&#8260;", "/", NULL, "\\u8260?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_weierp, "weierp", "\xe2\x84\x98", "&weierp;", "&weierp;", "&weierp;", "<weierp/>", "&#8472;", "{$\\wp$}", NULL, "\\u8472?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_image, "image", "\xe2\x84\x91", "&image;", "&image;", "&image;", "<image/>", "&#8465;", "{$\\Im$}", NULL, "\\u8465?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_real, "real", "\xe2\x84\x9c", "&real;", "&real;", "&real;", "<real/>", "&#8476;", "{$\\Re$}", NULL, "\\u8476?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_trade, "trade", "\xe2\x84\xa2", "&trade;", "(TM)", "&tm;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", {"trademark",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_alefsym, "alefsym", "\xe2\x85\xb5", "&alefsym;", "&alefsym;", "&alefsym;", "<alefsym/>", "&#8501;", "{$\\aleph$}", NULL, "\\u8501?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_larr, "larr", "\xe2\x86\x90", "&larr;", "&larr;", "&larr;", "<larr/>", "&#8592;", "{$\\leftarrow$}", NULL, "\\u8592?", {"<-",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_uarr, "uarr", "\xe2\x86\x91", "&uarr;", "&uarr;", "&uarr;", "<uarr/>", "&#8593;", "{$\\uparrow$}", NULL, "\\u8593?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_rarr, "rarr", "\xe2\x86\x92", "&rarr;", "&rarr;", "&rarr;", "<rarr/>", "&#8594;", "{$\\rightarrow$}", NULL, "\\u8594?", {"->",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_darr, "darr", "\xe2\x86\x93", "&darr;", "&darr;", "&darr;", "<darr/>", "&#8595;", "{$\\downarrow$}", NULL, "\\u8595?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_harr, "harr", "\xe2\x86\x94", "&harr;", "&harr;", "&harr;", "<harr/>", "&#8596;", "{$\\leftrightarrow$}", NULL, "\\u8596?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_crarr, "crarr", "\xe2\x86\xb5", "&crarr;", "&crarr;", "&crarr;", "<crarr/>", "&#8629;", "{$\\lrcorner$}" /* best I could find */, NULL, "\\u8629?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_lArr, "lArr", "\xe2\x87\x90", "&lArr;", "&lArr;", "&lArr;", "<lArr/>", "&#8656;", "{$\\Leftarrow$}", NULL, "\\u8656?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_uArr, "uArr", "\xe2\x87\x91", "&uArr;", "&uArr;", "&uArr;", "<uArr/>", "&#8657;", "{$\\Uparrow$}", NULL, "\\u8657?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_rArr, "rArr", "\xe2\x87\x92", "&rArr;", "&rArr;", "&rArr;", "<rArr/>", "&#8658;", "{$\\Rightarrow$}", NULL, "\\u8658?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_dArr, "dArr", "\xe2\x87\x93", "&dArr;", "&dArr;", "&dArr;", "<dArr/>", "&#8659;", "{$\\Downarrow$}", NULL, "\\u8659?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_hArr, "hArr", "\xe2\x87\x94", "&hArr;", "&hArr;", "&hArr;", "<hArr/>", "&#8660;", "{$\\Leftrightarrow$}", NULL, "\\u8660?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_forall, "forall", "\xe2\x88\x80", "&forall;", "&forall;", "&forall;", "<forall/>", "&#8704;", "{$\\forall$}", NULL, "\\u8704?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_part, "part", "\xe2\x88\x82", "&part;", "&part;", "&part;", "<part/>", "&#8706;", "{$\\partial$}", NULL, "\\u8706?", {"partial",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_exist, "exist", "\xe2\x88\x83", "&exist;", "&exist;", "&exist;", "<exist/>", "&#8707;", "{$\\exists$}", NULL, "\\u8707?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_empty, "empty", "\xe2\x88\x85", "&empty;", "&empty;", "&empty;", "<empty/>", "&#8709;", "{$\\emptyset$}", NULL, "\\u8709?", {"empty",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_nabla, "nabla", "\xe2\x88\x87", "&nabla;", "&nabla;", "&nabla;", "<nabla/>", "&#8711;", "{$\\nabla$}", NULL, "\\u8711?", {"nabla",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_isin, "isin", "\xe2\x88\x88", "&isin;", "&isin;", "&isin;", "<isin/>", "&#8712;", "{$\\in$}", NULL, "\\u8712?", {"in",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_notin, "notin", "\xe2\x88\x89", "&notin;", "&notin;", "&notin;", "<notin/>", "&#8713;", "{$\\notin$}", NULL, "\\u8713?", {"notin",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_ni, "ni", "\xe2\x88\x8b", "&ni;", "&ni;", "&ni;", "<ni/>", "&#8715;", "{$\\ni$}", NULL, "\\u8715?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_prod, "prod", "\xe2\x88\x8f", "&prod;", "&prod;", "&prod;", "<prod/>", "&#8719;", "{$\\prod$}", NULL, "\\u8719?", {"prod",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_sum, "sum", "\xe2\x88\x91", "&sum;", "&sum;", "&sum;", "<sum/>", "&#8721;", "{$\\sum$}", NULL, "\\u8721?", {"sum",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_minus, "minus", "\xe2\x88\x92", "&minus;", "&minus;", "&minus;", "<minus/>", "&#8722;", "-", NULL, "\\u8722?", {"-",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_lowast, "lowast", "\xe2\x88\x97", "&lowast;", "&lowast;", "&lowast;", "<lowast/>", "&#8727;", "{$\\ast$}", NULL, "\\u8727?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_radic, "radic", "\xe2\x88\x9a", "&radic;", "&radic;", "&radic;", "<radic/>", "&#8730;", "{$\\surd$}", NULL, "\\u8730?", {"sqrt",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_prop, "prop", "\xe2\x88\x9d", "&prop;", "&prop;", "&prop;", "<prop/>", "&#8733;", "{$\\propto$}", NULL, "\\u8733?", {"propto",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_infin, "infin", "\xe2\x88\x9e", "&infin;", "&infin;", "&infin;", "<infin/>", "&#8734;", "{$\\infty$}", NULL, "\\u8734?", {"inf",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_ang, "ang", "\xe2\x88\xa0", "&ang;", "&ang;", "&ang;", "<ang/>", "&#8736;", "{$\\angle$}", NULL, "\\u8736?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_and, "and", "\xe2\x88\xa7", "&and;", "&and;", "&and;", "<and/>", "&#8743;", "{$\\wedge$}", NULL, "\\u8743?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_or, "or", "\xe2\x88\xa8", "&or;", "&or;", "&or;", "<or/>", "&#8744;", "{$\\vee$}", NULL, "\\u8744?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_cap, "cap", "\xe2\x88\xa9", "&cap;", "&cap;", "&cap;", "<cap/>", "&#8745;", "{$\\cap$}", NULL, "\\u8745?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_cup, "cup", "\xe2\x88\xaa", "&cup;", "&cup;", "&cup;", "<cup/>", "&#8746;", "{$\\cup$}", NULL, "\\u8746?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_int, "int", "\xe2\x88\xab", "&int;", "&int;", "&int;", "<int/>", "&#8747;", "{$\\int$}", NULL, "\\u8747?", {"int",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_there4, "there4", "\xe2\x88\xb4", "&there4;", "&there4;", "&there4;", "<there4/>", "&#8756;", "{$\\therefore$}", NULL, "\\u8756?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_sim, "sim", "\xe2\x88\xbc", "&sim;", "&sim;", "&sim;", "<sim/>", "&#8764;", "{$\\sim$}", NULL, "\\u8764?", {"~",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_cong, "cong", "\xe2\x89\x85", "&cong;", "&cong;", "&cong;", "<cong/>", "&#8773;", "{$\\cong$}", NULL, "\\u8773?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_asymp, "asymp", "\xe2\x89\x88", "&asymp;", "&asymp;", "&asymp;", "<asymp/>", "&#8776;", "{$\\approx$}", NULL, "\\u8776?", {"approx",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_ne, "ne", "\xe2\x89\xa0", "&ne;", "&ne;", "&ne;", "<ne/>", "&#8800;", "{$\\ne$}", NULL, "\\u8800?", {"!=",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_equiv, "equiv", "\xe2\x89\xa1", "&equiv;", "&equiv;", "&equiv;", "<equiv/>", "&#8801;", "{$\\equiv$}", NULL, "\\u8801?", {"equiv",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_le, "le", "\xe2\x89\xa4", "&le;", "&le;", "&le;", "<le/>", "&#8804;", "{$\\le$}", NULL, "\\u8804?", {"<=",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_ge, "ge", "\xe2\x89\xa5", "&ge;", "&ge;", "&ge;", "<ge/>", "&#8805;", "{$\\ge$}", NULL, "\\u8805?", {">=",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_sub, "sub", "\xe2\x8a\x82", "&sub;", "&sub;", "&sub;", "<sub/>", "&#8834;", "{$\\subset$}", NULL, "\\u8834?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_sup, "sup", "\xe2\x8a\x83", "&sup;", "&sup;", "&sup;", "<sup/>", "&#8835;", "{$\\supset$}", NULL, "\\u8835?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_nsub, "nsub", "\xe2\x8a\x84", "&nsub;", "&nsub;", "&nsub;", "<nsub/>", "&#8836;", "{$\\not\\subset$}", NULL, "\\u8836?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_sube, "sube", "\xe2\x8a\x86", "&sube;", "&sube;", "&sube;", "<sube/>", "&#8838;", "{$\\subseteq$}", NULL, "\\u8838?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_supe, "supe", "\xe2\x8a\x87", "&supe;", "&supe;", "&supe;", "<supe/>", "&#8839;", "{$\\supseteq$}", NULL, "\\u8839?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_oplus, "oplus", "\xe2\x8a\x95", "&oplus;", "&oplus;", "&oplus;", "<oplus/>", "&#8853;", "{$\\oplus$}", NULL, "\\u8853?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_otimes, "otimes", "\xe2\x8a\x97", "&otimes;", "&otimes;", "&otimes;", "<otimes/>", "&#8855;", "{$\\otimes$}", NULL, "\\u8855?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_perp, "perp", "\xe2\x8a\xa5", "&perp;", "&perp;", "&perp;", "<perp/>", "&#8869;", "{$\\perp$}", NULL, "\\u8869?", {"perp",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_sdot, "sdot", "\xe2\x8b\x85", "&sdot;", "&sdot;", "&sdot;", "<sdot/>", "&#8901;", "{$\\cdot$}", NULL, "\\u8901?", {".",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_lceil, "lceil", "\xe2\x8c\x88", "&lceil;", "&lceil;", "&lceil;", "<lceil/>", "&#8968;", "{$\\lceil$}", NULL, "\\u8968?", {"lceil",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_rceil, "rceil", "\xe2\x8c\x89", "&rceil;", "&rceil;", "&rceil;", "<rceil/>", "&#8969;", "{$\\rceil$}", NULL, "\\u8969?", {"rceil",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_lfloor, "lfloor", "\xe2\x8c\x8a", "&lfloor;", "&lfloor;", "&lfloor;", "<lfloor/>", "&#8970;", "{$\\lfloor$}", NULL, "\\u8970?", {"lfloor",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_rfloor, "rfloor", "\xe2\x8c\x8b", "&rfloor;", "&rfloor;", "&rfloor;", "<rfloor/>", "&#8971;", "{$\\rfloor$}", NULL, "\\u8971?", {"rfloor",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_lang, "lang", "\xe2\x8c\xa9", "&lang;", "&lang;", "&lang;", "<lang/>", "&#9001;", "{$\\langle$}", NULL, "\\u9001?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_rang, "rang", "\xe2\x8c\xaa", "&rang;", "&rang;", "&rang;", "<rang/>", "&#9002;", "{$\\rangle$}", NULL, "\\u9002?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_loz, "loz", "\xe2\x97\x8a", "&loz;", "&loz;", "&loz;", "<loz/>", "&#9674;", "{$\\lozenge$}", NULL, "\\u9674?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_spades, "spades", "\xe2\x99\xa0", "&spades;", "&spades;", "&spades;", "<spades/>", "&#9824;", "{$\\spadesuit$}", NULL, "\\u9824?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_clubs, "clubs", "\xe2\x99\xa3", "&clubs;", "&clubs;", "&clubs;", "<clubs/>", "&#9827;", "{$\\clubsuit$}", NULL, "\\u9827?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_hearts, "hearts", "\xe2\x99\xa5", "&hearts;", "&hearts;", "&hearts;", "<hearts/>", "&#9829;", "{$\\heartsuit$}", NULL, "\\u9829?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_diams, "diams", "\xe2\x99\xa6", "&diams;", "&diams;", "&diams;", "<diams/>", "&#9830;", "{$\\diamondsuit$}", NULL, "\\u9830?", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_quot, "quot", "\"", "\"", "\"", "\"", "\"", "&quot;", "\"", "\"", "\"", {"\"",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_amp, "amp", "&", "&amp;", "&", "&amp;", "&amp;", "&amp;", "\\&", "&", "&", {"&",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_lt, "lt", "<", "&lt;", "<", "&lt;", "&lt;", "&lt;", "<", "<", "<", {"<",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_gt, "gt", ">", "&gt;", ">", "&gt;", "&gt;", "&gt;", ">", ">", ">", {">",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_OElig, "OElig", "\xc5\x92", "&OElig;", "&OElig;", "&OElig;", "<OElig/>", "&#338;", "\\OE", NULL, "\\'8C", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_oelig, "oelig", "\xc5\x93", "&oelig;", "&oelig;", "&oelig;", "<oelig/>", "&#339;", "\\oe", NULL, "\\'9C", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Scaron, "Scaron", "\xc5\xa0", "&Scaron;", "&Scaron;", "&Scaron;", "<Scaron/>", "&#352;", "\\v{S}", NULL, "\\'8A", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_scaron, "scaron", "\xc5\xa1", "&scaron;", "&scaron;", "&scaron;", "<scaron/>", "&#353;", "\\v{s}", NULL, "\\'9A", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Yuml, "Yuml", "\xc5\xb8", "&Yuml;", "&Yuml;", "&Yuml;", "<Yumlaut/>", "&#376;", "\\\"{Y}", "Y\\*(4", "\\'9F", {"Y",DocSymbol::Perl_umlaut}},
+  {DocSymbol::Sym_circ, "circ", "\xcb\x86", "&circ;", "&circ;", "&circ;", "<circ/>", "&#710;", "{$\\circ$}", NULL, "\\'88", {" ",DocSymbol::Perl_circ}},
+  {DocSymbol::Sym_tilde, "tilde", "\xcb\x9c", "&tilde;", "&tilde;", "&tilde;", "<tilde/>", "&#732;", "\\~{}", "~", "\\'98", {" ",DocSymbol::Perl_tilde}},
+  {DocSymbol::Sym_ensp, "ensp", "\xe2\x80\x82", "&ensp;", "&ensp;", "&ensp;", "<ensp/>", "&#8194;", "\\enskip{}", NULL, "{\\enspace}", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_emsp, "emsp", "\xe2\x80\x83", "&emsp;", "&emsp;", "&emsp;", "<emsp/>", "&#8195;", "\\quad{}", NULL, "{\\emspace}", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_thinsp, "thinsp", "\xe2\x80\x89", "&thinsp;", "&thinsp;", "&thinsp;", "<thinsp/>", "&#8201;", "\\,", NULL, "{\\qmspace}", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_zwnj, "zwnj", "\xe2\x80\x8c", "&zwnj;", "&zwnj;", "&zwnj;", "<zwnj/>", "&#8204;", "{}", NULL, "\\zwnj", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_zwj, "zwj", "\xe2\x80\x8d", "&zwj;", "&zwj;", "&zwj;", "<zwj/>", "&#8205;", "", NULL, "\\zwj", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_lrm, "lrm", "\xe2\x80\x8e", "&lrm;", "&lrm;", "&lrm;", "<lrm/>", "&#8206;", "", NULL, "\\ltrmark", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_rlm, "rlm", "\xe2\x80\x8f", "&rlm;", "&rlm;", "&rlm;", "<rlm/>", "&#8207;", "", NULL, "\\rtlmark", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_ndash, "ndash", "\xe2\x80\x93", "&ndash;", "&ndash;", "&ndash;", "<ndash/>", "&#8211;", "--", "--", "\\'96", {"-",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_mdash, "mdash", "\xe2\x80\x94", "&mdash;", "&mdash;", "&mdash;", "<mdash/>", "&#8212;", "---", "---", "\\'97", {"--",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_lsquo, "lsquo", "\xe2\x80\x98", "&lsquo;", "&lsquo;", "&lsquo;", "<lsquo/>", "&#8216;", "`", "`", "\\'91", {"\\\'",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_rsquo, "rsquo", "\xe2\x80\x99", "&rsquo;", "&rsquo;", "&rsquo;", "<rsquo/>", "&#8217;", "'", "'", "\\'92", {"\\\'",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_sbquo, "sbquo", "\xe2\x80\x9a", "&sbquo;", "&sbquo;", "&sbquo;", "<sbquo/>", "&#8218;", "\\quotesinglbase{}", NULL, "\\'82", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_ldquo, "ldquo", "\xe2\x80\x9c", "&ldquo;", "&ldquo;", "&ldquo;", "<ldquo/>", "&#8220;", "``", "``", "\\'93", {"\"",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_rdquo, "rdquo", "\xe2\x80\x9d", "&rdquo;", "&rdquo;", "&rdquo;", "<rdquo/>", "&#8221;", "''", "''", "\\'94", {"\"",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_bdquo, "bdquo", "\xe2\x80\x9e", "&bdquo;", "&bdquo;", "&bdquo;", "<bdquo/>", "&#8222;", "\\quotedblbase{}", NULL, "\\'84", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_dagger, "dagger", "\xe2\x80\xa0", "&dagger;", "&dagger;", "&dagger;", "<dagger/>", "&#8224;", "{$\\dagger$}", NULL, "\\'86", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_Dagger, "Dagger", "\xe2\x80\xa1", "&Dagger;", "&Dagger;", "&Dagger;", "<Dagger/>", "&#8225;", "{$\\ddagger$}", NULL, "\\'87", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_permil, "permil", "\xe2\x80\xb0", "&permil;", "&permil;", "&permil;", "<permil/>", "&#8240;", "{$\\permil{}$}", NULL, "\\'89", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_lsaquo, "lsaquo", "\xe2\x80\xb9", "&lsaquo;", "&lsaquo;", "&lsaquo;", "<lsaquo/>", "&#8249;", "\\guilsinglleft{}", NULL, "\\'8B", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_rsaquo, "rsaquo", "\xe2\x80\xba", "&rsaquo;", "&rsaquo;", "&rsaquo;", "<rsaquo/>", "&#8250;", "\\guilsinglright{}", NULL, "\\'9B", {NULL,DocSymbol::Perl_unknown}},
+  {DocSymbol::Sym_euro, "euro", "\xe2\x82\xac", "&euro;", "&euro;", "&euro;", "<euro/>", "&#8364;", "\\texteuro{}", NULL, "\\'80", {NULL,DocSymbol::Perl_unknown}},
+
+  // doxygen extension to the HTML4 table of HTML entities
+  {DocSymbol::Sym_tm, "tm", "\xe2\x84\xa2", "&trade;", "(TM)", "&tm;", "<trademark/>", "&#8482;", "\\texttrademark{}", "(TM)", "\\'99", {"trademark",DocSymbol::Perl_symbol}},
+  {DocSymbol::Sym_apos, "apos", "'", "'", "'", "'", "'", "&apos;", "'", "'", "'", {"\\\'",DocSymbol::Perl_string}},
+
+  // doxygen commands represented as HTML entities
+  {DocSymbol::Sym_BSlash, "BSlash", "\\", "\\", "\\", "\\", "\\", "\\", "\\textbackslash{}", "\\\\", "\\\\", {"\\\\",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_At, "At", "@", "@", "@", "@", "@", "@", "@", "@", "@", {"@",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Less, "Less", "<", "&lt;", "<", "&lt;", "&lt;", "&lt;", "<", "<", "<", {"<",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Greater, "Greater", ">", "&gt;", ">", "&gt;", "&gt;", "&gt;", ">", ">", ">", {">",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Amp, "Amp", "&", "&amp;", "&", "&amp;", "&amp;", "&amp;", "\\&", "&", "&", {"&",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Dollar, "Dollar", "$", "$", "$", "$", "$", "$", "\\$", "$", "$", {"$",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Hash, "Hash", "#;", "#", "#", "#", "#", "#", "\\#", "#", "#", {"#",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_DoubleColon, "DoubleColon", "::", "::", "::", "::", "::", "::", "::", "::", "::", {"::",DocSymbol::Perl_string}},
+  {DocSymbol::Sym_Percent, "Percent", "%", "%", "%%", "%", "%", "%", "\\%", "%", "%", {"%",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Pipe, "Pipe", "|", "|", "|", "|", "|", "|", "$|$", "|", "|", {"|",DocSymbol::Perl_char}},
+  {DocSymbol::Sym_Quot, "Quot", "\"", "\"", "\"", "\"", "\"", "&quot;", "\"", "\"", "\"", {"\"",DocSymbol::Perl_char}},
+};
+
+/*! @brief Access routine to the name of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the name of the HTML entity (excluding the & and ;),
+ *         in case the name is unknown \c NULL is returned.
+ */
+const char *get_symbol_item(DocSymbol::SymType symb)
+{
+  return html_entities[symb].item;
+}
+/*! @brief Access routine to the UTF8 code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the UTF8 code of the HTML entity,
+ *         in case the UTF code is unknown \c NULL is returned.
+ */
+const char *get_symbol_UTF8(DocSymbol::SymType symb)
+{
+  return html_entities[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,
+ *         in case the html code is unknown \c NULL is returned.
+ */
+const char *get_symbol_html(DocSymbol::SymType symb)
+{
+  return html_entities[symb].html;
+}
+/*! @brief Access routine to the printable code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the printable code of the HTML entity,
+ *         in case the printable code is unknown \c NULL is returned.
+ */
+const char *get_symbol_print(DocSymbol::SymType symb)
+{
+  return html_entities[symb].print;
+}
+/*! @brief Access routine to the text representation of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the text representation the HTML entity,
+ *         in case the text representation is unknown \c NULL is returned.
+ */
+const char *get_symbol_text(DocSymbol::SymType symb)
+{
+  return html_entities[symb].text;
+}
+/*! @brief Access routine to the XML code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the XML code of the HTML entity,
+ *         in case the XML code is unknown \c NULL is returned.
+ */
+const char *get_symbol_xml(DocSymbol::SymType symb)
+{
+  return html_entities[symb].xml;
+}
+/*! @brief Access routine to the docbook code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the docbook code of the HTML entity, 
+ *         in case the docbook code is unknown \c NULL is returned.
+ */
+const char *get_symbol_docbook(DocSymbol::SymType symb)
+{
+  return html_entities[symb].docbook;
+}
+/*! @brief Access routine to the LaTeX code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the LaTeX code of the HTML entity,
+ *         in case the LaTeX code is unknown \c NULL is returned.
+ */
+const char *get_symbol_latex(DocSymbol::SymType symb)
+{
+  return html_entities[symb].latex;
+}
+/*! @brief Access routine to the man code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the man of the HTML entity,
+ *         in case the man code is unknown \c NULL is returned.
+ */
+const char *get_symbol_man(DocSymbol::SymType symb)
+{
+  return html_entities[symb].man;
+}
+/*! @brief Access routine to the RTF code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the RTF of the HTML entity,
+ *         in case the RTF code is unknown \c NULL is returned.
+ */
+const char *get_symbol_rtf(DocSymbol::SymType symb)
+{
+  return html_entities[symb].rtf;
+}
+/*! @brief Access routine to the perl struct with the perl code of the HTML entity
+ *
+ * @param symb Code of the requested HTML entity
+ * @return the pointer to perl struct with the perl code of the HTML entity,
+ *         in case the perl code does not exists the NULL pointer is entered in the 
+ *         \c symb field and in the `DocSymbol::Perl_unknown` in the \c type field.
+ */
+const DocSymbol::PerlSymb *get_symbol_perl(DocSymbol::SymType symb)
+{
+  return &html_entities[symb].perl;
+}
+
+/*!
+ * @brief Give code of the requested HTML entity name
+ * @param symName HTML entity name without \c & and \c;
+ * @return the code for the requested HTML entity name,
+ *         in case the requested HTML item does not exist `DocSymbol::Sym_unknown` is returned.
+ */
+DocSymbol::SymType code_symbol(const QCString &symName)
+{
+  for (int i = 0; i < sizeof(html_entities)/ sizeof(*html_entities); i++)
+  {
+    if (QCString("&")+ html_entities[i].item+";" == symName) return(html_entities[i].symb);
+  }
+  return DocSymbol::Sym_Unknown;
+}
+
+/*! @brief Gives number of standard HTML4 entities plus the doxygen extensions
+ *  @return the number of standard HTML4 entities plus the doxygen extensions
+ */
+int get_num_standard_symbols(void)
+{
+  return sizeof(html_entities)/ sizeof(*html_entities) - number_html_mapped_cmds;
+}
+
+/*! @brief Routine to check if the entries of the html_entities are numbered correctly
+ *  @details in case of a mismatch a warning message is given.
+ */
+void validate_html_entities(void)
+{
+  for (int i = 0; i < sizeof(html_entities)/ sizeof(*html_entities); i++)
+  {
+    if (i != html_entities[i].symb)
+      warn_uncond("Internal inconsistency, htmlentries code %d (item=%s)\n",i,html_entities[i].item);
+  }
+}
diff --git a/src/util.h b/src/util.h
index d41f8a2..c45d725 100644
--- a/src/util.h
+++ b/src/util.h
@@ -26,6 +26,7 @@
 #include <ctype.h>
 #include "types.h"
 #include "sortdict.h"
+#include "docparser.h"
 
 //--------------------------------------------------------------------
 
@@ -454,5 +455,19 @@ void convertProtectionLevel(
                    int *outListType2
                   );
 
+DocSymbol::SymType code_symbol(const QCString &symName);
+const char *get_symbol_item(DocSymbol::SymType symb);
+const char *get_symbol_UTF8(DocSymbol::SymType symb);
+const char *get_symbol_html(DocSymbol::SymType symb);
+const char *get_symbol_print(DocSymbol::SymType symb);
+const char *get_symbol_text(DocSymbol::SymType symb);
+const char *get_symbol_xml(DocSymbol::SymType symb);
+const char *get_symbol_docbook(DocSymbol::SymType symb);
+const char *get_symbol_latex(DocSymbol::SymType symb);
+const char *get_symbol_man(DocSymbol::SymType symb);
+const char *get_symbol_rtf(DocSymbol::SymType symb);
+const DocSymbol::PerlSymb *get_symbol_perl(DocSymbol::SymType symb);
+int get_num_standard_symbols(void);
+void validate_html_entities(void);
 #endif
 
diff --git a/src/xmldocvisitor.cpp b/src/xmldocvisitor.cpp
index 8df1acf..4dc6f4a 100644
--- a/src/xmldocvisitor.cpp
+++ b/src/xmldocvisitor.cpp
@@ -70,110 +70,14 @@ void XmlDocVisitor::visit(DocWhiteSpace *w)
 void XmlDocVisitor::visit(DocSymbol *s)
 {
   if (m_hide) return;
-  switch(s->symbol())
+  const char *res = get_symbol_xml(s->symbol());
+  if (res)
   {
-    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 << "<trademark/>"; break;
-    case DocSymbol::Reg:           m_t << "<registered/>"; 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 << "<umlaut char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Acute:         m_t << "<acute char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Grave:         m_t << "<grave char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Circ:          m_t << "<circ char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Tilde:         m_t << "<tilde char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Szlig:         m_t << "<szlig/>"; break;
-    case DocSymbol::Cedil:         m_t << "<cedil char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Ring:          m_t << "<ring char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Slash:         m_t << "<slash char=\"" << s->letter() << "\"/>"; break;
-    case DocSymbol::Nbsp:          m_t << "<nonbreakablespace/>"; 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");
+    m_t << res;
+  }
+  else
+  {
+    err("XML: non supported HTML-entity found: &%s;\n",get_symbol_item(s->symbol()));
   }
 }
 
diff --git a/src/xmlgen.cpp b/src/xmlgen.cpp
index 570901f..084c2d7 100644
--- a/src/xmlgen.cpp
+++ b/src/xmlgen.cpp
@@ -1897,7 +1897,48 @@ void generateXML()
     err("Cannot open file %s for writing!\n",fileName.data());
     return;
   }
-  f.writeBlock(compound_xsd,qstrlen(compound_xsd));
+  /*
+   * If the compound_xsd contyains the special string
+   *   write part till special string
+   *   for each html entity
+   *     write xsd entry with xml element name without enclosing < and />
+   *   write part after special string
+   * otherwise
+   *   write original compound_xsd
+   */
+  QCString cmp_org(compound_xsd);
+  QCString ins("<!-- Automatically insert here the HTML entities -->");
+  if (cmp_org.contains(QRegExp(ins)))
+  {
+    QCString xsd_txt;
+    QCString xsd_tmp;
+    QCString cmp_tmp1;
+    QCString cmp_tmp2;
+    QRegExp beg("^<");
+    QRegExp end("/>$");
+    cmp_tmp1 = cmp_org;
+    cmp_tmp1 = cmp_tmp1.replace(QRegExp(" *"+ins+".*"),"");
+    f.writeBlock(cmp_tmp1,qstrlen(cmp_tmp1));
+    int num_std = get_num_standard_symbols();
+    for (int i = 0; i < num_std; i++)
+    {
+      xsd_tmp = QCString(get_symbol_xml((DocSymbol::SymType)i));
+      if (xsd_tmp.contains(beg))
+      {
+        xsd_txt = "      <xsd:element name=\"";
+        xsd_txt += xsd_tmp.replace(beg,"").replace(end,"");
+        xsd_txt += "\" type=\"docEmptyType\" />\n";
+        f.writeBlock(xsd_txt,qstrlen(xsd_txt));
+      }
+    }
+    cmp_tmp2 = cmp_org;
+    cmp_tmp2 = cmp_tmp2.replace(QRegExp(".*"+ins),"");
+    f.writeBlock(cmp_tmp2,qstrlen(cmp_tmp2));
+  }
+  else
+  {
+    f.writeBlock(compound_xsd,qstrlen(compound_xsd));
+  }
   f.close();
 
   fileName=outputDirectory+"/index.xml";
-- 
cgit v0.12

