1 #include "../../include/unicode/unicodeformatter.h"
\r
2 #include "../../include/unicode/utfconversion.h"
\r
4 std::wstring UnicodeFormatter::m_unicodenewline=L"\n";
\r
5 std::wstring::value_type UnicodeFormatter::m_unicodewhitespace[]={0x0009,0x000A,0x000B,0x000C,0x000D,
\r
6 0x0020,0x0085,0x00A0,0x1680,0x180E,
\r
7 0x2000,0x2001,0x2002,0x2003,0x2004,
\r
8 0x2005,0x2006,0x2007,0x2008,0x2009,
\r
9 0x200A,0x200B,0x2029,0x202F,0x205F,
\r
12 const bool UnicodeFormatter::LineWrap(const std::string &utf8input, const int linelength, const std::string &ignorechars, std::string &utf8output)
\r
14 std::wstring wcstring=L"";
\r
15 std::wstring wcignorechars=L"";
\r
17 if(UTFConversion::FromUTF8(utf8input,wcstring) && UTFConversion::FromUTF8(ignorechars,wcignorechars))
\r
20 std::wstring::size_type currentpos=0;
\r
21 std::wstring::size_type lastnewlinepos=0;
\r
22 std::wstring::size_type whitespacepos=0;
\r
24 while(currentpos+linelength<wcstring.length())
\r
26 if(ignorechars.size()==0 || wcstring.find_first_of(wcignorechars,currentpos)!=currentpos)
\r
28 lastnewlinepos=wcstring.rfind(m_unicodenewline,currentpos+linelength);
\r
29 // newline found within line length - we don't need to wrap
\r
30 if(lastnewlinepos!=std::wstring::npos && lastnewlinepos>=currentpos)
\r
32 currentpos=lastnewlinepos+1;
\r
34 // newline doesn't exist at all - force one in
\r
35 else if(lastnewlinepos==std::wstring::npos)
\r
37 wcstring.insert(currentpos+linelength,m_unicodenewline);
\r
38 currentpos+=linelength+m_unicodenewline.length();
\r
42 whitespacepos=wcstring.find_last_of(m_unicodewhitespace,currentpos+linelength);
\r
43 // whitespace found within line length - erase whitespace and insert newline
\r
44 if(whitespacepos!=std::wstring::npos && whitespacepos>=currentpos)
\r
46 wcstring.erase(whitespacepos,1);
\r
47 wcstring.insert(whitespacepos,m_unicodenewline);
\r
48 currentpos=whitespacepos+m_unicodenewline.length();
\r
50 // whitespace not found within line length - force newline at line length
\r
53 wcstring.insert(currentpos+linelength,m_unicodenewline);
\r
54 currentpos+=linelength+m_unicodenewline.length();
\r
60 currentpos=wcstring.find(m_unicodenewline,currentpos+1);
\r
61 if(currentpos==std::string::npos)
\r
63 currentpos=wcstring.size();
\r
69 if(UTFConversion::ToUTF8(wcstring,utf8output))
\r