- ParameterStruct tmp(*param);
- tmp.leftindent = li;
- set_from_struct(tmp);
-}
-
-#ifndef NO_PEXTRA_REALLY
-int ParagraphParameters::pextraType() const
-{
- return param->pextra_type;
-}
-
-
-void ParagraphParameters::pextraType(int t)
-{
- ParameterStruct tmp(*param);
- tmp.pextra_type = t;
- set_from_struct(tmp);
-}
-
-
-string const & ParagraphParameters::pextraWidth() const
-{
- return param->pextra_width;
-}
-
-
-void ParagraphParameters::pextraWidth(string const & w)
-{
- ParameterStruct tmp(*param);
- tmp.pextra_width = w;
- set_from_struct(tmp);
-}
-
-
-string const & ParagraphParameters::pextraWidthp() const
-{
- return param->pextra_widthp;
+ leftindent_ = li;
+}
+
+
+void ParagraphParameters::read(LyXLex & lex)
+{
+ while (lex.isOK()) {
+ lex.nextToken();
+ string const token = lex.getString();
+
+ if (token.empty())
+ continue;
+
+ if (token[0] != '\\') {
+ lex.pushToken(token);
+ break;
+ }
+
+ if (token == "\\noindent") {
+ noindent(true);
+ } else if (token == "\\leftindent") {
+ lex.next();
+ LyXLength 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") {
+ spacing(Spacing(Spacing::Single));
+ } else if (tmp == "onehalf") {
+ spacing(Spacing(Spacing::Onehalf));
+ } else if (tmp == "double") {
+ spacing(Spacing(Spacing::Double));
+ } else if (tmp == "other") {
+ lex.next();
+ spacing(Spacing(Spacing::Other,
+ lex.getString()));
+ } else {
+ lex.printError("Unknown spacing token: '$$Token'");
+ }
+ } else if (token == "\\align") {
+ lex.next();
+ int tmpret = findToken(string_align, lex.getString());
+ if (tmpret == -1)
+ ++tmpret;
+ align(LyXAlignment(1 << tmpret));
+ } else if (token == "\\labelwidthstring") {
+ lex.eatLine();
+ labelWidthString(lex.getDocString());
+ } else {
+ lex.pushToken(token);
+ break;
+ }
+ }
+}
+
+
+void ParagraphParameters::write(ostream & os) const
+{
+ // Maybe the paragraph has special spacing
+ spacing().writeFile(os, true);
+
+ // The labelwidth string used in lists.
+ if (!labelWidthString().empty())
+ os << "\\labelwidthstring "
+ << to_utf8(labelWidthString()) << '\n';
+
+ // Start of appendix?
+ if (startOfAppendix())
+ os << "\\start_of_appendix\n";
+
+ // Noindent?
+ if (noindent())
+ os << "\\noindent\n";
+
+ // Do we have a manual left indent?
+ if (!leftIndent().zero())
+ os << "\\leftindent " << leftIndent().asString() << '\n';
+
+ // Alignment?
+ if (align() != LYX_ALIGN_LAYOUT) {
+ int h = 0;
+ switch (align()) {
+ case LYX_ALIGN_LEFT: h = 1; break;
+ case LYX_ALIGN_RIGHT: h = 2; break;
+ case LYX_ALIGN_CENTER: h = 3; break;
+ default: h = 0; break;
+ }
+ os << "\\align " << string_align[h] << '\n';
+ }
+}
+
+
+void params2string(Paragraph const & par, string & data)
+{
+ // A local copy
+ ParagraphParameters params = par.params();
+
+ // 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);
+
+ // Is alignment possible
+ os << "\\alignpossible " << layout->alignpossible << '\n';
+
+ /// set default alignment
+ os << "\\aligndefault " << layout->align << '\n';
+
+ /// paragraph is always in inset. This is redundant.
+ os << "\\ininset " << 1 << '\n';
+
+ data = os.str();
+}
+
+
+/*
+bool operator==(ParagraphParameeters const & ps1,
+ ParagraphParameeters const & ps2)
+{
+ return
+ ps1.spacing == ps2.spacing
+ && ps1.noindent == ps2.noindent
+ && ps1.align == ps2.align
+ && ps1.depth == ps2.depth
+ && ps1.start_of_appendix == ps2.start_of_appendix
+ && ps1.appendix == ps2.appendix
+ && ps1.labelstring == ps2.labelstring
+ && ps1.labelwidthstring == ps2.labelwidthstring
+ && ps1.leftindent == ps2.leftindent;