// -*- C++ -*-
-/* This file is part of
-* ======================================================
-*
-* LyX, The Document Processor
-*
-* Copyright 1995 Matthias Ettrich
-* Copyright 1995-2000 the LyX Team.
-*
-* ====================================================== */
+/**
+ * \file LaTeXFeatures.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
+ *
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
#ifndef LATEXFEATURES_H
#define LATEXFEATURES_H
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include <vector>
#include <set>
+#include <list>
+#include <map>
+#include <string>
-#include "LString.h"
-
-class BufferParams;
-class LyXTextClass;
+class Buffer;
+class BufferParams;
struct Language;
-/** The packages and commands that a buffer needs. This struct
- contains an entry for each of the latex packages and
- commands that a buffer might need. This struct is supposed to be
- extended as the need arises. Remember to update the validate function
- in buffer.C and paragraph.C when you do so. */
-struct LaTeXFeatures {
- ///
- LaTeXFeatures(BufferParams const &, int n) ;
- /// The packaes needed by the document
- string getPackages();
+/** 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.
+ */
+class LaTeXFeatures {
+public:
+ ///
+ LaTeXFeatures(Buffer const &, BufferParams const &, bool);
+ /// The packages needed by the document
+ std::string const getPackages() const;
/// The macros definitions needed by the document
- string getMacros();
- /// The definitions needed by the document's textclass
- string getTClassPreamble();
- ///
- string getIncludedFiles();
-
+ std::string const getMacros() const;
///
- void showStruct();
-
+ std::string const getBabelOptions() const;
+ /// The definitions needed by the document's textclass
+ std::string const getTClassPreamble() const;
+ /// The sgml definitions needed by the document (dobook/linuxdoc)
+ std::string const getLyXSGMLEntities() const;
+ /// The SGML Required to include the files added with includeFile();
+ std::string const getIncludedFiles(std::string const & fname) const;
+ /// Include a file for use with the SGML entities
+ void includeFile(std::string const & key, std::string const & name);
+ /// The float definitions.
+ void getFloatDefinitions(std::ostream & os) const;
+ /// Print requirements to lyxerr
+ void showStruct() const;
+ ///
+ void addExternalPreamble(std::string const &);
/// Provide a string name-space to the requirements
- void require(string const & name);
-
- /// Static preamble bits from the external material insets
- string externalPreambles;
-
- //@Man: Packages
- //@{
- ///
- bool array;
- ///
- bool color; // color.sty
- ///
- bool graphicx; // graphicx.sty
- ///
- bool graphics; // graphics.sty
- ///
- bool setspace; // setspace.sty
- ///
- bool makeidx; // makeind.sty
- ///
- bool verbatim; // verbatim.sty
- ///
- bool longtable; // longtable.sty
+ void require(std::string const & name);
+ /// Is the package required?
+ bool isRequired(std::string const & name) const;
///
- bool algorithm; // algorithm.sty
+ void useFloat(std::string const & name);
///
- bool rotating; // rotating.sty
+ void useLanguage(Language const *);
///
- bool amssymb; // amssymb.sty
+ bool hasLanguages() const;
///
- bool latexsym; // latexsym.sty
+ std::string getLanguages() const;
///
- bool pifont; // pifont.sty
+ std::set<std::string> getEncodingSet(std::string const & doc_encoding) const;
///
- bool subfigure; // subfigure.sty
+ void useLayout(std::string const & lyt);
///
- bool floatflt; // floatflt.sty
+ Buffer const & buffer() const;
///
- bool url; // url.sty
+ void setBuffer(Buffer const &);
///
- bool varioref; // varioref.sty
- ///
- bool prettyref; // prettyref.sty
+ BufferParams const & bufferParams() const;
+ /// the return value is dependent upon both LyXRC and LaTeXFeatures.
+ bool useBabel() const;
///
- bool chess; // chess.sty
- //@}
+ bool nice() const { return nice_; };
-
- //@Man: Commands
- //@{
- ///
- bool lyx;
- ///
- bool lyxline;
- /// \noun
- bool noun;
- /// \lyxarrow
- bool lyxarrow;
- //@}
-
- //@Man: Quotes
- //@{
- ///
- bool quotesinglbase;
- ///
- bool quotedblbase;
- ///
- bool guilsinglleft;
- ///
- bool guilsinglright;
- ///
- bool guillemotleft;
- ///
- bool guillemotright;
- //@}
-
- //@Man: Math mode
- //@{
- ///
- bool amsstyle;
- ///
- bool boldsymbol;
- ///
- bool binom;
- //@}
-
- //@Man: Layouts
- //@{
- std::vector<bool> layout;
- //@}
-
- //@Man: Special features
- //@{
- bool LyXParagraphIndent;
+private:
+ std::list<std::string> usedLayouts_;
+
+ /// Static preamble bits from the external material insets
+ typedef std::list<std::string> FeaturesList;
///
- bool NeedLyXFootnoteCode;
+ FeaturesList features_;
///
- bool NeedLyXMinipageIndent;
+ FeaturesList preamble_snippets_;
///
typedef std::set<Language const *> LanguageList;
///
- LanguageList UsedLanguages;
+ LanguageList UsedLanguages_;
///
- typedef std::set<string> FloatList;
+ typedef std::set<std::string> UsedFloats;
///
- FloatList usedFloats;
+ UsedFloats usedFloats_;
///
- typedef std::map<string , string> FileMap;
+ typedef std::map<std::string , std::string> FileMap;
///
- FileMap IncludedFiles;
- //@}
- BufferParams const & bufferParams() const;
-private:
- BufferParams const & params;
+ FileMap IncludedFiles_;
+ /** 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_;
+ /** If we are writing a nice LaTeX file or not.
+ * Only needed by InsetInclude::validate().
+ */
+ bool nice_;
};
#endif