X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.h;h=2a9a00cba4a62bbdbd6e2c00a417d00bb4f352f5;hb=4db3e641ed6765e005343010cb90ee8af26f8f99;hp=a1de81a516d0c2b9cd62f550c7dfe10fa31f32ad;hpb=1e947e3a18f3676c527684affa96cd41aa61345c;p=lyx.git diff --git a/src/TextClass.h b/src/TextClass.h index a1de81a516..2a9a00cba4 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -11,8 +11,8 @@ #define TEXTCLASS_H #include "Citation.h" -#include "ColorCode.h" #include "Counters.h" +#include "DocumentClassPtr.h" #include "FloatList.h" #include "FontInfo.h" #include "Layout.h" @@ -24,8 +24,6 @@ #include "support/docstring.h" #include "support/types.h" -#include - #include #include #include @@ -190,11 +188,13 @@ public: /// std::string const & name() const { return name_; } /// + std::string const & category() const { return category_; } + /// std::string const & description() const { return description_; } /// std::string const & latexname() const { return latexname_; } /// - std::string const & prerequisites() const; + std::string const & prerequisites(std::string const & sep = "\n\t") const; /// Can be LaTeX, DocBook, etc. OutputType outputType() const { return outputType_; } /// Can be latex, docbook ... (the name of a format) @@ -232,6 +232,8 @@ protected: mutable LayoutList layoutlist_; /// Layout file name std::string name_; + /// Class category + std::string category_; /// document class name std::string latexname_; /// document class description @@ -275,6 +277,8 @@ protected: std::set provides_; /// latex packages requested by document class. std::set requires_; + /// + std::map package_options_; /// default modules wanted by document class LayoutModuleList default_modules_; /// modules provided by document class @@ -330,6 +334,8 @@ private: /// bool deleteLayout(docstring const &); /// + bool deleteInsetLayout(docstring const &); + /// bool convertLayoutFormat(support::FileName const &, ReadType); /// Reads the layout file without running layout2layout. ReturnValues readWithoutConv(support::FileName const & filename, ReadType rt); @@ -369,7 +375,7 @@ private: /// In the main LyX code, DocumentClass objects are created only by /// DocumentClassBundle, for which see below. /// -class DocumentClass : public TextClass, boost::noncopyable { +class DocumentClass : public TextClass { public: /// virtual ~DocumentClass() {} @@ -380,7 +386,7 @@ public: /// \return true if there is a Layout with latexname lay bool hasLaTeXLayout(std::string const & lay) const; /// A DocumentClass nevers count as loaded, since it is dynamic - virtual bool loaded() { return false; } + virtual bool loaded() const { return false; } /// \return the layout object of an inset given by name. If the name /// is not found as such, the part after the ':' is stripped off, and /// searched again. In this way, an error fallback can be provided: @@ -394,6 +400,8 @@ public: /// add a new layout \c name if it does not exist in layoutlist_ /// \return whether we had to add one. bool addLayoutIfNeeded(docstring const & name) const; + /// Forced layouts in layout file syntax + std::string forcedLayouts() const; /////////////////////////////////////////////////////////////////// // accessors @@ -420,6 +428,8 @@ public: docstring const & htmlpreamble() const { return htmlpreamble_; } /// docstring const & htmlstyles() const { return htmlstyles_; } + /// + Layout const & getTOCLayout() const; /// the paragraph style to use for TOCs, Bibliography, etc /// we will attempt to calculate this if it was not given Layout const & htmlTOCLayout() const; @@ -427,6 +437,9 @@ public: bool provides(std::string const & p) const; /// features required by the class? std::set const & requires() const { return requires_; } + /// package options to write to LaTeX file + std::map const & packageOptions() const + { return package_options_; } /// unsigned int columns() const { return columns_; } /// @@ -475,41 +488,19 @@ protected: private: /// The only class that can create a DocumentClass is /// DocumentClassBundle, which calls the protected constructor. - friend class DocumentClassBundle; + friend DocumentClassPtr + getDocumentClass(LayoutFile const &, LayoutModuleList const &); /// static InsetLayout plain_insetlayout_; }; -/// DocumentClassBundle is a container for DocumentClass objects, so that -/// they stay in memory for use by Insets, CutAndPaste, and the like, even -/// when their associated Buffers are destroyed. -/// FIXME Some sort of garbage collection or reference counting wouldn't -/// be a bad idea here. It might be enough to check when a Buffer is closed -/// (or makeDocumentClass is called) whether the old DocumentClass is in use -/// anywhere. -/// -/// This is a singleton class. Its sole instance is accessed via -/// DocumentClassBundle::get(). -class DocumentClassBundle : boost::noncopyable { -public: - /// \return The sole instance of this class. - static DocumentClassBundle & get(); - /// \return A new DocumentClass based on baseClass, with info added - /// from the modules in modlist. - DocumentClass & makeDocumentClass(LayoutFile const & baseClass, +/// The only way to make a DocumentClass is to call this function. +/// The shared_ptr is needed because DocumentClass objects can be kept +/// in memory long after their associated Buffer is destroyed, mostly +/// on the CutStack. +DocumentClassPtr getDocumentClass(LayoutFile const & baseClass, LayoutModuleList const & modlist); -private: - /// control instantiation - DocumentClassBundle() {} - /// clean up - ~DocumentClassBundle(); - /// \return Reference to a new DocumentClass equal to baseClass - DocumentClass & newClass(LayoutFile const & baseClass); - /// - std::vector documentClasses_; -}; - /// convert page sides option to text 1 or 2 std::ostream & operator<<(std::ostream & os, PageSides p);