version 0.3.29
[fms.git] / src / unicode / unicodeformatter.cpp
index bc6a238..f017fa2 100644 (file)
@@ -26,33 +26,24 @@ const bool UnicodeFormatter::LineWrap(const std::string &utf8input, const int li
                        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