]> git.lyx.org Git - lyx.git/blobdiff - src/TextClass.h
Andre's s/getTextClass/textClass/ cleanup.
[lyx.git] / src / TextClass.h
index d9a13e84c49baa9a35b6e7ec175acc65b7595e0e..07b4f16893f49ce1c934c8d9953526f0bad8f080 100644 (file)
@@ -7,12 +7,18 @@
  * Full author contact details are available in file CREDITS.
  */
 
-#ifndef LYXTEXTCLASS_H
-#define LYXTEXTCLASS_H
+#ifndef TEXTCLASS_H
+#define TEXTCLASS_H
 
-#include "Color.h"
-#include "Layout.h"
-#include "lyxlayout_ptr_fwd.h"
+#include "ColorCode.h"
+#include "FontInfo.h"
+#include "LayoutEnums.h"
+#include "LayoutPtr.h"
+
+#include "insets/InsetLayout.h"
+
+#include "support/docstring.h"
+#include "support/types.h"
 
 #include <boost/shared_ptr.hpp>
 
@@ -24,28 +30,11 @@ namespace lyx {
 
 namespace support { class FileName; }
 
+class Layout;
 class Lexer;
 class Counters;
 class FloatList;
 
-
-///
-class InsetLayout {
-public:
-       std::string name;
-       std::string lyxtype;
-       docstring labelstring;
-       std::string decoration;
-       std::string latextype;
-       std::string latexname;
-       std::string latexparam;
-       Font font;
-       Font labelfont;
-       Color::color bgcolor;
-       std::string preamble;
-};
-
-
 /// List of inset layouts
 typedef std::map<docstring, InsetLayout> InsetLayouts;
 
@@ -54,8 +43,6 @@ class TextClass {
 public:
        /// The individual styles comprising the document class
        typedef std::vector<LayoutPtr> LayoutList;
-       /// Enumerate the paragraph styles.
-       typedef LayoutList::const_iterator const_iterator;
        /// Construct a layout with default values. Actual values loaded later.
        explicit
        TextClass(std::string const & = std::string(),
@@ -66,18 +53,19 @@ public:
        /// check whether the TeX class is available
        bool isTeXClassAvailable() const;
 
-       /// paragraph styles begin iterator.
-       const_iterator begin() const { return layoutlist_.begin(); }
-       /// paragraph styles end iterator
-       const_iterator end() const { return layoutlist_.end(); }
+       /// Enumerate the paragraph styles.
+       size_t layoutCount() const { return layoutlist_.size(); }
+       /// Access the paragraph styles.
+       LayoutPtr const & layout(size_t index) const { return layoutlist_[index]; }
 
-       ///Enum used with TextClass::read
+       /// Enum used with TextClass::read
        enum ReadType { 
                BASECLASS, //>This is a base class, i.e., top-level layout file
                MERGE, //>This is a file included in a layout file
                MODULE //>This is a layout module
        };
        /// Performs the read of the layout file.
+       /// \return true on success.
        bool read(support::FileName const & filename, ReadType rt = BASECLASS);
        ///
        void readOutputType(Lexer &);
@@ -90,8 +78,6 @@ public:
        ///
        void readCharStyle(Lexer &, std::string const &);
        ///
-       void readInsetLayout(Lexer &, docstring const &);
-       ///
        void readFloat(Lexer &);
        ///
        void readCounter(Lexer &);
@@ -113,13 +99,20 @@ public:
        /// The Counters present in this document class.
        Counters & counters() const;
        /// Inset layouts of this doc class
-       InsetLayouts & insetlayouts() const { return insetlayoutlist_; };
+       InsetLayouts & insetLayouts() const { return insetlayoutlist_; };
        ///
-       InsetLayout const & insetlayout(docstring const & name) const;
+       InsetLayout const & insetLayout(docstring const & name) const;
        ///
        docstring const & defaultLayoutName() const;
        ///
        LayoutPtr const & defaultLayout() const;
+       /// returns a special layout for use when we don't really want one,
+       /// e.g., in table cells
+       LayoutPtr const & emptyLayout() const 
+                       { return operator[](emptylayout_); };
+       ///
+       docstring const & emptyLayoutName() const 
+                       { return emptylayout_; }
        ///
        std::string const & name() const;
        ///
@@ -148,17 +141,12 @@ public:
 
        /// is this feature already provided by the class?
        bool provides(std::string const & p) const;
+       /// features required by the class?
+       std::set<std::string> const & requires() const { return requires_; }
 
        ///
        unsigned int columns() const;
        ///
-       enum PageSides {
-               ///
-               OneSide,
-               ///
-               TwoSides
-       };
-       ///
        PageSides sides() const;
        ///
        int secnumdepth() const;
@@ -169,7 +157,7 @@ public:
        OutputType outputType() const;
 
        ///
-       Font const & defaultfont() const;
+       FontInfo const & defaultfont() const;
 
        /// Text that dictates how wide the left margin is on the screen
        docstring const & leftmargin() const;
@@ -178,7 +166,7 @@ public:
        docstring const & rightmargin() const;
 
        /// The type of command used to produce a title
-       LYX_TITLE_LATEX_TYPES titletype() const;
+       TitleLatexType titletype() const;
        /// The name of the title command
        std::string const & titlename() const;
 
@@ -190,11 +178,13 @@ public:
        int max_toclevel() const;
        /// returns true if the class has a ToC structure
        bool hasTocLevels() const;
-private:
        ///
-       bool delete_layout(docstring const &);
+       static InsetLayout const & emptyInsetLayout() { return empty_insetlayout_; }
+private:
        ///
-       bool do_readStyle(Lexer &, Layout &);
+       bool deleteLayout(docstring const &);
+       /// \return true for success.
+       bool readStyle(Lexer &, Layout &);
        /// Layout file name
        std::string name_;
        /// document class name
@@ -216,10 +206,14 @@ private:
        std::string class_header_;
        ///
        docstring defaultlayout_;
+       /// name of empty layout
+       static const docstring emptylayout_;
        /// preamble text to support layout styles
        docstring preamble_;
        /// latex packages loaded by document class.
        std::set<std::string> provides_;
+       /// latex packages requested by document class.
+       std::set<std::string> requires_;
        ///
        unsigned int columns_;
        ///
@@ -232,10 +226,10 @@ private:
        OutputType outputType_;
        /** Base font. The paragraph and layout fonts are resolved against
            this font. This has to be fully instantiated. Attributes
-           Font::INHERIT, Font::IGNORE, and Font::TOGGLE are
+           FONT_INHERIT, FONT_IGNORE, and FONT_TOGGLE are
            extremely illegal.
        */
-       Font defaultfont_;
+       FontInfo defaultfont_;
        /// Text that dictates how wide the left margin is on the screen
        docstring leftmargin_;
 
@@ -243,7 +237,7 @@ private:
        docstring rightmargin_;
 
        /// The type of command used to produce a title
-       LYX_TITLE_LATEX_TYPES titletype_;
+       TitleLatexType titletype_;
        /// The name of the title command
        std::string titlename_;
 
@@ -269,12 +263,13 @@ private:
        int min_toclevel_;
        /// The maximal TocLevel of sectioning layouts
        int max_toclevel_;
+       ///
+       static InsetLayout empty_insetlayout_;
 };
 
 
 /// convert page sides option to text 1 or 2
-std::ostream & operator<<(std::ostream & os, TextClass::PageSides p);
-
+std::ostream & operator<<(std::ostream & os, PageSides p);
 
 } // namespace lyx