From 19817fd33ee930ba03c597301c79f689f94655eb Mon Sep 17 00:00:00 2001 From: =?utf8?q?V=C3=A1clav=20Slav=C3=ADk?= Date: Tue, 15 May 2007 12:54:36 +0000 Subject: [PATCH] fixed HTML entities parsing broken by wxString changes git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@46038 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- src/html/htmlpars.cpp | 537 +++++++++++++++++++++--------------------- 1 file changed, 273 insertions(+), 264 deletions(-) diff --git a/src/html/htmlpars.cpp b/src/html/htmlpars.cpp index 46af2aa602..f53ee5fdab 100644 --- a/src/html/htmlpars.cpp +++ b/src/html/htmlpars.cpp @@ -519,17 +519,6 @@ wxString wxHtmlEntitiesParser::Parse(const wxString& input) return output; } -struct wxHtmlEntityInfo -{ - const wxChar *name; - unsigned code; -}; - -extern "C" int LINKAGEMODE wxHtmlEntityCompare(const void *key, const void *item) -{ - return wxStrcmp((wxChar*)key, ((wxHtmlEntityInfo*)item)->name); -} - #if !wxUSE_UNICODE wxChar wxHtmlEntitiesParser::GetCharForCode(unsigned code) { @@ -548,6 +537,21 @@ wxChar wxHtmlEntitiesParser::GetCharForCode(unsigned code) } #endif +struct wxHtmlEntityInfo +{ + const wxStringCharType *name; + unsigned code; +}; + +extern "C" int LINKAGEMODE wxHtmlEntityCompare(const void *key, const void *item) +{ +#if wxUSE_UNICODE_UTF8 + return strcmp((char*)key, ((wxHtmlEntityInfo*)item)->name); +#else + return wxStrcmp((wxChar*)key, ((wxHtmlEntityInfo*)item)->name); +#endif +} + wxChar wxHtmlEntitiesParser::GetEntityChar(const wxString& entity) { unsigned code = 0; @@ -571,260 +575,265 @@ wxChar wxHtmlEntitiesParser::GetEntityChar(const wxString& entity) } else { + // store the literals in wx's internal representation (either char* + // in UTF-8 or wchar_t*) for best performance: + #define ENTITY(name, code) { wxSTRING_TEXT(name), code } + static wxHtmlEntityInfo substitutions[] = { - { wxT("AElig"),198 }, - { wxT("Aacute"),193 }, - { wxT("Acirc"),194 }, - { wxT("Agrave"),192 }, - { wxT("Alpha"),913 }, - { wxT("Aring"),197 }, - { wxT("Atilde"),195 }, - { wxT("Auml"),196 }, - { wxT("Beta"),914 }, - { wxT("Ccedil"),199 }, - { wxT("Chi"),935 }, - { wxT("Dagger"),8225 }, - { wxT("Delta"),916 }, - { wxT("ETH"),208 }, - { wxT("Eacute"),201 }, - { wxT("Ecirc"),202 }, - { wxT("Egrave"),200 }, - { wxT("Epsilon"),917 }, - { wxT("Eta"),919 }, - { wxT("Euml"),203 }, - { wxT("Gamma"),915 }, - { wxT("Iacute"),205 }, - { wxT("Icirc"),206 }, - { wxT("Igrave"),204 }, - { wxT("Iota"),921 }, - { wxT("Iuml"),207 }, - { wxT("Kappa"),922 }, - { wxT("Lambda"),923 }, - { wxT("Mu"),924 }, - { wxT("Ntilde"),209 }, - { wxT("Nu"),925 }, - { wxT("OElig"),338 }, - { wxT("Oacute"),211 }, - { wxT("Ocirc"),212 }, - { wxT("Ograve"),210 }, - { wxT("Omega"),937 }, - { wxT("Omicron"),927 }, - { wxT("Oslash"),216 }, - { wxT("Otilde"),213 }, - { wxT("Ouml"),214 }, - { wxT("Phi"),934 }, - { wxT("Pi"),928 }, - { wxT("Prime"),8243 }, - { wxT("Psi"),936 }, - { wxT("Rho"),929 }, - { wxT("Scaron"),352 }, - { wxT("Sigma"),931 }, - { wxT("THORN"),222 }, - { wxT("Tau"),932 }, - { wxT("Theta"),920 }, - { wxT("Uacute"),218 }, - { wxT("Ucirc"),219 }, - { wxT("Ugrave"),217 }, - { wxT("Upsilon"),933 }, - { wxT("Uuml"),220 }, - { wxT("Xi"),926 }, - { wxT("Yacute"),221 }, - { wxT("Yuml"),376 }, - { wxT("Zeta"),918 }, - { wxT("aacute"),225 }, - { wxT("acirc"),226 }, - { wxT("acute"),180 }, - { wxT("aelig"),230 }, - { wxT("agrave"),224 }, - { wxT("alefsym"),8501 }, - { wxT("alpha"),945 }, - { wxT("amp"),38 }, - { wxT("and"),8743 }, - { wxT("ang"),8736 }, - { wxT("aring"),229 }, - { wxT("asymp"),8776 }, - { wxT("atilde"),227 }, - { wxT("auml"),228 }, - { wxT("bdquo"),8222 }, - { wxT("beta"),946 }, - { wxT("brvbar"),166 }, - { wxT("bull"),8226 }, - { wxT("cap"),8745 }, - { wxT("ccedil"),231 }, - { wxT("cedil"),184 }, - { wxT("cent"),162 }, - { wxT("chi"),967 }, - { wxT("circ"),710 }, - { wxT("clubs"),9827 }, - { wxT("cong"),8773 }, - { wxT("copy"),169 }, - { wxT("crarr"),8629 }, - { wxT("cup"),8746 }, - { wxT("curren"),164 }, - { wxT("dArr"),8659 }, - { wxT("dagger"),8224 }, - { wxT("darr"),8595 }, - { wxT("deg"),176 }, - { wxT("delta"),948 }, - { wxT("diams"),9830 }, - { wxT("divide"),247 }, - { wxT("eacute"),233 }, - { wxT("ecirc"),234 }, - { wxT("egrave"),232 }, - { wxT("empty"),8709 }, - { wxT("emsp"),8195 }, - { wxT("ensp"),8194 }, - { wxT("epsilon"),949 }, - { wxT("equiv"),8801 }, - { wxT("eta"),951 }, - { wxT("eth"),240 }, - { wxT("euml"),235 }, - { wxT("euro"),8364 }, - { wxT("exist"),8707 }, - { wxT("fnof"),402 }, - { wxT("forall"),8704 }, - { wxT("frac12"),189 }, - { wxT("frac14"),188 }, - { wxT("frac34"),190 }, - { wxT("frasl"),8260 }, - { wxT("gamma"),947 }, - { wxT("ge"),8805 }, - { wxT("gt"),62 }, - { wxT("hArr"),8660 }, - { wxT("harr"),8596 }, - { wxT("hearts"),9829 }, - { wxT("hellip"),8230 }, - { wxT("iacute"),237 }, - { wxT("icirc"),238 }, - { wxT("iexcl"),161 }, - { wxT("igrave"),236 }, - { wxT("image"),8465 }, - { wxT("infin"),8734 }, - { wxT("int"),8747 }, - { wxT("iota"),953 }, - { wxT("iquest"),191 }, - { wxT("isin"),8712 }, - { wxT("iuml"),239 }, - { wxT("kappa"),954 }, - { wxT("lArr"),8656 }, - { wxT("lambda"),955 }, - { wxT("lang"),9001 }, - { wxT("laquo"),171 }, - { wxT("larr"),8592 }, - { wxT("lceil"),8968 }, - { wxT("ldquo"),8220 }, - { wxT("le"),8804 }, - { wxT("lfloor"),8970 }, - { wxT("lowast"),8727 }, - { wxT("loz"),9674 }, - { wxT("lrm"),8206 }, - { wxT("lsaquo"),8249 }, - { wxT("lsquo"),8216 }, - { wxT("lt"),60 }, - { wxT("macr"),175 }, - { wxT("mdash"),8212 }, - { wxT("micro"),181 }, - { wxT("middot"),183 }, - { wxT("minus"),8722 }, - { wxT("mu"),956 }, - { wxT("nabla"),8711 }, - { wxT("nbsp"),160 }, - { wxT("ndash"),8211 }, - { wxT("ne"),8800 }, - { wxT("ni"),8715 }, - { wxT("not"),172 }, - { wxT("notin"),8713 }, - { wxT("nsub"),8836 }, - { wxT("ntilde"),241 }, - { wxT("nu"),957 }, - { wxT("oacute"),243 }, - { wxT("ocirc"),244 }, - { wxT("oelig"),339 }, - { wxT("ograve"),242 }, - { wxT("oline"),8254 }, - { wxT("omega"),969 }, - { wxT("omicron"),959 }, - { wxT("oplus"),8853 }, - { wxT("or"),8744 }, - { wxT("ordf"),170 }, - { wxT("ordm"),186 }, - { wxT("oslash"),248 }, - { wxT("otilde"),245 }, - { wxT("otimes"),8855 }, - { wxT("ouml"),246 }, - { wxT("para"),182 }, - { wxT("part"),8706 }, - { wxT("permil"),8240 }, - { wxT("perp"),8869 }, - { wxT("phi"),966 }, - { wxT("pi"),960 }, - { wxT("piv"),982 }, - { wxT("plusmn"),177 }, - { wxT("pound"),163 }, - { wxT("prime"),8242 }, - { wxT("prod"),8719 }, - { wxT("prop"),8733 }, - { wxT("psi"),968 }, - { wxT("quot"),34 }, - { wxT("rArr"),8658 }, - { wxT("radic"),8730 }, - { wxT("rang"),9002 }, - { wxT("raquo"),187 }, - { wxT("rarr"),8594 }, - { wxT("rceil"),8969 }, - { wxT("rdquo"),8221 }, - { wxT("real"),8476 }, - { wxT("reg"),174 }, - { wxT("rfloor"),8971 }, - { wxT("rho"),961 }, - { wxT("rlm"),8207 }, - { wxT("rsaquo"),8250 }, - { wxT("rsquo"),8217 }, - { wxT("sbquo"),8218 }, - { wxT("scaron"),353 }, - { wxT("sdot"),8901 }, - { wxT("sect"),167 }, - { wxT("shy"),173 }, - { wxT("sigma"),963 }, - { wxT("sigmaf"),962 }, - { wxT("sim"),8764 }, - { wxT("spades"),9824 }, - { wxT("sub"),8834 }, - { wxT("sube"),8838 }, - { wxT("sum"),8721 }, - { wxT("sup"),8835 }, - { wxT("sup1"),185 }, - { wxT("sup2"),178 }, - { wxT("sup3"),179 }, - { wxT("supe"),8839 }, - { wxT("szlig"),223 }, - { wxT("tau"),964 }, - { wxT("there4"),8756 }, - { wxT("theta"),952 }, - { wxT("thetasym"),977 }, - { wxT("thinsp"),8201 }, - { wxT("thorn"),254 }, - { wxT("tilde"),732 }, - { wxT("times"),215 }, - { wxT("trade"),8482 }, - { wxT("uArr"),8657 }, - { wxT("uacute"),250 }, - { wxT("uarr"),8593 }, - { wxT("ucirc"),251 }, - { wxT("ugrave"),249 }, - { wxT("uml"),168 }, - { wxT("upsih"),978 }, - { wxT("upsilon"),965 }, - { wxT("uuml"),252 }, - { wxT("weierp"),8472 }, - { wxT("xi"),958 }, - { wxT("yacute"),253 }, - { wxT("yen"),165 }, - { wxT("yuml"),255 }, - { wxT("zeta"),950 }, - { wxT("zwj"),8205 }, - { wxT("zwnj"),8204 }, + ENTITY("AElig", 198), + ENTITY("Aacute", 193), + ENTITY("Acirc", 194), + ENTITY("Agrave", 192), + ENTITY("Alpha", 913), + ENTITY("Aring", 197), + ENTITY("Atilde", 195), + ENTITY("Auml", 196), + ENTITY("Beta", 914), + ENTITY("Ccedil", 199), + ENTITY("Chi", 935), + ENTITY("Dagger", 8225), + ENTITY("Delta", 916), + ENTITY("ETH", 208), + ENTITY("Eacute", 201), + ENTITY("Ecirc", 202), + ENTITY("Egrave", 200), + ENTITY("Epsilon", 917), + ENTITY("Eta", 919), + ENTITY("Euml", 203), + ENTITY("Gamma", 915), + ENTITY("Iacute", 205), + ENTITY("Icirc", 206), + ENTITY("Igrave", 204), + ENTITY("Iota", 921), + ENTITY("Iuml", 207), + ENTITY("Kappa", 922), + ENTITY("Lambda", 923), + ENTITY("Mu", 924), + ENTITY("Ntilde", 209), + ENTITY("Nu", 925), + ENTITY("OElig", 338), + ENTITY("Oacute", 211), + ENTITY("Ocirc", 212), + ENTITY("Ograve", 210), + ENTITY("Omega", 937), + ENTITY("Omicron", 927), + ENTITY("Oslash", 216), + ENTITY("Otilde", 213), + ENTITY("Ouml", 214), + ENTITY("Phi", 934), + ENTITY("Pi", 928), + ENTITY("Prime", 8243), + ENTITY("Psi", 936), + ENTITY("Rho", 929), + ENTITY("Scaron", 352), + ENTITY("Sigma", 931), + ENTITY("THORN", 222), + ENTITY("Tau", 932), + ENTITY("Theta", 920), + ENTITY("Uacute", 218), + ENTITY("Ucirc", 219), + ENTITY("Ugrave", 217), + ENTITY("Upsilon", 933), + ENTITY("Uuml", 220), + ENTITY("Xi", 926), + ENTITY("Yacute", 221), + ENTITY("Yuml", 376), + ENTITY("Zeta", 918), + ENTITY("aacute", 225), + ENTITY("acirc", 226), + ENTITY("acute", 180), + ENTITY("aelig", 230), + ENTITY("agrave", 224), + ENTITY("alefsym", 8501), + ENTITY("alpha", 945), + ENTITY("amp", 38), + ENTITY("and", 8743), + ENTITY("ang", 8736), + ENTITY("aring", 229), + ENTITY("asymp", 8776), + ENTITY("atilde", 227), + ENTITY("auml", 228), + ENTITY("bdquo", 8222), + ENTITY("beta", 946), + ENTITY("brvbar", 166), + ENTITY("bull", 8226), + ENTITY("cap", 8745), + ENTITY("ccedil", 231), + ENTITY("cedil", 184), + ENTITY("cent", 162), + ENTITY("chi", 967), + ENTITY("circ", 710), + ENTITY("clubs", 9827), + ENTITY("cong", 8773), + ENTITY("copy", 169), + ENTITY("crarr", 8629), + ENTITY("cup", 8746), + ENTITY("curren", 164), + ENTITY("dArr", 8659), + ENTITY("dagger", 8224), + ENTITY("darr", 8595), + ENTITY("deg", 176), + ENTITY("delta", 948), + ENTITY("diams", 9830), + ENTITY("divide", 247), + ENTITY("eacute", 233), + ENTITY("ecirc", 234), + ENTITY("egrave", 232), + ENTITY("empty", 8709), + ENTITY("emsp", 8195), + ENTITY("ensp", 8194), + ENTITY("epsilon", 949), + ENTITY("equiv", 8801), + ENTITY("eta", 951), + ENTITY("eth", 240), + ENTITY("euml", 235), + ENTITY("euro", 8364), + ENTITY("exist", 8707), + ENTITY("fnof", 402), + ENTITY("forall", 8704), + ENTITY("frac12", 189), + ENTITY("frac14", 188), + ENTITY("frac34", 190), + ENTITY("frasl", 8260), + ENTITY("gamma", 947), + ENTITY("ge", 8805), + ENTITY("gt", 62), + ENTITY("hArr", 8660), + ENTITY("harr", 8596), + ENTITY("hearts", 9829), + ENTITY("hellip", 8230), + ENTITY("iacute", 237), + ENTITY("icirc", 238), + ENTITY("iexcl", 161), + ENTITY("igrave", 236), + ENTITY("image", 8465), + ENTITY("infin", 8734), + ENTITY("int", 8747), + ENTITY("iota", 953), + ENTITY("iquest", 191), + ENTITY("isin", 8712), + ENTITY("iuml", 239), + ENTITY("kappa", 954), + ENTITY("lArr", 8656), + ENTITY("lambda", 955), + ENTITY("lang", 9001), + ENTITY("laquo", 171), + ENTITY("larr", 8592), + ENTITY("lceil", 8968), + ENTITY("ldquo", 8220), + ENTITY("le", 8804), + ENTITY("lfloor", 8970), + ENTITY("lowast", 8727), + ENTITY("loz", 9674), + ENTITY("lrm", 8206), + ENTITY("lsaquo", 8249), + ENTITY("lsquo", 8216), + ENTITY("lt", 60), + ENTITY("macr", 175), + ENTITY("mdash", 8212), + ENTITY("micro", 181), + ENTITY("middot", 183), + ENTITY("minus", 8722), + ENTITY("mu", 956), + ENTITY("nabla", 8711), + ENTITY("nbsp", 160), + ENTITY("ndash", 8211), + ENTITY("ne", 8800), + ENTITY("ni", 8715), + ENTITY("not", 172), + ENTITY("notin", 8713), + ENTITY("nsub", 8836), + ENTITY("ntilde", 241), + ENTITY("nu", 957), + ENTITY("oacute", 243), + ENTITY("ocirc", 244), + ENTITY("oelig", 339), + ENTITY("ograve", 242), + ENTITY("oline", 8254), + ENTITY("omega", 969), + ENTITY("omicron", 959), + ENTITY("oplus", 8853), + ENTITY("or", 8744), + ENTITY("ordf", 170), + ENTITY("ordm", 186), + ENTITY("oslash", 248), + ENTITY("otilde", 245), + ENTITY("otimes", 8855), + ENTITY("ouml", 246), + ENTITY("para", 182), + ENTITY("part", 8706), + ENTITY("permil", 8240), + ENTITY("perp", 8869), + ENTITY("phi", 966), + ENTITY("pi", 960), + ENTITY("piv", 982), + ENTITY("plusmn", 177), + ENTITY("pound", 163), + ENTITY("prime", 8242), + ENTITY("prod", 8719), + ENTITY("prop", 8733), + ENTITY("psi", 968), + ENTITY("quot", 34), + ENTITY("rArr", 8658), + ENTITY("radic", 8730), + ENTITY("rang", 9002), + ENTITY("raquo", 187), + ENTITY("rarr", 8594), + ENTITY("rceil", 8969), + ENTITY("rdquo", 8221), + ENTITY("real", 8476), + ENTITY("reg", 174), + ENTITY("rfloor", 8971), + ENTITY("rho", 961), + ENTITY("rlm", 8207), + ENTITY("rsaquo", 8250), + ENTITY("rsquo", 8217), + ENTITY("sbquo", 8218), + ENTITY("scaron", 353), + ENTITY("sdot", 8901), + ENTITY("sect", 167), + ENTITY("shy", 173), + ENTITY("sigma", 963), + ENTITY("sigmaf", 962), + ENTITY("sim", 8764), + ENTITY("spades", 9824), + ENTITY("sub", 8834), + ENTITY("sube", 8838), + ENTITY("sum", 8721), + ENTITY("sup", 8835), + ENTITY("sup1", 185), + ENTITY("sup2", 178), + ENTITY("sup3", 179), + ENTITY("supe", 8839), + ENTITY("szlig", 223), + ENTITY("tau", 964), + ENTITY("there4", 8756), + ENTITY("theta", 952), + ENTITY("thetasym", 977), + ENTITY("thinsp", 8201), + ENTITY("thorn", 254), + ENTITY("tilde", 732), + ENTITY("times", 215), + ENTITY("trade", 8482), + ENTITY("uArr", 8657), + ENTITY("uacute", 250), + ENTITY("uarr", 8593), + ENTITY("ucirc", 251), + ENTITY("ugrave", 249), + ENTITY("uml", 168), + ENTITY("upsih", 978), + ENTITY("upsilon", 965), + ENTITY("uuml", 252), + ENTITY("weierp", 8472), + ENTITY("xi", 958), + ENTITY("yacute", 253), + ENTITY("yen", 165), + ENTITY("yuml", 255), + ENTITY("zeta", 950), + ENTITY("zwj", 8205), + ENTITY("zwnj", 8204), {NULL, 0}}; + #undef ENTITY static size_t substitutions_cnt = 0; if (substitutions_cnt == 0) @@ -844,7 +853,7 @@ wxChar wxHtmlEntitiesParser::GetEntityChar(const wxString& entity) } } #else - info = (wxHtmlEntityInfo*) bsearch(entity.c_str(), substitutions, + info = (wxHtmlEntityInfo*) bsearch(entity.wx_str(), substitutions, substitutions_cnt, sizeof(wxHtmlEntityInfo), wxHtmlEntityCompare); -- 2.45.2