Produce NFD in wxConvFileName::FromWChar() on macOS

This ensures that fn_str() returns the string in the expected,
decomposed, format.

Also simplify the code by removing workarounds for old systems which are
not supported any more and make explicit the fact that under macOS
ToWChar() always produced NFC.
This commit is contained in:
Stefan Csomor
2020-07-13 12:05:29 +02:00
committed by Vadim Zeitlin
parent 47cc0b8946
commit ab858b5805
3 changed files with 42 additions and 75 deletions

View File

@@ -290,35 +290,44 @@ inline CFStringEncoding wxCFStringEncFromFontEnc(wxFontEncoding encoding)
class wxMBConv_cf : public wxMBConv
{
public:
enum NormalizationForm
{
None = 0x00,
FromWChar_D = 0x01,
ToWChar_C = 0x02
};
wxMBConv_cf()
{
Init(CFStringGetSystemEncoding()) ;
Init(CFStringGetSystemEncoding(), ToWChar_C) ;
}
wxMBConv_cf(const wxMBConv_cf& conv) : wxMBConv()
{
m_encoding = conv.m_encoding;
m_normalization = conv.m_normalization;
}
#if wxUSE_FONTMAP
wxMBConv_cf(const char* name)
wxMBConv_cf(const char* name, NormalizationForm normalization = ToWChar_C)
{
Init( wxCFStringEncFromFontEnc(wxFontMapperBase::Get()->CharsetToEncoding(name, false) ) ) ;
Init( wxCFStringEncFromFontEnc(wxFontMapperBase::Get()->CharsetToEncoding(name, false) ) , normalization) ;
}
#endif
wxMBConv_cf(wxFontEncoding encoding)
wxMBConv_cf(wxFontEncoding encoding, NormalizationForm normalization = ToWChar_C )
{
Init( wxCFStringEncFromFontEnc(encoding) );
Init( wxCFStringEncFromFontEnc(encoding) , normalization);
}
virtual ~wxMBConv_cf()
{
}
void Init( CFStringEncoding encoding)
void Init( CFStringEncoding encoding, NormalizationForm normalization )
{
m_encoding = encoding ;
m_normalization = normalization;
}
virtual size_t ToWChar(wchar_t * dst, size_t dstSize, const char * src, size_t srcSize = wxNO_LEN) const wxOVERRIDE;
@@ -333,9 +342,19 @@ public:
}
private:
NormalizationForm m_normalization ;
CFStringEncoding m_encoding ;
};
// This "decomposing" converter is used as wxConvFileName in wxOSX.
class wxMBConvD_cf : public wxMBConv_cf
{
public:
wxMBConvD_cf(wxFontEncoding encoding) : wxMBConv_cf(encoding, (NormalizationForm) (ToWChar_C | FromWChar_D) )
{
}
};
// corresponding class for holding UniChars (native unicode characters)
class WXDLLIMPEXP_BASE wxMacUniCharBuffer