}
}
+ // FIXME thailatex does not support the inputenc package, so we
+ // ignore switches from/to tis620-0 encoding here. This does of
+ // course only work as long as the non-thai text contains ASCII
+ // only, but it is the best we can do.
+ bool const use_thailatex = (language->encoding()->name() == "tis620-0" ||
+ previous_language->encoding()->name() == "tis620-0");
if (bparams.inputenc == "auto" &&
- language->encoding() != previous_language->encoding()) {
+ language->encoding() != previous_language->encoding() &&
+ !use_thailatex) {
ucs4 << "\\inputencoding{"
<< from_ascii(language->encoding()->latexName())
<< "}\n";
odocstringstream par_stream;
bool const change_encoding = !runparams_in.dryrun &&
bparams.inputenc == "auto" &&
- language->encoding() != doc_language->encoding();
+ language->encoding() != doc_language->encoding() &&
+ !use_thailatex;
+ // don't trigger the copy ctor because it's private on msvc
odocstream & os = *(change_encoding ? &par_stream : &ucs4);
// In an an inset with unlimited length (all in one row),
// This is of course a hack, but not a bigger one than mixing
// two encodings in one file.
// FIXME: Catch iconv conversion errors and display an error
- // dialog.
+ // dialog.
+
+ // Here follows an explanation how I (gb) came to the current
+ // solution:
+
+ // codecvt facets are only used by file streams -> OK, maybe
+ // we could use file streams and not generic streams in the
+ // latex() methods? No, that does not work, we use them at
+ // several places to write to string streams.
+ // Next try: Maybe we could do something else than codecvt
+ // in our streams, and add a setEncoding() method? That
+ // does not work unless we rebuild the functionality of file
+ // and string streams, since both odocfstream and
+ // odocstringstream inherit from std::basic_ostream<docstring>
+ // and we can neither add a method to that class nor change
+ // the inheritance of the file and string streams.
+
+ // What might be possible is to encapsulate the real file and
+ // string streams in our own version, and use a homemade
+ // streambuf that would do the encoding conversion and then
+ // forward to the real stream. That would probably work, but
+ // would require far more code and a good understanding of
+ // stream buffers to get it right.
+
+ // Another idea by JMarc is to use a modifier like
+ // os << setencoding("iso-8859-1");
+ // That currently looks like the best idea.
+
std::vector<char_type> const faked = lyx::eightbit_to_ucs4(&(encoded[0]),
encoded.size(), doc_language->encoding()->iconvName());
std::vector<char_type>::const_iterator const end = faked.end();