// -*- 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
+#include "support/types.h"
-#ifdef __GNUG__
-#pragma interface
-#endif
+#include "LString.h"
-#include <vector>
#include <set>
+#include <list>
+#include <map>
-#include "LString.h"
-
-class BufferParams;
-class LyXTextClass;
+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 macros definitions needed by the document
- string getMacros();
- /// The definitions needed by the document's textclass
- string getTClassPreamble();
- ///
- string getIncludedFiles();
+/** 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).
- ///
- void showStruct();
+ 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(BufferParams const &);
+ /// The packages needed by the document
+ string const getPackages() const;
+ /// The macros definitions needed by the document
+ string const getMacros() const;
+ ///
+ 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;
+ /// The SGML Required to include the files added with includeFile();
+ string const getIncludedFiles(string const & fname) const;
+ /// Include a file for use with the SGML entities
+ void includeFile(string const & key, string const & name);
+ /// The float definitions.
+ void getFloatDefinitions(std::ostream & os) const;
+ /// Print requirements to lyxerr
+ void showStruct() const;
+ ///
+ void addExternalPreamble(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 color; // color.sty
-#ifdef USE_GRAPHICX
- ///
- bool graphicx; // graphicx.sty
-#else
- ///
- bool graphics; // graphics.sty
-#endif
- ///
- bool setspace; // setspace.sty
- ///
- bool makeidx; // makeind.sty
- ///
- bool verbatim; // verbatim.sty
- ///
- bool longtable; // longtable.sty
- ///
- bool algorithm; // algorithm.sty
+ /// Is the package required?
+ bool isRequired(string const & name) const;
///
- bool rotating; // rotating.sty
+ void useFloat(string const & name);
///
- bool amssymb; // amssymb.sty
+ void useLanguage(Language const *);
///
- bool latexsym; // latexsym.sty
+ bool hasLanguages() const;
///
- bool pifont; // pifont.sty
+ string getLanguages() const;
///
- bool subfigure; // subfigure.sty
+ std::set<string> getEncodingSet(string const & doc_encoding) const;
///
- bool floatflt; // floatflt.sty
+ void useLayout(string const & lyt);
///
- bool url; // url.sty
- ///
- bool varioref; // varioref.sty
- ///
- bool prettyref; // prettyref.sty
- ///
- bool chess; // chess.sty
- //@}
+ BufferParams const & bufferParams() const;
+ /// the return value is dependent upon both LyXRC and LaTeXFeatures.
+ bool useBabel() const;
-
- //@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<string> usedLayouts;
+
+ /// Static preamble bits from the external material insets
+ typedef std::list<string> FeaturesList;
///
- bool NeedLyXFootnoteCode;
+ FeaturesList features;
///
- bool NeedLyXMinipageIndent;
+ FeaturesList preamble_snippets;
///
typedef std::set<Language const *> LanguageList;
///
LanguageList UsedLanguages;
///
- typedef std::set<string> FloatList;
+ typedef std::set<string> UsedFloats;
///
- FloatList usedFloats;
+ UsedFloats usedFloats;
///
typedef std::map<string , string> FileMap;
///
- FileMap IncludedFiles;
- //@}
- BufferParams const & bufferParams() const;
-private:
+ FileMap IncludedFiles;
+ ///
+ ///
BufferParams const & params;
};