X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.h;h=07b4f16893f49ce1c934c8d9953526f0bad8f080;hb=0362c6aae73c293d1c20277c12d362acfe0b2ef6;hp=c55c1822ddc3aade563a499dc3e9ff58e478981d;hpb=25c75f0e3718da81705b45bc957efc66f7c6d7ba;p=lyx.git diff --git a/src/TextClass.h b/src/TextClass.h index c55c1822dd..07b4f16893 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -7,13 +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 "Font.h" +#include "ColorCode.h" +#include "FontInfo.h" #include "LayoutEnums.h" -#include "lyxlayout_ptr_fwd.h" +#include "LayoutPtr.h" + +#include "insets/InsetLayout.h" + +#include "support/docstring.h" +#include "support/types.h" #include @@ -30,26 +35,6 @@ 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; - bool multipar; - bool verbatim; -}; - - /// List of inset layouts typedef std::map InsetLayouts; @@ -58,8 +43,6 @@ class TextClass { public: /// The individual styles comprising the document class typedef std::vector 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(), @@ -70,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 &); @@ -94,8 +78,6 @@ public: /// void readCharStyle(Lexer &, std::string const &); /// - void readInsetLayout(Lexer &, docstring const &); - /// void readFloat(Lexer &); /// void readCounter(Lexer &); @@ -117,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; /// @@ -152,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 const & requires() const { return requires_; } /// unsigned int columns() const; /// - enum PageSides { - /// - OneSide, - /// - TwoSides - }; - /// PageSides sides() const; /// int secnumdepth() const; @@ -173,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; @@ -194,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 @@ -220,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 provides_; + /// latex packages requested by document class. + std::set requires_; /// unsigned int columns_; /// @@ -236,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_; @@ -273,18 +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); - -/** Shared pointer for possibly modular layout. Needed so that paste, - * for example, will still be able to retain the pointer, even when - * the buffer itself is closed. - */ -typedef boost::shared_ptr TextClassPtr; - +std::ostream & operator<<(std::ostream & os, PageSides p); } // namespace lyx