From 016a2c7b03ceccbd3130c51d09c88d5fcb80db36 Mon Sep 17 00:00:00 2001 From: Scott Wheeler Date: Thu, 21 Jul 2005 18:45:12 +0000 Subject: [PATCH] Add UTF16LE support. Patch mostly by Umesh Shankar. BUG:106815 git-svn-id: svn://anonsvn.kde.org/home/kde/trunk/kdesupport/taglib@437399 283d02a7-25f6-0310-bc7c-ecb5cbfe19da --- toolkit/tstring.cpp | 24 +++++++++++++++++++++--- toolkit/tstring.h | 6 +++++- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/toolkit/tstring.cpp b/toolkit/tstring.cpp index c6b89218..16169bbc 100644 --- a/toolkit/tstring.cpp +++ b/toolkit/tstring.cpp @@ -83,7 +83,7 @@ String::String(const std::string &s, Type t) { d = new StringPrivate; - if(t == UTF16 || t == UTF16BE) { + if(t == UTF16 || t == UTF16BE || t == UTF16LE) { debug("String::String() -- A std::string should not contain UTF16."); return; } @@ -116,7 +116,7 @@ String::String(const char *s, Type t) { d = new StringPrivate; - if(t == UTF16 || t == UTF16BE) { + if(t == UTF16 || t == UTF16BE || t == UTF16LE) { debug("String::String() -- A const char * should not contain UTF16."); return; } @@ -145,7 +145,7 @@ String::String(char c, Type t) { d = new StringPrivate; - if(t == UTF16 || t == UTF16BE) { + if(t == UTF16 || t == UTF16BE || t == UTF16LE) { debug("String::String() -- A std::string should not contain UTF16."); return; } @@ -378,6 +378,18 @@ ByteVector String::data(Type t) const } break; } + case UTF16LE: + { + for(wstring::const_iterator it = d->data.begin(); it != d->data.end(); it++) { + + char c1 = *it & 0xff; + char c2 = *it >> 8; + + v.append(c1); + v.append(c2); + } + break; + } } return v; @@ -686,6 +698,12 @@ void String::prepare(Type t) delete [] sourceBuffer; delete [] targetBuffer; } + case UTF16LE: + { + for(uint i = 0; i < d->data.size(); i++) + d->data[i] = byteSwap((unsigned short)d->data[i]); + break; + } default: break; } diff --git a/toolkit/tstring.h b/toolkit/tstring.h index 6ffd6563..0d810108 100644 --- a/toolkit/tstring.h +++ b/toolkit/tstring.h @@ -90,7 +90,11 @@ namespace TagLib { /*! * UTF8 encoding. Characters are usually 8 bits but can be up to 32. */ - UTF8 = 3 + UTF8 = 3, + /*! + * UTF16 little endian. 16 bit characters. + */ + UTF16LE = 4 }; /*!