]> git.lyx.org Git - features.git/commitdiff
add support for changing encoding on idocstream
authorJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 16 Nov 2008 19:25:26 +0000 (19:25 +0000)
committerJean-Marc Lasgouttes <lasgouttes@lyx.org>
Sun, 16 Nov 2008 19:25:26 +0000 (19:25 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@27579 a592a061-630c-0410-9148-cb99ea01b6c8

src/support/docstream.cpp
src/support/docstream.h

index e5120bc63b1132a6d8beb0470c606417c63a1ea8..cc8fbc9f80b6832e3820abf8e466455addad9cbd 100644 (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)
 {
index 11eee7422c711f8457e20f91038bc57334c03400..c15b27c2886cc53992c8a0543b8805b5cf8153c7 100644 (file)
@@ -90,6 +90,7 @@ SetEnc setEncoding(std::string const & encoding);
     \endcode
  */
 odocstream & operator<<(odocstream & os, SetEnc e);
+idocstream & operator<<(idocstream & os, SetEnc e);
 
 }