if(ignorechars.size()==0 || wcstring.find_first_of(wcignorechars,currentpos)!=currentpos)\r
{\r
lastnewlinepos=wcstring.rfind(m_unicodenewline,currentpos+linelength);\r
+ whitespacepos=wcstring.find_last_of(m_unicodewhitespace,currentpos+linelength);\r
// newline found within line length - we don't need to wrap\r
if(lastnewlinepos!=std::wstring::npos && lastnewlinepos>=currentpos)\r
{\r
currentpos=lastnewlinepos+1;\r
}\r
- // newline doesn't exist at all - force one in\r
- else if(lastnewlinepos==std::wstring::npos)\r
+ // whitespace found within line length - erase whitespace and insert newline\r
+ else if((lastnewlinepos<currentpos || lastnewlinepos==std::wstring::npos) && whitespacepos!=std::wstring::npos && whitespacepos>=currentpos)\r
{\r
- wcstring.insert(currentpos+linelength,m_unicodenewline);\r
- currentpos+=linelength+m_unicodenewline.length();\r
+ wcstring.erase(whitespacepos,1);\r
+ wcstring.insert(whitespacepos,m_unicodenewline);\r
+ currentpos=whitespacepos+m_unicodenewline.length();\r
}\r
+ // whitespace or newline not found within line length - force newline at line length\r
else\r
{\r
- whitespacepos=wcstring.find_last_of(m_unicodewhitespace,currentpos+linelength);\r
- // whitespace found within line length - erase whitespace and insert newline\r
- if(whitespacepos!=std::wstring::npos && whitespacepos>=currentpos)\r
- {\r
- wcstring.erase(whitespacepos,1);\r
- wcstring.insert(whitespacepos,m_unicodenewline);\r
- currentpos=whitespacepos+m_unicodenewline.length();\r
- }\r
- // whitespace not found within line length - force newline at line length\r
- else\r
- {\r
- wcstring.insert(currentpos+linelength,m_unicodenewline);\r
- currentpos+=linelength+m_unicodenewline.length();\r
- }\r
+ wcstring.insert(currentpos+linelength,m_unicodenewline);\r
+ currentpos+=linelength+m_unicodenewline.length();\r
}\r
}\r
else\r