mirror of
https://git.lyx.org/repos/lyx.git
synced 2025-01-18 21:45:24 +00:00
backport revision 21967, from Abdel:
* src/support/docstream.{cpp.h}: - factorize out some code and introduce odocfstream::reset() * src/output_plaintext.cpp: - pass encoding argument. * src/Buffer.cpp (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/branches/BRANCH_1_5_X@22234 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
677689945f
commit
9975b55687
@ -934,7 +934,15 @@ bool Buffer::makeLaTeXFile(FileName const & fname,
|
||||
LYXERR(Debug::LATEX) << "makeLaTeXFile encoding: "
|
||||
<< encoding << "..." << endl;
|
||||
|
||||
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;
|
||||
|
||||
|
@ -41,7 +41,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
|
||||
|
@ -54,6 +54,8 @@ What's new
|
||||
- Fix an assertion when inserting a non-CJK character in a CJK paragraph
|
||||
(bug 4349).
|
||||
|
||||
- Do not exit after catching an iconv exception (bug 4385, part 2).
|
||||
|
||||
- Fix access to network drives on Windows.
|
||||
|
||||
- "Accept compound words" in Preferences->Spellchecker now also works
|
||||
|
Loading…
x
Reference in New Issue
Block a user