X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraphParameters.cpp;h=905f9f6cdbccd7bb02037ad81757823c2640df26;hb=6e974a3d42b1e14daf2cdaac65d33aad4876063a;hp=afe57d6bd53d7f09bf292e1e3f32031724470262;hpb=3fcc6711f09883c6391429c00d9964d5665f076e;p=lyx.git diff --git a/src/ParagraphParameters.cpp b/src/ParagraphParameters.cpp index afe57d6bd5..905f9f6cdb 100644 --- a/src/ParagraphParameters.cpp +++ b/src/ParagraphParameters.cpp @@ -37,19 +37,12 @@ using std::string; namespace lyx { +//NOTE The order of these MUST be the same as in Layout.h. static char const * const string_align[] = { - "block", "left", "right", "center", "" + "block", "left", "right", "center", "default", "" }; -static int findToken(char const * const str[], string const & search_token) -{ - return search_token == "default" ? - 0 : - support::findToken(str, search_token); -} - - ParagraphParameters::ParagraphParameters() : noindent_(false), start_of_appendix_(false), appendix_(false), @@ -180,8 +173,19 @@ void ParagraphParameters::leftIndent(Length const & li) } -void ParagraphParameters::read(Lexer & lex) +void ParagraphParameters::read(std::string str, bool merge) +{ + std::istringstream is(str); + Lexer lex(0, 0); + 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(); @@ -196,6 +200,12 @@ 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(); Length value(lex.getString()); @@ -205,7 +215,10 @@ void ParagraphParameters::read(Lexer & lex) } 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)); @@ -220,7 +233,7 @@ void ParagraphParameters::read(Lexer & lex) } } else if (token == "\\align") { lex.next(); - int tmpret = findToken(string_align, lex.getString()); + int tmpret = support::findToken(string_align, lex.getString()); if (tmpret == -1) ++tmpret; align(LyXAlignment(1 << tmpret)); @@ -235,6 +248,27 @@ void ParagraphParameters::read(Lexer & lex) } +void ParagraphParameters::apply( + ParagraphParameters const & p, Layout const & layout) +{ + spacing(p.spacing()); + // does the layout allow the new alignment? + if (p.align() & layout.alignpossible) + align(p.align()); + labelWidthString(p.labelWidthString()); + noindent(p.noindent()); +} + + +//FIXME This needs to be made a real method, so that getStatus() +//can return sensible information. +bool ParagraphParameters::canApply( + ParagraphParameters const & /*params*/, Layout const & /*layout*/) +{ + return true; +} + + void ParagraphParameters::write(ostream & os) const { // Maybe the paragraph has special spacing @@ -282,7 +316,7 @@ void params2string(Paragraph const & par, string & data) ostringstream os; params.write(os); - Layout_ptr const & layout = par.layout(); + LayoutPtr const & layout = par.layout(); // Is alignment possible os << "\\alignpossible " << layout->alignpossible << '\n';