OSDN Git Service

change indent rule to hard tab with width 4 to adjust to default setting of VC++...
[yamy/yamy.git] / stringtool.cpp
index 4a6f44a..5357d90 100644 (file)
@@ -10,7 +10,7 @@
 \r
 \r
 /* ************************************************************************** *\r
-   \r
+\r
 STRLCPY(3)                OpenBSD Programmer's Manual               STRLCPY(3)\r
 \r
 NAME\r
@@ -109,261 +109,291 @@ and others.
 template <class T>\r
 static inline size_t xstrlcpy(T *o_dest, const T *i_src, size_t i_destSize)\r
 {\r
-  T *d = o_dest;\r
-  const T *s = i_src;\r
-  size_t n = i_destSize;\r
-\r
-  ASSERT( o_dest != NULL );\r
-  ASSERT( i_src != NULL );\r
-\r
-  // Copy as many bytes as will fit\r
-  if (n != 0 && --n != 0)\r
-  {\r
-    do\r
-    {\r
-      if ((*d++ = *s++) == 0)\r
-       break;\r
-    } while (--n != 0);\r
-  }\r
-\r
-  // Not enough room in o_dest, add NUL and traverse rest of i_src\r
-  if (n == 0)\r
-  {\r
-    if (i_destSize != 0)\r
-      *d = T();                                        // NUL-terminate o_dest\r
-    while (*s++)\r
-      ;\r
-  }\r
-\r
-  return (s - i_src - 1);                      // count does not include NUL\r
+       T *d = o_dest;\r
+       const T *s = i_src;\r
+       size_t n = i_destSize;\r
+\r
+       ASSERT( o_dest != NULL );\r
+       ASSERT( i_src != NULL );\r
+\r
+       // Copy as many bytes as will fit\r
+       if (n != 0 && --n != 0) {\r
+               do {\r
+                       if ((*d++ = *s++) == 0)\r
+                               break;\r
+               } while (--n != 0);\r
+       }\r
+\r
+       // Not enough room in o_dest, add NUL and traverse rest of i_src\r
+       if (n == 0) {\r
+               if (i_destSize != 0)\r
+                       *d = T();                                       // NUL-terminate o_dest\r
+               while (*s++)\r
+                       ;\r
+       }\r
+\r
+       return (s - i_src - 1);                 // count does not include NUL\r
 }\r
 \r
 \r
 // copy\r
 size_t strlcpy(char *o_dest, const char *i_src, size_t i_destSize)\r
 {\r
-  return xstrlcpy(o_dest, i_src, i_destSize);\r
+       return xstrlcpy(o_dest, i_src, i_destSize);\r
 }\r
 \r
 \r
 // copy\r
 size_t wcslcpy(wchar_t *o_dest, const wchar_t *i_src, size_t i_destSize)\r
 {\r
-  return xstrlcpy(o_dest, i_src, i_destSize);\r
+       return xstrlcpy(o_dest, i_src, i_destSize);\r
 }\r
 \r
 \r
-// copy \r
+// copy\r
 size_t mbslcpy(unsigned char *o_dest, const unsigned char *i_src,\r
-              size_t i_destSize)\r
+                          size_t i_destSize)\r
 {\r
-  unsigned char *d = o_dest;\r
-  const unsigned char *s = i_src;\r
-  size_t n = i_destSize;\r
-\r
-  ASSERT( o_dest != NULL );\r
-  ASSERT( i_src != NULL );\r
-\r
-  if (n == 0)\r
-    return strlen(reinterpret_cast<const char *>(i_src));\r
-  \r
-  // Copy as many bytes as will fit\r
-  for (-- n; *s && 0 < n; -- n)\r
-  {\r
-    if (_ismbblead(*s))\r
-    {\r
-      if (!(s[1] && 2 <= n))\r
-       break;\r
-      *d++ = *s++;\r
-      -- n;\r
-    }\r
-    *d++ = *s++;\r
-  }\r
-  *d = '\0';\r
-\r
-  for (; *s; ++ s)\r
-    ;\r
-  \r
-  return s - i_src;\r
+       unsigned char *d = o_dest;\r
+       const unsigned char *s = i_src;\r
+       size_t n = i_destSize;\r
+\r
+       ASSERT( o_dest != NULL );\r
+       ASSERT( i_src != NULL );\r
+\r
+       if (n == 0)\r
+               return strlen(reinterpret_cast<const char *>(i_src));\r
+\r
+       // Copy as many bytes as will fit\r
+       for (-- n; *s && 0 < n; -- n) {\r
+               if (_ismbblead(*s)) {\r
+                       if (!(s[1] && 2 <= n))\r
+                               break;\r
+                       *d++ = *s++;\r
+                       -- n;\r
+               }\r
+               *d++ = *s++;\r
+       }\r
+       *d = '\0';\r
+\r
+       for (; *s; ++ s)\r
+               ;\r
+\r
+       return s - i_src;\r
 }\r
 \r
 \r
 /// stream output\r
 tostream &operator<<(tostream &i_ost, const tstringq &i_data)\r
 {\r
-  i_ost << _T("\"");\r
-  for (const _TCHAR *s = i_data.c_str(); *s; ++ s)\r
-  {\r
-    switch (*s)\r
-    {\r
-      case _T('\a'): i_ost << _T("\\a"); break;\r
-      case _T('\f'): i_ost << _T("\\f"); break;\r
-      case _T('\n'): i_ost << _T("\\n"); break;\r
-      case _T('\r'): i_ost << _T("\\r"); break;\r
-      case _T('\t'): i_ost << _T("\\t"); break;\r
-      case _T('\v'): i_ost << _T("\\v"); break;\r
-      case _T('"'): i_ost << _T("\\\""); break;\r
-      default:\r
-       if (_istlead(*s))\r
-       {\r
-         _TCHAR buf[3] = { s[0], s[1], 0 };\r
-         i_ost << buf;\r
-         ++ s;\r
-       }\r
-       else if (_istprint(*s))\r
-       {\r
-         _TCHAR buf[2] = { *s, 0 };\r
-         i_ost << buf;\r
-       }\r
-       else\r
-       {\r
-         i_ost << _T("\\x");\r
-         _TCHAR buf[5];\r
+       i_ost << _T("\"");\r
+       for (const _TCHAR *s = i_data.c_str(); *s; ++ s) {\r
+               switch (*s) {\r
+               case _T('\a'):\r
+                       i_ost << _T("\\a");\r
+                       break;\r
+               case _T('\f'):\r
+                       i_ost << _T("\\f");\r
+                       break;\r
+               case _T('\n'):\r
+                       i_ost << _T("\\n");\r
+                       break;\r
+               case _T('\r'):\r
+                       i_ost << _T("\\r");\r
+                       break;\r
+               case _T('\t'):\r
+                       i_ost << _T("\\t");\r
+                       break;\r
+               case _T('\v'):\r
+                       i_ost << _T("\\v");\r
+                       break;\r
+               case _T('"'):\r
+                       i_ost << _T("\\\"");\r
+                       break;\r
+               default:\r
+                       if (_istlead(*s)) {\r
+                               _TCHAR buf[3] = { s[0], s[1], 0 };\r
+                               i_ost << buf;\r
+                               ++ s;\r
+                       } else if (_istprint(*s)) {\r
+                               _TCHAR buf[2] = { *s, 0 };\r
+                               i_ost << buf;\r
+                       } else {\r
+                               i_ost << _T("\\x");\r
+                               _TCHAR buf[5];\r
 #ifdef _UNICODE\r
-         _sntprintf(buf, NUMBER_OF(buf), _T("%04x"), *s);\r
+                               _sntprintf(buf, NUMBER_OF(buf), _T("%04x"), *s);\r
 #else\r
-         _sntprintf(buf, NUMBER_OF(buf), _T("%02x"), *s);\r
+                               _sntprintf(buf, NUMBER_OF(buf), _T("%02x"), *s);\r
 #endif\r
-         i_ost << buf;\r
+                               i_ost << buf;\r
+                       }\r
+                       break;\r
+               }\r
        }\r
-       break;\r
-    }\r
-  }\r
-  i_ost << _T("\"");\r
-  return i_ost;\r
+       i_ost << _T("\"");\r
+       return i_ost;\r
 }\r
 \r
 \r
 // interpret meta characters such as \n\r
 tstring interpretMetaCharacters(const _TCHAR *i_str, size_t i_len,\r
-                               const _TCHAR *i_quote,\r
-                               bool i_doesUseRegexpBackReference)\r
+                                                               const _TCHAR *i_quote,\r
+                                                               bool i_doesUseRegexpBackReference)\r
 {\r
-  // interpreted string is always less than i_len\r
-  Array<_TCHAR> result(i_len + 1);\r
-  // destination\r
-  _TCHAR *d = result.get();\r
-  // end pointer\r
-  const _TCHAR *end = i_str + i_len;\r
-  \r
-  while (i_str < end && *i_str)\r
-  {\r
-    if (*i_str != _T('\\'))\r
-    {\r
-      if (_istlead(*i_str) && *(i_str + 1) && i_str + 1 < end)\r
-       *d++ = *i_str++;\r
-      *d++ = *i_str++;\r
-    }\r
-    else if (*(i_str + 1) != _T('\0'))\r
-    {\r
-      i_str ++;\r
-      if (i_quote && _tcschr(i_quote, *i_str))\r
-       *d++ = *i_str++;\r
-      else\r
-       switch (*i_str)\r
-       {\r
-         case _T('a'): *d++ = _T('\x07'); i_str ++; break;\r
-           //case _T('b'): *d++ = _T('\b'); i_str ++; break;\r
-         case _T('e'): *d++ = _T('\x1b'); i_str ++; break;\r
-         case _T('f'): *d++ = _T('\f'); i_str ++; break;\r
-         case _T('n'): *d++ = _T('\n'); i_str ++; break;\r
-         case _T('r'): *d++ = _T('\r'); i_str ++; break;\r
-         case _T('t'): *d++ = _T('\t'); i_str ++; break;\r
-         case _T('v'): *d++ = _T('\v'); i_str ++; break;\r
-           //case _T('?'): *d++ = _T('\x7f'); i_str ++; break;\r
-           //case _T('_'): *d++ = _T(' '); i_str ++; break;\r
-           //case _T('\\'): *d++ = _T('\\'); i_str ++; break;\r
-         case _T('\''): *d++ = _T('\''); i_str ++; break;\r
-         case _T('"'): *d++ = _T('"'); i_str ++; break;\r
-         case _T('\\'): *d++ = _T('\\'); i_str ++; break;\r
-         case _T('c'): // control code, for example '\c[' is escape: '\x1b'\r
-           i_str ++;\r
-           if (i_str < end && *i_str)\r
-           {\r
-             static const _TCHAR *ctrlchar =\r
-               _T("@ABCDEFGHIJKLMNO")\r
-               _T("PQRSTUVWXYZ[\\]^_")\r
-               _T("@abcdefghijklmno")\r
-               _T("pqrstuvwxyz@@@@?");\r
-             static const _TCHAR *ctrlcode =\r
-               _T("\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17")\r
-               _T("\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37")\r
-               _T("\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17")\r
-               _T("\20\21\22\23\24\25\26\27\30\31\32\00\00\00\00\177");\r
-             if (const _TCHAR *c = _tcschr(ctrlchar, *i_str))\r
-               *d++ = ctrlcode[c - ctrlchar], i_str ++;\r
-           }\r
-           break;\r
-         case _T('x'): case _T('X'):\r
-         {\r
-           i_str ++;\r
-           static const _TCHAR *hexchar = _T("0123456789ABCDEFabcdef");\r
-           static int hexvalue[] = { 0, 1, 2, 3, 4, 5 ,6, 7, 8, 9,\r
-                                     10, 11, 12, 13, 14, 15,\r
-                                     10, 11, 12, 13, 14, 15, };\r
-           bool brace = false;\r
-           if (i_str < end && *i_str == _T('{'))\r
-           {\r
-             i_str ++;\r
-             brace = true;\r
-           }\r
-           int n = 0;\r
-           for (; i_str < end && *i_str; i_str ++)\r
-             if (const _TCHAR *c = _tcschr(hexchar, *i_str))\r
-               n = n * 16 + hexvalue[c - hexchar];\r
-             else\r
-               break;\r
-           if (i_str < end && *i_str == _T('}') && brace)\r
-             i_str ++;\r
-           if (0 < n)\r
-             *d++ = static_cast<_TCHAR>(n);\r
-           break;\r
-         }\r
-         case _T('1'): case _T('2'): case _T('3'):\r
-         case _T('4'): case _T('5'): case _T('6'): case _T('7'):\r
-           if (i_doesUseRegexpBackReference)\r
-             goto case_default;\r
-           // fall through\r
-         case _T('0'):\r
-         {\r
-           static const _TCHAR *octalchar = _T("01234567");\r
-           static int octalvalue[] = { 0, 1, 2, 3, 4, 5 ,6, 7, };\r
-           int n = 0;\r
-           for (; i_str < end && *i_str; i_str ++)\r
-             if (const _TCHAR *c = _tcschr(octalchar, *i_str))\r
-               n = n * 8 + octalvalue[c - octalchar];\r
-             else\r
-               break;\r
-           if (0 < n)\r
-             *d++ = static_cast<_TCHAR>(n);\r
-           break;\r
-         }\r
-         default:\r
-         case_default:\r
-           *d++ = _T('\\');\r
-           if (_istlead(*i_str) && *(i_str + 1) && i_str + 1 < end)\r
-             *d++ = *i_str++;\r
-           *d++ = *i_str++;\r
-           break;\r
+       // interpreted string is always less than i_len\r
+       Array<_TCHAR> result(i_len + 1);\r
+       // destination\r
+       _TCHAR *d = result.get();\r
+       // end pointer\r
+       const _TCHAR *end = i_str + i_len;\r
+\r
+       while (i_str < end && *i_str) {\r
+               if (*i_str != _T('\\')) {\r
+                       if (_istlead(*i_str) && *(i_str + 1) && i_str + 1 < end)\r
+                               *d++ = *i_str++;\r
+                       *d++ = *i_str++;\r
+               } else if (*(i_str + 1) != _T('\0')) {\r
+                       i_str ++;\r
+                       if (i_quote && _tcschr(i_quote, *i_str))\r
+                               *d++ = *i_str++;\r
+                       else\r
+                               switch (*i_str) {\r
+                               case _T('a'):\r
+                                       *d++ = _T('\x07');\r
+                                       i_str ++;\r
+                                       break;\r
+                                       //case _T('b'): *d++ = _T('\b'); i_str ++; break;\r
+                               case _T('e'):\r
+                                       *d++ = _T('\x1b');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('f'):\r
+                                       *d++ = _T('\f');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('n'):\r
+                                       *d++ = _T('\n');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('r'):\r
+                                       *d++ = _T('\r');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('t'):\r
+                                       *d++ = _T('\t');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('v'):\r
+                                       *d++ = _T('\v');\r
+                                       i_str ++;\r
+                                       break;\r
+                                       //case _T('?'): *d++ = _T('\x7f'); i_str ++; break;\r
+                                       //case _T('_'): *d++ = _T(' '); i_str ++; break;\r
+                                       //case _T('\\'): *d++ = _T('\\'); i_str ++; break;\r
+                               case _T('\''):\r
+                                       *d++ = _T('\'');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('"'):\r
+                                       *d++ = _T('"');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('\\'):\r
+                                       *d++ = _T('\\');\r
+                                       i_str ++;\r
+                                       break;\r
+                               case _T('c'): // control code, for example '\c[' is escape: '\x1b'\r
+                                       i_str ++;\r
+                                       if (i_str < end && *i_str) {\r
+                                               static const _TCHAR *ctrlchar =\r
+                                                       _T("@ABCDEFGHIJKLMNO")\r
+                                                       _T("PQRSTUVWXYZ[\\]^_")\r
+                                                       _T("@abcdefghijklmno")\r
+                                                       _T("pqrstuvwxyz@@@@?");\r
+                                               static const _TCHAR *ctrlcode =\r
+                                                       _T("\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17")\r
+                                                       _T("\20\21\22\23\24\25\26\27\30\31\32\33\34\35\36\37")\r
+                                                       _T("\00\01\02\03\04\05\06\07\10\11\12\13\14\15\16\17")\r
+                                                       _T("\20\21\22\23\24\25\26\27\30\31\32\00\00\00\00\177");\r
+                                               if (const _TCHAR *c = _tcschr(ctrlchar, *i_str))\r
+                                                       *d++ = ctrlcode[c - ctrlchar], i_str ++;\r
+                                       }\r
+                                       break;\r
+                               case _T('x'):\r
+                               case _T('X'): {\r
+                                       i_str ++;\r
+                                       static const _TCHAR *hexchar = _T("0123456789ABCDEFabcdef");\r
+                                       static int hexvalue[] = { 0, 1, 2, 3, 4, 5 ,6, 7, 8, 9,\r
+                                                                                         10, 11, 12, 13, 14, 15,\r
+                                                                                         10, 11, 12, 13, 14, 15,\r
+                                                                                       };\r
+                                       bool brace = false;\r
+                                       if (i_str < end && *i_str == _T('{')) {\r
+                                               i_str ++;\r
+                                               brace = true;\r
+                                       }\r
+                                       int n = 0;\r
+                                       for (; i_str < end && *i_str; i_str ++)\r
+                                               if (const _TCHAR *c = _tcschr(hexchar, *i_str))\r
+                                                       n = n * 16 + hexvalue[c - hexchar];\r
+                                               else\r
+                                                       break;\r
+                                       if (i_str < end && *i_str == _T('}') && brace)\r
+                                               i_str ++;\r
+                                       if (0 < n)\r
+                                               *d++ = static_cast<_TCHAR>(n);\r
+                                       break;\r
+                               }\r
+                               case _T('1'):\r
+                               case _T('2'):\r
+                               case _T('3'):\r
+                               case _T('4'):\r
+                               case _T('5'):\r
+                               case _T('6'):\r
+                               case _T('7'):\r
+                                       if (i_doesUseRegexpBackReference)\r
+                                               goto case_default;\r
+                                       // fall through\r
+                               case _T('0'): {\r
+                                       static const _TCHAR *octalchar = _T("01234567");\r
+                                       static int octalvalue[] = { 0, 1, 2, 3, 4, 5 ,6, 7, };\r
+                                       int n = 0;\r
+                                       for (; i_str < end && *i_str; i_str ++)\r
+                                               if (const _TCHAR *c = _tcschr(octalchar, *i_str))\r
+                                                       n = n * 8 + octalvalue[c - octalchar];\r
+                                               else\r
+                                                       break;\r
+                                       if (0 < n)\r
+                                               *d++ = static_cast<_TCHAR>(n);\r
+                                       break;\r
+                               }\r
+                               default:\r
+case_default:\r
+                                       *d++ = _T('\\');\r
+                                       if (_istlead(*i_str) && *(i_str + 1) && i_str + 1 < end)\r
+                                               *d++ = *i_str++;\r
+                                       *d++ = *i_str++;\r
+                                       break;\r
+                               }\r
+               }\r
        }\r
-    }\r
-  }\r
-  *d =_T('\0');\r
-  return result.get();\r
+       *d =_T('\0');\r
+       return result.get();\r
 }\r
 \r
 \r
 // add session id to i_str\r
 tstring addSessionId(const _TCHAR *i_str)\r
 {\r
-    DWORD sessionId;\r
-    tstring s(i_str);\r
-    if (ProcessIdToSessionId(GetCurrentProcessId(), &sessionId)) {\r
-       _TCHAR buf[20];\r
-       _sntprintf(buf, NUMBER_OF(buf), _T("%u"), sessionId);\r
-       s += buf;\r
-    }\r
-    return s;\r
+       DWORD sessionId;\r
+       tstring s(i_str);\r
+       if (ProcessIdToSessionId(GetCurrentProcessId(), &sessionId)) {\r
+               _TCHAR buf[20];\r
+               _sntprintf(buf, NUMBER_OF(buf), _T("%u"), sessionId);\r
+               s += buf;\r
+       }\r
+       return s;\r
 }\r
 \r
 \r
@@ -371,20 +401,18 @@ tstring addSessionId(const _TCHAR *i_str)
 // escape regexp special characters in MBCS trail bytes\r
 std::string guardRegexpFromMbcs(const char *i_str)\r
 {\r
-  size_t len = strlen(i_str);\r
-  Array<char> buf(len * 2 + 1);\r
-  char *p = buf.get();\r
-  while (*i_str)\r
-  {\r
-    if (_ismbblead(static_cast<u_char>(*i_str)) && i_str[1])\r
-    {\r
-      *p ++ = *i_str ++;\r
-      if (strchr(".*?+(){}[]^$", *i_str))\r
-       *p ++ = '\\';\r
-    }\r
-    *p ++ = *i_str ++;\r
-  }\r
-  return std::string(buf.get(), p);\r
+       size_t len = strlen(i_str);\r
+       Array<char> buf(len * 2 + 1);\r
+       char *p = buf.get();\r
+       while (*i_str) {\r
+               if (_ismbblead(static_cast<u_char>(*i_str)) && i_str[1]) {\r
+                       *p ++ = *i_str ++;\r
+                       if (strchr(".*?+(){}[]^$", *i_str))\r
+                               *p ++ = '\\';\r
+               }\r
+               *p ++ = *i_str ++;\r
+       }\r
+       return std::string(buf.get(), p);\r
 }\r
 #endif // !_MBCS\r
 \r
@@ -392,89 +420,83 @@ std::string guardRegexpFromMbcs(const char *i_str)
 // converter\r
 std::wstring to_wstring(const std::string &i_str)\r
 {\r
-  size_t size = mbstowcs(NULL, i_str.c_str(), i_str.size() + 1);\r
-  if (size == (size_t)-1)\r
-    return std::wstring();\r
-  Array<wchar_t> result(size + 1);\r
-  mbstowcs(result.get(), i_str.c_str(), i_str.size() + 1);\r
-  return std::wstring(result.get());\r
+       size_t size = mbstowcs(NULL, i_str.c_str(), i_str.size() + 1);\r
+       if (size == (size_t)-1)\r
+               return std::wstring();\r
+       Array<wchar_t> result(size + 1);\r
+       mbstowcs(result.get(), i_str.c_str(), i_str.size() + 1);\r
+       return std::wstring(result.get());\r
 }\r
 \r
 \r
 // converter\r
 std::string to_string(const std::wstring &i_str)\r
 {\r
-  size_t size = wcstombs(NULL, i_str.c_str(), i_str.size() + 1);\r
-  if (size == (size_t)-1)\r
-    return std::string();\r
-  Array<char> result(size + 1);\r
-  wcstombs(result.get(), i_str.c_str(), i_str.size() + 1);\r
-  return std::string(result.get());\r
+       size_t size = wcstombs(NULL, i_str.c_str(), i_str.size() + 1);\r
+       if (size == (size_t)-1)\r
+               return std::string();\r
+       Array<char> result(size + 1);\r
+       wcstombs(result.get(), i_str.c_str(), i_str.size() + 1);\r
+       return std::string(result.get());\r
 }\r
 \r
 \r
 /// stream output\r
 tostream &operator<<(tostream &i_ost, const tregex &i_data)\r
 {\r
-  return i_ost << i_data.str();\r
+       return i_ost << i_data.str();\r
 }\r
 \r
 \r
 /// get lower string\r
 tstring toLower(const tstring &i_str)\r
 {\r
-  tstring str(i_str);\r
-  for (size_t i = 0; i < str.size(); ++ i)\r
-  {\r
-    if (_ismbblead(str[i]))\r
-      ++ i;\r
-    else\r
-      str[i] = tolower(str[i]);\r
-  }\r
-  return str;\r
+       tstring str(i_str);\r
+       for (size_t i = 0; i < str.size(); ++ i) {\r
+               if (_ismbblead(str[i]))\r
+                       ++ i;\r
+               else\r
+                       str[i] = tolower(str[i]);\r
+       }\r
+       return str;\r
 }\r
 \r
 \r
 // convert wstring to UTF-8\r
 std::string to_UTF_8(const std::wstring &i_str)\r
 {\r
-  // 0xxxxxxx: 00-7F\r
-  // 110xxxxx 10xxxxxx: 0080-07FF\r
-  // 1110xxxx 10xxxxxx 10xxxxxx: 0800 - FFFF\r
-\r
-  int size = 0;\r
-  \r
-  // count needed buffer size\r
-  for (std::wstring::const_iterator i = i_str.begin(); i != i_str.end(); ++ i)\r
-  {\r
-    if (0x0000 <= *i && *i <= 0x007f)\r
-      size += 1;\r
-    else if (0x0080 <= *i && *i <= 0x07ff)\r
-      size += 2;\r
-    else if (0x0800 <= *i && *i <= 0xffff)\r
-      size += 3;\r
-  }\r
-\r
-  Array<char> result(size);\r
-  int ri = 0;\r
-  \r
-  // make UTF-8\r
-  for (std::wstring::const_iterator i = i_str.begin(); i != i_str.end(); ++ i)\r
-  {\r
-    if (0x0000 <= *i && *i <= 0x007f)\r
-      result[ri ++] = static_cast<char>(*i);\r
-    else if (0x0080 <= *i && *i <= 0x07ff)\r
-    {\r
-      result[ri ++] = static_cast<char>(((*i & 0x0fc0) >>  6) | 0xc0);\r
-      result[ri ++] = static_cast<char>(( *i & 0x003f       ) | 0x80);\r
-    }\r
-    else if (0x0800 <= *i && *i <= 0xffff)\r
-    {\r
-      result[ri ++] = static_cast<char>(((*i & 0xf000) >> 12) | 0xe0);\r
-      result[ri ++] = static_cast<char>(((*i & 0x0fc0) >>  6) | 0x80);\r
-      result[ri ++] = static_cast<char>(( *i & 0x003f       ) | 0x80);\r
-    }\r
-  }\r
-\r
-  return std::string(result.begin(), result.end());\r
+       // 0xxxxxxx: 00-7F\r
+       // 110xxxxx 10xxxxxx: 0080-07FF\r
+       // 1110xxxx 10xxxxxx 10xxxxxx: 0800 - FFFF\r
+\r
+       int size = 0;\r
+\r
+       // count needed buffer size\r
+       for (std::wstring::const_iterator i = i_str.begin(); i != i_str.end(); ++ i) {\r
+               if (0x0000 <= *i && *i <= 0x007f)\r
+                       size += 1;\r
+               else if (0x0080 <= *i && *i <= 0x07ff)\r
+                       size += 2;\r
+               else if (0x0800 <= *i && *i <= 0xffff)\r
+                       size += 3;\r
+       }\r
+\r
+       Array<char> result(size);\r
+       int ri = 0;\r
+\r
+       // make UTF-8\r
+       for (std::wstring::const_iterator i = i_str.begin(); i != i_str.end(); ++ i) {\r
+               if (0x0000 <= *i && *i <= 0x007f)\r
+                       result[ri ++] = static_cast<char>(*i);\r
+               else if (0x0080 <= *i && *i <= 0x07ff) {\r
+                       result[ri ++] = static_cast<char>(((*i & 0x0fc0) >>  6) | 0xc0);\r
+                       result[ri ++] = static_cast<char>(( *i & 0x003f       ) | 0x80);\r
+               } else if (0x0800 <= *i && *i <= 0xffff) {\r
+                       result[ri ++] = static_cast<char>(((*i & 0xf000) >> 12) | 0xe0);\r
+                       result[ri ++] = static_cast<char>(((*i & 0x0fc0) >>  6) | 0x80);\r
+                       result[ri ++] = static_cast<char>(( *i & 0x003f       ) | 0x80);\r
+               }\r
+       }\r
+\r
+       return std::string(result.begin(), result.end());\r
 }\r