wxSnippets Logo   wxWidgets Code
  S N I P P E T S
void HTMLDecode(wxString& s)
    {
        wxString sRet;

        for(size_t i = 0; i < s.length(); ++i)
        {
            if(s.c_str()[i] == wxT('&'))
            {
                if(s.length() - i >= 7)
                {
                    if(s.c_str()[i] == wxT('&') &&
                        s.c_str()[i+1] == wxT('#') &&
                        wxIsdigit(s.c_str()[i+2]) &&
                        wxIsdigit(s.c_str()[i+3]) &&
                        wxIsdigit(s.c_str()[i+4]) &&
                        s.c_str()[i+5] == wxT(';'))
                    {
                        sRet += (wxChar) ((s.c_str()[i+2] - wxT('0')) * 100) +
                                        ((s.c_str()[i+3] - wxT('0')) * 10) +
                                        ((s.c_str()[i+4] - wxT('0')) );
                        i += 6;
                        continue;
                    }
                }
                if(s.length() - i >= 6)
                {
                    if(wxTmemcmp(&s.c_str()[i], wxT("'"), 6) == 0)
                    {
                        sRet += wxT(''');
                        i += 5;
                        continue;
                    }
                    if(wxTmemcmp(&s.c_str()[i], wxT(" "), 6) == 0)
                    {
                        sRet += wxT(' ');
                        i += 5;
                        continue;
                    }
                    if(wxTmemcmp(&s.c_str()[i], wxT("""), 6) == 0)
                    {
                        sRet += wxT('"');
                        i += 5;
                        continue;
                    }
                }
                if(s.length() - i >= 5 && wxTmemcmp(&s.c_str()[i], wxT("&"), 5) == 0)
                {
                    sRet += wxT('&');
                    i += 4; //todo:  We should re-scan like this:
//                    wxTmemmove((wxChar*)&s.c_str()[i+1],
//                                (wxChar*)&s.c_str()[i+5],
//                                s.length() - (i+5) );
//                    s.c_str()[i+5]
//                    i -= 1;
                    continue;
                }
                if(s.length() - i >= 4)
                {
                    if(wxTmemcmp(&s.c_str()[i], wxT("<"), 4) == 0)
                    {
                        sRet += wxT('<');
                        i += 3;
                        continue;
                    }
                    if(wxTmemcmp(&s.c_str()[i], wxT(">"), 4) == 0)
                    {
                        sRet += wxT('>');
                        i += 3;
                        continue;
                    }
                }
            }

            sRet += s[i];
        }

        s = sRet;
}






No comments are included for this article. Submit a comment with your feedback/suggestions.

Click to View Printer Friendly Version