+ // the beginning of the current line, changes inside the loop
+ wxString::const_iterator lineStart = str.begin();
+ const wxString::const_iterator end = str.end();
+ for ( wxString::const_iterator p = lineStart; p != end; p++ )
+ {
+ const wxChar ch = *p;
+ switch ( ch )
+ {
+ case '\n':
+ // could be a DOS or Unix EOL
+ if ( chLast == '\r' )
+ {
+ AddLine(wxString(lineStart, p - 1), wxTextFileType_Dos);
+ }
+ else // bare '\n', Unix style
+ {
+ AddLine(wxString(lineStart, p), wxTextFileType_Unix);
+ }
+
+ lineStart = p + 1;
+ break;
+
+ case '\r':
+ if ( chLast == '\r' )
+ {
+ // Mac empty line
+ AddLine(wxEmptyString, wxTextFileType_Mac);
+ lineStart = p + 1;
+ }
+ //else: we don't know what this is yet -- could be a Mac EOL or
+ // start of DOS EOL so wait for next char
+ break;
+
+ default:
+ if ( chLast == '\r' )
+ {
+ // Mac line termination
+ AddLine(wxString(lineStart, p - 1), wxTextFileType_Mac);
+ lineStart = p;
+ }
+ }
+
+ chLast = ch;
+ }
+
+ // anything in the last line?
+ if ( lineStart != end )
+ {
+ // add unterminated last line
+ AddLine(wxString(lineStart, end), wxTextFileType_None);
+ }
+
+ return true;