]> git.lyx.org Git - lyx.git/blobdiff - src/LaTeXFeatures.h
more dialog merging
[lyx.git] / src / LaTeXFeatures.h
index 90b49c2ba520b6817bf8a44fa26d2c658bfdd6d3..9de20f3c8a3458a1edb3ea394b07878780295795 100644 (file)
 #define LATEXFEATURES_H
 
 
-#include "support/std_string.h"
+#include "outputparams.h"
+#include "support/docstring.h"
 
 #include <set>
 #include <list>
 #include <map>
+#include <string>
+
+
+namespace lyx {
 
 class Buffer;
 class BufferParams;
-struct Language;
+class Language;
 
 /** The packages and commands that a buffer needs. This class
   contains a list<string>.  Each of the LaTeX packages that a buffer needs
   should be added with void require(string const & name).
-
   i.e require("amssymb")
-
   To add support you should only need to require() the package name as
   packages which don't have special requirements are handled automatically.
   If your new package does need special consideration you'll need to alter
   string const getPackages() const;
   Remember to update the validate function in buffer.C and paragraph.C
   when you do so.
-*/
*  contains a list<string>.  Each of the LaTeX packages that a buffer needs
*  should be added with void require(string const & name).
+ *
*  i.e require("amssymb")
+ *
*  To add support you should only need to require() the package name as
*  packages which don't have special requirements are handled automatically.
*  If your new package does need special consideration you'll need to alter
*  string const getPackages() const;
*  Remember to update the validate function in buffer.C and paragraph.C
*  when you do so.
+ */
 class LaTeXFeatures {
 public:
        ///
-       LaTeXFeatures(Buffer const &, BufferParams const &);
+       LaTeXFeatures(Buffer const &, BufferParams const &,
+                     OutputParams const &);
        /// The packages needed by the document
-       string const getPackages() const;
+       std::string const getPackages() const;
        /// The macros definitions needed by the document
-       string const getMacros() const;
+       std::string const getMacros() const;
        ///
-       string const getBabelOptions() const;
+       std::string const getBabelOptions() const;
        /// The definitions needed by the document's textclass
-       string const getTClassPreamble() const;
-       /// The sgml definitions needed by the document (dobook/linuxdoc)
-       string const getLyXSGMLEntities() const;
+       docstring const getTClassPreamble() const;
+       /// The sgml definitions needed by the document (docbook)
+       docstring const getLyXSGMLEntities() const;
        /// The SGML Required to include the files added with includeFile();
-       string const getIncludedFiles(string const & fname) const;
+       docstring const getIncludedFiles(std::string const & fname) const;
        /// Include a file for use with the SGML entities
-       void includeFile(string const & key, string const & name);
+       void includeFile(docstring const & key, std::string const & name);
        /// The float definitions.
        void getFloatDefinitions(std::ostream & os) const;
        /// Print requirements to lyxerr
        void showStruct() const;
        ///
-       void addExternalPreamble(string const &);
+       void addPreambleSnippet(std::string const &);
        /// Provide a string name-space to the requirements
-       void require(string const & name);
-       /// Is the package required?
-       bool isRequired(string const & name) const;
-       ///
-       void useFloat(string const & name);
+       void require(std::string const & name);
+       /// Which of the required packages are installed?
+       static void getAvailable();
+       /// Is the (required) package available?
+       static bool isAvailable(std::string const & name);
+       /// Has the package been required?
+       bool isRequired(std::string const & name) const;
+       /* Is it necessary to load the package? This is true is
+          isRequired is true and the feature is not provided by the
+          textclass.
+       */
+       bool mustProvide(std::string const & name) const;
+       ///
+       void useFloat(std::string const & name);
        ///
        void useLanguage(Language const *);
        ///
        bool hasLanguages() const;
        ///
-       string getLanguages() const;
+       std::string getLanguages() const;
        ///
-       std::set<string> getEncodingSet(string const & doc_encoding) const;
+       std::set<std::string> getEncodingSet(std::string const & doc_encoding) const;
        ///
-       void useLayout(string const & lyt);
+       void useLayout(std::string const & lyt);
        ///
        Buffer const & buffer() const;
        ///
+       void setBuffer(Buffer const &);
+       ///
        BufferParams const & bufferParams() const;
        /// the return value is dependent upon both LyXRC and LaTeXFeatures.
        bool useBabel() const;
+       /// Runparams that will be used for exporting this file.
+       OutputParams const & runparams() const { return runparams_; }
 
 private:
-       std::list<string> usedLayouts_;
+       std::list<std::string> usedLayouts_;
 
        /// Static preamble bits from the external material insets
-       typedef std::list<string> FeaturesList;
+       typedef std::list<std::string> FeaturesList;
        ///
        FeaturesList features_;
        ///
        FeaturesList preamble_snippets_;
+       /// The available (required) packages
+       typedef std::list<std::string> PackagesList;
+       ///
+       static PackagesList packages_;
        ///
        typedef std::set<Language const *> LanguageList;
        ///
        LanguageList UsedLanguages_;
        ///
-       typedef std::set<string> UsedFloats;
+       typedef std::set<std::string> UsedFloats;
        ///
        UsedFloats usedFloats_;
        ///
-       typedef std::map<string , string> FileMap;
+       typedef std::map<docstring , std::string> FileMap;
        ///
        FileMap IncludedFiles_;
-       ///
-       Buffer const & buffer_;
+       /** Buffer of the file being processed.
+        *  This may be a child buffer of the to-be-exported file and
+        *  therefore may not be the buffer that belongs to params_.
+        *  Only needed by InsetInclude::validate().
+        */
+       Buffer const * buffer_;
        ///
        BufferParams const & params_;
+       /** Some insets need to know details about the to-be-produced file
+        *  in validate().
+        */
+       OutputParams const & runparams_;
 };
 
+
+} // namespace lyx
+
 #endif