]> git.lyx.org Git - features.git/blobdiff - src/insets/InsetLayout.h
InsetIndex: revamp IndexEntry to handle both legacy and modern index insets; simplify...
[features.git] / src / insets / InsetLayout.h
index 1870f52d12f783fc6563f0b3db26d63a01f82710..ed3c9a96ba830b1959fedc559a5fecb388795a4e 100644 (file)
@@ -5,7 +5,7 @@
  * Licence details can be found in the file COPYING.
  *
  * \author Martin Vermeer
- * \author Richard Heck
+ * \author Richard Kimberly Heck
  *
  * Full author contact details are available in file CREDITS.
  */
@@ -15,6 +15,7 @@
 
 #include "ColorCode.h"
 #include "FontInfo.h"
+#include "Layout.h"
 
 #include "support/docstring.h"
 
@@ -26,36 +27,38 @@ namespace lyx {
 class Lexer;
 class TextClass;
 
+
+enum class InsetDecoration : int {
+       CLASSIC,
+       MINIMALISTIC,
+       CONGLOMERATE,
+       DEFAULT
+};
+
+enum class InsetLyXType : int {
+       NOLYXTYPE,
+       CHARSTYLE,
+       CUSTOM,
+       END,
+       STANDARD
+};
+
+enum class InsetLaTeXType : int {
+       NOLATEXTYPE,
+       COMMAND,
+       ENVIRONMENT,
+       ILT_ERROR
+};
+
+
 ///
 class InsetLayout {
 public:
        ///
-       InsetLayout();
-       ///
-       enum InsetDecoration {
-               CLASSIC,
-               MINIMALISTIC,
-               CONGLOMERATE,
-               DEFAULT
-       };
-       ///
-       enum InsetLyXType {
-               NOLYXTYPE,
-               CHARSTYLE,
-               CUSTOM,
-               ELEMENT,
-               END,
-               STANDARD
-       };
-       ///
-       enum InsetLaTeXType {
-               NOLATEXTYPE,
-               COMMAND,
-               ENVIRONMENT,
-               ILT_ERROR
-       };
-       ///
-       bool read(Lexer & lexrc, TextClass const & tclass);
+       InsetLayout() { labelfont_.setColor(Color_error); }
+       ///
+       bool read(Lexer & lexrc, TextClass const & tclass,
+                       bool validating = false);
        ///
        docstring name() const { return name_; }
        ///
@@ -65,6 +68,8 @@ public:
        ///
        docstring labelstring() const { return labelstring_; }
        ///
+       docstring menustring() const { return menustring_; }
+       ///
        bool contentaslabel() const { return contentaslabel_; }
        ///
        InsetDecoration decoration() const { return decoration_; }
@@ -75,38 +80,121 @@ public:
        ///
        std::string latexparam() const { return latexparam_; }
        ///
+       docstring leftdelim() const { return leftdelim_; }
+       ///
+       docstring rightdelim() const { return rightdelim_; }
+       ///
        FontInfo font() const { return font_; }
        ///
        FontInfo labelfont() const { return labelfont_; }
        ///
        ColorCode bgcolor() const { return bgcolor_; }
        ///
+       Layout::LaTeXArgMap const & latexargs() const { return latexargs_; }
+       ///
+       Layout::LaTeXArgMap const & postcommandargs() const { return postcommandargs_; }
+       /// Returns latexargs() + postcommandargs().
+       /// 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.
+       Layout::LaTeXArgMap args() const;
+       ///
+       int optArgs() const;
+       ///
+       int requiredArgs() const;
+       ///
        docstring preamble() const { return preamble_; }
+       /// Get language dependent macro definitions needed for this inset
+       docstring const langpreamble() const { return langpreamble_; }
+       /// Get language and babel dependent macro definitions needed for
+       /// this inset
+       docstring const babelpreamble() const { return babelpreamble_; }
+       ///
+       bool fixedwidthpreambleencoding() const { return fixedwidthpreambleencoding_; }
        ///
        docstring counter() const { return counter_; }
        ///
+       docstring refprefix() const { return refprefix_; }
+       /// The tag enclosing all the material in this inset. Default is "span".
        std::string const & htmltag() const;
-       /// 
+       /// Additional attributes for inclusion with the start tag. Default (if
+       /// a tag is provided) is: class="name".
        std::string const & htmlattr() const;
-       /// 
+       /// Tag for individual paragraphs in the inset. Default is none.
        std::string const & htmlinnertag() const { return htmlinnertag_; }
-       /// 
+       /// Attributes for that tag. Default (if a tag is provided) is:
+       /// class="name_inner".
        std::string const & htmlinnerattr() const;
-       ///
+       /// A label for this environment, possibly including a reference
+       /// to a counter. E.g., for footnote, it might be:
+       ///    \arabic{footnote}
+       /// No default.
+       /// FIXME Could we get this from the layout?
        std::string const & htmllabel() const { return htmllabel_; }
        ///
        inline std::string htmllabeltag() const { return "span"; }
        ///
-       std::string htmllabelattr() const 
+       std::string htmllabelattr() const
                { return "class=\"" + defaultCSSClass() + "_label\""; }
-       /// 
+       /// CSS associated with this inset.
        docstring htmlstyle() const;
-       /// 
+       /// Additional material for the header.
        docstring htmlpreamble() const { return htmlpreamble_; }
-       ///
+       /// Whether this inset represents a "block" of material, i.e., a set
+       /// of paragraphs of its own (true), or should be run into the previous
+       /// paragraph (false). Examples:
+       ///   For branches, this is false.
+       ///   For footnotes, this is true.
+       /// Defaults to true.
        bool htmlisblock() const { return htmlisblock_; }
        ///
-       std::set<std::string> requires() const { return requires_; }
+       std::string docbooktag() const { return docbooktag_; }
+       ///
+       std::string docbooktagtype() const;
+       ///
+       std::string docbookattr() const { return docbookattr_; }
+       ///
+       std::string docbookinnertag() const { return docbookinnertag_; }
+       ///
+       std::string docbookinnertagtype() const;
+       ///
+       std::string docbookinnerattr() const { return docbookinnerattr_; }
+       ///
+       std::string const & docbookininfo() const;
+       ///
+       bool docbooksection() const { return docbooksection_; }
+       ///
+       bool docbooknotinpara() const { return docbooknotinpara_; }
+       ///
+       bool docbookargumentbeforemaintag() const { return docbookargumentbeforemaintag_; }
+       ///
+       bool docbookargumentaftermaintag() const { return docbookargumentaftermaintag_; }
+       ///
+       std::string docbookwrappertag() const { return docbookwrappertag_; }
+       ///
+       std::string docbookwrappertagtype() const;
+       ///
+       std::string docbookwrapperattr() const { return docbookwrapperattr_; }
+       ///
+       std::string docbookitemwrappertag() const { return docbookitemwrappertag_; }
+       ///
+       std::string docbookitemwrappertagtype() const;
+       ///
+       std::string docbookitemwrapperattr() const { return docbookitemwrapperattr_; }
+       ///
+       std::string docbookitemtag() const { return docbookitemtag_; }
+       ///
+       std::string docbookitemtagtype() const;
+       ///
+       std::string docbookitemattr() const { return docbookitemattr_; }
+       ///
+       bool docbooknofontinside() const { return docbooknofontinside_; }
+       ///
+       bool docbookrenderasimage() const { return docbookrenderasimage_; }
+       ///
+       std::set<std::string> required() const { return required_; }
        ///
        bool isMultiPar() const { return multipar_; }
        ///
@@ -116,111 +204,230 @@ public:
        ///
        bool isPassThru() const { return passthru_; }
        ///
+       docstring passThruChars() const { return passthru_chars_; }
+       ///
+       std::string newlineCmd() const { return newline_cmd_; }
+       ///
+       bool parbreakIsNewline() const { return parbreakisnewline_; }
+       ///
+       bool parbreakIgnored() const { return parbreakignored_; }
+       ///
        bool isNeedProtect() const { return needprotect_; }
        ///
+       bool needsCProtect() const { return needcprotect_; }
+       /// Protection of some elements such as \ref and \cite
+       /// in \mbox (needed by commands building on soul or ulem)
+       bool isNeedMBoxProtect() const { return needmboxprotect_; }
+       ///
        bool isFreeSpacing() const { return freespacing_; }
        ///
        bool isKeepEmpty() const { return keepempty_; }
        ///
        bool forceLTR() const { return forceltr_; }
        ///
+       bool forceOwnlines() const { return forceownlines_; }
+       ///
        bool isInToc() const { return intoc_; }
        ///
+       bool spellcheck() const { return spellcheck_; }
+       ///
+       bool resetsFont() const { return resetsfont_; }
+       ///
+       bool isDisplay() const { return display_; }
+       ///
+       bool forceLocalFontSwitch() const { return forcelocalfontswitch_; }
+       ///
+       docstring const & obsoleted_by() const { return obsoleted_by_; }
+       ///
+       bool addToToc() const { return add_to_toc_; }
+       ///
+       std::string tocType() const { return toc_type_; }
+       ///
+       bool isTocCaption() const { return is_toc_caption_; }
+       ///
+       bool editExternally () const { return edit_external_; }
 private:
        ///
        void makeDefaultCSS() const;
        ///
        std::string defaultCSSClass() const;
        ///
-       std::string defaultCSSLabelClass() const { return defaultCSSClass() + "_label"; }
+       void readArgument(Lexer &);
        ///
-       docstring name_;
+       docstring name_ = from_ascii("undefined");
        /**
                * This is only used (at present) to decide where to put them on the menus.
                * Values are 'charstyle', 'custom' (things that by default look like a
-               * footnote), 'element' (docbook), 'standard'.
+               * footnote), 'standard'.
                */
-       InsetLyXType lyxtype_;
+       InsetLyXType lyxtype_ = InsetLyXType::STANDARD;
+       ///
+       docstring labelstring_ = from_ascii("UNDEFINED");
        ///
-       docstring labelstring_;
+       docstring menustring_;
        ///
-       bool contentaslabel_;
+       bool contentaslabel_ = false;
        ///
-       InsetDecoration decoration_;
+       InsetDecoration decoration_ = InsetDecoration::DEFAULT;
        ///
-       InsetLaTeXType latextype_;
+       InsetLaTeXType latextype_ = InsetLaTeXType::NOLATEXTYPE;
        ///
        std::string latexname_;
        ///
        std::string latexparam_;
        ///
-       FontInfo font_;
+       docstring leftdelim_;
+       ///
+       docstring rightdelim_;
+       ///
+       FontInfo font_ = inherit_font;
        ///
-       FontInfo labelfont_;
+       FontInfo labelfont_ = sane_font;
        ///
-       ColorCode bgcolor_;
+       ColorCode bgcolor_ = Color_error;
        ///
        docstring counter_;
        ///
        docstring preamble_;
-       /// The tag enclosing all the material in this inset. Default is "span".
+       /// Language dependent macro definitions needed for this inset
+       docstring langpreamble_;
+       /// Language and babel dependent macro definitions needed for this inset
+       docstring babelpreamble_;
+       ///
+       bool fixedwidthpreambleencoding_ = false;
+       ///
+       docstring refprefix_;
+       ///
        mutable std::string htmltag_;
-       /// Additional attributes for inclusion with the start tag. Default (if
-       /// a tag is provided) is: class="name".
+       ///
        mutable std::string htmlattr_;
-       /// Tag for individual paragraphs in the inset. Default is none.
+       ///
        std::string htmlinnertag_;
-       /// Attributes for that tag. Default (if a tag is provided) is: 
-       /// class="name_inner".
+       ///
        mutable std::string htmlinnerattr_;
-       /// A label for this environment, possibly including a reference
-       /// to a counter. E.g., for footnote, it might be:
-       ///    \arabic{footnote}
-       /// No default.
-       /// FIXME Could we get this from the layout?
+       ///
        std::string htmllabel_;
-       /// CSS associated with this inset.
+       ///
        docstring htmlstyle_;
        /// Cache for default CSS info for this inset.
        mutable docstring htmldefaultstyle_;
-       /// 
+       /// Cache for default CSS class.
        mutable std::string defaultcssclass_;
        /// Whether to force generation of default CSS even if some is given.
        /// False by default.
-       bool htmlforcecss_;
-       /// Additional material for the header.
+       bool htmlforcecss_ = false;
+       ///
        docstring htmlpreamble_;
-       /// Whether this inset represents a "block" of material, i.e., a set
-       /// of paragraphs of its own (true), or should be run into the previous
-       /// paragraph (false). Examples:
-       ///   For branches, this is false.
-       ///   For footnotes, this is true.
-       /// Defaults to true.
-       bool htmlisblock_;
        ///
-       std::set<std::string> requires_;
+       bool htmlisblock_ = true;
+       ///
+       std::string docbooktag_;
+       ///
+       mutable std::string docbooktagtype_;
+       ///
+       std::string docbookattr_;
+       ///
+       std::string docbookinnertag_;
        ///
-       bool multipar_;
-       /// 
-       bool custompars_;
+       mutable std::string docbookinnertagtype_;
        ///
-       bool forceplain_;
+       std::string docbookinnerattr_;
        ///
-       bool passthru_;
+       mutable std::string docbookininfo_;
        ///
-       bool needprotect_;
+       bool docbooknotinpara_ = false;
        ///
-       bool freespacing_;
+       bool docbookargumentbeforemaintag_ = false;
+    ///
+    bool docbookargumentaftermaintag_ = false;
        ///
-       bool keepempty_;
+       bool docbooksection_ = false;
        ///
-       bool forceltr_;
+       std::string docbookwrappertag_;
+       ///
+       mutable std::string docbookwrappertagtype_;
+       ///
+       std::string docbookwrapperattr_;
+       ///
+       std::string docbookitemtag_;
+       ///
+       mutable std::string docbookitemtagtype_;
+       ///
+       std::string docbookitemattr_;
+       ///
+       std::string docbookitemwrappertag_;
+       ///
+       mutable std::string docbookitemwrappertagtype_;
+       ///
+       std::string docbookitemwrapperattr_;
+       ///
+       bool docbooknofontinside_ = false;
+       ///
+       bool docbookrenderasimage_ = false;
+       ///
+       std::set<std::string> required_;
+       ///
+       bool multipar_ = true;
+       ///
+       bool custompars_ = true;
+       ///
+       bool forceplain_ = false;
+       ///
+       bool passthru_ = false;
+       ///
+       docstring passthru_chars_;
+       ///
+       std::string newline_cmd_;
+       ///
+       bool parbreakisnewline_ = false;
+       ///
+       bool parbreakignored_ = false;
+       ///
+       bool freespacing_ = false;
+       ///
+       bool keepempty_ = false;
+       ///
+       bool forceltr_ = false;
+       ///
+       bool forceownlines_ = false;
+       ///
+       bool needprotect_ = false;
+       ///
+       bool needcprotect_ = false;
+       ///
+       bool needmboxprotect_ = false;
        /// should the contents be written to TOC strings?
-       bool intoc_;
+       bool intoc_ = false;
+       /// check spelling of this inset?
+       bool spellcheck_ = true;
+       ///
+       bool resetsfont_ = false;
+       ///
+       bool display_ = true;
+       ///
+       bool forcelocalfontswitch_ = false;
+       /** Name of an insetlayout that has replaced this insetlayout.
+           This is used to rename an insetlayout, while keeping backward
+           compatibility
+       */
+       docstring obsoleted_by_;
+       ///
+       Layout::LaTeXArgMap latexargs_;
+       ///
+       Layout::LaTeXArgMap postcommandargs_;
+       ///
+       bool add_to_toc_ = false;
+       ///
+       std::string toc_type_;
+       ///
+       bool is_toc_caption_ = false;
+       ///
+       bool edit_external_ = false;
 };
 
 ///
-InsetLayout::InsetLyXType translateLyXType(std::string const & str);
+InsetLyXType translateLyXType(std::string const & str);
+InsetDecoration translateDecoration(std::string const & str);
 
 } // namespace lyx