]> git.lyx.org Git - lyx.git/blobdiff - src/layout.h
clean code to export between different flavours, output different code for sgml to...
[lyx.git] / src / layout.h
index 5aa994442eaa03ebc128f4669a6031cf020ea566..a83965daf2cde872f7434dbca5b3bb7d2d0fe7f8 100644 (file)
@@ -1,47 +1,22 @@
 // -*- C++ -*-
-/* This file is part of
- * ======================================================
- * 
- *           LyX, The Document Processor
- *      
- *           Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2000 The LyX Team.
+/**
+ * \file layout.h
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * ====================================================== */
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ *
+ * Full author contact details are available in file CREDITS.
+ */
 
 #ifndef LAYOUT_H
 #define LAYOUT_H
 
-#include <vector>
-
-#ifdef __GNUG__
-#pragma interface
-#endif
-
-#include "lyxlex.h"
-#include "lyxfont.h"
-#include "Spacing.h"
-
-
-/// Reads the style files
-extern void LyXSetStyle();
-
-///
-enum { // no good name for this
-       ///
-        LYX_ENVIRONMENT_DEFAULT = 97,
-       ///
-       LYX_LAYOUT_DEFAULT = 99
-};
-// Could this cause confusion that both DUMMY_LAYOUT and  LAYOUT_DEFAULT has
-// the same value? (Lgb)
-///
-#define LYX_DUMMY_LAYOUT 99
-
 /// The different output types
 enum OutputType {
-        ///
-        LATEX = 1,
+       ///
+       LATEX = 1,
        ///
        LINUXDOC,
        ///
@@ -50,6 +25,7 @@ enum OutputType {
        LITERATE
 };
 
+
 /// The different margin types
 enum LYX_MARGIN_TYPE {
        ///
@@ -80,15 +56,16 @@ enum LyXAlignment {
        ///
        LYX_ALIGN_LAYOUT = 16,
        ///
-        LYX_ALIGN_SPECIAL = 32
+       LYX_ALIGN_SPECIAL = 32
 };
 
-
+///
 inline
 void operator|=(LyXAlignment & la1, LyXAlignment la2) {
        la1 = static_cast<LyXAlignment>(la1 | la2);
 }
 
+
 /// The different LaTeX-Types
 enum LYX_LATEX_TYPES {
        ///
@@ -100,9 +77,21 @@ enum LYX_LATEX_TYPES {
        ///
        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 {
        ///
@@ -110,7 +99,7 @@ enum LYX_LABEL_TYPES {
        ///
        LABEL_MANUAL,
        ///
-        LABEL_BIBLIO,
+       LABEL_BIBLIO,
        ///
        LABEL_TOP_ENVIRONMENT,
        ///
@@ -122,29 +111,15 @@ enum LYX_LABEL_TYPES {
        ///
        LABEL_SENSITIVE,
        ///
-       LABEL_COUNTER_CHAPTER,
-       ///
-       LABEL_COUNTER_SECTION,
-       ///
-       LABEL_COUNTER_SUBSECTION,
-       ///
-       LABEL_COUNTER_SUBSUBSECTION,
-       ///
-       LABEL_COUNTER_PARAGRAPH,
+       LABEL_COUNTER,
        ///
-       LABEL_COUNTER_SUBPARAGRAPH,
+       LABEL_ENUMERATE,
        ///
-       LABEL_COUNTER_ENUMI,
-       ///
-       LABEL_COUNTER_ENUMII,
-       ///
-       LABEL_COUNTER_ENUMIII,
-       ///
-       LABEL_COUNTER_ENUMIV,
-       ///
-       LABEL_FIRST_COUNTER = LABEL_COUNTER_CHAPTER
+       LABEL_ITEMIZE
 };
 
+
+///
 enum LYX_END_LABEL_TYPES {
        ///
        END_LABEL_NO_LABEL,
@@ -159,428 +134,25 @@ enum LYX_END_LABEL_TYPES {
        ///
        END_LABEL_ENUM_LAST = END_LABEL_STATIC
 };
-               
-/* Fix labels are printed flushright, manual labels flushleft. 
+
+/* 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. 
+ * MARGIN_DYNAMIC and MARGIN_STATIC are *not* for LABEL_MANUAL.
  * This seems a funny restriction, but I think other combinations are
- * not needed, so I will not change it yet. 
+ * not needed, so I will not change it yet.
  * Correction: MARGIN_FIRST_DYNAMIC also usable with LABEL_STATIC
  */
 
 
-/* There is a parindent and a parskip. Which one is used depends on the 
- * paragraph_separation-flag of the text-object. 
+/* There is a parindent and a parskip. Which one is used depends on the
+ * paragraph_separation-flag of the text-object.
  * BUT: parindent is only thrown away, if a parskip is defined! So if you
- * want a space between the paragraphs and a parindent at the same time, 
+ * want a space between the paragraphs and a parindent at the same time,
  * you should set parskip to zero and use topsep, parsep and bottomsep.
- * 
- * The standard layout is an exception: its parindent is only set, if the 
+ *
+ * The standard layout is an exception: its parindent is only set, if the
  * previous paragraph is standard too. Well, this is LateX and it is good!
- */ 
-
-
-/// Attributes of a layout/paragraph environment
-class LyXTextClass;
-
-///
-class LyXLayout {
-public:
-       ///
-       LyXLayout ();
-
-       ///
-       bool Read (LyXLex &, LyXTextClass const &);
-       void readAlign(LyXLex &);
-       void readAlignPossible(LyXLex &);
-       void readLabelType(LyXLex &);
-       void readEndLabelType(LyXLex &);
-       void readMargin(LyXLex &);
-       void readLatexType(LyXLex &);
-       void readSpacing(LyXLex &);
-       string const & name() const { return name_; }
-       void name(string const & n) { name_ = n; }
-       string const & obsoleted_by() const { return obsoleted_by_; }
-       string const & latexname() const { return latexname_; }
-       string const & labelstring() const { return labelstring_; }
-       string const & endlabelstring() const { return endlabelstring_; }
-       string const & preamble() const { return preamble_; }
-       string const & latexparam() const { return latexparam_; }
-       string const & labelstring_appendix() const {
-               return labelstring_appendix_;
-       }
-       /** Default font for this layout/environment.
-           The main font for this kind of environment. If an attribute has
-           LyXFont::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 LyXFont::IGNORE_*
-           and LyXFont::TOGGLE are illegal here.
-       */
-       LyXFont font;
-
-       /** Default font for labels.
-           Interpretation the same as for font above
-       */
-       LyXFont 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.
-       */
-       LyXFont 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.
-       */
-       LyXFont reslabelfont;
-
-       /// Text that dictates how wide the left margin is on the screen
-       string leftmargin;
-
-       /// Text that dictates how wide the right margin is on the screen
-       string rightmargin;
-
-       /// Text that dictates how much space to leave after a potential label
-       string labelsep;
-
-       /// Text that dictates how much space to leave before a potential label
-       string labelindent;
-
-       /** Text that dictates the width of the indentation of
-           indented paragraphs.
-       */
-       string parindent;
-
-       ///
-       float parskip;
-
-       ///
-       float itemsep;
-
-       ///
-       float topsep;
-
-       ///
-       float bottomsep;
-
-       ///
-       float labelbottomsep;
-
-       ///
-       float parsep;
-
-       ///
-       Spacing spacing;
-
-       ///
-       LyXAlignment align;
-
-       ///
-       LyXAlignment alignpossible;
-
-       ///
-       char labeltype; // add approp. type
-
-       ///
-       char endlabeltype;
-
-       ///
-       LYX_MARGIN_TYPE margintype;
-
-       ///
-       bool fill_top;
-
-       ///
-       bool fill_bottom;
-
-       ///
-       bool newline_allowed;
-
-       ///
-       bool nextnoindent;
-
-       ///
-       bool free_spacing;
-       /// 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_ITEM_ENVIRONMENT
-                       || latextype == LATEX_LIST_ENVIRONMENT);
-       }
-       /// Type of LaTeX object
-       LYX_LATEX_TYPES latextype;
-       /// Does this object belong in the title part of the document?
-       bool intitle;
-private:
-       /// Name of the layout/paragraph environment
-       string name_;
-
-       /** Name of an layout that has replaced this layout.
-           This is used to rename a layout, while keeping backward
-           compatibility 
-       */
-       string obsoleted_by_;
-
-       /// LaTeX name for environment
-       string latexname_;
-
-       /// Label string. "Abstract", "Reference", "Caption"...
-       string labelstring_;
-
-       ///
-       string endlabelstring_;
-
-       /// Label string inside appendix. "Appendix", ...
-       string labelstring_appendix_;
-
-       /// LaTeX parameter for environment
-        string latexparam_;
-
-        /// Macro definitions needed for this layout
-       string preamble_;
-};
-
-
-///
-class LyXTextClass {
-public:
-       ///
-       typedef std::vector<LyXLayout> LayoutList;
-       ///
-       typedef LayoutList::const_iterator const_iterator;
-       ///
-       typedef LayoutList::size_type size_type;
-       ///
-       explicit
-       LyXTextClass (string const & = string(), 
-                     string const & = string(), 
-                     string const & = string());
-
-       ///
-       const_iterator begin() const { return layoutlist.begin(); }
-       ///
-       const_iterator end() const { return layoutlist.end(); }
-       
-       ///
-       bool Read(string const & filename, bool merge = false);
-       void readOutputType(LyXLex &);
-       void readMaxCounter(LyXLex &);
-       void readClassOptions(LyXLex &);
-       ///
-       bool hasLayout(string const & name) const;
-
-       ///
-       LyXLayout const & GetLayout(string const & vname) const;
-
-       ///
-       LyXLayout & GetLayout(string const & vname);
-
-       /// Sees to that the textclass structure has been loaded
-       void load();
-
-       ///
-       string const & name() const { return name_; }
-       ///
-       string const & latexname() const { return latexname_; }
-       ///
-       string const & description() const { return description_; }
-       ///
-       string const & opt_fontsize() const { return opt_fontsize_; }
-       ///
-       string const & opt_pagestyle() const { return opt_pagestyle_; }
-       ///
-       string const & options() const { return options_; }
-       ///
-       string const & pagestyle() const { return pagestyle_; }
-       ///
-       string const & preamble() const { return preamble_; }
-
-       /// Packages that are already loaded by the class
-       enum Provides {
-               nothing = 0,
-               amsmath = 1,
-               makeidx = 2,
-               url = 4
-       };
-       bool provides(Provides p) const { return provides_ & p; }
-       
-       ///
-       unsigned int columns() const { return columns_; }
-       ///
-       enum PageSides {
-               OneSide,
-               TwoSides
-       };
-       ///
-       PageSides sides() const { return sides_; }
-       ///
-       int secnumdepth() const { return secnumdepth_; }
-       ///
-       int tocdepth() const { return tocdepth_; }
-
-        ///
-        OutputType outputType() const { return outputType_; }
-
-       ///
-       LyXFont const & defaultfont() const { return defaultfont_; }
-
-       /// Text that dictates how wide the left margin is on the screen
-       string const & leftmargin() const { return leftmargin_; }
-
-       /// Text that dictates how wide the right margin is on the screen
-       string const & rightmargin() const { return rightmargin_; }
-        ///
-       int maxcounter() const { return maxcounter_; }
-       ///
-       size_type numLayouts() const { return layoutlist.size(); }
-       ///
-       LyXLayout const & operator[](size_type i) const {
-               return layoutlist[i];
-       }
-private:
-       ///
-       bool delete_layout(string const &);
-       ///
-       bool do_readStyle(LyXLex &, LyXLayout &);
-       ///
-       string name_;
-       ///
-       string latexname_;
-       ///
-       string description_;
-       /// Specific class options
-        string opt_fontsize_;
-       ///
-        string opt_pagestyle_;
-       ///
-       string options_;
-       ///
-       string pagestyle_;
-       ///
-       string preamble_;
-       ///
-       Provides provides_;
-       ///
-       unsigned int columns_;
-       ///
-       PageSides sides_;
-       ///
-       int secnumdepth_;
-       ///
-       int tocdepth_;
-        ///
-        OutputType outputType_;
-       /** Base font. The paragraph and layout fonts are resolved against
-           this font. This has to be fully instantiated. Attributes
-           LyXFont::INHERIT, LyXFont::IGNORE, and LyXFont::TOGGLE are
-           extremely illegal.
-       */
-       LyXFont defaultfont_;
-       /// Text that dictates how wide the left margin is on the screen
-       string leftmargin_;
-
-       /// Text that dictates how wide the right margin is on the screen
-       string rightmargin_;
-        ///
-       int maxcounter_; // add approp. signedness
-
-       ///
-       LayoutList layoutlist;
-
-       /// Has this layout file been loaded yet?
-       bool loaded;
-};
-
-
-inline
-void operator|=(LyXTextClass::Provides & p1, LyXTextClass::Provides p2)
-{
-       p1 = static_cast<LyXTextClass::Provides>(p1 | p2);
-}
-
-
-///
-std::ostream & operator<<(std::ostream & os, LyXTextClass::PageSides p);
-
-
-///
-class LyXTextClassList {
-public:
-       ///
-       typedef std::vector<LyXTextClass> ClassList;
-       ///
-       typedef ClassList::const_iterator const_iterator;
-       ///
-       typedef ClassList::size_type size_type;
-       ///
-       const_iterator begin() const { return classlist.begin(); }
-       ///
-       const_iterator end() const { return classlist.end(); }
-       
-       /// Gets layout structure from layout number and textclass number
-       LyXLayout const & Style(size_type textclass,
-                               LyXTextClass::size_type layout) const;
-
-       /// Gets layout number from textclass number and layout name
-       std::pair<bool, LyXTextClass::size_type>
-       NumberOfLayout(size_type textclass,
-                      string const & name) const;
-
-       /// Gets a layout name from layout number and textclass number
-       string const &
-       NameOfLayout(size_type textclass,
-                    LyXTextClass::size_type layout) const;
-
-       /** Gets textclass number from name.
-           Returns -1 if textclass name does not exist
-       */
-       std::pair<bool, size_type>
-       NumberOfClass(string const & textclass) const;
-
-       ///
-       string const & NameOfClass(size_type number) const;
-
-       ///
-       string const & LatexnameOfClass(size_type number) const;
-
-       ///
-       string const & DescOfClass(size_type number) const;
-
-       ///
-       LyXTextClass const & TextClass(size_type textclass) const;
-
-       /** Read textclass list.
-           Returns false if this fails
-       */
-       bool Read();
+ */
 
-       /** Load textclass.
-           Returns false if this fails
-       */
-       bool Load(size_type number) const;
-private:
-       ///
-       mutable ClassList classlist;
-       ///
-       void Add (LyXTextClass const &);
-};
 
-/// Should not be declared here!! (Lgb) Why not? (Asger)
-extern LyXTextClassList textclasslist;
 #endif