X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2Fbufferparams.h;h=5951f830114577da9f71f54bc626453634044ba7;hb=65ca7003ba47b7348610393a9a0d2d309b4e9702;hp=e2f6933c194d98f823a7eadea942e0c9f324c550;hpb=27de1486ca34aaad446adb798d71a77d6f6304da;p=lyx.git diff --git a/src/bufferparams.h b/src/bufferparams.h index e2f6933c19..5951f83011 100644 --- a/src/bufferparams.h +++ b/src/bufferparams.h @@ -1,154 +1,247 @@ // -*- C++ -*- -/* This file is part of - * ====================================================== - * - * LyX, The Document Processor - * - * Copyright (C) 1995 1996 Matthias Ettrich - * and 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 +#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" -/** - 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. - */ +#include "support/copied_ptr.h" +#include "support/types.h" + +#include + + +class AuthorList; +class BranchList; +class Bullet; +class LyXLex; +class LatexFeatures; +class Spacing; +class TexRow; +class VSpace; +class Language; + + +namespace lyx { +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 +} // namespace lyx + + +/** 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. + */ class BufferParams { public: - //@Man: Constructors and Deconstructors - //@{ + /// + enum PARSEP { + /// + PARSEP_INDENT, + /// + PARSEP_SKIP + }; /// BufferParams(); - // /// - //BufferParams(const 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); - /// Dummy destructor to shut up gcc - virtual ~BufferParams() {} - /// - void writeFile(FILE *); + 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(std::ostream &, LaTeXFeatures &, TexRow &) const; /// void useClassDefaults(); /// - VSpace getDefSkip() const { return defskip; } + bool hasClassDefaults() const; /// - void setDefSkip(VSpace 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. - */ - char paragraph_separation; // add approp. signedness + * 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; /// - LString fontsize; + std::string fontsize; /// - signed char textclass; + lyx::textclass_type textclass; + /// + LyXTextClass const & getLyXTextClass() const; + + /// returns the main font for the buffer (document) + LyXFont const getFont() const; /* this are for the PaperLayout */ - /// - char papersize; /* the general papersize (papersize2 or paperpackage */ // add approp. signedness - /// - char papersize2; /* the selected Geometry papersize */ // add approp. signedness - /// - char paperpackage; /* a special paperpackage .sty-file */ // add approp. signedness - /// - char orientation; // add approp. signedness - /// - bool use_geometry; - /// - LString paperwidth; - /// - LString paperheight; - /// - LString leftmargin; - /// - LString topmargin; - /// - LString rightmargin; - /// - LString bottommargin; - /// - LString headheight; - /// - LString headsep; - /// - LString footskip; - - /* some LaTeX options */ - /// The graphics driver - LString graphicsDriver; + /// the papersize + PAPER_SIZE papersize; + /// + PAPER_ORIENTATION orientation; + /// use custom margins + bool use_geometry; + /// + std::string paperwidth; + /// + std::string paperheight; + /// + std::string leftmargin; + /// + std::string topmargin; + /// + std::string rightmargin; + /// + std::string bottommargin; + /// + std::string headheight; /// - LString fonts; + std::string headsep; /// - Spacing spacing; + std::string footskip; + + /* some LaTeX options */ + /// The graphics driver + std::string graphicsDriver; /// - signed char secnumdepth; + std::string fonts; /// - signed char tocdepth; + Spacing & spacing(); + Spacing const & spacing() const; /// - LString language; + int secnumdepth; /// - LString inputenc; + int tocdepth; /// - LString preamble; + Language const * language; + /// BranchList: + BranchList & branchlist(); + BranchList const & branchlist() const; /// - LString options; + std::string inputenc; /// - LString float_placement; + std::string preamble; /// - char columns; // add approp. signedness + std::string options; /// - char sides; // add approp. signedness + std::string float_placement; /// - LString pagestyle; + unsigned int columns; /// - Bullet temp_bullets[4]; + LyXTextClass::PageSides sides; /// - Bullet user_defined_bullets[4]; + std::string pagestyle; + /// \param index should lie in the range 0 <= \c index <= 3. + Bullet & temp_bullet(lyx::size_type index); + Bullet const & temp_bullet(lyx::size_type index) const; + /// \param index should lie in the range 0 <= \c index <= 3. + Bullet & user_defined_bullet(lyx::size_type index); + Bullet const & user_defined_bullet(lyx::size_type index) const; /// - void Copy(BufferParams const &p); + void readPreamble(LyXLex &); /// - virtual void readPreamble(LyXLex &); + void readLanguage(LyXLex &); /// - virtual void readLanguage(LyXLex &); + void readGraphicsDriver(LyXLex &); /// - virtual void readGraphicsDriver(LyXLex &); - /// do we allow accents on all chars in this buffer - bool allowAccents; + void readBullets(LyXLex &); /// - bool use_amsmath; + void readBulletsLaTeX(LyXLex &); + + /// use AMS package, not, or auto + enum AMS { + AMS_OFF, + AMS_AUTO, + AMS_ON + }; + AMS use_amsmath; + /// + lyx::biblio::CiteEngine cite_engine; + /// + bool use_bibtopic; + /// revision tracking for this buffer ? + bool tracking_changes; + /** This param decides if 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 dbipost is + * not installed). + */ + bool output_changes; /// Time ago we agreed that this was a buffer property [ale990407] - LString parentname; -protected: -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; + +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 *); + }; + lyx::support::copied_ptr pimpl_; }; #endif