X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FTextClass.h;h=64fa9aa127a7ef2b8b7773ac1ee63221e09a12b8;hb=4d3a08bf860baca24211e91a6b8569f01bc94a4f;hp=e4c2461543af7fb4af979a4ba0590b503b77aa65;hpb=7bdc34a98700f487a923ea2b3546f476b9d5d98c;p=lyx.git diff --git a/src/TextClass.h b/src/TextClass.h index e4c2461543..64fa9aa127 100644 --- a/src/TextClass.h +++ b/src/TextClass.h @@ -11,7 +11,6 @@ #define TEXTCLASS_H #include "Citation.h" -#include "ColorCode.h" #include "Counters.h" #include "DocumentClassPtr.h" #include "FloatList.h" @@ -31,6 +30,10 @@ #include #include +#ifdef ERROR +#undef ERROR +#endif + namespace lyx { namespace support { class FileName; } @@ -148,6 +151,7 @@ public: 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 + CITE_ENGINE, //>This is a cite engine VALIDATION //>We're just validating }; /// return values for read() @@ -168,7 +172,8 @@ public: ReturnValues read(Lexer & lex, ReadType rt = BASECLASS); /// validates the layout information passed in str static ReturnValues validate(std::string const & str); - /// + /// \return the conversion of \param str to the latest layout format + /// compatible with the lyx format. static std::string convert(std::string const & str); /////////////////////////////////////////////////////////////////// @@ -189,6 +194,8 @@ public: /// std::string const & name() const { return name_; } /// + std::string const & path() const { return path_; } + /// std::string const & category() const { return category_; } /// std::string const & description() const { return description_; } @@ -200,6 +207,12 @@ public: OutputType outputType() const { return outputType_; } /// Can be latex, docbook ... (the name of a format) std::string outputFormat() const { return outputFormat_; } + /// Does this class redefine the output format? + bool hasOutputFormat() const { return has_output_format_; } + /// Return the non-localised names for the toc types. + std::map const & + outlinerNames() const { return outliner_names_; } + protected: /// Protect construction TextClass(); @@ -233,6 +246,8 @@ protected: mutable LayoutList layoutlist_; /// Layout file name std::string name_; + /// Layout file path (empty for system layout files) + std::string path_; /// Class category std::string category_; /// document class name @@ -251,15 +266,27 @@ protected: mutable std::string prerequisites_; /// The possible cite engine types std::string opt_enginetype_; + /// The cite framework (bibtex, biblatex) + std::string citeframework_; /// std::string opt_fontsize_; /// + std::string opt_pagesize_; + /// std::string opt_pagestyle_; /// Specific class options std::string options_; + /// Format of the fontsize option + std::string fontsize_format_; + /// Default page size + std::string pagesize_; + /// Format of the papersize option + std::string pagesize_format_; /// std::string pagestyle_; /// + std::string tablestyle_; + /// std::string class_header_; /// docstring defaultlayout_; @@ -278,6 +305,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 @@ -296,6 +325,8 @@ protected: OutputType outputType_; /// Can be latex, docbook ... (the name of a format) std::string outputFormat_; + /// Does this class redefine the output format? + bool has_output_format_; /** 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 @@ -321,11 +352,21 @@ protected: /// Citation macros std::map > cite_macros_; /// The default BibTeX bibliography style file - std::string cite_default_biblio_style_; + std::map cite_default_biblio_style_; + /// Citation command aliases + std::map cite_command_aliases_; + /// The maximum number of citations before "et al." + size_t maxcitenames_; /// Whether full author lists are supported bool cite_full_author_list_; /// The possible citation styles std::map > cite_styles_; + /// Class-added citation styles + std::map > class_cite_styles_; + /// + std::map outliner_names_; + /// Does this class put the bibliography to toc by itself? + bool bibintoc_; private: /////////////////////////////////////////////////////////////////// // helper routines for reading layout files @@ -353,11 +394,15 @@ private: /// bool readFloat(Lexer &); /// - bool readCiteEngine(Lexer &); + std::vector const & getCiteStyles(CiteEngineType const &) const; + /// + bool readCiteEngine(Lexer &, ReadType, bool const add = false); /// int readCiteEngineType(Lexer &) const; /// - bool readCiteFormat(Lexer &); + bool readCiteFormat(Lexer &, ReadType); + /// + bool readOutlinerName(Lexer &); }; @@ -368,12 +413,8 @@ private: /// In that regard, DocumentClass objects are "dynamic". But this is really /// an illusion, since DocumentClass objects are not (currently) changed /// when, say, a new Module is loaded. Rather, the old DocumentClass is -/// discarded---actually, it's kept around in case something on the cut +/// discarded---actually, it will be kept around if something on the cut /// stack needs it---and a new one is created from scratch. -/// -/// In the main LyX code, DocumentClass objects are created only by -/// DocumentClassBundle, for which see below. -/// class DocumentClass : public TextClass { public: /// @@ -395,7 +436,7 @@ public: /// happen). -- Idea JMarc, comment MV InsetLayout const & insetLayout(docstring const & name) const; /// a plain inset layout for use as a default - static InsetLayout const & plainInsetLayout() { return plain_insetlayout_; } + static InsetLayout const & plainInsetLayout(); /// 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; @@ -412,22 +453,36 @@ public: /// std::string const & opt_enginetype() const { return opt_enginetype_; } /// + std::string const & citeFramework() const { return citeframework_; } + /// std::string const & opt_fontsize() const { return opt_fontsize_; } /// + std::string const & opt_pagesize() const { return opt_pagesize_; } + /// std::string const & opt_pagestyle() const { return opt_pagestyle_; } /// std::string const & options() const { return options_; } /// std::string const & class_header() const { return class_header_; } /// + std::string const & fontsizeformat() const { return fontsize_format_; } + /// + std::string const & pagesize() const { return pagesize_; } + /// + std::string const & pagesizeformat() const { return pagesize_format_; } + /// std::string const & pagestyle() const { return pagestyle_; } /// + std::string const & tablestyle() const { return tablestyle_; } + /// docstring const & preamble() const { return preamble_; } /// docstring const & htmlpreamble() const { return htmlpreamble_; } /// docstring const & htmlstyles() const { return htmlstyles_; } - /// + /// Looks for the layout of "highest level", other than Part (or other + /// layouts with a negative toc number), for use in constructing TOCs and + /// similar information. Layout const & getTOCLayout() const; /// the paragraph style to use for TOCs, Bibliography, etc /// we will attempt to calculate this if it was not given @@ -435,7 +490,10 @@ 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_; } + std::set const & required() const { return requires_; } + /// package options to write to LaTeX file + std::map const & packageOptions() const + { return package_options_; } /// unsigned int columns() const { return columns_; } /// @@ -463,8 +521,9 @@ public: /// returns true if the class has a ToC structure bool hasTocLevels() const; /// - std::string const & getCiteFormat(CiteEngineType const & type, - std::string const & entry, std::string const & fallback = "") const; + std::string const getCiteFormat(CiteEngineType const & type, + std::string const & entry, bool const punct = true, + std::string const & fallback = "") const; /// std::string const & getCiteMacro(CiteEngineType const & type, std::string const & macro) const; @@ -473,21 +532,28 @@ public: /// std::vector const & citeStyles(CiteEngineType const &) const; /// - std::string const & defaultBiblioStyle() const { return cite_default_biblio_style_; } + std::map const & defaultBiblioStyle() const + { return cite_default_biblio_style_; } + /// + std::map const & citeCommandAliases() const + { return cite_command_aliases_; } + /// The maximum number of citations before "et al." + size_t max_citenames() const { return maxcitenames_; } /// bool const & fullAuthorList() const { return cite_full_author_list_; } + /// + bool const & bibInToc() const { return bibintoc_; } protected: /// Constructs a DocumentClass based upon a LayoutFile. DocumentClass(LayoutFile const & tc); /// Needed in tex2lyx DocumentClass() {} private: - /// The only class that can create a DocumentClass is - /// DocumentClassBundle, which calls the protected constructor. + /// The only way to make a DocumentClass is to call this function. friend DocumentClassPtr - getDocumentClass(LayoutFile const &, LayoutModuleList const &); - /// - static InsetLayout plain_insetlayout_; + getDocumentClass(LayoutFile const &, LayoutModuleList const &, + std::string const &, + bool const clone); }; @@ -496,13 +562,18 @@ private: /// in memory long after their associated Buffer is destroyed, mostly /// on the CutStack. DocumentClassPtr getDocumentClass(LayoutFile const & baseClass, - LayoutModuleList const & modlist); + LayoutModuleList const & modlist, + std::string const & cengine = std::string(), + bool const clone = false); /// convert page sides option to text 1 or 2 std::ostream & operator<<(std::ostream & os, PageSides p); /// current format of layout files extern int const LAYOUT_FORMAT; +/// layout format for the current lyx file format (usually equal to +/// LAYOUT_FORMAT) +extern int const LYXFILE_LAYOUT_FORMAT; } // namespace lyx