]> git.lyx.org Git - lyx.git/blobdiff - src/lyxtextclass.h
* src/LyXAction.C: mark goto-clear-bookmark as working without buffer
[lyx.git] / src / lyxtextclass.h
index 2b0a3a538a5d0ad308e7dbb0641431daa217b497..c2e36f3ea4a08bf6c0ca6fbf5d985a82e5468c77 100644 (file)
@@ -4,26 +4,46 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
- * Full author contact details are available in file CREDITS
+ * Full author contact details are available in file CREDITS.
  */
 
 #ifndef LYXTEXTCLASS_H
 #define LYXTEXTCLASS_H
 
 #include "lyxlayout.h"
-#include "LString.h"
 #include "lyxlayout_ptr_fwd.h"
 
-#include "support/types.h"
-
 #include <boost/shared_ptr.hpp>
 
 #include <vector>
 
+
+namespace lyx {
+
+namespace support { class FileName; }
+
 class LyXLex;
 class Counters;
 class FloatList;
 
+
+///
+class CharStyle {
+public:
+       std::string name;
+       std::string latextype;
+       std::string latexname;
+       std::string latexparam;
+       LyXFont font;
+       LyXFont labelfont;
+       docstring preamble;
+};
+
+
+/// List of semantically defined character style insets
+typedef std::vector<CharStyle> CharStyles;
+
+
 /// Stores the layout specification of a LyX document class.
 class LyXTextClass {
 public:
@@ -33,9 +53,13 @@ public:
        typedef LayoutList::const_iterator const_iterator;
        /// Construct a layout with default values. Actual values loaded later.
        explicit
-       LyXTextClass(string const & = string(),
-                    string const & = string(),
-                    string const & = string());
+       LyXTextClass(std::string const & = std::string(),
+                    std::string const & = std::string(),
+                    std::string const & = std::string(),
+                    bool = false);
+
+       /// check whether the TeX class is available
+       bool isTeXClassAvailable() const;
 
        /// paragraph styles begin iterator.
        const_iterator begin() const { return layoutlist_.begin(); }
@@ -43,7 +67,7 @@ public:
        const_iterator end() const { return layoutlist_.end(); }
 
        /// Performs the read of the layout file.
-       bool Read(string const & filename, bool merge = false);
+       bool read(support::FileName const & filename, bool merge = false);
        ///
        void readOutputType(LyXLex &);
        ///
@@ -53,17 +77,21 @@ public:
        ///
        void readClassOptions(LyXLex &);
        ///
+       void readCharStyle(LyXLex &, std::string const &);
+       ///
        void readFloat(LyXLex &);
        ///
        void readCounter(LyXLex &);
        ///
-       bool hasLayout(string const & name) const;
+       bool hasLayout(std::string const & name) const;
 
        ///
-       LyXLayout_ptr const & operator[](string const & vname) const;
+       LyXLayout_ptr const & operator[](std::string const & vname) const;
 
        /// Sees to that the textclass structure has been loaded
-       bool load() const;
+       bool load(std::string const & path = std::string()) const;
+       /// Has this layout file been loaded yet?
+       bool loaded() const { return loaded_; }
 
        /// the list of floats defined in the document class
        FloatList & floats();
@@ -71,26 +99,32 @@ public:
        FloatList const & floats() const;
        /// The Counters present in this document class.
        Counters & counters() const;
+       /// CharStyles of this doc class
+       CharStyles & charstyles() const { return charstylelist_; };
+       /// Retrieve element of name s:
+       CharStyles::iterator charstyle(std::string const & s) const;
        ///
-       string const & defaultLayoutName() const;
+       std::string const & defaultLayoutName() const;
        ///
        LyXLayout_ptr const & defaultLayout() const;
        ///
-       string const & name() const;
+       std::string const & name() const;
        ///
-       string const & latexname() const;
+       std::string const & latexname() const;
        ///
-       string const & description() const;
+       std::string const & description() const;
        ///
-       string const & opt_fontsize() const;
+       std::string const & opt_fontsize() const;
        ///
-       string const & opt_pagestyle() const;
+       std::string const & opt_pagestyle() const;
        ///
-       string const & options() const;
+       std::string const & options() const;
        ///
-       string const & pagestyle() const;
+       std::string const & class_header() const;
        ///
-       string const & preamble() const;
+       std::string const & pagestyle() const;
+       ///
+       docstring const & preamble() const;
 
        /// Packages that are already loaded by the class
        enum Provides {
@@ -124,50 +158,56 @@ public:
        ///
        int tocdepth() const;
 
-       /// Can be LaTeX, LinuxDoc, etc.
+       /// Can be LaTeX, DocBook, etc.
        OutputType outputType() const;
 
        ///
        LyXFont const & defaultfont() const;
 
        /// Text that dictates how wide the left margin is on the screen
-       string const & leftmargin() const;
+       std::string const & leftmargin() const;
 
        /// Text that dictates how wide the right margin is on the screen
-       string const & rightmargin() const;
-       ///
-       int maxcounter() const;
+       std::string const & rightmargin() const;
 
        /// The type of command used to produce a title
        LYX_TITLE_LATEX_TYPES titletype() const;
        /// The name of the title command
-       string const & titlename() const;
+       std::string const & titlename() const;
 
        ///
        int size() const;
+       /// The minimal TocLevel of sectioning layouts
+       int min_toclevel() const;
+       /// The maximal TocLevel of sectioning layouts
+       int max_toclevel() const;
+       /// returns true if the class has a ToC structure
+       bool hasTocLevels() const;
 private:
        ///
-       bool delete_layout(string const &);
+       bool delete_layout(std::string const &);
        ///
        bool do_readStyle(LyXLex &, LyXLayout &);
        /// Layout file name
-       string name_;
+       std::string name_;
        /// document class name
-       string latexname_;
+       std::string latexname_;
        /// document class description
-       string description_;
+       std::string description_;
        /// Specific class options
-       string opt_fontsize_;
+       std::string opt_fontsize_;
        ///
-       string opt_pagestyle_;
+       std::string opt_pagestyle_;
        ///
-       string options_;
+       std::string options_;
        ///
-       string pagestyle_;
+       std::string pagestyle_;
        ///
-       string defaultlayout_;
+       std::string class_header_;
+       ///
+       std::string defaultlayout_;
        /// preamble text to support layout styles
-       string preamble_;
+       docstring preamble_;
        /// latex packages loaded by document class.
        Provides provides_;
        ///
@@ -178,7 +218,7 @@ private:
        int secnumdepth_;
        /// header depth to appear in table of contents
        int tocdepth_;
-       /// Can be LaTeX, LinuxDoc, etc.
+       /// Can be LaTeX, DocBook, etc.
        OutputType outputType_;
        /** Base font. The paragraph and layout fonts are resolved against
            this font. This has to be fully instantiated. Attributes
@@ -187,20 +227,20 @@ private:
        */
        LyXFont defaultfont_;
        /// Text that dictates how wide the left margin is on the screen
-       string leftmargin_;
+       std::string leftmargin_;
 
        /// Text that dictates how wide the right margin is on the screen
-       string rightmargin_;
-       /// highest header level used in this layout.
-       int maxcounter_; // add approp. signedness
+       std::string rightmargin_;
 
        /// The type of command used to produce a title
        LYX_TITLE_LATEX_TYPES titletype_;
        /// The name of the title command
-       string titlename_;
+       std::string titlename_;
 
        /// Paragraph styles used in this layout
        LayoutList layoutlist_;
+       /// CharStyles available to this layout
+       mutable CharStyles charstylelist_;
 
        /// available types of float, eg. figure, algorithm.
        boost::shared_ptr<FloatList> floatlist_;
@@ -209,7 +249,15 @@ private:
        boost::shared_ptr<Counters> ctrs_;
 
        /// Has this layout file been loaded yet?
-       mutable bool loaded;
+       mutable bool loaded_;
+
+       /// Is the TeX class available?
+       bool texClassAvail_;
+
+       /// The minimal TocLevel of sectioning layouts
+       int min_toclevel_;
+       /// The maximal TocLevel of sectioning layouts
+       int max_toclevel_;
 };
 
 
@@ -224,4 +272,7 @@ void operator|=(LyXTextClass::Provides & p1, LyXTextClass::Provides p2)
 /// convert page sides option to text 1 or 2
 std::ostream & operator<<(std::ostream & os, LyXTextClass::PageSides p);
 
+
+} // namespace lyx
+
 #endif