X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraphParameters.cpp;h=72b2286b1284588385a5adaa924fa863dbae2f14;hb=dfc3db773ac79e33b828b2d2b4a008c8a37cd4e9;hp=ed3bf281d3a9322119c383537e81ec97c4db25e4;hpb=39e79d8602920eefe36e898c9f415afb979521b2;p=lyx.git diff --git a/src/ParagraphParameters.cpp b/src/ParagraphParameters.cpp index ed3bf281d3..72b2286b12 100644 --- a/src/ParagraphParameters.cpp +++ b/src/ParagraphParameters.cpp @@ -3,11 +3,11 @@ * 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 Angus Leeming * \author John Levon - * \author André Pönitz - * \author Jürgen Vigna + * \author André Pönitz + * \author Jürgen Vigna * * Full author contact details are available in file CREDITS. */ @@ -16,34 +16,26 @@ #include "ParagraphParameters.h" -#include "Buffer.h" -#include "gettext.h" -#include "LyXLayout.h" +#include "Layout.h" #include "Lexer.h" -#include "LyXText.h" #include "Paragraph.h" -#include "tex-strings.h" +#include "support/debug.h" +#include "support/docstring.h" #include "support/lstrings.h" #include -namespace lyx { - -using support::rtrim; +using namespace std; +using namespace lyx::support; -using std::istringstream; -using std::ostream; -using std::ostringstream; -using std::string; +namespace lyx { -static int findToken(char const * const str[], string const & search_token) -{ - return search_token == "default" ? - 0 : - support::findToken(str, search_token); -} +//NOTE The order of these MUST be the same as in Layout.h. +static char const * const string_align[] = { + "block", "left", "right", "center", "default", "" +}; ParagraphParameters::ParagraphParameters() @@ -164,20 +156,31 @@ void ParagraphParameters::labelWidthString(docstring const & lws) } -LyXLength const & ParagraphParameters::leftIndent() const +Length const & ParagraphParameters::leftIndent() const { return leftindent_; } -void ParagraphParameters::leftIndent(LyXLength const & li) +void ParagraphParameters::leftIndent(Length const & li) { leftindent_ = li; } -void ParagraphParameters::read(Lexer & lex) +void ParagraphParameters::read(string const & str, bool merge) +{ + istringstream is(str); + Lexer lex; + lex.setStream(is); + read(lex, merge); +} + + +void ParagraphParameters::read(Lexer & lex, bool merge) { + if (!merge) + clear(); while (lex.isOK()) { lex.nextToken(); string const token = lex.getString(); @@ -192,16 +195,25 @@ void ParagraphParameters::read(Lexer & lex) if (token == "\\noindent") { noindent(true); + } else if (token == "\\indent") { + //not found in LyX files but can be used with lfuns + noindent(false); + } else if (token == "\\indent-toggle") { + //not found in LyX files but can be used with lfuns + noindent(!noindent()); } else if (token == "\\leftindent") { lex.next(); - LyXLength value(lex.getString()); + Length value(lex.getString()); leftIndent(value); } else if (token == "\\start_of_appendix") { startOfAppendix(true); } else if (token == "\\paragraph_spacing") { lex.next(); string const tmp = rtrim(lex.getString()); - if (tmp == "single") { + if (tmp == "default") { + //not found in LyX files but can be used with lfuns + spacing(Spacing(Spacing::Default)); + } else if (tmp == "single") { spacing(Spacing(Spacing::Single)); } else if (tmp == "onehalf") { spacing(Spacing(Spacing::Onehalf)); @@ -231,6 +243,18 @@ void ParagraphParameters::read(Lexer & lex) } +void ParagraphParameters::apply( + ParagraphParameters const & params, Layout const & layout) +{ + spacing(params.spacing()); + // does the layout allow the new alignment? + if (params.align() & layout.alignpossible) + align(params.align()); + labelWidthString(params.labelWidthString()); + noindent(params.noindent()); +} + + void ParagraphParameters::write(ostream & os) const { // Maybe the paragraph has special spacing @@ -275,19 +299,16 @@ void params2string(Paragraph const & par, string & data) // This needs to be done separately params.labelWidthString(par.getLabelWidthString()); - // Alignment - LyXLayout_ptr const & layout = par.layout(); - if (params.align() == LYX_ALIGN_LAYOUT) - params.align(layout->align); - ostringstream os; params.write(os); + Layout const & layout = par.layout(); + // Is alignment possible - os << "\\alignpossible " << layout->alignpossible << '\n'; + os << "\\alignpossible " << layout.alignpossible << '\n'; /// set default alignment - os << "\\aligndefault " << layout->align << '\n'; + os << "\\aligndefault " << layout.align << '\n'; /// paragraph is always in inset. This is redundant. os << "\\ininset " << 1 << '\n'; @@ -296,6 +317,12 @@ void params2string(Paragraph const & par, string & data) } +LyXErr & operator<<(LyXErr & os, ParagraphParameters const & parp) { + parp.write(os.stream()); + return os; +} + + /* bool operator==(ParagraphParameeters const & ps1, ParagraphParameeters const & ps2)