More unicode work. Fixup some usages.

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@14968 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Lars Gullik Bjønnes 2006-09-10 18:34:24 +00:00
parent 2a06b31354
commit bb61b2655f
6 changed files with 87 additions and 36 deletions

View File

@ -202,18 +202,18 @@ string QLyXKeySym::getSymbolName() const
size_t QLyXKeySym::getUCSEncoded() const size_t QLyXKeySym::getUCSEncoded() const
{ {
unsigned short const * ptr = text_.ucs2(); if (text_.isEmpty())
std::vector<unsigned short> tmp(ptr, ptr + text_.length()); return 0;
//unsigned short const * ptr = text_.ucs2();
//std::vector<unsigned short> tmp(ptr, ptr + text_.length());
//lyxerr << "Data is " << tmp << endl; //lyxerr << "Data is " << tmp << endl;
//lyxerr << "Length is " << text_.length() << endl; //lyxerr << "Length is " << text_.length() << endl;
if (text_.isEmpty())
return 0;
//size_t res = utf8_to_ucs4(tmp, tmp.length()); //size_t res = utf8_to_ucs4(tmp, tmp.length());
//lyxerr << "Res is " << res << endl; //lyxerr << "Res is " << res << endl;
return ucs2_to_ucs4(tmp)[0]; return ucs2_to_ucs4(text_.ucs2(), text_.length())[0];
} }

View File

@ -120,7 +120,7 @@ QString const toqstr(string const & str)
QString const toqstr(docstring const & str) QString const toqstr(docstring const & str)
{ {
std::vector<unsigned short> ucs2 = std::vector<unsigned short> ucs2 =
ucs4_to_ucs2(str.c_str(), str.length()); ucs4_to_ucs2(str.data(), str.length());
ucs2.push_back('\0'); ucs2.push_back('\0');
return QString::fromUcs2(&ucs2[0]); return QString::fromUcs2(&ucs2[0]);
} }
@ -149,8 +149,7 @@ string const fromqstr(QString const & str)
docstring const qstring_to_ucs4(QString const & str) docstring const qstring_to_ucs4(QString const & str)
{ {
unsigned short const * const ucs2 = str.ucs2(); unsigned short const * const ucs2 = str.ucs2();
std::vector<char_type> const ucs4 = ucs2_to_ucs4( std::vector<char_type> const ucs4 = ucs2_to_ucs4(ucs2, str.length());
std::vector<unsigned short>(ucs2, ucs2 + str.length()));
return docstring(ucs4.begin(), ucs4.end()); return docstring(ucs4.begin(), ucs4.end());
} }

View File

@ -41,7 +41,7 @@ docstring const from_ascii(std::string const & ascii)
docstring const from_utf8(std::string const & utf8) docstring const from_utf8(std::string const & utf8)
{ {
std::vector<boost::uint32_t> const ucs4 = std::vector<boost::uint32_t> const ucs4 =
utf8_to_ucs4(std::vector<char>(utf8.begin(), utf8.end())); utf8_to_ucs4(utf8.data(), utf8.size());
return docstring(ucs4.begin(), ucs4.end()); return docstring(ucs4.begin(), ucs4.end());
} }
@ -49,7 +49,7 @@ docstring const from_utf8(std::string const & utf8)
std::string const to_utf8(docstring const & ucs4) std::string const to_utf8(docstring const & ucs4)
{ {
std::vector<char> const utf8 = std::vector<char> const utf8 =
ucs4_to_utf8(std::vector<boost::uint32_t>(ucs4.begin(), ucs4.end())); ucs4_to_utf8(ucs4.data(), ucs4.size());
return std::string(utf8.begin(), utf8.end()); return std::string(utf8.begin(), utf8.end());
} }

View File

