]> git.lyx.org Git - features.git/commitdiff
Fix thinko in Buffer::makeLaTeXFile
authorGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Fri, 3 Nov 2006 10:35:41 +0000 (10:35 +0000)
committerGeorg Baum <Georg.Baum@post.rwth-aachen.de>
Fri, 3 Nov 2006 10:35:41 +0000 (10:35 +0000)
* 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

src/buffer.C
src/encoding.C
src/encoding.h
src/language.C

index 41185b825dfc5c961f915b70df0ae34b02ff01f2..3702aa5eeb70179d2cb1fdf71e0f8bb530e855c1 100644 (file)
@@ -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;
 
index a57fed5cc69b9cdb5633277b76c51a11b9982c24..abb0b1d6578fe6e83e6cc142a338803bc8bd8e5b 100644 (file)
@@ -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<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", "", "");
index 6821f93dba6d2abf9c39669969311a1f265fafa7..6e8bffc387502ef7a2dda22cf3316edcb9c45b74 100644 (file)
@@ -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_; }
 
index 82217fedc5f781a6962e76921e95e6d97bcb25ca..e056463e93ca9fb528edef31c26ccc0f6de271c3 100644 (file)
@@ -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;
                }