bug fixes for '\r' handling in wxTextFile::Translate()

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@5272 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2000-01-06 15:24:37 +00:00
parent 4021952304
commit c0f587c500

View File

@@ -67,14 +67,13 @@ const wxChar *wxTextFile::GetEOL(wxTextFileType type)
wxFAIL_MSG(wxT("bad file type in wxTextFile::GetEOL.")); wxFAIL_MSG(wxT("bad file type in wxTextFile::GetEOL."));
// fall through nevertheless - we must return something... // fall through nevertheless - we must return something...
case wxTextFileType_None: return wxT(""); case wxTextFileType_None: return wxT(_T(""));
case wxTextFileType_Unix: return wxT("\n"); case wxTextFileType_Unix: return wxT(_T("\n"));
case wxTextFileType_Dos: return wxT("\r\n"); case wxTextFileType_Dos: return wxT(_T("\r\n"));
case wxTextFileType_Mac: return wxT("\r"); case wxTextFileType_Mac: return wxT(_T("\r"));
} }
} }
wxString wxTextFile::Translate(const wxString& text, wxTextFileType type) wxString wxTextFile::Translate(const wxString& text, wxTextFileType type)
{ {
// don't do anything if there is nothing to do // don't do anything if there is nothing to do
@@ -93,34 +92,40 @@ wxString wxTextFile::Translate(const wxString& text, wxTextFileType type)
{ {
wxChar ch = *pc; wxChar ch = *pc;
switch ( ch ) { switch ( ch ) {
case '\n': case _T('\n'):
// Dos/Unix line termination // Dos/Unix line termination
result += eol; result += eol;
chLast = '\n'; chLast = 0;
break; break;
case '\r': case _T('\r'):
if ( chLast == '\r' ) { if ( chLast == _T('\r') ) {
// Mac empty line // Mac empty line
result += eol; result += eol;
} }
else else {
chLast = '\r'; // just remember it: we don't know whether it is just "\r"
// or "\r\n" yet
chLast = _T('\r');
}
break; break;
default: default:
if ( chLast == '\r' ) { if ( chLast == _T('\r') ) {
// Mac line termination // Mac line termination
result += eol; result += eol;
chLast = ch;
}
else {
// add to the current line
result += ch;
} }
// add to the current line
result += ch;
} }
} }
if ( chLast ) {
// trailing '\r'
result += eol;
}
return result; return result;
} }
@@ -269,7 +274,7 @@ bool wxTextFile::Read()
case '\r': case '\r':
if ( chLast == '\r' ) { if ( chLast == '\r' ) {
// Mac empty line // Mac empty line
m_aLines.Add(""); m_aLines.Add(wxEmptyString);
m_aTypes.Add(wxTextFileType_Mac); m_aTypes.Add(wxTextFileType_Mac);
} }
else else