X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.h;h=ba4d26fb37c76a475a280f1bf2a91c5bde7615a0;hb=28be7d552f62cc02fa86d7f79201d089bfb2d7b5;hp=08c049d8d6ac054140e2005cf49a867091a59696;hpb=a2e8cb758b70269da40d13d7b272d256a29a022a;p=lyx.git diff --git a/src/Layout.h b/src/Layout.h index 08c049d8d6..ba4d26fb37 100644 --- a/src/Layout.h +++ b/src/Layout.h @@ -17,8 +17,10 @@ #include "FontInfo.h" #include "LayoutEnums.h" #include "Spacing.h" +#include "support/debug.h" #include "support/docstring.h" +#include #include #include @@ -72,6 +74,10 @@ public: /// void readSpacing(Lexer &); /// + void readArgument(Lexer &); + /// Write a layout definition in utf8 encoding + void write(std::ostream &) const; + /// docstring const & name() const { return name_; } /// void setName(docstring const & n) { name_ = n; } @@ -82,7 +88,49 @@ public: /// std::string const & latexname() const { return latexname_; } /// - void setLatexName(std::string const & n) { latexname_ = n; } + std::string const & itemcommand() const { return itemcommand_; } + /// The arguments of this layout + struct latexarg { + docstring labelstring; + docstring menustring; + bool mandatory; + docstring ldelim; + docstring rdelim; + docstring defaultarg; + docstring presetarg; + docstring tooltip; + std::string requires; + std::string decoration; + FontInfo font; + FontInfo labelfont; + bool autoinsert; + bool insertcotext; + ArgPassThru passthru; + docstring pass_thru_chars; + bool is_toc_caption; + }; + /// + typedef std::map LaTeXArgMap; + /// + LaTeXArgMap const & latexargs() const { return latexargs_; } + /// + LaTeXArgMap const & postcommandargs() const { return postcommandargs_; } + /// + LaTeXArgMap const & itemargs() const { return itemargs_; } + /// Returns true is the layout has arguments. If false, then an + /// InsetArgument in this layout stands for the parent InsetText. + bool hasArgs() const; + /// Returns latexargs() + postcommandargs() + itemargs(). + /// But note that it returns a *copy*, not a reference, so do not do + /// anything like: + /// Layout::LaTeXArgMap::iterator it = args().begin(); + /// Layout::LaTeXArgMap::iterator en = args().end(); + /// Those are iterators for different containers. + LaTeXArgMap args() const; + /// + int optArgs() const; + /// + int requiredArgs() const; /// docstring const & labelstring(bool in_appendix) const { return in_appendix ? labelstring_appendix_ : labelstring_; } @@ -103,6 +151,10 @@ public: /// std::string const & latexparam() const { return latexparam_; } /// + docstring leftdelim() const { return leftdelim_; } + /// + docstring rightdelim() const { return rightdelim_; } + /// std::string const & innertag() const { return innertag_; } /// std::string const & labeltag() const { return labeltag_; } @@ -141,6 +193,27 @@ public: || latextype == LATEX_ITEM_ENVIRONMENT || latextype == LATEX_LIST_ENVIRONMENT; } + /// Is this the kind of layout in which adjacent paragraphs + /// are handled as one group? + bool isParagraphGroup() const { return par_group_; } + /// + bool labelIsInline() const { + return labeltype == LABEL_STATIC + || labeltype == LABEL_SENSITIVE + || labeltype == LABEL_ENUMERATE + || labeltype == LABEL_ITEMIZE; + } + bool labelIsAbove() const { + return labeltype == LABEL_ABOVE + || labeltype == LABEL_CENTERED + || labeltype == LABEL_BIBLIO; + } + /// + bool addToToc() const { return add_to_toc_; } + /// + std::string tocType() const { return toc_type_; } + /// + bool isTocCaption() const { return is_toc_caption_; } /// bool operator==(Layout const &) const; @@ -217,9 +290,13 @@ public: /// bool nextnoindent; /// + ToggleIndentation toggle_indent; + /// bool free_spacing; /// bool pass_thru; + /// Individual chars to be passed verbatim + docstring pass_thru_chars; /// bool parbreak_is_newline; /// show this in toc @@ -238,17 +315,12 @@ public: bool intitle; /// Is the content to go in the preamble rather than the body? bool inpreamble; - /// Number of requried arguments for this command or environment - unsigned int reqargs; - /// Number of optional arguments for this command or environment - /// These MUST come at the beginning, so: - /// \cmd[opt1][opt2]{req1}{here is the text from LyX} - /// is fine. But: - /// \cmd[opt1]{req1}[opt2]{here is the text from LyX} - /// is not. - unsigned int optargs; /// Which counter to step docstring counter; + /// Resume counter? + bool resumecounter; + /// Step master counter? + bool stepmastercounter; /// Prefix to use when creating labels docstring refprefix; /// Depth of XML command @@ -261,9 +333,23 @@ public: /// Is this spellchecked? bool spellcheck; + /** + * Should this layout definition always be written to the document preamble? + * Possible values are: + * 0: Do not enforce local layout + * >=1: Enforce local layout with version forcelocal + * -1: Enforce local layout with infinite version + * On reading, the forced local layout is only used if its version + * number is greater than the version number of the same layout in the + * document class. Otherwise, it is ignored. + */ + int forcelocal; private: + /// Reads a layout definition from file + /// \return true on success. + bool readIgnoreForcelocal(Lexer &, TextClass const &); /// generates the default CSS for this layout void makeDefaultCSS() const; /// @@ -302,6 +388,12 @@ private: docstring labelstring_appendix_; /// LaTeX parameter for environment std::string latexparam_; + /// Item command in lists + std::string itemcommand_; + /// Left delimiter of the content + docstring leftdelim_; + /// Right delimiter of the content + docstring rightdelim_; /// Internal tag to use (e.g., for sect header) std::string innertag_; /// Internal tag to use (e.g. to surround varentrylist label) @@ -364,7 +456,7 @@ private: mutable std::string defaultcssclass_; /// This is the `category' for this layout. The following are /// recommended basic categories: FrontMatter, BackMatter, MainText, - /// Section, Starred, List, Theorem. + /// Sectioning, Starred, List, Reasoning. docstring category_; /// Macro definitions needed for this layout docstring preamble_; @@ -372,10 +464,25 @@ private: docstring langpreamble_; /// Language and babel dependent macro definitions needed for this layout docstring babelpreamble_; + /// Are adjacent paragraphs handled as one group? + bool par_group_; /// Packages needed for this layout std::set requires_; + /// + LaTeXArgMap latexargs_; + /// + LaTeXArgMap postcommandargs_; + /// + LaTeXArgMap itemargs_; + /// + bool add_to_toc_; + /// + std::string toc_type_; + /// + bool is_toc_caption_; }; + } // namespace lyx #endif