* 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
OutputParams const & runparams,
bool output_preamble, bool output_body)
{
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;
lyxerr[Debug::LATEX] << "makeLaTeXFile encoding: "
<< encoding << "..." << endl;
-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;
}
if (it != encodinglist.end())
return &it->second;
else
return 0;
}
+
+namespace {
+
+class LaTeXNamesEqual : public std::unary_function<std::pair<std::string, Encoding>, bool> {
+ public:
+ LaTeXNamesEqual(string const & LaTeXName)
+ : LaTeXName_(LaTeXName) {}
+ bool operator()(std::pair<std::string, Encoding> 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", "", "");
Encodings::Encodings()
{
symbol_encoding_ = Encoding("symbol", "", "");
Encodings();
///
void read(std::string const & filename);
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_; }
///
Encoding const * symbol_encoding() { return &symbol_encoding_; }
{
// We need to set the encoding of latex_lang
latex_lang = Language("latex", "latex", "Latex", false, "iso8859-1",
{
// 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);
"latex", "");
LyXLex lex(0, 0);
if (lex.next())
latex_options = lex.getString();
if (lex.next())
latex_options = lex.getString();
- Encoding const * encoding = encodings.getEncoding(encoding_str);
+ Encoding const * encoding = encodings.getFromLyXName(encoding_str);
- encoding = encodings.getEncoding("iso8859-1");
+ encoding = encodings.getFromLyXName("iso8859-1");
lyxerr << "Unknown encoding " << encoding_str << endl;
}
lyxerr << "Unknown encoding " << encoding_str << endl;
}