1 // -*- C++ -*- 2 /** 3 * \file InsetLayout.h 4 * This file is part of LyX, the document processor. 5 * Licence details can be found in the file COPYING. 6 * 7 * \author Martin Vermeer 8 * \author Richard Heck 9 * 10 * Full author contact details are available in file CREDITS. 11 */ 12 13 #ifndef INSET_LAYOUT_H 14 #define INSET_LAYOUT_H 15 16 #include "ColorCode.h" 17 #include "FontInfo.h" 18 #include "Layout.h" 19 20 #include "support/docstring.h" 21 22 #include <set> 23 #include <string> 24 25 namespace lyx { 26 27 class Lexer; 28 class TextClass; 29 30 /// 31 class InsetLayout { 32 public: 33 /// 34 InsetLayout(); 35 /// 36 enum InsetDecoration { 37 CLASSIC, 38 MINIMALISTIC, 39 CONGLOMERATE, 40 DEFAULT 41 }; 42 /// 43 enum InsetLyXType { 44 NOLYXTYPE, 45 CHARSTYLE, 46 CUSTOM, 47 ELEMENT, 48 END, 49 STANDARD 50 }; 51 /// 52 enum InsetLaTeXType { 53 NOLATEXTYPE, 54 COMMAND, 55 ENVIRONMENT, 56 ILT_ERROR 57 }; 58 /// 59 bool read(Lexer & lexrc, TextClass const & tclass); 60 /// name()61 docstring name() const { return name_; } 62 /// setName(docstring const & n)63 void setName(docstring const & n) { name_ = n; } 64 /// lyxtype()65 InsetLyXType lyxtype() const { return lyxtype_; } 66 /// labelstring()67 docstring labelstring() const { return labelstring_; } 68 /// contentaslabel()69 bool contentaslabel() const { return contentaslabel_; } 70 /// decoration()71 InsetDecoration decoration() const { return decoration_; } 72 /// latextype()73 InsetLaTeXType latextype() const { return latextype_; } 74 /// latexname()75 std::string latexname() const { return latexname_; } 76 /// latexparam()77 std::string latexparam() const { return latexparam_; } 78 /// leftdelim()79 docstring leftdelim() const { return leftdelim_; } 80 /// rightdelim()81 docstring rightdelim() const { return rightdelim_; } 82 /// font()83 FontInfo font() const { return font_; } 84 /// labelfont()85 FontInfo labelfont() const { return labelfont_; } 86 /// bgcolor()87 ColorCode bgcolor() const { return bgcolor_; } 88 /// latexargs()89 Layout::LaTeXArgMap const & latexargs() const { return latexargs_; } 90 /// postcommandargs()91 Layout::LaTeXArgMap const & postcommandargs() const { return postcommandargs_; } 92 /// Returns latexargs() + postcommandargs(). 93 /// But note that it returns a *copy*, not a reference, so do not do 94 /// anything like: 95 /// Layout::LaTeXArgMap::iterator it = args().begin(); 96 /// Layout::LaTeXArgMap::iterator en = args().end(); 97 /// Those are iterators for different containers. 98 Layout::LaTeXArgMap args() const; 99 /// 100 unsigned int optArgs() const; 101 /// 102 unsigned int requiredArgs() const; 103 /// preamble()104 docstring preamble() const { return preamble_; } 105 /// Get language dependent macro definitions needed for this inset langpreamble()106 docstring const langpreamble() const { return langpreamble_; } 107 /// Get language and babel dependent macro definitions needed for 108 /// this inset babelpreamble()109 docstring const babelpreamble() const { return babelpreamble_; } 110 /// fixedwidthpreambleencoding()111 bool fixedwidthpreambleencoding() const { return fixedwidthpreambleencoding_; } 112 /// counter()113 docstring counter() const { return counter_; } 114 /// refprefix()115 docstring refprefix() const { return refprefix_; } 116 /// The tag enclosing all the material in this inset. Default is "span". 117 std::string const & htmltag() const; 118 /// Additional attributes for inclusion with the start tag. Default (if 119 /// a tag is provided) is: class="name". 120 std::string const & htmlattr() const; 121 /// Tag for individual paragraphs in the inset. Default is none. htmlinnertag()122 std::string const & htmlinnertag() const { return htmlinnertag_; } 123 /// Attributes for that tag. Default (if a tag is provided) is: 124 /// class="name_inner". 125 std::string const & htmlinnerattr() const; 126 /// A label for this environment, possibly including a reference 127 /// to a counter. E.g., for footnote, it might be: 128 /// \arabic{footnote} 129 /// No default. 130 /// FIXME Could we get this from the layout? htmllabel()131 std::string const & htmllabel() const { return htmllabel_; } 132 /// htmllabeltag()133 inline std::string htmllabeltag() const { return "span"; } 134 /// htmllabelattr()135 std::string htmllabelattr() const 136 { return "class=\"" + defaultCSSClass() + "_label\""; } 137 /// CSS associated with this inset. 138 docstring htmlstyle() const; 139 /// Additional material for the header. htmlpreamble()140 docstring htmlpreamble() const { return htmlpreamble_; } 141 /// Whether this inset represents a "block" of material, i.e., a set 142 /// of paragraphs of its own (true), or should be run into the previous 143 /// paragraph (false). Examples: 144 /// For branches, this is false. 145 /// For footnotes, this is true. 146 /// Defaults to true. htmlisblock()147 bool htmlisblock() const { return htmlisblock_; } 148 /// requires()149 std::set<std::string> requires() const { return requires_; } 150 /// isMultiPar()151 bool isMultiPar() const { return multipar_; } 152 /// forcePlainLayout()153 bool forcePlainLayout() const { return forceplain_; } 154 /// allowParagraphCustomization()155 bool allowParagraphCustomization() const { return custompars_; } 156 /// isPassThru()157 bool isPassThru() const { return passthru_; } 158 /// passThruChars()159 docstring passThruChars() const { return passthru_chars_; } 160 /// parbreakIsNewline()161 bool parbreakIsNewline() const { return parbreakisnewline_; } 162 /// isNeedProtect()163 bool isNeedProtect() const { return needprotect_; } 164 /// isFreeSpacing()165 bool isFreeSpacing() const { return freespacing_; } 166 /// isKeepEmpty()167 bool isKeepEmpty() const { return keepempty_; } 168 /// forceLTR()169 bool forceLTR() const { return forceltr_; } 170 /// forceOwnlines()171 bool forceOwnlines() const { return forceownlines_; } 172 /// isInToc()173 bool isInToc() const { return intoc_; } 174 /// spellcheck()175 bool spellcheck() const { return spellcheck_; } 176 /// resetsFont()177 bool resetsFont() const { return resetsfont_; } 178 /// isDisplay()179 bool isDisplay() const { return display_; } 180 /// forcelocalfontswitch()181 bool forcelocalfontswitch() const { return forcelocalfontswitch_; } 182 /// obsoleted_by()183 docstring const & obsoleted_by() const { return obsoleted_by_; } 184 /// addToToc()185 bool addToToc() const { return add_to_toc_; } 186 /// tocType()187 std::string tocType() const { return toc_type_; } 188 /// isTocCaption()189 bool isTocCaption() const { return is_toc_caption_; } 190 private: 191 /// 192 void makeDefaultCSS() const; 193 /// 194 std::string defaultCSSClass() const; 195 /// 196 void readArgument(Lexer &); 197 /// 198 docstring name_; 199 /** 200 * This is only used (at present) to decide where to put them on the menus. 201 * Values are 'charstyle', 'custom' (things that by default look like a 202 * footnote), 'element' (docbook), 'standard'. 203 */ 204 InsetLyXType lyxtype_; 205 /// 206 docstring labelstring_; 207 /// 208 bool contentaslabel_; 209 /// 210 InsetDecoration decoration_; 211 /// 212 InsetLaTeXType latextype_; 213 /// 214 std::string latexname_; 215 /// 216 std::string latexparam_; 217 /// 218 docstring leftdelim_; 219 /// 220 docstring rightdelim_; 221 /// 222 FontInfo font_; 223 /// 224 FontInfo labelfont_; 225 /// 226 ColorCode bgcolor_; 227 /// 228 docstring counter_; 229 /// 230 docstring preamble_; 231 /// Language dependent macro definitions needed for this inset 232 docstring langpreamble_; 233 /// Language and babel dependent macro definitions needed for this inset 234 docstring babelpreamble_; 235 /// 236 bool fixedwidthpreambleencoding_; 237 /// 238 docstring refprefix_; 239 /// 240 mutable std::string htmltag_; 241 /// 242 mutable std::string htmlattr_; 243 /// 244 std::string htmlinnertag_; 245 /// 246 mutable std::string htmlinnerattr_; 247 /// 248 std::string htmllabel_; 249 /// 250 docstring htmlstyle_; 251 /// Cache for default CSS info for this inset. 252 mutable docstring htmldefaultstyle_; 253 /// Cache for default CSS class. 254 mutable std::string defaultcssclass_; 255 /// Whether to force generation of default CSS even if some is given. 256 /// False by default. 257 bool htmlforcecss_; 258 /// 259 docstring htmlpreamble_; 260 /// 261 bool htmlisblock_; 262 /// 263 std::set<std::string> requires_; 264 /// 265 bool multipar_; 266 /// 267 bool custompars_; 268 /// 269 bool forceplain_; 270 /// 271 bool passthru_; 272 /// 273 docstring passthru_chars_; 274 /// 275 bool parbreakisnewline_; 276 /// 277 bool freespacing_; 278 /// 279 bool keepempty_; 280 /// 281 bool forceltr_; 282 /// 283 bool forceownlines_; 284 /// 285 bool needprotect_; 286 /// should the contents be written to TOC strings? 287 bool intoc_; 288 /// check spelling of this inset? 289 bool spellcheck_; 290 /// 291 bool resetsfont_; 292 /// 293 bool display_; 294 /// 295 bool forcelocalfontswitch_; 296 /** Name of an insetlayout that has replaced this insetlayout. 297 This is used to rename an insetlayout, while keeping backward 298 compatibility 299 */ 300 docstring obsoleted_by_; 301 /// 302 Layout::LaTeXArgMap latexargs_; 303 /// 304 Layout::LaTeXArgMap postcommandargs_; 305 /// 306 bool add_to_toc_; 307 /// 308 std::string toc_type_; 309 /// 310 bool is_toc_caption_; 311 }; 312 313 /// 314 InsetLayout::InsetLyXType translateLyXType(std::string const & str); 315 InsetLayout::InsetDecoration translateDecoration(std::string const & str); 316 317 } // namespace lyx 318 319 #endif 320