X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.h;h=c05af76d54b70525635be5d6e8db8ef9bb0404d6;hb=52eb91c94fb70d58dceef430659c8781de2eccda;hp=70d147c242e17a7cf60171597eef49d09a3e7ff9;hpb=797d87b4513088a66b17c7ac653b84e36ea80458;p=lyx.git diff --git a/src/bufferparams.h b/src/bufferparams.h index 70d147c242..c05af76d54 100644 --- a/src/bufferparams.h +++ b/src/bufferparams.h @@ -1,95 +1,71 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright 1995 Matthias Ettrich - * Copyright 1995-2000 The LyX Team. +/** + * \file bufferparams.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 + * \author John Levon + * \author André Pönitz + * + * Full author contact details are available in file CREDITS. + */ #ifndef BUFFERPARAMS_H #define BUFFERPARAMS_H -#ifdef __GNUG__ -#pragma interface -#endif +#include "lyxtextclass.h" +#include "paper.h" -#include "LString.h" -#include "lyxlex.h" -#include "vspace.h" -#include "Spacing.h" -#include "Bullet.h" #include "insets/insetquotes.h" -#include "layout.h" -#include "support/block.h" +#include "support/copied_ptr.h" +#include "support/types.h" + +#include + + +namespace lyx { + +class AuthorList; +class BranchList; +class Bullet; +class Encoding; +class LyXLex; +class LatexFeatures; +class Spacing; +class TexRow; +class VSpace; +class Language; + + +namespace biblio { + +enum CiteEngine { + ENGINE_BASIC, + ENGINE_NATBIB_AUTHORYEAR, + ENGINE_NATBIB_NUMERICAL, + ENGINE_JURABIB +}; + +class CiteEngine_enum { + CiteEngine val_; +public: + CiteEngine_enum(CiteEngine val) : val_(val) {} + operator CiteEngine() const{ return val_; } +}; + +} // namespace biblio -struct Language; /** Buffer parameters. - This class contains all the parameters for this a buffer uses. Some - work needs to be done on this class to make it nice. Now everything - is in public. -*/ + * This class contains all the parameters for this a buffer uses. Some + * work needs to be done on this class to make it nice. Now everything + * is in public. + */ class BufferParams { public: - /// - enum PAPER_SIZE { - /// - PAPER_DEFAULT, - /// - PAPER_USLETTER, - /// - PAPER_LEGALPAPER, - /// - PAPER_EXECUTIVEPAPER, - /// - PAPER_A3PAPER, - /// - PAPER_A4PAPER, - /// - PAPER_A5PAPER, - /// - PAPER_B5PAPER - }; - /// - enum PAPER_PACKAGES { - /// - PACKAGE_NONE, - /// - PACKAGE_A4, - /// - PACKAGE_A4WIDE, - /// - PACKAGE_WIDEMARGINSA4 - }; - /// - enum VMARGIN_PAPER_TYPE { - /// - VM_PAPER_DEFAULT, - /// - VM_PAPER_CUSTOM, - /// - VM_PAPER_USLETTER, - /// - VM_PAPER_USLEGAL, - /// - VM_PAPER_USEXECUTIVE, - /// - VM_PAPER_A3, - /// - VM_PAPER_A4, - /// - VM_PAPER_A5, - /// - VM_PAPER_B3, - /// - VM_PAPER_B4, - /// - VM_PAPER_B5 - }; /// enum PARSEP { /// @@ -98,103 +74,145 @@ public: PARSEP_SKIP }; /// - enum PAPER_ORIENTATION { - /// - ORIENTATION_PORTRAIT, - /// - ORIENTATION_LANDSCAPE - }; - /// BufferParams(); + ~BufferParams(); + + /// read a header token, if unrecognised, return it or an unknown class name + std::string const readToken(LyXLex & lex, std::string const & token); /// void writeFile(std::ostream &) const; + /** \returns true if the babel package is used (interogates + * the BufferParams and a LyXRC variable). + * This returned value can then be passed to the insets... + */ + bool writeLaTeX(odocstream &, LaTeXFeatures &, TexRow &) const; + /// void useClassDefaults(); /// - VSpace const & getDefSkip() const { return defskip; } + bool hasClassDefaults() const; /// - void setDefSkip(VSpace const & vs) { defskip = vs; } + VSpace const & getDefSkip() const; + + /// + void setDefSkip(VSpace const & vs); /** Wether paragraphs are separated by using a indent like in - articles or by using a little skip like in letters. - */ - PARSEP paragraph_separation; + * articles or by using a little skip like in letters. + */ + PARSEP paragraph_separation; + /// + InsetQuotes::quote_language quotes_language; /// - InsetQuotes::quote_language quotes_language; + InsetQuotes::quote_times quotes_times; /// - InsetQuotes::quote_times quotes_times; + std::string fontsize; /// - string fontsize; + textclass_type textclass; /// - LyXTextClassList::size_type textclass; + LyXTextClass const & getLyXTextClass() const; + + /// returns the main font for the buffer (document) + LyXFont const getFont() const; /* this are for the PaperLayout */ - /// the general papersize (papersize2 or paperpackage - char papersize; // add apprip. signedness - /// the selected Geometry papersize - char papersize2; // add approp. signedness - /// a special paperpackage .sty-file - char paperpackage; // add approp. signedness - /// - PAPER_ORIENTATION orientation; // add approp. signedness - /// - bool use_geometry; - /// - string paperwidth; - /// - string paperheight; - /// - string leftmargin; - /// - string topmargin; - /// - string rightmargin; - /// - string bottommargin; - /// - string headheight; - /// - string headsep; - /// - string footskip; - - /* some LaTeX options */ - /// The graphics driver - string graphicsDriver; + /// the papersize + PAPER_SIZE papersize; /// - string fonts; + PAPER_ORIENTATION orientation; + /// use custom margins + bool use_geometry; /// - Spacing spacing; + std::string paperwidth; /// - int secnumdepth; + std::string paperheight; /// - int tocdepth; + std::string leftmargin; /// - string language; + std::string topmargin; /// - Language const * language_info; + std::string rightmargin; /// - string inputenc; + std::string bottommargin; /// - string preamble; + std::string headheight; /// - string options; + std::string headsep; /// - string float_placement; + std::string footskip; + + /* some LaTeX options */ + /// The graphics driver + std::string graphicsDriver; + /// the rm font + std::string fontsRoman; + /// the sf font + std::string fontsSans; + /// the tt font + std::string fontsTypewriter; + /// the default family (rm, sf, tt) + std::string fontsDefaultFamily; + /// use expert Small Caps + bool fontsSC; + /// use Old Style Figures + bool fontsOSF; + /// the scale factor of the sf font + int fontsSansScale; + /// the scale factor of the tt font + int fontsTypewriterScale; + /// + Spacing & spacing(); + Spacing const & spacing() const; /// - unsigned int columns; + int secnumdepth; /// - LyXTextClass::PageSides sides; + int tocdepth; /// - string pagestyle; + Language const * language; + /// BranchList: + BranchList & branchlist(); + BranchList const & branchlist() const; + /** + * The input encoding for LaTeX. This can be one of + * - \c auto: find out the input encoding from the used languages + * - \c default: ditto + * - any encoding supported by the inputenc package + * The encoding of the LyX file is always utf8 and has nothing to + * do with this setting. + * The difference between \c auto and \c default is that \c auto also + * causes loading of the inputenc package, while \c default does not. + * \c default will not work unless the user takes additional measures + * (such as using special environments like the CJK environment from + * CJK.sty). + * \c default can be seen as an unspecified 8bit encoding, since LyX + * does not interpret it in any way apart from display on screen. + */ + std::string inputenc; + /// The main encoding used by this buffer for LaTeX output. + /// Individual pieces of text can use different encodings. + Encoding const & encoding() const; + /// + std::string preamble; + /// + std::string options; + /// + std::string float_placement; + /// + unsigned int columns; /// - block temp_bullets; + LyXTextClass::PageSides sides; /// - block user_defined_bullets; + std::string pagestyle; + /// \param index should lie in the range 0 <= \c index <= 3. + Bullet & temp_bullet(size_type index); + Bullet const & temp_bullet(size_type index) const; + /// \param index should lie in the range 0 <= \c index <= 3. + Bullet & user_defined_bullet(size_type index); + Bullet const & user_defined_bullet(size_type index) const; /// void readPreamble(LyXLex &); /// @@ -202,16 +220,77 @@ public: /// void readGraphicsDriver(LyXLex &); /// - bool use_amsmath; + void readBullets(LyXLex &); + /// + void readBulletsLaTeX(LyXLex &); + + /// Whether to load a package such as amsmath or esint. + /// The enum values must not be changed (file format!) + enum Package { + /// Don't load the package. For experts only. + package_off = 0, + /// Load the package if needed (recommended) + package_auto = 1, + /// Always load the package (e.g. if the document contains + /// some ERT that needs the package) + package_on = 2 + }; + /// Whether and how to load amsmath + Package use_amsmath; + /// Whether and how to load esint + Package use_esint; + /// + biblio::CiteEngine cite_engine; + /// + bool use_bibtopic; + /// revision tracking for this buffer ? + bool trackChanges; + /** This param decides whether change tracking marks should be output + * (using the dvipost package) or if the current "state" of the + * document should be output instead. Since dvipost needs dvi + * specials, it only works with dvi/ps output (the param will be + * ignored with other output flavors and disabled when dvipost is + * not installed). + */ + bool outputChanges; /// Time ago we agreed that this was a buffer property [ale990407] - string parentname; -private: + std::string parentname; /// - friend class Buffer; - /** This is the amount of space used for paragraph_separation "skip", - and for detached paragraphs in "indented" documents. - */ - VSpace defskip; + bool compressed; + + /// the author list for the document + AuthorList & authors(); + AuthorList const & authors() const; + + /// map of the file's author IDs to buffer author IDs + std::vector author_map; + /// + std::string const dvips_options() const; + /// + std::string const paperSizeName() const; + /// + std::string const babelCall(std::string const & lang_opts) const; + /// set up the document fonts + std::string const loadFonts(std::string const & rm, + std::string const & sf, std::string const & tt, + bool const & sc, bool const & osf, + int const & sfscale, int const & ttscale) const; + /// path of the current buffer + std::string filepath; + +private: + /** Use the Pimpl idiom to hide those member variables that would otherwise + * drag in other header files. + */ + class Impl; + class MemoryTraits { + public: + static Impl * clone(Impl const *); + static void destroy(Impl *); + }; + support::copied_ptr pimpl_; }; +} // namespace lyx + #endif