X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/2b5f62a0b2db198609b45dec622a018dae37008e..919312f76764a6fee2422664d2251c4e6b6be993:/src/html/helpdata.cpp diff --git a/src/html/helpdata.cpp b/src/html/helpdata.cpp index 51d0f334d3..c0418b8d39 100644 --- a/src/html/helpdata.cpp +++ b/src/html/helpdata.cpp @@ -9,7 +9,7 @@ // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "helpdata.h" #endif @@ -85,9 +85,14 @@ wxHtmlHelpIndexCompareFunc(const void *a, const void *b) class HP_Parser : public wxHtmlParser { public: + HP_Parser() { } + wxObject* GetProduct() { return NULL; } + protected: virtual void AddText(const wxChar* WXUNUSED(txt)) {} + + DECLARE_NO_COPY_CLASS(HP_Parser) }; @@ -114,6 +119,8 @@ class HP_TagHandler : public wxHtmlTagHandler bool HandleTag(const wxHtmlTag& tag); void WriteOut(wxHtmlContentsItem*& array, int& size); void ReadIn(wxHtmlContentsItem* array, int size); + + DECLARE_NO_COPY_CLASS(HP_TagHandler) }; @@ -337,7 +344,12 @@ inline static wxChar* CacheReadString(wxInputStream *f) #endif } -#define CURRENT_CACHED_BOOK_VERSION 3 +#define CURRENT_CACHED_BOOK_VERSION 4 + +// Additional flags to detect incompatibilities of the runtime environment: +#define CACHED_BOOK_FORMAT_FLAGS \ + (wxUSE_UNICODE << 0) + bool wxHtmlHelpData::LoadCachedBook(wxHtmlBookRecord *book, wxInputStream *f) { @@ -356,6 +368,9 @@ bool wxHtmlHelpData::LoadCachedBook(wxHtmlBookRecord *book, wxInputStream *f) return FALSE; } + if (CacheReadInt32(f) != CACHED_BOOK_FORMAT_FLAGS) + return FALSE; + /* load contents : */ st = m_ContentsCnt; m_ContentsCnt += CacheReadInt32(f); @@ -393,6 +408,7 @@ bool wxHtmlHelpData::SaveCachedBook(wxHtmlBookRecord *book, wxOutputStream *f) /* save header - version info : */ CacheWriteInt32(f, CURRENT_CACHED_BOOK_VERSION); + CacheWriteInt32(f, CACHED_BOOK_FORMAT_FLAGS); /* save contents : */ for (cnt = 0, i = 0; i < m_ContentsCnt; i++) @@ -498,13 +514,17 @@ bool wxHtmlHelpData::AddBookParam(const wxFSFile& bookfile, 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 == wxEmptyString || fi == NULL || +#if wxUSE_DATETIME fi->GetModificationTime() < bookfile.GetModificationTime() || +#endif // wxUSE_DATETIME !LoadCachedBook(bookr, fi->GetStream())) { LoadMSProject(bookr, fsys, indexfile, contfile); @@ -550,14 +570,24 @@ bool wxHtmlHelpData::AddBookParam(const wxFSFile& bookfile, bool wxHtmlHelpData::AddBook(const wxString& book) { - if (book.Right(4).Lower() == wxT(".zip") || - book.Right(4).Lower() == wxT(".htb") /*html book*/) + wxString extension(book.Right(4).Lower()); + if (extension == wxT(".zip") || +#if wxUSE_LIBMSPACK + extension == wxT(".chm") /*compressed html help book*/ || +#endif + extension == wxT(".htb") /*html book*/) { wxFileSystem fsys; wxString s; bool rt = FALSE; - s = fsys.FindFirst(book + wxT("#zip:") + wxT("*.hhp"), wxFILE); +#if wxUSE_LIBMSPACK + if (extension == wxT(".chm")) + s = fsys.FindFirst(book + wxT("#chm:*.hhp"), wxFILE); + else +#endif + s = fsys.FindFirst(book + wxT("#zip:*.hhp"), wxFILE); + while (!s.IsEmpty()) { if (AddBook(s)) rt = TRUE; @@ -566,71 +596,58 @@ bool wxHtmlHelpData::AddBook(const wxString& book) return rt; } - else - { - wxFSFile *fi; - wxFileSystem fsys; - wxString bookFull; - - wxString title = _("noname"), - safetitle, - start = wxEmptyString, - contents = wxEmptyString, - index = wxEmptyString, - charset = wxEmptyString; - -#if defined(__WXMAC__) && !defined(__DARWIN__) - if (wxIsAbsolutePath(book)) bookFull = book; - else bookFull = wxGetCwd() + book; // no slash or dot - wxFileName fn( bookFull ); - bookFull = fn.GetFullPath( wxPATH_UNIX ); -#else - if (wxIsAbsolutePath(book)) bookFull = book; - else bookFull = wxGetCwd() + wxT("/") + book; -#endif - fi = fsys.OpenFile(bookFull); - if (fi == NULL) - { - wxLogError(_("Cannot open HTML help book: %s"), bookFull.c_str()); - return FALSE; - } - fsys.ChangePathTo(bookFull); + wxFSFile *fi; + wxFileSystem fsys; - const wxChar *lineptr; - wxChar linebuf[300]; - wxString tmp; - wxHtmlFilterPlainText filter; - tmp = filter.ReadFile(*fi); - lineptr = tmp.c_str(); + wxString title = _("noname"), + safetitle, + start = wxEmptyString, + contents = wxEmptyString, + index = wxEmptyString, + charset = wxEmptyString; - do - { - lineptr = ReadLine(lineptr, linebuf, 300); - - for (wxChar *ch = linebuf; *ch != wxT('\0') && *ch != wxT('='); ch++) - *ch = tolower(*ch); - - if (wxStrstr(linebuf, _T("title=")) == linebuf) - title = linebuf + wxStrlen(_T("title=")); - if (wxStrstr(linebuf, _T("default topic=")) == linebuf) - start = linebuf + wxStrlen(_T("default topic=")); - if (wxStrstr(linebuf, _T("index file=")) == linebuf) - index = linebuf + wxStrlen(_T("index file=")); - if (wxStrstr(linebuf, _T("contents file=")) == linebuf) - contents = linebuf + wxStrlen(_T("contents file=")); - if (wxStrstr(linebuf, _T("charset=")) == linebuf) - charset = linebuf + wxStrlen(_T("charset=")); - } while (lineptr != NULL); - - wxFontEncoding enc; - if (charset == wxEmptyString) enc = wxFONTENCODING_SYSTEM; - else enc = wxFontMapper::Get()->CharsetToEncoding(charset); - bool rtval = AddBookParam(*fi, enc, - title, contents, index, start, fsys.GetPath()); - delete fi; - return rtval; + fi = fsys.OpenFile(book); + if (fi == NULL) + { + wxLogError(_("Cannot open HTML help book: %s"), book.c_str()); + return FALSE; } + fsys.ChangePathTo(book); + + const wxChar *lineptr; + wxChar linebuf[300]; + wxString tmp; + wxHtmlFilterPlainText filter; + tmp = filter.ReadFile(*fi); + lineptr = tmp.c_str(); + + do + { + lineptr = ReadLine(lineptr, linebuf, 300); + + for (wxChar *ch = linebuf; *ch != wxT('\0') && *ch != wxT('='); ch++) + *ch = tolower(*ch); + + if (wxStrstr(linebuf, _T("title=")) == linebuf) + title = linebuf + wxStrlen(_T("title=")); + if (wxStrstr(linebuf, _T("default topic=")) == linebuf) + start = linebuf + wxStrlen(_T("default topic=")); + if (wxStrstr(linebuf, _T("index file=")) == linebuf) + index = linebuf + wxStrlen(_T("index file=")); + if (wxStrstr(linebuf, _T("contents file=")) == linebuf) + contents = linebuf + wxStrlen(_T("contents file=")); + if (wxStrstr(linebuf, _T("charset=")) == linebuf) + charset = linebuf + wxStrlen(_T("charset=")); + } while (lineptr != NULL); + + wxFontEncoding enc; + if (charset == wxEmptyString) enc = wxFONTENCODING_SYSTEM; + else enc = wxFontMapper::Get()->CharsetToEncoding(charset); + bool rtval = AddBookParam(*fi, enc, + title, contents, index, start, fsys.GetPath()); + delete fi; + return rtval; } wxString wxHtmlHelpData::FindPageByName(const wxString& x)