X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.h;h=0f5ebbf86b43a20cd6eb8d8be73c8462406c4987;hb=5b336954d7eb234f424164a8e4d039db74002afa;hp=19436815c1954a032dd08f52b96666e4d823d437;hpb=4c004e0485032c03598600f1102a9357350aed24;p=lyx.git diff --git a/src/Layout.h b/src/Layout.h index 19436815c1..0f5ebbf86b 100644 --- a/src/Layout.h +++ b/src/Layout.h @@ -17,14 +17,15 @@ #include "FontInfo.h" #include "LayoutEnums.h" #include "Spacing.h" +#include "support/debug.h" #include "support/docstring.h" +#include #include #include namespace lyx { -class Language; class Lexer; class TextClass; @@ -73,7 +74,11 @@ public: /// void readSpacing(Lexer &); /// - docstring const & name() const { return name_; }; + 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; } /// @@ -83,7 +88,42 @@ 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; + }; + /// + typedef std::map LaTeXArgMap; + /// + LaTeXArgMap const & latexargs() const { return latexargs_; } + /// + LaTeXArgMap const & postcommandargs() const { return postcommandargs_; } + /// + LaTeXArgMap const & itemargs() const { return itemargs_; } + /// 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_; } @@ -95,15 +135,19 @@ public: docstring const & preamble() const { return preamble_; } /// Get language dependent macro definitions needed for this layout /// for language \p lang - docstring const langpreamble(Language const * lang) const; + docstring const langpreamble() const { return langpreamble_; } /// Get language and babel dependent macro definitions needed for /// this layout for language \p lang - docstring const babelpreamble(Language const * lang) const; + docstring const babelpreamble() const { return babelpreamble_; } /// std::set const & requires() const { return requires_; } /// 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_; } @@ -122,12 +166,16 @@ public: /// std::string const & htmllabelattr() const; /// + std::string defaultCSSClass() const; + /// bool htmllabelfirst() const { return htmllabelfirst_; } /// docstring htmlstyle() const; /// docstring const & htmlpreamble() const { return htmlpreamble_; } /// + bool htmltitle() const { return htmltitle_; } + /// bool isParagraph() const { return latextype == LATEX_PARAGRAPH; } /// bool isCommand() const { return latextype == LATEX_COMMAND; } @@ -138,6 +186,24 @@ 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 latextype == LATEX_ENVIRONMENT + || latextype == LATEX_BIB_ENVIRONMENT; + } + /// + 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 operator==(Layout const &) const; @@ -210,17 +276,17 @@ public: /// MarginType margintype; /// - bool fill_top; - /// - bool fill_bottom; - /// bool newline_allowed; /// bool nextnoindent; /// + ToggleIndentation toggle_indent; + /// bool free_spacing; /// bool pass_thru; + /// + bool parbreak_is_newline; /// show this in toc int toclevel; /// special value of toclevel for non-section layouts @@ -235,10 +301,12 @@ public: LatexType latextype; /// Does this object belong in the title part of the document? bool intitle; - /// Does this layout allow for an optional parameter? - int optionalargs; + /// Is the content to go in the preamble rather than the body? + bool inpreamble; /// Which counter to step docstring counter; + /// Prefix to use when creating labels + docstring refprefix; /// Depth of XML command int commanddepth; @@ -247,13 +315,28 @@ public: /// until it has proper support for the caption inset (JMarc) static Layout * forCaption(); + /// 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; /// - std::string defaultCSSClass() const; - /// std::string defaultCSSItemClass() const { return defaultCSSClass() + "_item"; } /// std::string defaultCSSLabelClass() const { return defaultCSSClass() + "_label"; } @@ -289,6 +372,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) @@ -345,6 +434,8 @@ private: mutable docstring htmldefaultstyle_; /// Any other info for the HTML header. docstring htmlpreamble_; + /// Whether this is the paragraph. + bool htmltitle_; /// calculating this is expensive, so we cache it. mutable std::string defaultcssclass_; /// This is the `category' for this layout. The following are @@ -359,6 +450,12 @@ private: docstring babelpreamble_; /// Packages needed for this layout std::set<std::string> requires_; + /// + LaTeXArgMap latexargs_; + /// + LaTeXArgMap postcommandargs_; + /// + LaTeXArgMap itemargs_; }; } // namespace lyx