]> git.lyx.org Git - features.git/blobdiff - src/bufferparams.C
Replace LString.h with support/std_string.h,
[features.git] / src / bufferparams.C
index bf70b6a66d2ca086c405f39d027912e88d1b2813..d2b1ab5846a1b6c5f2f271aa2721b87cef4da3a5 100644 (file)
@@ -1,38 +1,36 @@
-/* This file is part of
- * ======================================================
+/**
+ * \file bufferparams.C
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- *           LyX, The Document Processor
+ * \author Alfredo Braunstein
+ * \author Lars Gullik Bjønnes
+ * \author Jean-Marc Lasgouttes
+ * \author John Levon
+ * \author André Pönitz
+ * \author Martin Vermeer
  *
- *          Copyright 1995 Matthias Ettrich
- *           Copyright 1995-2001 The LyX Team.
- *
- * ====================================================== */
+ * Full author contact details are available in file CREDITS.
+ */
 
 #include <config.h>
 
 #include "bufferparams.h"
-#include "tex-strings.h"
-#include "encoding.h"
-#include "layout.h"
-#include "vspace.h"
 #include "debug.h"
-#include "lyxrc.h"
+#include "encoding.h"
+#include "gettext.h"
 #include "language.h"
-#include "lyxtextclasslist.h"
+#include "LaTeXFeatures.h"
+#include "support/std_sstream.h"
 #include "lyxlex.h"
-#include "Lsstream.h"
-#include "author.h"
-#include "gettext.h"
-
-#include "support/lyxalgo.h" // for lyx::count
-#include "support/lyxlib.h"
-#include "support/lstrings.h"
-#include "support/types.h"
+#include "lyxtextclasslist.h"
+#include "tex-strings.h"
+#include "texrow.h"
 
 #include "frontends/Alert.h"
 
-#include <cstdlib>
-#include <algorithm>
+#include "support/lyxalgo.h" // for lyx::count
+
 
 using namespace lyx::support;
 
@@ -73,6 +71,7 @@ BufferParams::BufferParams()
        sides = LyXTextClass::OneSide;
        columns = 1;
        pagestyle = "default";
+       compressed = false;
        for (int iter = 0; iter < 4; ++iter) {
                user_defined_bullets[iter] = ITEMIZE_DEFAULTS[iter];
                temp_bullets[iter] = ITEMIZE_DEFAULTS[iter];
@@ -119,7 +118,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                if (tmpret == -1)
                        ++tmpret;
                paragraph_separation =
-                       static_cast<BufferParams::PARSEP>(tmpret);
+                       static_cast<PARSEP>(tmpret);
        } else if (token == "\\defskip") {
                lex.nextToken();
                defskip = VSpace(lex.getString());
@@ -172,7 +171,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                int tmpret = lex.findToken(string_paperpackages);
                if (tmpret == -1) {
                        ++tmpret;
-                       paperpackage = BufferParams::PACKAGE_NONE;
+                       paperpackage = PACKAGE_NONE;
                } else
                        paperpackage = PAPER_PACKAGES(tmpret);
        } else if (token == "\\use_geometry") {
@@ -180,7 +179,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                use_geometry = lex.getInteger();
        } else if (token == "\\use_amsmath") {
                lex.nextToken();
-               use_amsmath = static_cast<BufferParams::AMS>(
+               use_amsmath = static_cast<AMS>(
                        lex.getInteger());
        } else if (token == "\\use_natbib") {
                lex.nextToken();
@@ -191,6 +190,31 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
        } else if (token == "\\tracking_changes") {
                lex.nextToken();
                tracking_changes = lex.getInteger();
+       } else if (token == "\\branch") {
+               lex.nextToken();
+               string branch = lex.getString();
+               branchlist.add(branch);
+               while (true) {
+                       lex.nextToken();
+                       string const tok = lex.getString();
+                       if (tok == "\\end_branch")
+                               break;
+                       if (tok == "\\selected") {
+                               lex.nextToken();
+                               branchlist.setSelected(branch, lex.getInteger());
+                       }
+                       // not yet operational
+                       if (tok == "\\color") {
+                               lex.nextToken();
+                               string color = lex.getString();
+                               branchlist.setColor(branch, color);
+                               // Update also the LColor table:
+                               if (color == "none") 
+                                       color = lcolor.getX11Name(LColor::background);
+                               lcolor.fill(static_cast<LColor::color>(lcolor.size()), 
+                                               branch, color);
+                       }
+               }
        } else if (token == "\\author") {
                lex.nextToken();
                istringstream ss(STRCONV(lex.getString()));
@@ -202,7 +226,7 @@ string const BufferParams::readToken(LyXLex & lex, string const & token)
                if (tmpret == -1)
                        ++tmpret;
                orientation =
-                       static_cast<BufferParams::PAPER_ORIENTATION>(tmpret);
+                       static_cast<PAPER_ORIENTATION>(tmpret);
        } else if (token == "\\paperwidth") {
                lex.next();
                paperwidth = lex.getString();
@@ -379,6 +403,17 @@ void BufferParams::writeFile(ostream & os) const
           << "\n\\use_numerical_citations " << use_numerical_citations
           << "\n\\paperorientation " << string_orientation[orientation]
           << '\n';
+
+       std::list<Branch>::const_iterator it = branchlist.begin();
+       std::list<Branch>::const_iterator end = branchlist.end();
+       for (; it != end; ++it) {
+               os << "\\branch " << it->getBranch()
+                  << "\n\\selected " << it->getSelected()      
+                  << "\n\\color " << it->getColor()    
+                  << "\n\\end_branch" 
+                  << "\n";
+       }
+
        if (!paperwidth.empty())
                os << "\\paperwidth "
                   << VSpace(paperwidth).asLyXCommand() << '\n';
@@ -959,3 +994,60 @@ void BufferParams::readGraphicsDriver(LyXLex & lex)
                }
        }
 }
+
+
+string const BufferParams::paperSizeName() const
+{
+       char real_papersize = papersize;
+       if (real_papersize == PAPER_DEFAULT)
+               real_papersize = lyxrc.default_papersize;
+
+       switch (real_papersize) {
+       case PAPER_A3PAPER:
+               return "a3";
+       case PAPER_A4PAPER:
+               return "a4";
+       case PAPER_A5PAPER:
+               return "a5";
+       case PAPER_B5PAPER:
+               return "b5";
+       case PAPER_EXECUTIVEPAPER:
+               return "foolscap";
+       case PAPER_LEGALPAPER:
+               return "legal";
+       case PAPER_USLETTER:
+       default:
+               return "letter";
+       }
+}
+
+
+string const BufferParams::dvips_options() const
+{
+       string result;
+
+       if (use_geometry
+           && papersize2 == VM_PAPER_CUSTOM
+           && !lyxrc.print_paper_dimension_flag.empty()
+           && !paperwidth.empty()
+           && !paperheight.empty()) {
+               // using a custom papersize
+               result = lyxrc.print_paper_dimension_flag;
+               result += ' ' + paperwidth;
+               result += ',' + paperheight;
+       } else {
+               string const paper_option = paperSizeName();
+               if (paper_option != "letter" ||
+                   orientation != ORIENTATION_LANDSCAPE) {
+                       // dvips won't accept -t letter -t landscape.
+                       // In all other cases, include the paper size
+                       // explicitly.
+                       result = lyxrc.print_paper_flag;
+                       result += ' ' + paper_option;
+               }
+       }
+       if (orientation == ORIENTATION_LANDSCAPE &&
+           papersize2 != VM_PAPER_CUSTOM)
+               result += ' ' + lyxrc.print_landscape_flag;
+       return result;
+}