wxString wxHtmlFilterHTML::ReadFile(const wxFSFile& file) const { wxInputStream *s = file.GetStream(); wxString doc; if (s == NULL) { wxLogError(_("Cannot open HTML document: %s"), file.GetLocation().c_str()); return wxEmptyString; } // NB: We convert input file to wchar_t here in Unicode mode, based on // either Content-Type header or <meta> tags. In ANSI mode, we don't // do it as it is done by wxHtmlParser (for this reason, we add <meta> // tag if we used Content-Type header). #if wxUSE_UNICODE int charsetPos; if ((charsetPos = file.GetMimeType().Find(wxT("; charset="))) != wxNOT_FOUND) { wxString charset = file.GetMimeType().Mid(charsetPos + 10); wxCSConv conv(charset); ReadString(doc, s, conv); } else { size_t size = s->GetSize(); wxCharBuffer buf( size+1 ); s->Read( buf.data(), size ); *(buf.data() + size) = 0; wxString tmpdoc( buf, wxConvISO8859_1); wxString charset = wxHtmlParser::ExtractCharsetInformation(tmpdoc); if (charset.empty()) doc = tmpdoc; else { wxCSConv conv(charset); doc = wxString( buf, conv ); } } #else // !wxUSE_UNICODE ReadString(doc, s, wxConvLibc); // add meta tag if we obtained this through http: if (!file.GetMimeType().empty()) { wxString hdr; wxString mime = file.GetMimeType(); hdr.Printf(wxT("<meta http-equiv=\"Content-Type\" content=\"%s\">"), mime.c_str()); return hdr+doc; } #endif return doc; }
bool wxHtmlHelpData::AddBookParam(const wxFSFile& bookfile, wxFontEncoding encoding, const wxString& title, const wxString& contfile, const wxString& indexfile, const wxString& deftopic, const wxString& path) { wxFileSystem fsys; wxFSFile *fi; wxHtmlBookRecord *bookr; int IndexOld = m_index.size(), ContentsOld = m_contents.size(); if (!path.empty()) fsys.ChangePathTo(path, true); size_t booksCnt = m_bookRecords.GetCount(); for (size_t i = 0; i < booksCnt; i++) { if ( m_bookRecords[i].GetBookFile() == bookfile.GetLocation() ) return true; // book is (was) loaded } bookr = new wxHtmlBookRecord(bookfile.GetLocation(), fsys.GetPath(), title, deftopic); wxHtmlHelpDataItem *bookitem = new wxHtmlHelpDataItem; bookitem->level = 0; bookitem->id = 0; bookitem->page = deftopic; bookitem->name = title; bookitem->book = bookr; // store the contents index for later int cont_start = m_contents.size(); m_contents.Add(bookitem); // Try to find cached binary versions: // 1. save file as book, but with .hhp.cached extension // 2. same as 1. but in temp path // 3. otherwise or if cache load failed, load it from MS. fi = fsys.OpenFile(bookfile.GetLocation() + wxT(".cached")); if (fi == NULL || #if wxUSE_DATETIME fi->GetModificationTime() < bookfile.GetModificationTime() || #endif // wxUSE_DATETIME !LoadCachedBook(bookr, fi->GetStream())) { if (fi != NULL) delete fi; fi = fsys.OpenFile(m_tempPath + wxFileNameFromPath(bookfile.GetLocation()) + wxT(".cached")); if (m_tempPath.empty() || fi == NULL || #if wxUSE_DATETIME fi->GetModificationTime() < bookfile.GetModificationTime() || #endif // wxUSE_DATETIME !LoadCachedBook(bookr, fi->GetStream())) { LoadMSProject(bookr, fsys, indexfile, contfile); if (!m_tempPath.empty()) { wxFileOutputStream *outs = new wxFileOutputStream(m_tempPath + SafeFileName(wxFileNameFromPath(bookfile.GetLocation())) + wxT(".cached")); SaveCachedBook(bookr, outs); delete outs; } } } if (fi != NULL) delete fi; // Now store the contents range bookr->SetContentsRange(cont_start, m_contents.size()); // MS HTML Help files [written by MS HTML Help Workshop] are broken // in that the data are iso-8859-1 (including HTML entities), but must // be interpreted as being in language's windows charset. Correct the // differences here and also convert to wxConvLocal in ANSI build if (encoding != wxFONTENCODING_SYSTEM) { #if wxUSE_UNICODE #define CORRECT_STR(str, conv) \ str = wxString((str).mb_str(wxConvISO8859_1), conv) #else #define CORRECT_STR(str, conv) \ str = wxString((str).wc_str(conv), wxConvLocal) #endif wxCSConv conv(encoding); size_t IndexCnt = m_index.size(); size_t ContentsCnt = m_contents.size(); size_t i; for (i = IndexOld; i < IndexCnt; i++) { CORRECT_STR(m_index[i].name, conv); } for (i = ContentsOld; i < ContentsCnt; i++) { CORRECT_STR(m_contents[i].name, conv); } #undef CORRECT_STR } m_bookRecords.Add(bookr); if (!m_index.empty()) { m_index.Sort(wxHtmlHelpIndexCompareFunc); } return true; }
wxString wxHtmlFilterImage::ReadFile(const wxFSFile& file) const { wxString res = wxT("<HTML><BODY><IMG SRC=\"") + file.GetLocation() + wxT("\"></BODY></HTML>"); return res; }
wxString wxHtmlFilterImage::ReadFile(const wxFSFile& file) const { return ("<HTML><BODY><IMG SRC=\"" + file.GetLocation() + "\"></BODY></HTML>"); }