X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/6a603a10e77f719458939d117e46f7d8ed0b372b..fb8d7eb7a880f1f2e32d8830f9c5e12b2536e05f:/src/html/m_pre.cpp?ds=sidebyside diff --git a/src/html/m_pre.cpp b/src/html/m_pre.cpp index b2a5cb89e5..1a0ef36813 100644 --- a/src/html/m_pre.cpp +++ b/src/html/m_pre.cpp @@ -33,26 +33,42 @@ static wxString LINKAGEMODE HtmlizeLinebreaks(const wxString& str) wxString out; out.reserve(str.length()); // we'll certainly need at least that - size_t len = str.Len(); - for (size_t i = 0; i < len; i++) + const wxString::const_iterator end = str.end(); + for ( wxString::const_iterator i = str.begin(); i != end; ++i ) { - switch ( str[i].GetValue() ) + switch ( (*i).GetValue() ) { case '<': - while (i < len && str[i] != '>') + while ( i != end && *i != '>' ) { - out << str[i++]; + out << *i++; } out << '>'; + if ( i == end ) + return out; break; + + // We need to translate any line break into exactly one
. + // Quoting HTML spec: "A line break is defined to be a carriage + // return ( ), a line feed ( ), or a carriage + // return/line feed pair." + case '\r': + { + wxString::const_iterator j(i + 1); + if ( j != end && *j == '\n' ) + i = j; + } + // fall through case '\n': out << "
"; break; + default: - out << str[i]; + out << *i; break; } } + return out; }