]> git.lyx.org Git - lyx.git/blobdiff - src/insets/InsetLayout.h
Fix bug #10904.
[lyx.git] / src / insets / InsetLayout.h
index c5f64c6a9eb807b1b1af1326965d6ecf497fbf48..c4a12a4018a9e17eaee309c0b4676ba08ed7afe1 100644 (file)
@@ -4,6 +4,9 @@
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
+ * \author Martin Vermeer
+ * \author Richard Heck
+ *
  * Full author contact details are available in file CREDITS.
  */
 
@@ -12,6 +15,7 @@
 
 #include "ColorCode.h"
 #include "FontInfo.h"
+#include "Layout.h"
 
 #include "support/docstring.h"
 
 
 namespace lyx {
 
+class Lexer;
+class TextClass;
+
 ///
 class InsetLayout {
 public:
-       InsetLayout() : 
-               name("undefined"),
-               labelstring(from_utf8("UNDEFINED")),
-               font(sane_font), labelfont(sane_font),
-               bgcolor(Color_error)
-               { labelfont.setColor(Color_error); };
-       std::string name;
-       std::string lyxtype;
-       docstring labelstring;
-       std::string decoration;
-       std::string latextype;
-       std::string latexname;
-       std::string latexparam;
-       FontInfo font;
-       FontInfo labelfont;
-       ColorCode bgcolor;
-       std::string preamble;
-       std::set<std::string> requires;
-       bool multipar;
-       bool passthru;
-       bool needprotect;
-       bool freespacing;
-       bool keepempty;
-       bool forceltr;
+       ///
+       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);
+       ///
+       docstring name() const { return name_; }
+       ///
+       void setName(docstring const & n) { name_ = n; }
+       ///
+       InsetLyXType lyxtype() const { return lyxtype_; }
+       ///
+       docstring labelstring() const { return labelstring_; }
+       ///
+       bool contentaslabel() const { return contentaslabel_; }
+       ///
+       InsetDecoration decoration() const { return decoration_; }
+       ///
+       InsetLaTeXType latextype() const { return latextype_; }
+       ///
+       std::string latexname() const { return latexname_; }
+       ///
+       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;
+       ///
+       unsigned int optArgs() const;
+       ///
+       unsigned 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
+               { 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_; }
+       ///
+       bool isMultiPar() const { return multipar_; }
+       ///
+       bool forcePlainLayout() const { return forceplain_; }
+       ///
+       bool allowParagraphCustomization() const { return custompars_; }
+       ///
+       bool isPassThru() const { return passthru_; }
+       ///
+       docstring passThruChars() const { return passthru_chars_; }
+       ///
+       bool parbreakIsNewline() const { return parbreakisnewline_; }
+       ///
+       bool isNeedProtect() const { return needprotect_; }
+       ///
+       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_; }
+private:
+       ///
+       void makeDefaultCSS() const;
+       ///
+       std::string defaultCSSClass() const;
+       ///
+       void readArgument(Lexer &);
+       ///
+       docstring name_;
+       /**
+               * 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'.
+               */
+       InsetLyXType lyxtype_;
+       ///
+       docstring labelstring_;
+       ///
+       bool contentaslabel_;
+       ///
+       InsetDecoration decoration_;
+       ///
+       InsetLaTeXType latextype_;
+       ///
+       std::string latexname_;
+       ///
+       std::string latexparam_;
+       ///
+       docstring leftdelim_;
+       ///
+       docstring rightdelim_;
+       ///
+       FontInfo font_;
+       ///
+       FontInfo labelfont_;
+       ///
+       ColorCode bgcolor_;
+       ///
+       docstring counter_;
+       ///
+       docstring preamble_;
+       /// Language dependent macro definitions needed for this inset
+       docstring langpreamble_;
+       /// Language and babel dependent macro definitions needed for this inset
+       docstring babelpreamble_;
+       ///
+       bool fixedwidthpreambleencoding_;
+       ///
+       docstring refprefix_;
+       ///
+       mutable std::string htmltag_;
+       ///
+       mutable std::string htmlattr_;
+       ///
+       std::string htmlinnertag_;
+       ///
+       mutable std::string htmlinnerattr_;
+       ///
+       std::string htmllabel_;
+       ///
+       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_;
+       ///
+       docstring htmlpreamble_;
+       ///
+       bool htmlisblock_;
+       ///
+       std::set<std::string> requires_;
+       ///
+       bool multipar_;
+       ///
+       bool custompars_;
+       ///
+       bool forceplain_;
+       ///
+       bool passthru_;
+       ///
+       docstring passthru_chars_;
+       ///
+       bool parbreakisnewline_;
+       ///
+       bool freespacing_;
+       ///
+       bool keepempty_;
+       ///
+       bool forceltr_;
+       ///
+       bool forceownlines_;
+       ///
+       bool needprotect_;
+       /// should the contents be written to TOC strings?
+       bool intoc_;
+       /// check spelling of this inset?
+       bool spellcheck_;
+       ///
+       bool resetsfont_;
+       ///
+       bool display_;
+       ///
+       bool forcelocalfontswitch_;
+       /** 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_;
+       ///
+       std::string toc_type_;
+       ///
+       bool is_toc_caption_;
 };
 
+///
+InsetLayout::InsetLyXType translateLyXType(std::string const & str);
+InsetLayout::InsetDecoration translateDecoration(std::string const & str);
+
 } // namespace lyx
 
 #endif