add support for changing encoding on idocstream

git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@27579 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
Jean-Marc Lasgouttes 2008-11-16 19:25:26 +00:00
parent 19b000287f
commit 40f5f4e12f
2 changed files with 23 additions and 0 deletions

View File

@ -345,6 +345,28 @@ odocstream & operator<<(odocstream & os, SetEnc e)
}
//CHECKME: I just copied the code above, and have no idea whether it
//is correct... (JMarc)
idocstream & operator<<(idocstream & is, SetEnc e)
{
if (has_facet<iconv_codecvt_facet>(is.rdbuf()->getloc())) {
// This stream must be a file stream, since we never imbue
// any other stream with a locale having a iconv_codecvt_facet.
// Flush the stream so that all pending output is written
// with the old encoding.
//is.flush();
locale locale(is.rdbuf()->getloc(),
new iconv_codecvt_facet(e.encoding, ios_base::in));
// FIXME Does changing the codecvt facet of an open file
// stream always work? It does with gcc 4.1, but I have read
// somewhere that it does not with MSVC.
// What does the standard say?
is.imbue(locale);
}
return is;
}
#if ! defined(USE_WCHAR_T)
odocstream & operator<<(odocstream & os, char c)
{

View File

@ -90,6 +90,7 @@ SetEnc setEncoding(std::string const & encoding);
\endcode
*/
odocstream & operator<<(odocstream & os, SetEnc e);
idocstream & operator<<(idocstream & os, SetEnc e);
}