@ -125,19 +125,47 @@ iconv_convert(iconv_t * cd,
std::vector<boost::uint32_t> utf8_to_ucs4(std::vector<char> const & utf8str) std::vector<boost::uint32_t> utf8_to_ucs4(std::vector<char> const & utf8str)
{
return utf8_to_ucs4(&utf8str[0], utf8str.size());
}
std::vector<boost::uint32_t>
utf8_to_ucs4(char const * utf8str, size_t ls)
{ {
static iconv_t cd = (iconv_t)(-1); static iconv_t cd = (iconv_t)(-1);
return iconv_convert<boost::uint32_t>(&cd, ucs4_codeset, "UTF-8", return iconv_convert<boost::uint32_t>(&cd, ucs4_codeset, "UTF-8",
&utf8str[0], utf8str.size()); utf8str, ls);
}
boost::uint32_t
ucs2_to_ucs4(unsigned short c)
{
return ucs2_to_ucs4(&c, 1)[0];
} }
std::vector<boost::uint32_t> std::vector<boost::uint32_t>
ucs2_to_ucs4(std::vector<unsigned short> const & ucs2str) ucs2_to_ucs4(std::vector<unsigned short> const & ucs2str)
{
return ucs2_to_ucs4(&ucs2str[0], ucs2str.size());
}
std::vector<boost::uint32_t>
ucs2_to_ucs4(unsigned short const * ucs2str, size_t ls)
{ {
static iconv_t cd = (iconv_t)(-1); static iconv_t cd = (iconv_t)(-1);
return iconv_convert<boost::uint32_t>(&cd, ucs4_codeset, ucs2_codeset, return iconv_convert<boost::uint32_t>(&cd, ucs4_codeset, ucs2_codeset,
&ucs2str[0], ucs2str.size()); ucs2str, ls);
}
unsigned short
ucs4_to_ucs2(boost::uint32_t c)
{
return ucs4_to_ucs2(&c, 1)[0];
} }
@ -157,24 +185,25 @@ ucs4_to_ucs2(boost::uint32_t const * s, size_t ls)
} }
unsigned short std::vector<char>
ucs4_to_ucs2(boost::uint32_t c) ucs4_to_utf8(boost::uint32_t c)
{
boost::uint32_t tmp[] = { c, 0 };
return ucs4_to_ucs2(tmp, 1)[0];
}
std::vector<char> ucs4_to_utf8(std::vector<boost::uint32_t> const & ucs4str)
{
static iconv_t cd = (iconv_t)(-1);
return iconv_convert<char>(&cd, "UTF-8", ucs4_codeset,
&ucs4str[0], ucs4str.size());
}
std::vector<char> ucs4_to_utf8(boost::uint32_t c)
{ {
static iconv_t cd = (iconv_t)(-1); static iconv_t cd = (iconv_t)(-1);
return iconv_convert<char>(&cd, "UTF-8", ucs4_codeset, &c, 1); return iconv_convert<char>(&cd, "UTF-8", ucs4_codeset, &c, 1);
} }
std::vector<char>
ucs4_to_utf8(std::vector<boost::uint32_t> const & ucs4str)
{
return ucs4_to_utf8(&ucs4str[0], ucs4str.size());
}
std::vector<char>
ucs4_to_utf8(boost::uint32_t const * ucs4str, size_t ls)
{
static iconv_t cd = (iconv_t)(-1);
return iconv_convert<char>(&cd, "UTF-8", ucs4_codeset,
ucs4str, ls);
}

View File

@ -16,25 +16,48 @@
#include <boost/cstdint.hpp> #include <boost/cstdint.hpp>
#include <vector> #include <vector>
// utf8_to_ucs4
// A single codepoint conversion for utf8_to_ucs4 does not make
// sense, so that function is left out.
std::vector<boost::uint32_t> std::vector<boost::uint32_t>
utf8_to_ucs4(std::vector<char> const & utf8str); utf8_to_ucs4(std::vector<char> const & utf8str);
std::vector<boost::uint32_t>
utf8_to_ucs4(char const * utf8str, size_t ls);
// ucs2_to_ucs4
boost::uint32_t
ucs2_to_ucs4(unsigned short c);
std::vector<boost::uint32_t> std::vector<boost::uint32_t>
ucs2_to_ucs4(std::vector<unsigned short> const & ucs2str); ucs2_to_ucs4(std::vector<unsigned short> const & ucs2str);
std::vector<boost::uint32_t>
ucs2_to_ucs4(unsigned short const * ucs2str, size_t ls);
// ucs4_to_ucs2
unsigned short
ucs4_to_ucs2(boost::uint32_t c);
std::vector<unsigned short> std::vector<unsigned short>
ucs4_to_ucs2(std::vector<boost::uint32_t> const & ucs4str); ucs4_to_ucs2(std::vector<boost::uint32_t> const & ucs4str);
std::vector<unsigned short> std::vector<unsigned short>
ucs4_to_ucs2(boost::uint32_t const * s, size_t ls); ucs4_to_ucs2(boost::uint32_t const * s, size_t ls);
unsigned short // ucs4_to_utf8
ucs4_to_ucs2(boost::uint32_t c);
std::vector<char>
ucs4_to_utf8(boost::uint32_t c);
std::vector<char> std::vector<char>
ucs4_to_utf8(std::vector<boost::uint32_t> const & ucs4str); ucs4_to_utf8(std::vector<boost::uint32_t> const & ucs4str);
std::vector<char> std::vector<char>
ucs4_to_utf8(boost::uint32_t c); ucs4_to_utf8(boost::uint32_t const * ucs4str, size_t ls);
#endif #endif