mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 05:16:21 +00:00
* docstream: factorize out some code and introduce odocfstream::reset()
* Buffer::makeLaTeXFile(): try to catch one more iconv exception. Fix bug 4385 (http://bugzilla.lyx.org/show_bug.cgi?id=4385) git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@21967 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
9a7ad1efed
commit
974f44ea79
@ -1009,7 +1009,15 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
string const encoding = runparams.encoding->iconvName();
|
||||
LYXERR(Debug::LATEX, "makeLaTeXFile encoding: " << encoding << "...");
|
||||
|
||||
odocfstream ofs(encoding);
|
||||
odocfstream ofs;
|
||||
try { ofs.reset(encoding); }
|
||||
catch (iconv_codecvt_facet_exception & e) {
|
||||
lyxerr << "Caught iconv exception: " << e.what() << endl;
|
||||
Alert::error(_("Iconv software exception Detected"), bformat(_("Please "
|
||||
"verify that the support software for your encoding (%1$s) is "
|
||||
"properly installed"), from_ascii(encoding)));
|
||||
return false;
|
||||
}
|
||||
if (!openFileWrite(ofs, fname))
|
||||
return false;
|
||||
|
||||
|
@ -42,7 +42,7 @@ using std::string;
|
||||
void writePlaintextFile(Buffer const & buf, FileName const & fname,
|
||||
OutputParams const & runparams)
|
||||
{
|
||||
odocfstream ofs;
|
||||
odocfstream ofs("UTF-8");
|
||||
if (!openFileWrite(ofs, fname))
|
||||
return;
|
||||
writePlaintextFile(buf, ofs, runparams);
|
||||
|
@ -267,6 +267,15 @@ private:
|
||||
|
||||
namespace lyx {
|
||||
|
||||
template<class Ios>
|
||||
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);
|
||||
|
@ -57,11 +57,14 @@ public:
|
||||
class odocfstream : public std::basic_ofstream<char_type> {
|
||||
typedef std::basic_ofstream<char_type> base;
|
||||
public:
|
||||
odocfstream(std::string const & encoding = "UTF-8");
|
||||
odocfstream();
|
||||
odocfstream(std::string const & encoding);
|
||||
explicit odocfstream(const char* s,
|
||||
std::ios_base::openmode mode = std::ios_base::out|std::ios_base::trunc,
|
||||
std::string const & encoding = "UTF-8");
|
||||
~odocfstream() {}
|
||||
///
|
||||
void reset(std::string const & encoding);
|
||||
};
|
||||
|
||||
/// UCS4 input stringstream
|
||||
|
Loading…
Reference in New Issue
Block a user