X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fsupport%2Fdocstream.cpp;h=481fd8555af396a1a104d832225502d013ffbfee;hb=974f44ea79acb58808f45e9a417e651b764de2ba;hp=69de4160d0a5cc7ee50b702392fd17b210e0adc2;hpb=9a7ad1efed7319df8ea0123c88a93d3ec2539304;p=features.git diff --git a/src/support/docstream.cpp b/src/support/docstream.cpp index 69de4160d0..481fd8555a 100644 --- a/src/support/docstream.cpp +++ b/src/support/docstream.cpp @@ -267,6 +267,15 @@ private: namespace lyx { +template +void setEncoding(Ios & ios, string const & encoding, std::ios_base::openmode mode) +{ + // We must imbue the stream before openening the file + std::locale global; + std::locale locale(global, new iconv_codecvt_facet(encoding, mode)); + ios.imbue(locale); +} + const char * iconv_codecvt_facet_exception::what() const throw() { @@ -276,9 +285,7 @@ const char * iconv_codecvt_facet_exception::what() const throw() idocfstream::idocfstream(string const & encoding) : base() { - std::locale global; - std::locale locale(global, new iconv_codecvt_facet(encoding, in)); - imbue(locale); + setEncoding(*this, encoding, in); } @@ -286,19 +293,19 @@ idocfstream::idocfstream(const char* s, std::ios_base::openmode mode, string const & encoding) : base() { - // We must imbue the stream before openening the file - std::locale global; - std::locale locale(global, new iconv_codecvt_facet(encoding, in)); - imbue(locale); + setEncoding(*this, encoding, in); open(s, mode); } +odocfstream::odocfstream(): base() +{ +} + + odocfstream::odocfstream(string const & encoding) : base() { - std::locale global; - std::locale locale(global, new iconv_codecvt_facet(encoding, out)); - imbue(locale); + setEncoding(*this, encoding, out); } @@ -306,14 +313,18 @@ odocfstream::odocfstream(const char* s, std::ios_base::openmode mode, string const & encoding) : base() { - // We must imbue the stream before openening the file - std::locale global; - std::locale locale(global, new iconv_codecvt_facet(encoding, out)); - imbue(locale); + setEncoding(*this, encoding, out); open(s, mode); } +void odocfstream::reset(string const & encoding) +{ + setEncoding(*this, encoding, out); +} + + + SetEnc setEncoding(string const & encoding) { return SetEnc(encoding);