]> git.lyx.org Git - lyx.git/blobdiff - src/ParagraphParameters.cpp
Fix bug 4212
[lyx.git] / src / ParagraphParameters.cpp
index afe57d6bd53d7f09bf292e1e3f32031724470262..905f9f6cdbccd7bb02037ad81757823c2640df26 100644 (file)
@@ -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';