X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FLayout.h;h=aeca0f4f83ae7c9b6a84b672704d0aefb61a0fe2;hb=70a24259f8e3eb75677178ef5e28ecbb51c2935b;hp=1c65f104674d20810d152f1937d017079e8fb372;hpb=757d5d67ac47459c7814dc51db90e3593c0c1704;p=lyx.git diff --git a/src/Layout.h b/src/Layout.h index 1c65f10467..aeca0f4f83 100644 --- a/src/Layout.h +++ b/src/Layout.h @@ -4,149 +4,30 @@ * This file is part of LyX, the document processor. * Licence details can be found in the file COPYING. * - * \author Lars Gullik Bjønnes + * \author Lars Gullik Bjønnes * \author Jean-Marc Lasgouttes - * \author André Pönitz + * \author André Pönitz * * Full author contact details are available in file CREDITS. */ -#ifndef LYX_LAYOUT_H -#define LYX_LAYOUT_H +#ifndef LAYOUT_H +#define LAYOUT_H -#include "Font.h" +#include "FontInfo.h" +#include "LayoutEnums.h" #include "Spacing.h" #include "support/docstring.h" +#include #include - namespace lyx { +class Language; class Lexer; class TextClass; - -/// The different output types -enum OutputType { - /// - LATEX = 1, - /// - DOCBOOK, - /// - LITERATE -}; - - -/// The different margin types -enum LYX_MARGIN_TYPE { - /// - MARGIN_MANUAL = 1, - /// - MARGIN_FIRST_DYNAMIC, - /// - MARGIN_DYNAMIC, - /// - MARGIN_STATIC, - /// - MARGIN_RIGHT_ADDRESS_BOX -}; - - -/// -enum LyXAlignment { - /// - LYX_ALIGN_NONE = 0, - /// - LYX_ALIGN_BLOCK = 1, - /// - LYX_ALIGN_LEFT = 2, - /// - LYX_ALIGN_RIGHT = 4, - /// - LYX_ALIGN_CENTER = 8, - /// - LYX_ALIGN_LAYOUT = 16, - /// - LYX_ALIGN_SPECIAL = 32 -}; - -/// -inline -void operator|=(LyXAlignment & la1, LyXAlignment la2) { - la1 = static_cast(la1 | la2); -} - - -/// The different LaTeX-Types -enum LYX_LATEX_TYPES { - /// - LATEX_PARAGRAPH = 1, - /// - LATEX_COMMAND, - /// - LATEX_ENVIRONMENT, - /// - LATEX_ITEM_ENVIRONMENT, - /// - LATEX_BIB_ENVIRONMENT, - /// - LATEX_LIST_ENVIRONMENT -}; - - -/// The different title types -enum LYX_TITLE_LATEX_TYPES { - /// - TITLE_COMMAND_AFTER = 1, - /// - TITLE_ENVIRONMENT -}; - - -/// The different label types -enum LYX_LABEL_TYPES { - /// - LABEL_NO_LABEL, - /// - LABEL_MANUAL, - /// - LABEL_BIBLIO, - /// - LABEL_TOP_ENVIRONMENT, - /// - LABEL_CENTERED_TOP_ENVIRONMENT, - - // the flushright labels following now must start with LABEL_STATIC - /// - LABEL_STATIC, - /// - LABEL_SENSITIVE, - /// - LABEL_COUNTER, - /// - LABEL_ENUMERATE, - /// - LABEL_ITEMIZE -}; - - -/// -enum LYX_END_LABEL_TYPES { - /// - END_LABEL_NO_LABEL, - /// - END_LABEL_BOX, - /// - END_LABEL_FILLED_BOX, - /// - END_LABEL_STATIC, - /// - END_LABEL_ENUM_FIRST = END_LABEL_NO_LABEL, - /// - END_LABEL_ENUM_LAST = END_LABEL_STATIC -}; - /* Fix labels are printed flushright, manual labels flushleft. * MARGIN_MANUAL and MARGIN_FIRST_DYNAMIC are *only* for LABEL_MANUAL, * MARGIN_DYNAMIC and MARGIN_STATIC are *not* for LABEL_MANUAL. @@ -171,7 +52,11 @@ class Layout { public: /// Layout(); - /// + /// is this layout a default layout created for an unknown layout + bool isUnknown() const { return unknown_; } + void setUnknown(bool unknown) { unknown_ = unknown; } + /// Reads a layout definition from file + /// \return true on success. bool read(Lexer &, TextClass const &); /// void readAlign(Lexer &); @@ -188,21 +73,33 @@ public: /// void readSpacing(Lexer &); /// - std::string const & name() const; + docstring const & name() const { return name_; }; /// - void setName(std::string const & n); + void setName(docstring const & n) { name_ = n; } /// - std::string const & obsoleted_by() const; + docstring const & obsoleted_by() const { return obsoleted_by_; } /// - std::string const & depends_on() const; + docstring const & depends_on() const { return depends_on_; } /// std::string const & latexname() const { return latexname_; } /// - lyx::docstring const & labelstring() const { return labelstring_; } + void setLatexName(std::string const & n) { latexname_ = n; } + /// + docstring const & labelstring() const { return labelstring_; } /// - lyx::docstring const & endlabelstring() const { return endlabelstring_; } + docstring const & endlabelstring() const { return endlabelstring_; } + /// + docstring const & category() const { return category_; } /// 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; + /// Get language and babel dependent macro definitions needed for + /// this layout for language \p lang + docstring const babelpreamble(Language const * lang) const; + /// + std::set const & requires() const { return requires_; } /// std::string const & latexparam() const { return latexparam_; } /// @@ -211,47 +108,86 @@ public: std::string const & labeltag() const { return labeltag_; } /// std::string const & itemtag() const { return itemtag_; } - /// - lyx::docstring const & labelstring_appendix() const { + /// + std::string const & htmltag() const { return htmltag_; } + /// + std::string const & htmlattr() const { return htmlattr_; } + /// + std::string const & htmlitem() const { return htmlitem_; } + /// + std::string const & htmlitemattr() const { return htmlitemattr_; } + /// + std::string const & htmllabel() const { return htmllabel_; } + /// + std::string const & htmllabelattr() const { return htmllabelattr_; } + /// + bool htmllabelfirst() const { return htmllabelfirst_; } + /// + docstring const & htmlstyle() const { return htmlstyle_; } + /// + docstring const & htmlpreamble() const { return htmlpreamble_; } + /// + docstring const & labelstring_appendix() const { return labelstring_appendix_; } + /// + bool isParagraph() const { return latextype == LATEX_PARAGRAPH; } + /// + bool isCommand() const { return latextype == LATEX_COMMAND; } + /// + bool isEnvironment() const { + return latextype == LATEX_ENVIRONMENT + || latextype == LATEX_BIB_ENVIRONMENT + || latextype == LATEX_ITEM_ENVIRONMENT + || latextype == LATEX_LIST_ENVIRONMENT; + } + + /// + bool operator==(Layout const &) const; + /// + bool operator!=(Layout const & rhs) const + { return !(*this == rhs); } + + //////////////////////////////////////////////////////////////// + // members + //////////////////////////////////////////////////////////////// /** Default font for this layout/environment. The main font for this kind of environment. If an attribute has - Font::INHERITED_*, it means that the value is specified by + INHERITED_*, it means that the value is specified by the defaultfont for the entire layout. If we are nested, the font is inherited from the font in the environment one level - up until the font is resolved. The values Font::IGNORE_* - and Font::TOGGLE are illegal here. + up until the font is resolved. The values :IGNORE_* + and FONT_TOGGLE are illegal here. */ - Font font; + FontInfo font; /** Default font for labels. Interpretation the same as for font above */ - Font labelfont; + FontInfo labelfont; /** Resolved version of the font for this layout/environment. This is a resolved version the default font. The font is resolved against the defaultfont of the entire layout. */ - Font resfont; + FontInfo resfont; /** Resolved version of the font used for labels. This is a resolved version the label font. The font is resolved against the defaultfont of the entire layout. */ - Font reslabelfont; + FontInfo reslabelfont; /// Text that dictates how wide the left margin is on the screen - std::string leftmargin; + docstring leftmargin; /// Text that dictates how wide the right margin is on the screen - std::string rightmargin; + docstring rightmargin; /// Text that dictates how much space to leave after a potential label - std::string labelsep; + docstring labelsep; /// Text that dictates how much space to leave before a potential label - std::string labelindent; + docstring labelindent; /// Text that dictates the width of the indentation of indented pars - std::string parindent; + docstring parindent; /// double parskip; /// @@ -271,11 +207,11 @@ public: /// LyXAlignment alignpossible; /// - LYX_LABEL_TYPES labeltype; + LabelType labeltype; /// - LYX_END_LABEL_TYPES endlabeltype; + EndLabelType endlabeltype; /// - LYX_MARGIN_TYPE margintype; + MarginType margintype; /// bool fill_top; /// @@ -288,80 +224,63 @@ public: bool free_spacing; /// bool pass_thru; - /** - * Whether this layout was declared with "Environment xxx" as opposed - * to "Style xxx". This is part of some unfinished generic environment - * handling (see also InsetEnvironment) started by Andre. No layout - * that is shipped with LyX has this flag set. - * Don't confuse this with isEnvironment()! - */ - bool is_environment; /// show this in toc int toclevel; /// special value of toclevel for non-section layouts static const int NOT_IN_TOC; - /// for new environment insets - std::string latexheader; - /// for new environment insets - std::string latexfooter; - /// for new environment insets - std::string latexparagraph; /** true when the fragile commands in the paragraph need to be \protect'ed. */ bool needprotect; /// true when empty paragraphs should be kept. bool keepempty; - /// - bool isParagraph() const { - return latextype == LATEX_PARAGRAPH; - } - /// - bool isCommand() const { - return latextype == LATEX_COMMAND; - } - /// - bool isEnvironment() const { - return (latextype == LATEX_ENVIRONMENT - || latextype == LATEX_BIB_ENVIRONMENT - || latextype == LATEX_ITEM_ENVIRONMENT - || latextype == LATEX_LIST_ENVIRONMENT); - } /// Type of LaTeX object - LYX_LATEX_TYPES latextype; + 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; /// Which counter to step - lyx::docstring counter; + docstring counter; /// Depth of XML command int commanddepth; + /// Return a pointer on a new layout suitable to describe a caption. + /// FIXME: remove this eventually. This is only for tex2lyx + /// until it has proper support for the caption inset (JMarc) + static Layout * forCaption(); + + private: /// Name of the layout/paragraph environment - std::string name_; + docstring name_; + + /// LaTeX name for environment + std::string latexname_; + + /** Is this layout the default layout for an unknown layout? If + * so, its name will be displayed as xxx (unknown). + */ + bool unknown_; /** Name of an layout that has replaced this layout. This is used to rename a layout, while keeping backward compatibility */ - std::string obsoleted_by_; + docstring obsoleted_by_; /** Name of an layout which preamble must come before this one This is used when the preamble snippet uses macros defined in another preamble */ - std::string depends_on_; + docstring depends_on_; - /// LaTeX name for environment - std::string latexname_; /// Label string. "Abstract", "Reference", "Caption"... - lyx::docstring labelstring_; + docstring labelstring_; /// - lyx::docstring endlabelstring_; + docstring endlabelstring_; /// Label string inside appendix. "Appendix", ... - lyx::docstring labelstring_appendix_; + docstring labelstring_appendix_; /// LaTeX parameter for environment std::string latexparam_; /// Internal tag to use (e.g., for sect header) @@ -370,11 +289,50 @@ private: std::string labeltag_; /// Internal tag to surround the item text in a list) std::string itemtag_; + /// Tag for HTML output, e.g., h2. + std::string htmltag_; + /// Additional attributes for inclusion with the start tag, + /// e.g.: class='section'. + std::string htmlattr_; + /// Tag for individual paragraphs in an environment. In lists, this + /// would be something like "li". But it also needs to be set for + /// quotation, e.g., since the paragraphs in a quote need to be + /// in "p" tags. + std::string htmlitem_; + /// Attributes for htmlitem_ + std::string htmlitemattr_; + /// Tag for labels, of whatever sort. One use for this is in setting + /// descriptions, in which case it would be: dt. Another use is to + /// customize the display of, say, the auto-generated label for + /// sections (in that case, it might be: span). + std::string htmllabel_; + /// Attributes for the label. + std::string htmllabelattr_; + /// Whether to put the label before the item, or within the item. + /// I.e., do we have (true): + /// ... + /// or instead (false): + /// ... + /// The latter is the default. + bool htmllabelfirst_; + /// CSS information needed by this layout. + docstring htmlstyle_; + /// Any other info for the HTML header. + docstring htmlpreamble_; + /// This is the `category' for this layout. The following are + /// recommended basic categories: FrontMatter, BackMatter, MainText, + /// Section, Starred, List, Theorem. + docstring category_; /// Macro definitions needed for this layout docstring preamble_; + /// Language dependent macro definitions needed for this layout + docstring langpreamble_; + /// Language and babel dependent macro definitions needed for this layout + docstring babelpreamble_; + /// Packages needed for this layout + std::set requires_; }; - } // namespace lyx #endif