From: Georg Baum Date: Fri, 3 Nov 2006 10:35:41 +0000 (+0000) Subject: Fix thinko in Buffer::makeLaTeXFile X-Git-Tag: 1.6.10~12074 X-Git-Url: https://git.lyx.org/gitweb/?a=commitdiff_plain;h=b67e9338695c98e34774cc8a40916174169cbe2b;p=features.git Fix thinko in Buffer::makeLaTeXFile * src/encoding.[Ch] (getEncoding): rename to getFromLyXName (getFromLaTeXName): new, it does what the name says * src/buffer.C (Buffer::makeLaTeXFile): Fix crash by using getFromLaTeXName instead of getFromLyXName. Avoid crash for unknown encodings. * src/language.C (Languages::read): Adjust to name change above git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@15703 a592a061-630c-0410-9148-cb99ea01b6c8 --- diff --git a/src/buffer.C b/src/buffer.C index 41185b825d..3702aa5eeb 100644 --- a/src/buffer.C +++ b/src/buffer.C @@ -817,9 +817,20 @@ bool Buffer::makeLaTeXFile(string const & fname, OutputParams const & runparams, bool output_preamble, bool output_body) { - string const encoding = (params().inputenc == "auto") ? - params().language->encoding()->iconvName() : - encodings.getEncoding(params().inputenc)->iconvName(); + string encoding; + if (params().inputenc == "auto") + encoding = params().language->encoding()->iconvName(); + else { + Encoding const * enc = encodings.getFromLaTeXName(params().inputenc); + if (enc) + encoding = enc->iconvName(); + else { + lyxerr << "Unknown inputenc value `" + << params().inputenc + << "'. Using `auto' instead." << endl; + encoding = params().language->encoding()->iconvName(); + } + } lyxerr[Debug::LATEX] << "makeLaTeXFile encoding: " << encoding << "..." << endl; diff --git a/src/encoding.C b/src/encoding.C index a57fed5cc6..abb0b1d657 100644 --- a/src/encoding.C +++ b/src/encoding.C @@ -224,15 +224,45 @@ char_type Encodings::transformChar(char_type c, } -Encoding const * Encodings::getEncoding(string const & encoding) const +Encoding const * Encodings::getFromLyXName(string const & name) const { - EncodingList::const_iterator it = encodinglist.find(encoding); + EncodingList::const_iterator it = encodinglist.find(name); if (it != encodinglist.end()) return &it->second; else return 0; } + +namespace { + +class LaTeXNamesEqual : public std::unary_function, bool> { + public: + LaTeXNamesEqual(string const & LaTeXName) + : LaTeXName_(LaTeXName) {} + bool operator()(std::pair const & encoding) const + { + return encoding.second.latexName() == LaTeXName_; + } + private: + string LaTeXName_; +}; + +} // namespace anon + + +Encoding const * Encodings::getFromLaTeXName(string const & name) const +{ + EncodingList::const_iterator const it = + std::find_if(encodinglist.begin(), encodinglist.end(), + LaTeXNamesEqual(name)); + if (it != encodinglist.end()) + return &it->second; + else + return 0; +} + + Encodings::Encodings() { symbol_encoding_ = Encoding("symbol", "", ""); diff --git a/src/encoding.h b/src/encoding.h index 6821f93dba..6e8bffc387 100644 --- a/src/encoding.h +++ b/src/encoding.h @@ -56,8 +56,10 @@ public: Encodings(); /// void read(std::string const & filename); - /// - Encoding const * getEncoding(std::string const & encoding) const; + /// Get encoding from LyX name \p name + Encoding const * getFromLyXName(std::string const & name) const; + /// Get encoding from LaTeX name \p name + Encoding const * getFromLaTeXName(std::string const & name) const; /// Encoding const * symbol_encoding() { return &symbol_encoding_; } diff --git a/src/language.C b/src/language.C index 82217fedc5..e056463e93 100644 --- a/src/language.C +++ b/src/language.C @@ -39,7 +39,7 @@ void Languages::read(string const & filename) { // We need to set the encoding of latex_lang latex_lang = Language("latex", "latex", "Latex", false, "iso8859-1", - encodings.getEncoding("iso8859-1"), + encodings.getFromLyXName("iso8859-1"), "latex", ""); LyXLex lex(0, 0); @@ -72,9 +72,9 @@ void Languages::read(string const & filename) if (lex.next()) latex_options = lex.getString(); - Encoding const * encoding = encodings.getEncoding(encoding_str); + Encoding const * encoding = encodings.getFromLyXName(encoding_str); if (!encoding) { - encoding = encodings.getEncoding("iso8859-1"); + encoding = encodings.getFromLyXName("iso8859-1"); lyxerr << "Unknown encoding " << encoding_str << endl; }