X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Foutput_latex.C;h=c6986cce240e8ec00ae174c12fafb2da27cd7d9a;hb=35204f8f33d7400a5fefeffea533fb4cb4097211;hp=f37ad13ba5d94880345d7115b44cfc10084c4225;hpb=0a48dce7ac3bb55a16adb8d824953e32457bd83b;p=lyx.git diff --git a/src/output_latex.C b/src/output_latex.C index f37ad13ba5..c6986cce24 100644 --- a/src/output_latex.C +++ b/src/output_latex.C @@ -308,7 +308,8 @@ TeXOnePar(Buffer const & buf, bool const change_encoding = !runparams_in.dryrun && bparams.inputenc == "auto" && language->encoding() != doc_language->encoding(); - odocstream & os(change_encoding ? par_stream : ucs4); + // 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), // don't allow any special options in the paragraph @@ -499,7 +500,34 @@ TeXOnePar(Buffer const & buf, // 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 + // 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 const faked = lyx::eightbit_to_ucs4(&(encoded[0]), encoded.size(), doc_language->encoding()->iconvName()); std::vector::const_iterator const end = faked.end();