]> git.lyx.org Git - lyx.git/blobdiff - src/BufferParams.cpp
Add FIXME
[lyx.git] / src / BufferParams.cpp
index dab711d047782467c0a9bfc773d02870198708c8..7832b268d21d8f29952c644fd48732eca09c7ef9 100644 (file)
@@ -355,9 +355,8 @@ public:
        VSpace defskip;
        PDFOptions pdfoptions;
        LayoutFileIndex baseClass_;
-       /// Caching for exportableFormats, which seems to be slow.
-       std::vector<Format const *> exportableFormatList;
-       std::vector<Format const *> viewableFormatList;
+       FormatList exportableFormatList;
+       FormatList viewableFormatList;
        bool isViewCacheValid;
        bool isExportCacheValid;
 };
@@ -1453,7 +1452,7 @@ void BufferParams::validate(LaTeXFeatures & features) const
 
        // some languages are only available via polyglossia
        if (features.hasPolyglossiaExclusiveLanguages())
-          features.require("polyglossia");
+               features.require("polyglossia");
 
        if (useNonTeXFonts && fontsMath() != "auto")
                features.require("unicode-math");
@@ -2183,14 +2182,17 @@ bool BufferParams::writeLaTeX(otexstream & os, LaTeXFeatures & features,
                        os << "[" << from_ascii(language->polyglossiaOpts()) << "]";
                os << "{" << from_ascii(language->polyglossia()) << "}\n";
                // now setup the other languages
-               std::map<std::string, std::string> const polylangs =
+               set<string> const polylangs =
                        features.getPolyglossiaLanguages();
-               for (std::map<std::string, std::string>::const_iterator mit = polylangs.begin();
+               for (set<string>::const_iterator mit = polylangs.begin();
                     mit != polylangs.end() ; ++mit) {
+                       // We do not output the options here; they are output in
+                       // the language switch commands. This is safer if multiple
+                       // varieties are used.
+                       if (*mit == language->polyglossia())
+                               continue;
                        os << "\\setotherlanguage";
-                       if (!mit->second.empty())
-                               os << "[" << from_ascii(mit->second) << "]";
-                       os << "{" << from_ascii(mit->first) << "}\n";
+                       os << "{" << from_ascii(*mit) << "}\n";
                }
        }
 
@@ -2392,20 +2394,22 @@ string BufferParams::bufferFormat() const
 }
 
 
-bool BufferParams::isExportable(string const & format) const
+bool BufferParams::isExportable(string const & format, bool need_viewable) const
 {
-       vector<string> backs = backends();
-       for (vector<string>::const_iterator it = backs.begin();
-            it != backs.end(); ++it)
-               if (theConverters().isReachable(*it, format))
+       FormatList const & formats = exportableFormats(need_viewable);
+       FormatList::const_iterator fit = formats.begin();
+       FormatList::const_iterator end = formats.end();
+       for (; fit != end ; ++fit) {
+               if ((*fit)->name() == format)
                        return true;
+       }
        return false;
 }
 
 
-vector<Format const *> const & BufferParams::exportableFormats(bool only_viewable) const
+FormatList const & BufferParams::exportableFormats(bool only_viewable) const
 {
-       vector<Format const *> & cached = only_viewable ?
+       FormatList & cached = only_viewable ?
                        pimpl_->viewableFormatList : pimpl_->exportableFormatList;
        bool & valid = only_viewable ? 
                        pimpl_->isViewCacheValid : pimpl_->isExportCacheValid;
@@ -2418,12 +2422,12 @@ vector<Format const *> const & BufferParams::exportableFormats(bool only_viewabl
                excludes.insert("latex");
                excludes.insert("pdflatex");
        }
-       vector<Format const *> result =
+       FormatList result =
                theConverters().getReachable(backs[0], only_viewable, true, excludes);
        for (vector<string>::const_iterator it = backs.begin() + 1;
             it != backs.end(); ++it) {
-               vector<Format const *>  r =
-                       theConverters().getReachable(*it, only_viewable, false, excludes);
+               FormatList r = theConverters().getReachable(*it, only_viewable, 
+                               false, excludes);
                result.insert(result.end(), r.begin(), r.end());
        }
        sort(result.begin(), result.end(), Format::formatSorter);
@@ -2433,20 +2437,6 @@ vector<Format const *> const & BufferParams::exportableFormats(bool only_viewabl
 }
 
 
-bool BufferParams::isExportableFormat(string const & format) const
-{
-       typedef vector<Format const *> Formats;
-       Formats const & formats = exportableFormats(true);
-       Formats::const_iterator fit = formats.begin();
-       Formats::const_iterator end = formats.end();
-       for (; fit != end ; ++fit) {
-               if ((*fit)->name() == format)
-                       return true;
-       }
-       return false;
-}
-
-
 vector<string> BufferParams::backends() const
 {
        vector<string> v;
@@ -2533,7 +2523,7 @@ string BufferParams::getDefaultOutputFormat() const
                return default_output_format;
        if (isDocBook()
            || encoding().package() == Encoding::japanese) {
-               vector<Format const *> const & formats = exportableFormats(true);
+               FormatList const & formats = exportableFormats(true);
                if (formats.empty())
                        return string();
                // return the first we find