📄 url.cpp.svn-base
字号:
// prepare regexp
char *matchPattern = WCharToChar(rules[i]->Match, CP_ACP);
regex_t re;
if (regcomp(&re, matchPattern, REG_EXTENDED) == 0) {
#define NSUBS 10
regmatch_t subs[NSUBS];
if (regexec(&re, url, NSUBS, subs, 0) == 0) {
// match(!) -> rewrite
newUrl = rules[i]->Replace;
for (int k = 1; k < NSUBS; k++) {
if (subs[k].rm_so != -1) {
CString sNum;
sNum.Format(_T("\\%d"), k);
CString sSub = sUrl.Mid(subs[k].rm_so, subs[k].rm_eo - subs[k].rm_so);
newUrl.Replace(sNum, sSub);
}
}
found = TRUE;
}
}
regfree(&re);
delete [] matchPattern;
}
delete [] url;
LOG1(5, "- rewritten to: %S", newUrl);
return newUrl;
}
CString MakeHtmlOptimizerUrl(const CString &url, const CString &optUrl) {
LOG1(5, "MakeHtmlOptimizerUrl('%S')", url);
CString u = optUrl;
u.Replace(_T("[%URL%]"), UrlEncode(url));
return u;
}
CString UrlEncode(const CString &url) {
CString encoded;
for (int i = 0; i < url.GetLength(); i++) {
TCHAR ch = url.GetAt(i);
if ((ch >= 0x00 && ch <= 0x26) ||
ch == 0x2B || ch == 0x2C || ch == 0x2F ||
(ch >= 0x3A && ch <= 0x40) || (ch >= 0x7B && ch <= 0x7E) || (ch >= 0x5B && ch <= 0x5E) ||
ch == 0x60 || (ch >= 0x80 && ch <= 0xFF))
{
CString hex;
hex.Format(_T("%%%02X"), ch);
encoded += hex;
}
else {
encoded += ch;
}
}
return encoded;
}
#endif
//
//
//
//CString ReplaceHTMLEntities(LPCTSTR lpString) {
void ReplaceHTMLEntities(CString &str) {
LOG1(5, "ReplaceHTMLEntities('%S')", str);
struct {
LPCTSTR Ent;
int Ord;
} ents[] = {
{ _T("nbsp"), 160 },
{ _T("iexcl"), 161 },
{ _T("cent"), 162 },
{ _T("pound"), 163 },
{ _T("curren"), 164 },
{ _T("yen"), 165 },
{ _T("brvbar"), 166 },
{ _T("sect"), 167 },
{ _T("uml"), 168 },
{ _T("copy"), 169 },
{ _T("ordf"), 170 },
{ _T("laquo"), 171 },
{ _T("not"), 172 },
{ _T("shy"), 173 },
{ _T("reg"), 174 },
{ _T("macr"), 175 },
{ _T("deg"), 176 },
{ _T("plusmn"), 177 },
{ _T("sup2"), 178 },
{ _T("sup3"), 179 },
{ _T("acute"), 180 },
{ _T("micro"), 181 },
{ _T("para"), 182 },
{ _T("middot"), 183 },
{ _T("cedil"), 184 },
{ _T("sup1"), 185 },
{ _T("ordm"), 186 },
{ _T("raquo"), 187 },
{ _T("frac14"), 188 },
{ _T("frac12"), 189 },
{ _T("frac34"), 190 },
{ _T("iquest"), 191 },
{ _T("Agrave"), 192 },
{ _T("Aacute"), 193 },
{ _T("Acirc"), 194 },
{ _T("Atilde"), 195 },
{ _T("Auml"), 196 },
{ _T("Aring"), 197 },
{ _T("AElig"), 198 },
{ _T("Ccedil"), 199 },
{ _T("Egrave"), 200 },
{ _T("Eacute"), 201 },
{ _T("Ecirc"), 202 },
{ _T("Euml"), 203 },
{ _T("Igrave"), 204 },
{ _T("Iacute"), 205 },
{ _T("Icirc"), 206 },
{ _T("Iuml"), 207 },
{ _T("ETH"), 208 },
{ _T("Ntilde"), 209 },
{ _T("Ograve"), 210 },
{ _T("Oacute"), 211 },
{ _T("Ocirc"), 212 },
{ _T("Otilde"), 213 },
{ _T("Ouml"), 214 },
{ _T("times"), 215 },
{ _T("Oslash"), 216 },
{ _T("Ugrave"), 217 },
{ _T("Uacute"), 218 },
{ _T("Ucirc"), 219 },
{ _T("Uuml"), 220 },
{ _T("Yacute"), 221 },
{ _T("THORN"), 222 },
{ _T("szlig"), 223 },
{ _T("agrave"), 224 },
{ _T("aacute"), 225 },
{ _T("acirc"), 226 },
{ _T("atilde"), 227 },
{ _T("auml"), 228 },
{ _T("aring"), 229 },
{ _T("aelig"), 230 },
{ _T("ccedil"), 231 },
{ _T("egrave"), 232 },
{ _T("eacute"), 233 },
{ _T("ecirc"), 234 },
{ _T("euml"), 235 },
{ _T("igrave"), 236 },
{ _T("iacute"), 237 },
{ _T("icirc"), 238 },
{ _T("iuml"), 239 },
{ _T("eth"), 240 },
{ _T("ntilde"), 241 },
{ _T("ograve"), 242 },
{ _T("oacute"), 243 },
{ _T("ocirc"), 244 },
{ _T("otilde"), 245 },
{ _T("ouml"), 246 },
{ _T("divide"), 247 },
{ _T("oslash"), 248 },
{ _T("ugrave"), 249 },
{ _T("uacute"), 250 },
{ _T("ucirc"), 251 },
{ _T("uuml"), 252 },
{ _T("yacute"), 253 },
{ _T("thorn"), 254 },
{ _T("yuml"), 255 },
{ _T("fnof"), 402 },
{ _T("Alpha"), 913 },
{ _T("Beta"), 914 },
{ _T("Gamma"), 915 },
{ _T("Delta"), 916 },
{ _T("Epsilon"), 917 },
{ _T("Zeta"), 918 },
{ _T("Eta"), 919 },
{ _T("Theta"), 920 },
{ _T("Iota"), 921 },
{ _T("Kappa"), 922 },
{ _T("Lambda"), 923 },
{ _T("Mu"), 924 },
{ _T("Nu"), 925 },
{ _T("Xi"), 926 },
{ _T("Omicron"), 927 },
{ _T("Pi"), 928 },
{ _T("Rho"), 929 },
{ _T("Sigma"), 931 },
{ _T("Tau"), 932 },
{ _T("Upsilon"), 933 },
{ _T("Phi"), 934 },
{ _T("Chi"), 935 },
{ _T("Psi"), 936 },
{ _T("Omega"), 937 },
{ _T("alpha"), 945 },
{ _T("beta"), 946 },
{ _T("gamma"), 947 },
{ _T("delta"), 948 },
{ _T("epsilon"), 949 },
{ _T("zeta"), 950 },
{ _T("eta"), 951 },
{ _T("theta"), 952 },
{ _T("iota"), 953 },
{ _T("kappa"), 954 },
{ _T("lambda"), 955 },
{ _T("mu"), 956 },
{ _T("nu"), 957 },
{ _T("xi"), 958 },
{ _T("omicron"), 959 },
{ _T("pi"), 960 },
{ _T("rho"), 961 },
{ _T("sigmaf"), 962 },
{ _T("sigma"), 963 },
{ _T("tau"), 964 },
{ _T("upsilon"), 965 },
{ _T("phi"), 966 },
{ _T("chi"), 967 },
{ _T("psi"), 968 },
{ _T("omega"), 969 },
{ _T("thetasym"), 977 },
{ _T("upsih"), 978 },
{ _T("piv"), 982 },
{ _T("bull"), 8226 },
{ _T("hellip"), 8230 },
{ _T("prime"), 8242 },
{ _T("Prime"), 8243 },
{ _T("oline"), 8254 },
{ _T("frasl"), 8260 },
{ _T("weierp"), 8472 },
{ _T("image"), 8465 },
{ _T("real"), 8476 },
{ _T("trade"), 8482 },
{ _T("alefsym"), 8501 },
{ _T("larr"), 8592 },
{ _T("uarr"), 8593 },
{ _T("rarr"), 8594 },
{ _T("darr"), 8595 },
{ _T("harr"), 8596 },
{ _T("crarr"), 8629 },
{ _T("lArr"), 8656 },
{ _T("uArr"), 8657 },
{ _T("rArr"), 8658 },
{ _T("dArr"), 8659 },
{ _T("hArr"), 8660 },
{ _T("forall"), 8704 },
{ _T("part"), 8706 },
{ _T("exist"), 8707 },
{ _T("empty"), 8709 },
{ _T("nabla"), 8711 },
{ _T("isin"), 8712 },
{ _T("notin"), 8713 },
{ _T("ni"), 8715 },
{ _T("prod"), 8719 },
{ _T("sum"), 8721 },
{ _T("minus"), 8722 },
{ _T("lowast"), 8727 },
{ _T("radic"), 8730 },
{ _T("prop"), 8733 },
{ _T("infin"), 8734 },
{ _T("ang"), 8736 },
{ _T("and"), 8743 },
{ _T("or"), 8744 },
{ _T("cap"), 8745 },
{ _T("cup"), 8746 },
{ _T("int"), 8747 },
{ _T("there4"), 8756 },
{ _T("sim"), 8764 },
{ _T("cong"), 8773 },
{ _T("asymp"), 8776 },
{ _T("ne"), 8800 },
{ _T("equiv"), 8801 },
{ _T("le"), 8804 },
{ _T("ge"), 8805 },
{ _T("sub"), 8834 },
{ _T("sup"), 8835 },
{ _T("nsub"), 8836 },
{ _T("sube"), 8838 },
{ _T("supe"), 8839 },
{ _T("oplus"), 8853 },
{ _T("otimes"), 8855 },
{ _T("perp"), 8869 },
{ _T("sdot"), 8901 },
{ _T("lceil"), 8968 },
{ _T("rceil"), 8969 },
{ _T("lfloor"), 8970 },
{ _T("rfloor"), 8971 },
{ _T("lang"), 9001 },
{ _T("rang"), 9002 },
{ _T("loz"), 9674 },
{ _T("spades"), 9824 },
{ _T("clubs"), 9827 },
{ _T("hearts"), 9829 },
{ _T("diams"), 9830 },
{ _T("quot"), 34 },
{ _T("amp"), 38 },
{ _T("lt"), 60 },
{ _T("gt"), 62 },
{ _T("OElig"), 338 },
{ _T("oelig"), 339 },
{ _T("Scaron"), 352 },
{ _T("scaron"), 353 },
{ _T("Yuml"), 376 },
{ _T("circ"), 710 },
{ _T("tilde"), 732 },
{ _T("ensp"), 8194 },
{ _T("emsp"), 8195 },
{ _T("thinsp"), 8201 },
{ _T("zwnj"), 8204 },
{ _T("zwj"), 8205 },
{ _T("lrm"), 8206 },
{ _T("rlm"), 8207 },
{ _T("ndash"), 8211 },
{ _T("mdash"), 8212 },
{ _T("lsquo"), 8216 },
{ _T("rsquo"), 8217 },
{ _T("sbquo"), 8218 },
{ _T("ldquo"), 8220 },
{ _T("rdquo"), 8221 },
{ _T("bdquo"), 8222 },
{ _T("dagger"), 8224 },
{ _T("Dagger"), 8225 },
{ _T("permil"), 8240 },
{ _T("lsaquo"), 8249 },
{ _T("rsaquo"), 8250 },
{ _T("euro"), 8364}
};
int pos, start;
pos = str.Find('&');
while (pos != -1) {
CString s = str.Mid(pos + 1);
int end = pos + 1 + s.FindOneOf(_T("; \t\n"));
if (end != -1 && end > pos + 1) {
CString e = str.Mid(pos + 1, end - pos - 1);
if (e.GetAt(0) == '#') {
if (str.GetAt(end) == ';')
end++;
if (e.GetAt(1) == 'x') {
// hexa entity
TCHAR ch;
swscanf(e, _T("#x%x"), &ch);
str = str.Left(pos) + CString(ch) + str.Mid(end);
}
else {
// decimal entity
TCHAR ch;
swscanf(e, _T("#%d"), &ch);
str = str.Left(pos) + CString(ch) + str.Mid(end);
}
}
else {
// string entity
TCHAR buff[16];
if (swscanf(e, _T("%s"), buff) == 1) {
// find entity
for (int i = 0; i < sizeof(ents) / sizeof(ents[0]); i++) {
CString entity;
if (wcscmp(buff, ents[i].Ent) == 0) {
TCHAR ch = ents[i].Ord;
str = str.Left(pos) + CString(ch) + str.Mid(end + 1);
break;
}
}
}
}
}
start = pos + 1;
pos = str.Find('&', start);
}
}
#if defined PRSSR_APP
CString StripHtmlTags(const CString &str) {
CHtmlFile html;
html.SetFlags(SGML_EXTENSION_HTML_FLAG_STRIPELEMENT | SGML_EXTENSION_HTML_FLAG_STRIPCOMMENT);
CString s;
s.Format(_T("<div>%s</div>"), str); // libsgml workaround
html.LoadFromMemory(s);
return html.ToString();
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -