From 1bd64ac0e925ba2ff069ec64c026ea3c32f85600 Mon Sep 17 00:00:00 2001 From: albert-github 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
  • \ Ends a \ section. -The special HTML character entities that are recognized by Doxygen: - +The special HTML4 character entities.
    +The list of entities with their descriptions has been taken from Character entity references in HTML 4. +( Portions © 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.) + +Doxygen extensions: 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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -717,10 +630,6 @@ - - - - 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 << "<"; 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::Copy: m_t << "©"; break; - case DocSymbol::Tm: m_t << "™"; break; - case DocSymbol::Reg: m_t << "®"; 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 << "¨"; break; - case DocSymbol::Acute: m_t << "´"; break; - case DocSymbol::Grave: m_t << "À"; break; - case DocSymbol::Circ: m_t << "ˆ"; break; - case DocSymbol::Tilde: m_t << "˜"; break; - case DocSymbol::Szlig: m_t << "ß"; break; - case DocSymbol::Cedil: m_t << "¸"; break; - case DocSymbol::Ring: m_t << "Å"; break; - case DocSymbol::Slash: m_t << "Ø"; break; - case DocSymbol::Nbsp: m_t << " "; break; - case DocSymbol::Aelig: m_t << "æ"; break; - case DocSymbol::AElig: m_t << "Æ"; break; - case DocSymbol::GrkGamma: m_t << "Γ"; break; - case DocSymbol::GrkDelta: m_t << "Δ"; break; - case DocSymbol::GrkTheta: m_t << "Θ"; break; - case DocSymbol::GrkLambda: m_t << "Λ"; break; - case DocSymbol::GrkXi: m_t << "Ξ"; break; - case DocSymbol::GrkPi: m_t << "Π"; break; - case DocSymbol::GrkSigma: m_t << "Σ"; break; - case DocSymbol::GrkUpsilon: m_t << "Υ"; break; - case DocSymbol::GrkPhi: m_t << "Φ"; break; - case DocSymbol::GrkPsi: m_t << "Ψ"; break; - case DocSymbol::GrkOmega: m_t << "Ω"; break; - case DocSymbol::Grkalpha: m_t << "α"; break; - case DocSymbol::Grkbeta: m_t << "β"; break; - case DocSymbol::Grkgamma: m_t << "γ"; break; - case DocSymbol::Grkdelta: m_t << "δ"; break; - case DocSymbol::Grkepsilon: m_t << "ε"; break; - case DocSymbol::Grkzeta: m_t << "ζ"; break; - case DocSymbol::Grketa: m_t << "η"; break; - case DocSymbol::Grktheta: m_t << "θ"; break; - case DocSymbol::Grkiota: m_t << "ι"; break; - case DocSymbol::Grkkappa: m_t << "κ"; break; - case DocSymbol::Grklambda: m_t << "λ"; break; - case DocSymbol::Grkmu: m_t << "μ"; break; - case DocSymbol::Grknu: m_t << "ν"; break; - case DocSymbol::Grkxi: m_t << "ξ"; break; - case DocSymbol::Grkpi: m_t << "π"; break; - case DocSymbol::Grkrho: m_t << "ρ"; break; - case DocSymbol::Grksigma: m_t << "σ"; break; - case DocSymbol::Grktau: m_t << "τ"; break; - case DocSymbol::Grkupsilon: m_t << "υ"; break; - case DocSymbol::Grkphi: m_t << "φ"; break; - case DocSymbol::Grkchi: m_t << "χ"; break; - case DocSymbol::Grkpsi: m_t << "ψ"; break; - case DocSymbol::Grkomega: m_t << "ω"; break; - case DocSymbol::Grkvarsigma: m_t << "ς"; break; - case DocSymbol::Section: m_t << ""; break; - case DocSymbol::Degree: m_t << "°"; break; - case DocSymbol::Prime: m_t << "′"; break; - case DocSymbol::DoublePrime: m_t << "″"; break; - case DocSymbol::Infinity: m_t << "∞"; break; - case DocSymbol::EmptySet: m_t << "∅"; break; - case DocSymbol::PlusMinus: m_t << "±"; break; - case DocSymbol::Times: m_t << "×"; break; - case DocSymbol::Minus: m_t << "−"; break; - case DocSymbol::CenterDot: m_t << "⋅"; break; - case DocSymbol::Partial: m_t << "∂"; break; - case DocSymbol::Nabla: m_t << "∇"; break; - case DocSymbol::SquareRoot: m_t << "√"; break; - case DocSymbol::Perpendicular: m_t << "⊥"; break; - case DocSymbol::Sum: m_t << "∑"; break; - case DocSymbol::Integral: m_t << "∫"; break; - case DocSymbol::Product: m_t << "∏"; break; - case DocSymbol::Similar: m_t << "∼"; break; - case DocSymbol::Approx: m_t << "≈"; break; - case DocSymbol::NotEqual: m_t << "≠"; break; - case DocSymbol::Equivalent: m_t << "≡"; break; - case DocSymbol::Proportional: m_t << "∝"; 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 << "∈"; break; - case DocSymbol::SetNotIn: m_t << "∉"; break; - case DocSymbol::LeftCeil: m_t << "⌈"; break; - case DocSymbol::RightCeil: m_t << "⌉"; break; - case DocSymbol::LeftFloor: m_t << "⌊"; break; - case DocSymbol::RightFloor: m_t << "⌋"; 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 &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=="©") return DocSymbol::Copy; - else if (symName=="™") return DocSymbol::Tm; - else if (symName=="&tm;") return DocSymbol::Tm; // alias for ™ - else if (symName=="®") return DocSymbol::Reg; - else if (symName=="<") return DocSymbol::Less; - else if (symName==">") return DocSymbol::Greater; - else if (symName=="&") return DocSymbol::Amp; - else if (symName=="'") return DocSymbol::Apos; - else if (symName==""") return DocSymbol::Quot; - else if (symName=="‘") return DocSymbol::Lsquo; - else if (symName=="’") return DocSymbol::Rsquo; - else if (symName=="“") return DocSymbol::Ldquo; - else if (symName=="”") return DocSymbol::Rdquo; - else if (symName=="–") return DocSymbol::Ndash; - else if (symName=="—") return DocSymbol::Mdash; - else if (symName=="ß") return DocSymbol::Szlig; - else if (symName==" ") return DocSymbol::Nbsp; - else if (symName=="Æ") return DocSymbol::AElig; - else if (symName=="æ") return DocSymbol::Aelig; - else if (symName=="Γ") return DocSymbol::GrkGamma; - else if (symName=="Δ") return DocSymbol::GrkDelta; - else if (symName=="Θ") return DocSymbol::GrkTheta; - else if (symName=="Λ") return DocSymbol::GrkLambda; - else if (symName=="Ξ") return DocSymbol::GrkXi; - else if (symName=="Π") return DocSymbol::GrkPi; - else if (symName=="Σ") return DocSymbol::GrkSigma; - else if (symName=="Υ") return DocSymbol::GrkUpsilon; - else if (symName=="Φ") return DocSymbol::GrkPhi; - else if (symName=="Ψ") return DocSymbol::GrkPsi; - else if (symName=="Ω") return DocSymbol::GrkOmega; - else if (symName=="α") return DocSymbol::Grkalpha; - else if (symName=="β") return DocSymbol::Grkbeta; - else if (symName=="γ") return DocSymbol::Grkgamma; - else if (symName=="δ") return DocSymbol::Grkdelta; - else if (symName=="ε") return DocSymbol::Grkepsilon; - else if (symName=="ζ") return DocSymbol::Grkzeta; - else if (symName=="η") return DocSymbol::Grketa; - else if (symName=="θ") return DocSymbol::Grktheta; - else if (symName=="ι") return DocSymbol::Grkiota; - else if (symName=="κ") return DocSymbol::Grkkappa; - else if (symName=="λ") return DocSymbol::Grklambda; - else if (symName=="μ") return DocSymbol::Grkmu; - else if (symName=="ν") return DocSymbol::Grknu; - else if (symName=="ξ") return DocSymbol::Grkxi; - else if (symName=="π") return DocSymbol::Grkpi; - else if (symName=="ρ") return DocSymbol::Grkrho; - else if (symName=="σ") return DocSymbol::Grksigma; - else if (symName=="τ") return DocSymbol::Grktau; - else if (symName=="υ") return DocSymbol::Grkupsilon; - else if (symName=="φ") return DocSymbol::Grkphi; - else if (symName=="χ") return DocSymbol::Grkchi; - else if (symName=="ψ") return DocSymbol::Grkpsi; - else if (symName=="ω") return DocSymbol::Grkomega; - else if (symName=="ς") return DocSymbol::Grkvarsigma; - else if (symName=="§") return DocSymbol::Section; - else if (symName=="°") return DocSymbol::Degree; - else if (symName=="′") return DocSymbol::Prime; - else if (symName=="″") return DocSymbol::DoublePrime; - else if (symName=="∞") return DocSymbol::Infinity; - else if (symName=="∅") return DocSymbol::EmptySet; - else if (symName=="±") return DocSymbol::PlusMinus; - else if (symName=="×") return DocSymbol::Times; - else if (symName=="−") return DocSymbol::Minus; - else if (symName=="⋅") return DocSymbol::CenterDot; - else if (symName=="∂") return DocSymbol::Partial; - else if (symName=="∇") return DocSymbol::Nabla; - else if (symName=="√") return DocSymbol::SquareRoot; - else if (symName=="⊥") return DocSymbol::Perpendicular; - else if (symName=="∑") return DocSymbol::Sum; - else if (symName=="∫") return DocSymbol::Integral; - else if (symName=="∏") return DocSymbol::Product; - else if (symName=="∼") return DocSymbol::Similar; - else if (symName=="≈") return DocSymbol::Approx; - else if (symName=="≠") return DocSymbol::NotEqual; - else if (symName=="≡") return DocSymbol::Equivalent; - else if (symName=="∝") return DocSymbol::Proportional; - else if (symName=="≤") return DocSymbol::LessEqual; - else if (symName=="≥") return DocSymbol::GreaterEqual; - else if (symName=="←") return DocSymbol::LeftArrow; - else if (symName=="→") return DocSymbol::RightArrow; - else if (symName=="∈") return DocSymbol::SetIn; - else if (symName=="∉") return DocSymbol::SetNotIn; - else if (symName=="⌈") return DocSymbol::LeftCeil; - else if (symName=="⌉") return DocSymbol::RightCeil; - else if (symName=="⌊") return DocSymbol::LeftFloor; - else if (symName=="⌋") 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 << "<"; 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 << "©"; break; - case DocSymbol::Tm: m_t << "™"; break; - case DocSymbol::Reg: m_t << "®"; 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() << "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 << "ß"; break; - case DocSymbol::Cedil: m_t << "&" << s->letter() << "cedil;"; break; - case DocSymbol::Ring: m_t << "&" << s->letter() << "ring;"; break; - case DocSymbol::Nbsp: m_t << " "; break; - case DocSymbol::AElig: m_t << "Æ"; break; - case DocSymbol::Aelig: m_t << "æ"; break; - case DocSymbol::GrkGamma: m_t << "Γ"; break; - case DocSymbol::GrkDelta: m_t << "Δ"; break; - case DocSymbol::GrkTheta: m_t << "Θ"; break; - case DocSymbol::GrkLambda: m_t << "Λ"; break; - case DocSymbol::GrkXi: m_t << "Ξ"; break; - case DocSymbol::GrkPi: m_t << "Π"; break; - case DocSymbol::GrkSigma: m_t << "Σ"; break; - case DocSymbol::GrkUpsilon: m_t << "Υ"; break; - case DocSymbol::GrkPhi: m_t << "Φ"; break; - case DocSymbol::GrkPsi: m_t << "Ψ"; break; - case DocSymbol::GrkOmega: m_t << "Ω"; break; - case DocSymbol::Grkalpha: m_t << "α"; break; - case DocSymbol::Grkbeta: m_t << "β"; break; - case DocSymbol::Grkgamma: m_t << "γ"; break; - case DocSymbol::Grkdelta: m_t << "δ"; break; - case DocSymbol::Grkepsilon: m_t << "ε"; break; - case DocSymbol::Grkzeta: m_t << "ζ"; break; - case DocSymbol::Grketa: m_t << "η"; break; - case DocSymbol::Grktheta: m_t << "θ"; break; - case DocSymbol::Grkiota: m_t << "ι"; break; - case DocSymbol::Grkkappa: m_t << "κ"; break; - case DocSymbol::Grklambda: m_t << "λ"; break; - case DocSymbol::Grkmu: m_t << "μ"; break; - case DocSymbol::Grknu: m_t << "ν"; break; - case DocSymbol::Grkxi: m_t << "ξ"; break; - case DocSymbol::Grkpi: m_t << "π"; break; - case DocSymbol::Grkrho: m_t << "ρ"; break; - case DocSymbol::Grksigma: m_t << "σ"; break; - case DocSymbol::Grktau: m_t << "τ"; break; - case DocSymbol::Grkupsilon: m_t << "υ"; break; - case DocSymbol::Grkphi: m_t << "φ"; break; - case DocSymbol::Grkchi: m_t << "χ"; break; - case DocSymbol::Grkpsi: m_t << "ψ"; break; - case DocSymbol::Grkomega: m_t << "ω"; break; - case DocSymbol::Grkvarsigma: m_t << "ς"; break; - case DocSymbol::Section: m_t << "§"; break; - case DocSymbol::Degree: m_t << "°"; break; - case DocSymbol::Prime: m_t << "′"; break; - case DocSymbol::DoublePrime: m_t << "″"; break; - case DocSymbol::Infinity: m_t << "∞"; break; - case DocSymbol::EmptySet: m_t << "∅"; break; - case DocSymbol::PlusMinus: m_t << "±"; break; - case DocSymbol::Times: m_t << "×"; break; - case DocSymbol::Minus: m_t << "−"; break; - case DocSymbol::CenterDot: m_t << "⋅"; break; - case DocSymbol::Partial: m_t << "∂"; break; - case DocSymbol::Nabla: m_t << "∇"; break; - case DocSymbol::SquareRoot: m_t << "√"; break; - case DocSymbol::Perpendicular: m_t << "⊥"; break; - case DocSymbol::Sum: m_t << "∑"; break; - case DocSymbol::Integral: m_t << "∫"; break; - case DocSymbol::Product: m_t << "∏"; break; - case DocSymbol::Similar: m_t << "∼"; break; - case DocSymbol::Approx: m_t << "≈"; break; - case DocSymbol::NotEqual: m_t << "≠"; break; - case DocSymbol::Equivalent: m_t << "≡"; break; - case DocSymbol::Proportional: m_t << "∝"; 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 << "∈"; break; - case DocSymbol::SetNotIn: m_t << "∉"; break; - case DocSymbol::LeftCeil: m_t << "⌈"; break; - case DocSymbol::RightCeil: m_t << "⌉"; break; - case DocSymbol::LeftFloor: m_t << "⌊"; break; - case DocSymbol::RightFloor: m_t << "⌋"; 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("©"); break; - case DocSymbol::Apos: printf("'"); break; - case DocSymbol::Quot: printf("\""); break; - case DocSymbol::Lsquo: printf("‘"); break; - case DocSymbol::Rsquo: printf("’"); break; - case DocSymbol::Ldquo: printf("“"); break; - case DocSymbol::Rdquo: printf("”"); break; - case DocSymbol::Ndash: printf("–"); break; - case DocSymbol::Mdash: printf("—"); 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("ß"); break; - case DocSymbol::Cedil: printf("&%ccedul;",s->letter()); break; - case DocSymbol::Ring: printf("&%cring;",s->letter()); break; - case DocSymbol::Nbsp: printf(" "); break; - case DocSymbol::Aelig: printf("æ"); break; - case DocSymbol::AElig: printf("Æ"); break; - case DocSymbol::GrkGamma: printf("Γ"); break; - case DocSymbol::GrkDelta: printf("Δ"); break; - case DocSymbol::GrkTheta: printf("Θ"); break; - case DocSymbol::GrkLambda: printf("Λ"); break; - case DocSymbol::GrkXi: printf("Ξ"); break; - case DocSymbol::GrkPi: printf("Π"); break; - case DocSymbol::GrkSigma: printf("Σ"); break; - case DocSymbol::GrkUpsilon: printf("Υ"); break; - case DocSymbol::GrkPhi: printf("Φ"); break; - case DocSymbol::GrkPsi: printf("Ψ"); break; - case DocSymbol::GrkOmega: printf("Ω"); break; - case DocSymbol::Grkalpha: printf("α"); break; - case DocSymbol::Grkbeta: printf("β"); break; - case DocSymbol::Grkgamma: printf("γ"); break; - case DocSymbol::Grkdelta: printf("δ"); break; - case DocSymbol::Grkepsilon: printf("ε"); break; - case DocSymbol::Grkzeta: printf("ζ"); break; - case DocSymbol::Grketa: printf("η"); break; - case DocSymbol::Grktheta: printf("θ"); break; - case DocSymbol::Grkiota: printf("ι"); break; - case DocSymbol::Grkkappa: printf("κ"); break; - case DocSymbol::Grklambda: printf("λ"); break; - case DocSymbol::Grkmu: printf("μ"); break; - case DocSymbol::Grknu: printf("ν"); break; - case DocSymbol::Grkxi: printf("ξ"); break; - case DocSymbol::Grkpi: printf("π"); break; - case DocSymbol::Grkrho: printf("ρ"); break; - case DocSymbol::Grksigma: printf("σ"); break; - case DocSymbol::Grktau: printf("τ"); break; - case DocSymbol::Grkupsilon: printf("υ"); break; - case DocSymbol::Grkphi: printf("φ"); break; - case DocSymbol::Grkchi: printf("χ"); break; - case DocSymbol::Grkpsi: printf("ψ"); break; - case DocSymbol::Grkomega: printf("ω"); break; - case DocSymbol::Grkvarsigma: printf("ς"); break; - case DocSymbol::Section: printf("§"); break; - case DocSymbol::Degree: printf("°"); break; - case DocSymbol::Prime: printf("′"); break; - case DocSymbol::DoublePrime: printf("″"); break; - case DocSymbol::Infinity: printf("∞"); break; - case DocSymbol::EmptySet: printf("∅"); break; - case DocSymbol::PlusMinus: printf("±"); break; - case DocSymbol::Times: printf("×"); break; - case DocSymbol::Minus: printf("−"); break; - case DocSymbol::CenterDot: printf("⋅"); break; - case DocSymbol::Partial: printf("∂"); break; - case DocSymbol::Nabla: printf("∇"); break; - case DocSymbol::SquareRoot: printf("√"); break; - case DocSymbol::Perpendicular: printf("⊥"); break; - case DocSymbol::Sum: printf("∑"); break; - case DocSymbol::Integral: printf("∫"); break; - case DocSymbol::Product: printf("∏"); break; - case DocSymbol::Similar: printf("∼"); break; - case DocSymbol::Approx: printf("≈"); break; - case DocSymbol::NotEqual: printf("≠"); break; - case DocSymbol::Equivalent: printf("≡"); break; - case DocSymbol::Proportional: printf("∝"); break; - case DocSymbol::LessEqual: printf("≤"); break; - case DocSymbol::GreaterEqual: printf("≥"); break; - case DocSymbol::LeftArrow: printf("←"); break; - case DocSymbol::RightArrow: printf("→"); break; - case DocSymbol::SetIn: printf("∈"); break; - case DocSymbol::SetNotIn: printf("∉"); break; - case DocSymbol::LeftCeil: printf("⌈"); break; - case DocSymbol::RightCeil: printf("⌉"); break; - case DocSymbol::LeftFloor: printf("⌊"); break; - case DocSymbol::RightFloor: printf("⌋"); 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 #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 << "<"; 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 << "©"; break; - case DocSymbol::Tm: m_t << "&tm;"; break; - case DocSymbol::Reg: m_t << "®"; 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() << "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 << "ß"; break; - case DocSymbol::Cedil: m_t << "&" << s->letter() << "cedil;"; break; - case DocSymbol::Ring: m_t << "&" << s->letter() << "ring;"; break; - case DocSymbol::Nbsp: m_t << " "; break; - case DocSymbol::Aelig: m_t << "æ"; break; - case DocSymbol::AElig: m_t << "Æ"; break; - case DocSymbol::GrkGamma: m_t << "Γ"; break; - case DocSymbol::GrkDelta: m_t << "Δ"; break; - case DocSymbol::GrkTheta: m_t << "Θ"; break; - case DocSymbol::GrkLambda: m_t << "Λ"; break; - case DocSymbol::GrkXi: m_t << "Ξ"; break; - case DocSymbol::GrkPi: m_t << "Π"; break; - case DocSymbol::GrkSigma: m_t << "Σ"; break; - case DocSymbol::GrkUpsilon: m_t << "Υ"; break; - case DocSymbol::GrkPhi: m_t << "Φ"; break; - case DocSymbol::GrkPsi: m_t << "Ψ"; break; - case DocSymbol::GrkOmega: m_t << "Ω"; break; - case DocSymbol::Grkalpha: m_t << "α"; break; - case DocSymbol::Grkbeta: m_t << "β"; break; - case DocSymbol::Grkgamma: m_t << "γ"; break; - case DocSymbol::Grkdelta: m_t << "δ"; break; - case DocSymbol::Grkepsilon: m_t << "ε"; break; - case DocSymbol::Grkzeta: m_t << "ζ"; break; - case DocSymbol::Grketa: m_t << "η"; break; - case DocSymbol::Grktheta: m_t << "θ"; break; - case DocSymbol::Grkiota: m_t << "ι"; break; - case DocSymbol::Grkkappa: m_t << "κ"; break; - case DocSymbol::Grklambda: m_t << "λ"; break; - case DocSymbol::Grkmu: m_t << "μ"; break; - case DocSymbol::Grknu: m_t << "ν"; break; - case DocSymbol::Grkxi: m_t << "ξ"; break; - case DocSymbol::Grkpi: m_t << "π"; break; - case DocSymbol::Grkrho: m_t << "ρ"; break; - case DocSymbol::Grksigma: m_t << "σ"; break; - case DocSymbol::Grktau: m_t << "τ"; break; - case DocSymbol::Grkupsilon: m_t << "υ"; break; - case DocSymbol::Grkphi: m_t << "φ"; break; - case DocSymbol::Grkchi: m_t << "χ"; break; - case DocSymbol::Grkpsi: m_t << "ψ"; break; - case DocSymbol::Grkomega: m_t << "ω"; break; - case DocSymbol::Grkvarsigma: m_t << "ς"; break; - case DocSymbol::Section: m_t << "§"; break; - case DocSymbol::Degree: m_t << "°"; break; - case DocSymbol::Prime: m_t << "′"; break; - case DocSymbol::DoublePrime: m_t << "″"; break; - case DocSymbol::Infinity: m_t << "∞"; break; - case DocSymbol::EmptySet: m_t << "∅"; break; - case DocSymbol::PlusMinus: m_t << "±"; break; - case DocSymbol::Times: m_t << "×"; break; - case DocSymbol::Minus: m_t << "−"; break; - case DocSymbol::CenterDot: m_t << "⋅"; break; - case DocSymbol::Partial: m_t << "∂"; break; - case DocSymbol::Nabla: m_t << "∇"; break; - case DocSymbol::SquareRoot: m_t << "√"; break; - case DocSymbol::Perpendicular: m_t << "⊥"; break; - case DocSymbol::Sum: m_t << "∑"; break; - case DocSymbol::Integral: m_t << "∫"; break; - case DocSymbol::Product: m_t << "∏"; break; - case DocSymbol::Similar: m_t << "∼"; break; - case DocSymbol::Approx: m_t << "≈"; break; - case DocSymbol::NotEqual: m_t << "≠"; break; - case DocSymbol::Equivalent: m_t << "≡"; break; - case DocSymbol::Proportional: m_t << "∝"; 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 << "∈"; break; - case DocSymbol::SetNotIn: m_t << "∉"; break; - case DocSymbol::LeftCeil: m_t << "⌈"; break; - case DocSymbol::RightCeil: m_t << "⌉"; break; - case DocSymbol::LeftFloor: m_t << "⌊"; break; - case DocSymbol::RightFloor: m_t << "⌋"; 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 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", " ", " ", " ", "", " ", "~", " ", "\\~", {" ",DocSymbol::Perl_char}}, + {DocSymbol::Sym_iexcl, "iexcl", "\xc2\xa1", "¡", "¡", "¡", "", "¡", "!`", NULL, "\\'A1", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_cent, "cent", "\xc2\xa2", "¢", "¢", "¢", "", "¢", "\\textcent{}", NULL, "\\'A2", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_pound, "pound", "\xc2\xa3", "£", "£", "£", "", "£", "{$\\pounds$}", NULL, "\\'A3", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_curren, "curren", "\xc2\xa4", "¤", "¤", "¤", "", "¤", "\\textcurrency{}", NULL, "\\'A4", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_yen, "yen", "\xc2\xa5", "¥", "¥", "¥", "", "¥", "{$\\yen$}", NULL, "\\'A5", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_brvbar, "brvbar", "\xc2\xa6", "¦", "¦", "¦", "", "¦", "\\textbrokenbar{}", NULL, "\\'A6", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_sect, "sect", "\xc2\xa7", "§", "§", "§", "", "", "{$\\S$}", NULL, "\\'A7", {"sect",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_uml, "uml", "\xc2\xa8", "¨", "¨", "¨", "", "¨", "\\textasciidieresis{}", " \\*(4", "\\'A8", {" ",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_copy, "copy", "\xc2\xa9", "©", "©", "©", "", "©", "\\copyright{}", "(C)", "\\'A9", {"copyright",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_ordf, "ordf", "\xc2\xaa", "ª", "ª", "ª", "", "ª", "\\textordfeminine{}", NULL, "\\'AA", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_laquo, "laquo", "\xc2\xab", "«", "«", "«", "", "«", "\\guillemotleft{}", NULL, "\\'AB", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_not, "not", "\xc2\xac", "¬", "¬", "¬", "", "¬", "\\textlnot", NULL, "\\'AC", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_shy, "shy", "\xc2\xad", "­", "­", "­", "", "­", "{$\\-$}", NULL, "\\-", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_reg, "reg", "\xc2\xae", "®", "®", "®", "", "®", "\\textregistered{}", "(R)", "\\'AE", {"registered",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_macr, "macr", "\xc2\xaf", "¯", "¯", "¯", "", "¯", "\\={}", NULL, "\\'AF ", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_deg, "deg", "\xc2\xb0", "°", "°", "°", "", "°", "\\textdegree", NULL, "\\'B0", {"deg",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_plusmn, "plusmn", "\xc2\xb1", "±", "±", "±", "", "±", "{$\\pm$}", NULL, "\\'B1", {"+/-",DocSymbol::Perl_string}}, + {DocSymbol::Sym_sup2, "sup2", "\xc2\xb2", "²", "²", "²", "", "²", "\\texttwosuperior{}", NULL, "\\'B2", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_sup3, "sup3", "\xc2\xb3", "³", "³", "³", "", "³", "\\textthreesuperior{}", NULL, "\\'B3", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_acute, "acute", "\xc2\xb4", "´", "´", "´", "", "´", "\\'{}", NULL, "\\'B4", {" ",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_micro, "micro", "\xc2\xb5", "µ", "µ", "µ", "", "µ", "{$\\mu$}", NULL, "\\'B5", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_para, "para", "\xc2\xb6", "¶", "¶", "¶", "", "¶", "{$\\P$}", NULL, "\\'B6", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_middot, "middot", "\xc2\xb7", "·", "·", "·", "", "·", "\\textperiodcentered{}", NULL, "\\'B7", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_cedil, "cedil", "\xc2\xb8", "¸", "¸", "¸", "", "¸", "\\c{}", " \\*,", "\\'B8", {" ",DocSymbol::Perl_cedilla}}, + {DocSymbol::Sym_sup1, "sup1", "\xc2\xb9", "¹", "¹", "¹", "", "¹", "\\textonesuperior{}", NULL, "\\'B9", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_ordm, "ordm", "\xc2\xba", "º", "º", "º", "", "º", "\\textordmasculine{}", NULL, "\\'BA", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_raquo, "raquo", "\xc2\xbb", "»", "»", "»", "", "»", "\\guillemotright{}", NULL, "\\'BB", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_frac14, "frac14", "\xc2\xbc", "¼", "¼", "¼", "", "¼", "{$\\frac14$}", "1/4", "\\'BC", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_frac12, "frac12", "\xc2\xbd", "½", "½", "½", "", "½", "{$\\frac12$}", "1/2", "\\'BD", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_frac34, "frac34", "\xc2\xbe", "¾", "¾", "¾", "", "¾", "{$\\frac34$}", "3/4", "\\'BE", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_iquest, "iquest", "\xc2\xbf", "¿", "¿", "¿", "", "¿", "?`", NULL, "\\'BF", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Agrave, "Agrave", "\xc3\x80", "À", "À", "À", "", "À", "\\`{A}", "A\\*:", "\\'C0", {"A",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_Aacute, "Aacute", "\xc3\x81", "Á", "Á", "Á", "", "Á", "\\'{A}", "A\\*(`", "\\'C1", {"A",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_Acirc, "Acirc", "\xc3\x82", "Â", "Â", "Â", "", "Â", "\\^{A}", "A\\*^", "\\'C2", {"A",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_Atilde, "Atilde", "\xc3\x83", "Ã", "Ã", "Ã", "", "Ã", "\\~{A}", "A\\*~", "\\'C3", {"A",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_Auml, "Auml", "\xc3\x84", "Ä", "Ä", "Ä", "", "Ä", "\\\"{A}", "A\\*(4", "\\'C4", {"A",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_Aring, "Aring", "\xc3\x85", "Å", "Å", "Å", "", "Å", "\\AA", "A\\*o", "\\'C5", {"A",DocSymbol::Perl_ring}}, + {DocSymbol::Sym_AElig, "AElig", "\xc3\x86", "Æ", "Æ", "Æ", "", "Æ", "{\\AE}", NULL, "\\'C6", {"AElig",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Ccedil, "Ccedil", "\xc3\x87", "Ç", "Ç", "Ç", "", "Ç", "\\c{C}", "C\\*,", "\\'C7", {"C",DocSymbol::Perl_cedilla}}, + {DocSymbol::Sym_Egrave, "Egrave", "\xc3\x88", "È", "È", "È", "", "È", "\\`{E}", "E\\*:", "\\'C8", {"E",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_Eacute, "Eacute", "\xc3\x89", "É", "É", "É", "", "É", "\\'{E}", "E\\*(`", "\\'C9", {"E",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_Ecirc, "Ecirc", "\xc3\x8a", "Ê", "Ê", "Ê", "", "Ê", "\\^{E}", "E\\*^", "\\'CA", {"E",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_Euml, "Euml", "\xc3\x8b", "Ë", "Ë", "Ë", "", "Ë", "\\\"{E}", "E\\*(4", "\\'CB", {"E",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_Igrave, "Igrave", "\xc3\x8c", "Ì", "Ì", "Ì", "", "Ì", "\\`{I}", "I\\*:", "\\'CC", {"I",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_Iacute, "Iacute", "\xc3\x8d", "Í", "Í", "Í", "", "Í", "\\'{I}", "I\\*(`", "\\'CD", {"I",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_Icirc, "Icirc", "\xc3\x8e", "Î", "Î", "Î", "", "Î", "\\^{I}", "I\\*^", "\\'CE", {"I",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_Iuml, "Iuml", "\xc3\x8f", "Ï", "Ï", "Ï", "", "Ï", "\\\"{I}", "I\\*(4", "\\'CF", {"I",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_ETH, "ETH", "\xc3\x90", "Ð", "Ð", "Ð", "", "Ð", "\\DH", NULL, "\\'D0", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Ntilde, "Ntilde", "\xc3\x91", "Ñ", "Ñ", "Ñ", "", "Ñ", "\\~{N}", "N\\*~", "\\'D1", {"N",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_Ograve, "Ograve", "\xc3\x92", "Ò", "Ò", "Ò", "", "Ò", "\\`{O}", "O\\*:", "\\'D2", {"O",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_Oacute, "Oacute", "\xc3\x93", "Ó", "Ó", "Ó", "", "Ó", "\\'{O}", "O\\*(`", "\\'D3", {"O",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_Ocirc, "Ocirc", "\xc3\x94", "Ô", "Ô", "Ô", "", "Ô", "\\^{O}", "O\\*^", "\\'D4", {"O",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_Otilde, "Otilde", "\xc3\x95", "Õ", "Õ", "Õ", "", "Õ", "\\~{O}", "O\\*~", "\\'D5", {"O",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_Ouml, "Ouml", "\xc3\x96", "Ö", "Ö", "Ö", "", "Ö", "\\\"{O}", "O\\*(4", "\\'D6", {"O",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_times, "times", "\xc3\x97", "×", "×", "×", "", "×", "{$\\times$}", NULL, "\\'D7", {"*",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Oslash, "Oslash", "\xc3\x98", "Ø", "Ø", "Ø", "", "Ø", "{\\O}", "O\x08/", "\\'D8", {"O",DocSymbol::Perl_slash}}, + {DocSymbol::Sym_Ugrave, "Ugrave", "\xc3\x99", "Ù", "Ù", "Ù", "", "Ù", "\\`{U}", "U\\*:", "\\'D9", {"U",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_Uacute, "Uacute", "\xc3\x9a", "Ú", "Ú", "Ú", "", "Ú", "\\'{U}", "U\\*(`", "\\'DA", {"U",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_Ucirc, "Ucirc", "\xc3\x9b", "Û", "Û", "Û", "", "Û", "\\^{U}", "U\\*^", "\\'DB", {"U",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_Uuml, "Uuml", "\xc3\x9c", "Ü", "Ü", "Ü", "", "Ü", "\\\"{U}", "U\\*(4", "\\'DC", {"U",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_Yacute, "Yacute", "\xc3\x9d", "Ý", "Ý", "Ý", "", "Ý", "\\'{Y}", "Y\\*(`", "\\'DD", {"Y",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_THORN, "THORN", "\xc3\x9e", "Þ", "Þ", "Þ", "", "Þ", "\\TH", NULL, "\\'DE", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_szlig, "szlig", "\xc3\x9f", "ß", "ß", "ß", "", "ß", "{\\ss}", "s\\*:", "\\'DF", {"szlig",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_agrave, "agrave", "\xc3\xa0", "à", "à", "à", "", "à", "\\`{a}", "a\\*:", "\\'E0", {"a",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_aacute, "aacute", "\xc3\xa1", "á", "á", "á", "", "á", "\\'{a}", "a\\*(`", "\\'E1", {"a",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_acirc, "acirc", "\xc3\xa2", "â", "â", "â", "", "â", "\\^{a}", "a\\*^", "\\'E2", {"a",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_atilde, "atilde", "\xc3\xa3", "ã", "ã", "ã", "", "ã", "\\~{a}", "a\\*~", "\\'E3", {"a",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_auml, "auml", "\xc3\xa4", "ä", "ä", "ä", "", "ä", "\\\"{a}", "a\\*(4", "\\'E4", {"a",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_aring, "aring", "\xc3\xa5", "å", "å", "å", "", "å", "\\aa", "a\\*o", "\\'E5", {"a",DocSymbol::Perl_ring}}, + {DocSymbol::Sym_aelig, "aelig", "\xc3\xa6", "æ", "æ", "æ", "", "æ", "{\\ae}", NULL, "\\'E6", {"aelig",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_ccedil, "ccedil", "\xc3\xa7", "ç", "ç", "ç", "", "ç", "\\c{c}", "c\\*,", "\\'E7", {"c",DocSymbol::Perl_cedilla}}, + {DocSymbol::Sym_egrave, "egrave", "\xc3\xa8", "è", "è", "è", "", "è", "\\`{e}", "e\\*:", "\\'E8", {"e",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_eacute, "eacute", "\xc3\xa9", "é", "é", "é", "", "é", "\\'{e}", "e\\*(`", "\\'E9", {"e",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_ecirc, "ecirc", "\xc3\xaa", "ê", "ê", "ê", "", "ê", "\\^{e}", "e\\*^", "\\'EA", {"e",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_euml, "euml", "\xc3\xab", "ë", "ë", "ë", "", "ë", "\\\"{e}", "e\\*(4", "\\'EB", {"e",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_igrave, "igrave", "\xc3\xac", "ì", "ì", "ì", "", "ì", "\\`{\\i}", "i\\*:", "\\'EC", {"i",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_iacute, "iacute", "\xc3\xad", "í", "í", "í", "", "í", "\\'{\\i}", "i\\*(`", "\\'ED", {"i",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_icirc, "icirc", "\xc3\xae", "î", "î", "î", "", "î", "\\^{\\i}", "i\\*^", "\\'EE", {"i",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_iuml, "iuml", "\xc3\xaf", "ï", "ï", "ï", "", "ï", "\\\"{\\i}", "i\\*(4", "\\'EF", {"i",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_eth, "eth", "\xc3\xb0", "ð", "ð", "ð", "", "ð", "\\dh", NULL, "\\'F0", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_ntilde, "ntilde", "\xc3\xb1", "ñ", "ñ", "ñ", "", "ñ", "\\~{n}", "n\\*~", "\\'F1", {"n",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_ograve, "ograve", "\xc3\xb2", "ò", "ò", "ò", "", "ò", "\\`{o}", "o\\*:", "\\'F2", {"o",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_oacute, "oacute", "\xc3\xb3", "ó", "ó", "ó", "", "ó", "\\'{o}", "o\\*(`", "\\'F3", {"o",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_ocirc, "ocirc", "\xc3\xb4", "ô", "ô", "ô", "", "ô", "\\^{o}", "o\\*^", "\\'F4", {"o",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_otilde, "otilde", "\xc3\xb5", "õ", "õ", "õ", "", "õ", "\\~{o}", "o\\*~", "\\'F5", {"o",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_ouml, "ouml", "\xc3\xb6", "ö", "ö", "ö", "", "ö", "\\\"{o}", "o\\*(4", "\\'F6", {"o",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_divide, "divide", "\xc3\xb7", "÷", "÷", "÷", "", "÷", "{$\\div$}", NULL, "\\'F7", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_oslash, "oslash", "\xc3\xb8", "ø", "ø", "ø", "", "ø", "{\\o}", "o\x08/", "\\'F8", {"o",DocSymbol::Perl_slash}}, + {DocSymbol::Sym_ugrave, "ugrave", "\xc3\xb9", "ù", "ù", "ù", "", "ù", "\\`{u}", "u\\*:", "\\'F9", {"u",DocSymbol::Perl_grave}}, + {DocSymbol::Sym_uacute, "uacute", "\xc3\xba", "ú", "ú", "ú", "", "ú", "\\'{u}", "u\\*(`", "\\'FA", {"u",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_ucirc, "ucirc", "\xc3\xbb", "û", "û", "û", "", "û", "\\^{u}", "u\\*^", "\\'FB", {"u",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_uuml, "uuml", "\xc3\xbc", "ü", "ü", "ü", "", "ü", "\\\"{u}", "u\\*(4", "\\'FC", {"u",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_yacute, "yacute", "\xc3\xbd", "ý", "ý", "ý", "", "ý", "\\'{y}", "y\\*(`", "\\'FD", {"y",DocSymbol::Perl_acute}}, + {DocSymbol::Sym_thorn, "thorn", "\xc3\xbe", "þ", "þ", "þ", "", "þ", "\\th", NULL, "\\'FE", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_yuml, "yuml", "\xc3\xbf", "ÿ", "ÿ", "ÿ", "", "ÿ", "\\\"{y}", "y\\*(4", "\\'FF", {"y",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_fnof, "fnof", "\xc6\x92", "ƒ", "ƒ", "ƒ", "", "ƒ", "\\textflorin", NULL, "\\'83", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Alpha, "Alpha", "\xce\x91", "Α", "Α", "Α", "", "Α", "A", NULL, "\\u0913?", {"A",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Beta, "Beta", "\xce\x92", "Β", "Β", "Β", "", "Β", "B", NULL, "\\u0914?", {"B",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Gamma, "Gamma", "\xce\x93", "Γ", "Γ", "Γ", "", "Γ", "{$\\Gamma$}", NULL, "\\u0915?", {"Gamma",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Delta, "Delta", "\xce\x94", "Δ", "Δ", "Δ", "", "Δ", "{$\\Delta$}", NULL, "\\u0916?", {"Delta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Epsilon, "Epsilon", "\xce\x95", "Ε", "Ε", "Ε", "", "Ε", "E", NULL, "\\u0917?", {"E",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Zeta, "Zeta", "\xce\x96", "Ζ", "Ζ", "Ζ", "", "Ζ", "Z", NULL, "\\u0918?", {"Z",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Eta, "Eta", "\xce\x97", "Η", "Η", "Η", "", "Η", "H", NULL, "\\u0919?", {"H",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Theta, "Theta", "\xce\x98", "Θ", "Θ", "Θ", "", "Θ", "{$\\Theta$}", NULL, "\\u0920?", {"Theta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Iota, "Iota", "\xce\x99", "Ι", "Ι", "Ι", "", "Ι", "I", NULL, "\\u0921?", {"I",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Kappa, "Kappa", "\xce\x9a", "Κ", "Κ", "Κ", "", "Κ", "K", NULL, "\\u0922?", {"K",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Lambda, "Lambda", "\xce\x9b", "Λ", "Λ", "Λ", "", "Λ", "{$\\Lambda$}", NULL, "\\u0923?", {"Lambda",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Mu, "Mu", "\xce\x9c", "Μ", "Μ", "Μ", "", "Μ", "M", NULL, "\\u0924?", {"M",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Nu, "Nu", "\xce\x9d", "Ν", "Ν", "Ν", "", "Ν", "N", NULL, "\\u0925?", {"N",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Xi, "Xi", "\xce\x9e", "Ξ", "Ξ", "Ξ", "", "Ξ", "{$\\Xi$}", NULL, "\\u0926?", {"Xi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Omicron, "Omicron", "\xce\x9f", "Ο", "Ο", "Ο", "", "Ο", "O", NULL, "\\u0927?", {"O",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Pi, "Pi", "\xce\xa0", "Π", "Π", "Π", "", "Π", "{$\\Pi$}", NULL, "\\u0928?", {"Pi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Rho, "Rho", "\xce\xa1", "Ρ", "Ρ", "Ρ", "", "Ρ", "P", NULL, "\\u0929?", {"P",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Sigma, "Sigma", "\xce\xa3", "Σ", "Σ", "Σ", "", "Σ", "{$\\Sigma$}", NULL, "\\u0931?", {"Sigma",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Tau, "Tau", "\xce\xa4", "Τ", "Τ", "Τ", "", "Τ", "T", NULL, "\\u0932?", {"T",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Upsilon, "Upsilon", "\xce\xa5", "Υ", "Υ", "Υ", "", "Υ", "{$\\Upsilon$}", NULL, "\\u0933?", {"Upsilon",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Phi, "Phi", "\xce\xa6", "Φ", "Φ", "Φ", "", "Φ", "{$\\Phi$}", NULL, "\\u0934?", {"Phi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Chi, "Chi", "\xce\xa7", "Χ", "Χ", "Χ", "", "Χ", "X", NULL, "\\u0935?", {"X",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Psi, "Psi", "\xce\xa8", "Ψ", "Ψ", "Ψ", "", "Ψ", "{$\\Psi$}", NULL, "\\u0936?", {"Psi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_Omega, "Omega", "\xce\xa9", "Ω", "Ω", "Ω", "", "Ω", "{$\\Omega$}", NULL, "\\u0937?", {"Omega",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_alpha, "alpha", "\xce\xb1", "α", "α", "α", "", "α", "{$\\alpha$}", NULL, "\\u0945?", {"alpha",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_beta, "beta", "\xce\xb2", "β", "β", "β", "", "β", "{$\\beta$}", NULL, "\\u0946?", {"beta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_gamma, "gamma", "\xce\xb3", "γ", "γ", "γ", "", "γ", "{$\\gamma$}", NULL, "\\u0947?", {"gamma",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_delta, "delta", "\xce\xb4", "δ", "δ", "δ", "", "δ", "{$\\delta$}", NULL, "\\u0948?", {"delta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_epsilon, "epsilon", "\xce\xb5", "ε", "ε", "ε", "", "ε", "{$\\varepsilon$}", NULL, "\\u0949?", {"epsilon",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_zeta, "zeta", "\xce\xb6", "ζ", "ζ", "ζ", "", "ζ", "{$\\zeta$}", NULL, "\\u0950?", {"zeta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_eta, "eta", "\xce\xb7", "η", "η", "η", "", "η", "{$\\eta$}", NULL, "\\u0951?", {"eta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_theta, "theta", "\xce\xb8", "θ", "θ", "θ", "", "θ", "{$\\theta$}", NULL, "\\u0952?", {"theta",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_iota, "iota", "\xce\xb9", "ι", "ι", "ι", "", "ι", "{$\\iota$}", NULL, "\\u0953?", {"iota",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_kappa, "kappa", "\xce\xba", "κ", "κ", "κ", "", "κ", "{$\\kappa$}", NULL, "\\u0954?", {"kappa",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_lambda, "lambda", "\xce\xbb", "λ", "λ", "λ", "", "λ", "{$\\lambda$}", NULL, "\\u0955?", {"lambda",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_mu, "mu", "\xce\xbc", "μ", "μ", "μ", "", "μ", "{$\\mu$}", NULL, "\\u0956?", {"mu",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_nu, "nu", "\xce\xbd", "ν", "ν", "ν", "", "ν", "{$\\nu$}", NULL, "\\u0957?", {"nu",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_xi, "xi", "\xce\xbe", "ξ", "ξ", "ξ", "", "ξ", "{$\\xi$}", NULL, "\\u0958?", {"xi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_omicron, "omicron", "\xce\xbf", "ο", "ο", "ο", "", "ο", "{$\\omicron$}", NULL, "\\u0959?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_pi, "pi", "\xcf\x80", "π", "π", "π", "", "π", "{$\\pi$}", NULL, "\\u0960?", {"pi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_rho, "rho", "\xcf\x81", "ρ", "ρ", "ρ", "", "ρ", "{$\\rho$}", NULL, "\\u0961?", {"rho",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_sigmaf, "sigmaf", "\xcf\x82", "ς", "ς", "ς", "", "ς", "{$\\varsigma$}", NULL, "\\u0962?", {"sigma",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_sigma, "sigma", "\xcf\x83", "σ", "σ", "σ", "", "σ", "{$\\sigma$}", NULL, "\\u0963?", {"sigma",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_tau, "tau", "\xcf\x84", "τ", "τ", "τ", "", "τ", "{$\\tau$}", NULL, "\\u0964?", {"tau",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_upsilon, "upsilon", "\xcf\x85", "υ", "υ", "υ", "", "υ", "{$\\upsilon$}", NULL, "\\u0965?", {"upsilon",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_phi, "phi", "\xcf\x86", "φ", "φ", "φ", "", "φ", "{$\\varphi$}", NULL, "\\u0966?", {"phi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_chi, "chi", "\xcf\x87", "χ", "χ", "χ", "", "χ", "{$\\chi$}", NULL, "\\u0967?", {"chi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_psi, "psi", "\xcf\x88", "ψ", "ψ", "ψ", "", "ψ", "{$\\psi$}", NULL, "\\u0968?", {"psi",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_omega, "omega", "\xcf\x89", "ω", "ω", "ω", "", "ω", "{$\\omega$}", NULL, "\\u0969?", {"omega",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_thetasym, "thetasym", "\xcf\x91", "ϑ", "ϑ", "ϑ", "", "ϑ", "{$\\vartheta$}", NULL, "\\u977?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_upsih, "upsih", "\xcf\x92", "ϒ", "ϒ", "ϒ", "", "ϒ", "{$\\Upsilon$}", NULL, "\\u978?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_piv, "piv", "\xcf\x96", "ϖ", "ϖ", "ϖ", "", "ϖ", "{$\\varpi$}", NULL, "\\u982?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_bull, "bull", "\xe2\x80\xa2", "•", "•", "•", "", "•", "\\textbullet{}", NULL, "\\'95", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_hellip, "hellip", "\xe2\x80\xa6", "…", "…", "…", "", "…", "{$\\cdots$}", NULL, "\\'85", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_prime, "prime", "\xe2\x80\xb2", "′", "′", "′", "", "′", "'", NULL, "\\u8242?", {"\\\'",DocSymbol::Perl_string}}, + {DocSymbol::Sym_Prime, "Prime", "\xe2\x80\xb3", "″", "″", "″", "", "″", "''", NULL, "\\u8243?", {"\"",DocSymbol::Perl_char}}, + {DocSymbol::Sym_oline, "oline", "\xe2\x80\xbe", "‾", "‾", "‾", "", "‾", "{$\\overline{\\,}$}", NULL, "\\u8254?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_frasl, "frasl", "\xe2\x81\x84", "⁄", "⁄", "⁄", "", "⁄", "/", NULL, "\\u8260?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_weierp, "weierp", "\xe2\x84\x98", "℘", "℘", "℘", "", "℘", "{$\\wp$}", NULL, "\\u8472?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_image, "image", "\xe2\x84\x91", "ℑ", "ℑ", "ℑ", "", "ℑ", "{$\\Im$}", NULL, "\\u8465?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_real, "real", "\xe2\x84\x9c", "ℜ", "ℜ", "ℜ", "", "ℜ", "{$\\Re$}", NULL, "\\u8476?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_trade, "trade", "\xe2\x84\xa2", "™", "(TM)", "&tm;", "", "™", "\\texttrademark{}", "(TM)", "\\'99", {"trademark",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_alefsym, "alefsym", "\xe2\x85\xb5", "ℵ", "ℵ", "ℵ", "", "ℵ", "{$\\aleph$}", NULL, "\\u8501?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_larr, "larr", "\xe2\x86\x90", "←", "←", "←", "", "←", "{$\\leftarrow$}", NULL, "\\u8592?", {"<-",DocSymbol::Perl_string}}, + {DocSymbol::Sym_uarr, "uarr", "\xe2\x86\x91", "↑", "↑", "↑", "", "↑", "{$\\uparrow$}", NULL, "\\u8593?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_rarr, "rarr", "\xe2\x86\x92", "→", "→", "→", "", "→", "{$\\rightarrow$}", NULL, "\\u8594?", {"->",DocSymbol::Perl_string}}, + {DocSymbol::Sym_darr, "darr", "\xe2\x86\x93", "↓", "↓", "↓", "", "↓", "{$\\downarrow$}", NULL, "\\u8595?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_harr, "harr", "\xe2\x86\x94", "↔", "↔", "↔", "", "↔", "{$\\leftrightarrow$}", NULL, "\\u8596?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_crarr, "crarr", "\xe2\x86\xb5", "↵", "↵", "↵", "", "↵", "{$\\lrcorner$}" /* best I could find */, NULL, "\\u8629?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_lArr, "lArr", "\xe2\x87\x90", "⇐", "⇐", "⇐", "", "⇐", "{$\\Leftarrow$}", NULL, "\\u8656?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_uArr, "uArr", "\xe2\x87\x91", "⇑", "⇑", "⇑", "", "⇑", "{$\\Uparrow$}", NULL, "\\u8657?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_rArr, "rArr", "\xe2\x87\x92", "⇒", "⇒", "⇒", "", "⇒", "{$\\Rightarrow$}", NULL, "\\u8658?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_dArr, "dArr", "\xe2\x87\x93", "⇓", "⇓", "⇓", "", "⇓", "{$\\Downarrow$}", NULL, "\\u8659?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_hArr, "hArr", "\xe2\x87\x94", "⇔", "⇔", "⇔", "", "⇔", "{$\\Leftrightarrow$}", NULL, "\\u8660?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_forall, "forall", "\xe2\x88\x80", "∀", "∀", "∀", "", "∀", "{$\\forall$}", NULL, "\\u8704?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_part, "part", "\xe2\x88\x82", "∂", "∂", "∂", "", "∂", "{$\\partial$}", NULL, "\\u8706?", {"partial",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_exist, "exist", "\xe2\x88\x83", "∃", "∃", "∃", "", "∃", "{$\\exists$}", NULL, "\\u8707?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_empty, "empty", "\xe2\x88\x85", "∅", "∅", "∅", "", "∅", "{$\\emptyset$}", NULL, "\\u8709?", {"empty",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_nabla, "nabla", "\xe2\x88\x87", "∇", "∇", "∇", "", "∇", "{$\\nabla$}", NULL, "\\u8711?", {"nabla",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_isin, "isin", "\xe2\x88\x88", "∈", "∈", "∈", "", "∈", "{$\\in$}", NULL, "\\u8712?", {"in",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_notin, "notin", "\xe2\x88\x89", "∉", "∉", "∉", "", "∉", "{$\\notin$}", NULL, "\\u8713?", {"notin",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_ni, "ni", "\xe2\x88\x8b", "∋", "∋", "∋", "", "∋", "{$\\ni$}", NULL, "\\u8715?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_prod, "prod", "\xe2\x88\x8f", "∏", "∏", "∏", "", "∏", "{$\\prod$}", NULL, "\\u8719?", {"prod",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_sum, "sum", "\xe2\x88\x91", "∑", "∑", "∑", "", "∑", "{$\\sum$}", NULL, "\\u8721?", {"sum",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_minus, "minus", "\xe2\x88\x92", "−", "−", "−", "", "−", "-", NULL, "\\u8722?", {"-",DocSymbol::Perl_char}}, + {DocSymbol::Sym_lowast, "lowast", "\xe2\x88\x97", "∗", "∗", "∗", "", "∗", "{$\\ast$}", NULL, "\\u8727?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_radic, "radic", "\xe2\x88\x9a", "√", "√", "√", "", "√", "{$\\surd$}", NULL, "\\u8730?", {"sqrt",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_prop, "prop", "\xe2\x88\x9d", "∝", "∝", "∝", "", "∝", "{$\\propto$}", NULL, "\\u8733?", {"propto",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_infin, "infin", "\xe2\x88\x9e", "∞", "∞", "∞", "", "∞", "{$\\infty$}", NULL, "\\u8734?", {"inf",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_ang, "ang", "\xe2\x88\xa0", "∠", "∠", "∠", "", "∠", "{$\\angle$}", NULL, "\\u8736?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_and, "and", "\xe2\x88\xa7", "∧", "∧", "∧", "", "∧", "{$\\wedge$}", NULL, "\\u8743?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_or, "or", "\xe2\x88\xa8", "∨", "∨", "∨", "", "∨", "{$\\vee$}", NULL, "\\u8744?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_cap, "cap", "\xe2\x88\xa9", "∩", "∩", "∩", "", "∩", "{$\\cap$}", NULL, "\\u8745?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_cup, "cup", "\xe2\x88\xaa", "∪", "∪", "∪", "", "∪", "{$\\cup$}", NULL, "\\u8746?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_int, "int", "\xe2\x88\xab", "∫", "∫", "∫", "", "∫", "{$\\int$}", NULL, "\\u8747?", {"int",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_there4, "there4", "\xe2\x88\xb4", "∴", "∴", "∴", "", "∴", "{$\\therefore$}", NULL, "\\u8756?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_sim, "sim", "\xe2\x88\xbc", "∼", "∼", "∼", "", "∼", "{$\\sim$}", NULL, "\\u8764?", {"~",DocSymbol::Perl_char}}, + {DocSymbol::Sym_cong, "cong", "\xe2\x89\x85", "≅", "≅", "≅", "", "≅", "{$\\cong$}", NULL, "\\u8773?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_asymp, "asymp", "\xe2\x89\x88", "≈", "≈", "≈", "", "≈", "{$\\approx$}", NULL, "\\u8776?", {"approx",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_ne, "ne", "\xe2\x89\xa0", "≠", "≠", "≠", "", "≠", "{$\\ne$}", NULL, "\\u8800?", {"!=",DocSymbol::Perl_string}}, + {DocSymbol::Sym_equiv, "equiv", "\xe2\x89\xa1", "≡", "≡", "≡", "", "≡", "{$\\equiv$}", NULL, "\\u8801?", {"equiv",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_le, "le", "\xe2\x89\xa4", "≤", "≤", "≤", "", "≤", "{$\\le$}", NULL, "\\u8804?", {"<=",DocSymbol::Perl_string}}, + {DocSymbol::Sym_ge, "ge", "\xe2\x89\xa5", "≥", "≥", "≥", "", "≥", "{$\\ge$}", NULL, "\\u8805?", {">=",DocSymbol::Perl_string}}, + {DocSymbol::Sym_sub, "sub", "\xe2\x8a\x82", "⊂", "⊂", "⊂", "", "⊂", "{$\\subset$}", NULL, "\\u8834?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_sup, "sup", "\xe2\x8a\x83", "⊃", "⊃", "⊃", "", "⊃", "{$\\supset$}", NULL, "\\u8835?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_nsub, "nsub", "\xe2\x8a\x84", "⊄", "⊄", "⊄", "", "⊄", "{$\\not\\subset$}", NULL, "\\u8836?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_sube, "sube", "\xe2\x8a\x86", "⊆", "⊆", "⊆", "", "⊆", "{$\\subseteq$}", NULL, "\\u8838?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_supe, "supe", "\xe2\x8a\x87", "⊇", "⊇", "⊇", "", "⊇", "{$\\supseteq$}", NULL, "\\u8839?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_oplus, "oplus", "\xe2\x8a\x95", "⊕", "⊕", "⊕", "", "⊕", "{$\\oplus$}", NULL, "\\u8853?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_otimes, "otimes", "\xe2\x8a\x97", "⊗", "⊗", "⊗", "", "⊗", "{$\\otimes$}", NULL, "\\u8855?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_perp, "perp", "\xe2\x8a\xa5", "⊥", "⊥", "⊥", "", "⊥", "{$\\perp$}", NULL, "\\u8869?", {"perp",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_sdot, "sdot", "\xe2\x8b\x85", "⋅", "⋅", "⋅", "", "⋅", "{$\\cdot$}", NULL, "\\u8901?", {".",DocSymbol::Perl_char}}, + {DocSymbol::Sym_lceil, "lceil", "\xe2\x8c\x88", "⌈", "⌈", "⌈", "", "⌈", "{$\\lceil$}", NULL, "\\u8968?", {"lceil",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_rceil, "rceil", "\xe2\x8c\x89", "⌉", "⌉", "⌉", "", "⌉", "{$\\rceil$}", NULL, "\\u8969?", {"rceil",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_lfloor, "lfloor", "\xe2\x8c\x8a", "⌊", "⌊", "⌊", "", "⌊", "{$\\lfloor$}", NULL, "\\u8970?", {"lfloor",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_rfloor, "rfloor", "\xe2\x8c\x8b", "⌋", "⌋", "⌋", "", "⌋", "{$\\rfloor$}", NULL, "\\u8971?", {"rfloor",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_lang, "lang", "\xe2\x8c\xa9", "⟨", "⟨", "⟨", "", "〈", "{$\\langle$}", NULL, "\\u9001?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_rang, "rang", "\xe2\x8c\xaa", "⟩", "⟩", "⟩", "", "〉", "{$\\rangle$}", NULL, "\\u9002?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_loz, "loz", "\xe2\x97\x8a", "◊", "◊", "◊", "", "◊", "{$\\lozenge$}", NULL, "\\u9674?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_spades, "spades", "\xe2\x99\xa0", "♠", "♠", "♠", "", "♠", "{$\\spadesuit$}", NULL, "\\u9824?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_clubs, "clubs", "\xe2\x99\xa3", "♣", "♣", "♣", "", "♣", "{$\\clubsuit$}", NULL, "\\u9827?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_hearts, "hearts", "\xe2\x99\xa5", "♥", "♥", "♥", "", "♥", "{$\\heartsuit$}", NULL, "\\u9829?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_diams, "diams", "\xe2\x99\xa6", "♦", "♦", "♦", "", "♦", "{$\\diamondsuit$}", NULL, "\\u9830?", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_quot, "quot", "\"", "\"", "\"", "\"", "\"", """, "\"", "\"", "\"", {"\"",DocSymbol::Perl_char}}, + {DocSymbol::Sym_amp, "amp", "&", "&", "&", "&", "&", "&", "\\&", "&", "&", {"&",DocSymbol::Perl_char}}, + {DocSymbol::Sym_lt, "lt", "<", "<", "<", "<", "<", "<", "<", "<", "<", {"<",DocSymbol::Perl_char}}, + {DocSymbol::Sym_gt, "gt", ">", ">", ">", ">", ">", ">", ">", ">", ">", {">",DocSymbol::Perl_char}}, + {DocSymbol::Sym_OElig, "OElig", "\xc5\x92", "Œ", "Œ", "Œ", "", "Œ", "\\OE", NULL, "\\'8C", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_oelig, "oelig", "\xc5\x93", "œ", "œ", "œ", "", "œ", "\\oe", NULL, "\\'9C", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Scaron, "Scaron", "\xc5\xa0", "Š", "Š", "Š", "", "Š", "\\v{S}", NULL, "\\'8A", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_scaron, "scaron", "\xc5\xa1", "š", "š", "š", "", "š", "\\v{s}", NULL, "\\'9A", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Yuml, "Yuml", "\xc5\xb8", "Ÿ", "Ÿ", "Ÿ", "", "Ÿ", "\\\"{Y}", "Y\\*(4", "\\'9F", {"Y",DocSymbol::Perl_umlaut}}, + {DocSymbol::Sym_circ, "circ", "\xcb\x86", "ˆ", "ˆ", "ˆ", "", "ˆ", "{$\\circ$}", NULL, "\\'88", {" ",DocSymbol::Perl_circ}}, + {DocSymbol::Sym_tilde, "tilde", "\xcb\x9c", "˜", "˜", "˜", "", "˜", "\\~{}", "~", "\\'98", {" ",DocSymbol::Perl_tilde}}, + {DocSymbol::Sym_ensp, "ensp", "\xe2\x80\x82", " ", " ", " ", "", " ", "\\enskip{}", NULL, "{\\enspace}", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_emsp, "emsp", "\xe2\x80\x83", " ", " ", " ", "", " ", "\\quad{}", NULL, "{\\emspace}", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_thinsp, "thinsp", "\xe2\x80\x89", " ", " ", " ", "", " ", "\\,", NULL, "{\\qmspace}", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_zwnj, "zwnj", "\xe2\x80\x8c", "‌", "‌", "‌", "", "‌", "{}", NULL, "\\zwnj", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_zwj, "zwj", "\xe2\x80\x8d", "‍", "‍", "‍", "", "‍", "", NULL, "\\zwj", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_lrm, "lrm", "\xe2\x80\x8e", "‎", "‎", "‎", "", "‎", "", NULL, "\\ltrmark", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_rlm, "rlm", "\xe2\x80\x8f", "‏", "‏", "‏", "", "‏", "", NULL, "\\rtlmark", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_ndash, "ndash", "\xe2\x80\x93", "–", "–", "–", "", "–", "--", "--", "\\'96", {"-",DocSymbol::Perl_char}}, + {DocSymbol::Sym_mdash, "mdash", "\xe2\x80\x94", "—", "—", "—", "", "—", "---", "---", "\\'97", {"--",DocSymbol::Perl_string}}, + {DocSymbol::Sym_lsquo, "lsquo", "\xe2\x80\x98", "‘", "‘", "‘", "", "‘", "`", "`", "\\'91", {"\\\'",DocSymbol::Perl_string}}, + {DocSymbol::Sym_rsquo, "rsquo", "\xe2\x80\x99", "’", "’", "’", "", "’", "'", "'", "\\'92", {"\\\'",DocSymbol::Perl_string}}, + {DocSymbol::Sym_sbquo, "sbquo", "\xe2\x80\x9a", "‚", "‚", "‚", "", "‚", "\\quotesinglbase{}", NULL, "\\'82", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_ldquo, "ldquo", "\xe2\x80\x9c", "“", "“", "“", "", "“", "``", "``", "\\'93", {"\"",DocSymbol::Perl_char}}, + {DocSymbol::Sym_rdquo, "rdquo", "\xe2\x80\x9d", "”", "”", "”", "", "”", "''", "''", "\\'94", {"\"",DocSymbol::Perl_char}}, + {DocSymbol::Sym_bdquo, "bdquo", "\xe2\x80\x9e", "„", "„", "„", "", "„", "\\quotedblbase{}", NULL, "\\'84", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_dagger, "dagger", "\xe2\x80\xa0", "†", "†", "†", "", "†", "{$\\dagger$}", NULL, "\\'86", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_Dagger, "Dagger", "\xe2\x80\xa1", "‡", "‡", "‡", "", "‡", "{$\\ddagger$}", NULL, "\\'87", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_permil, "permil", "\xe2\x80\xb0", "‰", "‰", "‰", "", "‰", "{$\\permil{}$}", NULL, "\\'89", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_lsaquo, "lsaquo", "\xe2\x80\xb9", "‹", "‹", "‹", "", "‹", "\\guilsinglleft{}", NULL, "\\'8B", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_rsaquo, "rsaquo", "\xe2\x80\xba", "›", "›", "›", "", "›", "\\guilsinglright{}", NULL, "\\'9B", {NULL,DocSymbol::Perl_unknown}}, + {DocSymbol::Sym_euro, "euro", "\xe2\x82\xac", "€", "€", "€", "", "€", "\\texteuro{}", NULL, "\\'80", {NULL,DocSymbol::Perl_unknown}}, + + // doxygen extension to the HTML4 table of HTML entities + {DocSymbol::Sym_tm, "tm", "\xe2\x84\xa2", "™", "(TM)", "&tm;", "", "™", "\\texttrademark{}", "(TM)", "\\'99", {"trademark",DocSymbol::Perl_symbol}}, + {DocSymbol::Sym_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", "<", "<", "<", "<", "<", "<", "<", "<", "<", {"<",DocSymbol::Perl_char}}, + {DocSymbol::Sym_Greater, "Greater", ">", ">", ">", ">", ">", ">", ">", ">", ">", {">",DocSymbol::Perl_char}}, + {DocSymbol::Sym_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", "\"", "\"", "\"", "\"", "\"", """, "\"", "\"", "\"", {"\"",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 #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 << "<"; 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 << ""; break; - case DocSymbol::Tm: m_t << ""; break; - case DocSymbol::Reg: m_t << ""; 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 << "letter() << "\"/>"; break; - case DocSymbol::Acute: m_t << "letter() << "\"/>"; break; - case DocSymbol::Grave: m_t << "letter() << "\"/>"; break; - case DocSymbol::Circ: m_t << "letter() << "\"/>"; break; - case DocSymbol::Tilde: m_t << "letter() << "\"/>"; break; - case DocSymbol::Szlig: m_t << ""; break; - case DocSymbol::Cedil: m_t << "letter() << "\"/>"; break; - case DocSymbol::Ring: m_t << "letter() << "\"/>"; break; - case DocSymbol::Slash: m_t << "letter() << "\"/>"; break; - case DocSymbol::Nbsp: m_t << ""; break; - case DocSymbol::Aelig: m_t << ""; break; - case DocSymbol::AElig: m_t << ""; break; - case DocSymbol::GrkGamma: m_t << ""; break; - case DocSymbol::GrkDelta: m_t << ""; break; - case DocSymbol::GrkTheta: m_t << ""; break; - case DocSymbol::GrkLambda: m_t << ""; break; - case DocSymbol::GrkXi: m_t << ""; break; - case DocSymbol::GrkPi: m_t << ""; break; - case DocSymbol::GrkSigma: m_t << ""; break; - case DocSymbol::GrkUpsilon: m_t << ""; break; - case DocSymbol::GrkPhi: m_t << ""; break; - case DocSymbol::GrkPsi: m_t << ""; break; - case DocSymbol::GrkOmega: m_t << ""; break; - case DocSymbol::Grkalpha: m_t << ""; break; - case DocSymbol::Grkbeta: m_t << ""; break; - case DocSymbol::Grkgamma: m_t << ""; break; - case DocSymbol::Grkdelta: m_t << ""; break; - case DocSymbol::Grkepsilon: m_t << ""; break; - case DocSymbol::Grkzeta: m_t << ""; break; - case DocSymbol::Grketa: m_t << ""; break; - case DocSymbol::Grktheta: m_t << ""; break; - case DocSymbol::Grkiota: m_t << ""; break; - case DocSymbol::Grkkappa: m_t << ""; break; - case DocSymbol::Grklambda: m_t << ""; break; - case DocSymbol::Grkmu: m_t << ""; break; - case DocSymbol::Grknu: m_t << ""; break; - case DocSymbol::Grkxi: m_t << ""; break; - case DocSymbol::Grkpi: m_t << ""; break; - case DocSymbol::Grkrho: m_t << ""; break; - case DocSymbol::Grksigma: m_t << ""; break; - case DocSymbol::Grktau: m_t << ""; break; - case DocSymbol::Grkupsilon: m_t << ""; break; - case DocSymbol::Grkphi: m_t << ""; break; - case DocSymbol::Grkchi: m_t << ""; break; - case DocSymbol::Grkpsi: m_t << ""; break; - case DocSymbol::Grkomega: m_t << ""; break; - case DocSymbol::Grkvarsigma: m_t << ""; break; - case DocSymbol::Section: m_t << ""; break; - case DocSymbol::Degree: m_t << ""; break; - case DocSymbol::Prime: m_t << ""; break; - case DocSymbol::DoublePrime: m_t << ""; break; - case DocSymbol::Infinity: m_t << ""; break; - case DocSymbol::EmptySet: m_t << ""; break; - case DocSymbol::PlusMinus: m_t << ""; break; - case DocSymbol::Times: m_t << ""; break; - case DocSymbol::Minus: m_t << ""; break; - case DocSymbol::CenterDot: m_t << ""; break; - case DocSymbol::Partial: m_t << ""; break; - case DocSymbol::Nabla: m_t << ""; break; - case DocSymbol::SquareRoot: m_t << ""; break; - case DocSymbol::Perpendicular: m_t << ""; break; - case DocSymbol::Sum: m_t << ""; break; - case DocSymbol::Integral: m_t << ""; break; - case DocSymbol::Product: m_t << ""; break; - case DocSymbol::Similar: m_t << ""; break; - case DocSymbol::Approx: m_t << ""; break; - case DocSymbol::NotEqual: m_t << ""; break; - case DocSymbol::Equivalent: m_t << ""; break; - case DocSymbol::Proportional: m_t << ""; 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 << ""; break; - case DocSymbol::SetNotIn: m_t << ""; break; - case DocSymbol::LeftCeil: m_t << ""; break; - case DocSymbol::RightCeil: m_t << ""; break; - case DocSymbol::LeftFloor: m_t << ""; break; - case DocSymbol::RightFloor: m_t << ""; 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(""); + 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 = " \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