use wxMBConvUTF8(MAP_INVALID_UTF8_TO_OCTAL) for all access to MIME data files (extends fix of rev 1.77; replaces the change of rev 1.81); fixes spurious errors when reading KDE MIME files in Unicode builds
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@43803 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
parent
abc912df18
commit
d9bbb2d877
@ -68,17 +68,23 @@
|
||||
// other standard headers
|
||||
#include <ctype.h>
|
||||
|
||||
// this class extends wxTextFile
|
||||
// this class is a wxTextFile specialization for dealing with files storing
|
||||
// various MIME-related information
|
||||
//
|
||||
// VZ: ???
|
||||
// it should be used instead of wxTextFile even if none of its additional
|
||||
// methods are used just because it handles files with mixed encodings (often
|
||||
// the case for MIME files which contain strings for different languages)
|
||||
// correctly, see OnRead()
|
||||
class wxMimeTextFile : public wxTextFile
|
||||
{
|
||||
public:
|
||||
// constructors
|
||||
wxMimeTextFile () : wxTextFile () {};
|
||||
wxMimeTextFile(const wxString& strFile) : wxTextFile(strFile) {};
|
||||
wxMimeTextFile () : wxTextFile () { }
|
||||
wxMimeTextFile(const wxString& strFile) : wxTextFile(strFile) { }
|
||||
|
||||
int pIndexOf(const wxString & sSearch, bool bIncludeComments = false, int iStart = 0)
|
||||
int pIndexOf(const wxString& sSearch,
|
||||
bool bIncludeComments = false,
|
||||
int iStart = 0)
|
||||
{
|
||||
wxString sTest = sSearch;
|
||||
sTest.MakeLower();
|
||||
@ -135,6 +141,19 @@ public:
|
||||
wxString sTmp = GetLine(i).AfterFirst(wxT('='));
|
||||
return sTmp;
|
||||
}
|
||||
|
||||
protected:
|
||||
// we override this virtual method because we want to always use UTF-8
|
||||
// conversion allowing for invalid characters as MIME information files
|
||||
// often contain lines in different encodings and can't be read using any
|
||||
// single conversion in Unicode build, so we just try to read what we can
|
||||
// suing the most common encoding (UTF-8 is almost ubiquitous nowadays) and
|
||||
// ignore the rest
|
||||
virtual bool OnRead(const wxMBConv& conv)
|
||||
{
|
||||
return wxTextFile::OnRead(
|
||||
wxMBConvUTF8(wxMBConvUTF8::MAP_INVALID_UTF8_TO_OCTAL));
|
||||
}
|
||||
};
|
||||
|
||||
// in case we're compiling in non-GUI mode
|
||||
@ -255,12 +274,8 @@ static bool IsKnownUnimportantField(const wxString& field);
|
||||
void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename,
|
||||
const wxArrayString& dirs)
|
||||
{
|
||||
wxTextFile textfile(filename);
|
||||
#if defined(__WXGTK20__) && wxUSE_UNICODE
|
||||
if ( !textfile.Open(wxMBConvUTF8(wxMBConvUTF8::MAP_INVALID_UTF8_TO_OCTAL)) )
|
||||
#else
|
||||
wxMimeTextFile textfile(filename);
|
||||
if ( !textfile.Open() )
|
||||
#endif
|
||||
return;
|
||||
|
||||
wxLogTrace(TRACE_MIME, wxT("--- Opened Gnome file %s ---"),
|
||||
@ -399,7 +414,7 @@ void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename,
|
||||
|
||||
void wxMimeTypesManagerImpl::LoadGnomeMimeTypesFromMimeFile(const wxString& filename)
|
||||
{
|
||||
wxTextFile textfile(filename);
|
||||
wxMimeTextFile textfile(filename);
|
||||
if ( !textfile.Open() )
|
||||
return;
|
||||
|
||||
@ -749,17 +764,13 @@ void wxMimeTypesManagerImpl::LoadKDELinksForMimeSubtype(const wxString& dirbase,
|
||||
const wxArrayString& icondirs)
|
||||
{
|
||||
wxFileName fullname(dirbase, filename);
|
||||
wxMimeTextFile file;
|
||||
{
|
||||
wxLogNull logNull;
|
||||
if ( !file.Open(fullname.GetFullPath()) )
|
||||
if ( !file.Open(fullname.GetFullPath(), wxConvISO8859_1) )
|
||||
return;
|
||||
}
|
||||
|
||||
wxLogTrace(TRACE_MIME, wxT("loading KDE file %s"),
|
||||
fullname.GetFullPath().c_str());
|
||||
|
||||
wxMimeTextFile file;
|
||||
if ( !file.Open(fullname.GetFullPath()) )
|
||||
return;
|
||||
|
||||
wxMimeTypeCommands * entry = new wxMimeTypeCommands;
|
||||
wxArrayString sExts;
|
||||
wxString mimetype, mime_desc, strIcon;
|
||||
@ -939,17 +950,12 @@ void wxMimeTypesManagerImpl::LoadKDELinkFilesFromDir(const wxString& dirname,
|
||||
// Read a KDE .desktop file of type 'Application'
|
||||
void wxMimeTypesManagerImpl::LoadKDEApp(const wxString& filename)
|
||||
{
|
||||
wxMimeTextFile file;
|
||||
|
||||
{
|
||||
wxLogNull logNull;
|
||||
if ( !file.Open(filename) )
|
||||
if ( !file.Open(filename, wxConvISO8859_1) )
|
||||
return;
|
||||
}
|
||||
|
||||
wxLogTrace(TRACE_MIME, wxT("loading KDE file %s"), filename.c_str());
|
||||
|
||||
wxMimeTextFile file;
|
||||
if ( !file.Open(filename) )
|
||||
return;
|
||||
|
||||
// Here, only type 'Application' should be considered.
|
||||
int nIndex = file.pIndexOf( wxT("Type=") );
|
||||
if (nIndex != wxNOT_FOUND &&
|
||||
@ -1086,13 +1092,17 @@ static wxString ReadPathFromKDEConfig(const wxString& request)
|
||||
static wxString GetKDEThemeInFile(const wxFileName& filename)
|
||||
{
|
||||
wxString theme;
|
||||
wxTextFile config;
|
||||
if(filename.FileExists() && config.Open( filename.GetFullPath() )) {
|
||||
wxMimeTextFile config;
|
||||
if ( filename.FileExists() && config.Open(filename.GetFullPath()) )
|
||||
{
|
||||
size_t cnt = config.GetLineCount();
|
||||
for(size_t i = 0; i < cnt; i++)
|
||||
if(config[i].StartsWith(wxT("Theme="), &theme))
|
||||
for ( size_t i = 0; i < cnt; i++ )
|
||||
{
|
||||
if ( config[i].StartsWith(wxT("Theme="), &theme) )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return theme;
|
||||
}
|
||||
|
||||
@ -2246,12 +2256,8 @@ bool wxMimeTypesManagerImpl::ReadMimeTypes(const wxString& strFileName)
|
||||
wxLogTrace(TRACE_MIME, wxT("--- Parsing mime.types file '%s' ---"),
|
||||
strFileName.c_str());
|
||||
|
||||
wxTextFile file(strFileName);
|
||||
#if defined(__WXGTK20__) && wxUSE_UNICODE
|
||||
if ( !file.Open(wxConvUTF8) )
|
||||
#else
|
||||
wxMimeTextFile file(strFileName);
|
||||
if ( !file.Open() )
|
||||
#endif
|
||||
return false;
|
||||
|
||||
// the information we extract
|
||||
@ -2543,12 +2549,8 @@ bool wxMimeTypesManagerImpl::ReadMailcap(const wxString& strFileName,
|
||||
wxLogTrace(TRACE_MIME, wxT("--- Parsing mailcap file '%s' ---"),
|
||||
strFileName.c_str());
|
||||
|
||||
wxTextFile file(strFileName);
|
||||
#if defined(__WXGTK20__) && wxUSE_UNICODE
|
||||
if ( !file.Open(wxConvUTF8) )
|
||||
#else
|
||||
wxMimeTextFile file(strFileName);
|
||||
if ( !file.Open() )
|
||||
#endif
|
||||
return false;
|
||||
|
||||
// indices of MIME types (in m_aTypes) we already found in this file
|
||||
|
Loading…
Reference in New Issue
Block a user