#include "support/docstring.h"
+#include "support/lassert.h"
#include "support/lstrings.h"
#include "support/qstring_helpers.h"
#include "support/unicode.h"
+#include <QFile>
+
#include <locale>
#include <iostream>
#include <typeinfo>
-#include <QFile>
-
-#include "support/lassert.h"
-
using namespace std;
-namespace lyx {
+namespace lyx {
docstring const from_ascii(char const * ascii)
{
docstring s;
- for (char const * c = ascii; *c; ++c) {
- LASSERT(static_cast<unsigned char>(*c) < 0x80, /**/);
- s.push_back(*c);
+ if (int n = strlen(ascii)) {
+ s.resize(n);
+ char_type *d = &s[0];
+ while (--n >= 0) {
+ d[n] = ascii[n];
+ LASSERT(static_cast<unsigned char>(ascii[n]) < 0x80, /**/);
+ }
}
return s;
}
string const to_utf8(docstring const & ucs4)
{
- vector<char> const utf8 =
- ucs4_to_utf8(ucs4.data(), ucs4.size());
+ vector<char> const utf8 = ucs4_to_utf8(ucs4.data(), ucs4.size());
return string(utf8.begin(), utf8.end());
}
}
+string const to_iconv_encoding(docstring const & s, string const & encoding)
+{
+ std::vector<char> const encoded =
+ ucs4_to_eightbit(s.data(), s.length(), encoding);
+ return string(encoded.begin(), encoded.end());
+}
+
+
+docstring const from_iconv_encoding(string const & s, string const & encoding)
+{
+ std::vector<char_type> const ucs4 =
+ eightbit_to_ucs4(s.data(), s.length(), encoding);
+ return docstring(ucs4.begin(), ucs4.end());
+}
+
+
docstring const normalize_c(docstring const & s)
{
return qstring_to_ucs4(toqstr(s).normalized(QString::NormalizationForm_C));