2 * \file ParagraphParameters.C
3 * This file is part of LyX, the document processor.
4 * Licence details can be found in the file COPYING.
6 * \author Lars Gullik Bjønnes
7 * \author Angus Leeming
10 * \author Jürgen Vigna
12 * Full author contact details are available in file CREDITS.
17 #include "ParagraphParameters.h"
20 #include "BufferView.h"
22 #include "lyxlayout.h"
25 #include "paragraph.h"
26 #include "tex-strings.h"
28 #include "frontends/LyXView.h"
30 #include "support/lstrings.h"
31 #include "support/std_sstream.h"
33 using lyx::support::rtrim;
35 using std::istringstream;
37 using std::ostringstream;
41 ParagraphParameters::ParagraphParameters()
43 start_of_appendix_(false), appendix_(false),
44 align_(LYX_ALIGN_LAYOUT), depth_(0)
48 void ParagraphParameters::clear()
50 operator=(ParagraphParameters());
54 ParagraphParameters::depth_type ParagraphParameters::depth() const
60 bool ParagraphParameters::sameLayout(ParagraphParameters const & pp) const
62 return align_ == pp.align_
63 && spacing_ == pp.spacing_
64 && noindent_ == pp.noindent_
65 && depth_ == pp.depth_;
69 Spacing const & ParagraphParameters::spacing() const
75 void ParagraphParameters::spacing(Spacing const & s)
81 bool ParagraphParameters::noindent() const
87 void ParagraphParameters::noindent(bool ni)
93 LyXAlignment ParagraphParameters::align() const
99 void ParagraphParameters::align(LyXAlignment la)
105 void ParagraphParameters::depth(depth_type d)
111 bool ParagraphParameters::startOfAppendix() const
113 return start_of_appendix_;
117 void ParagraphParameters::startOfAppendix(bool soa)
119 start_of_appendix_ = soa;
123 bool ParagraphParameters::appendix() const
129 void ParagraphParameters::appendix(bool a)
135 string const & ParagraphParameters::labelString() const
141 void ParagraphParameters::labelString(string const & ls)
147 string const & ParagraphParameters::labelWidthString() const
149 return labelwidthstring_;
153 void ParagraphParameters::labelWidthString(string const & lws)
155 labelwidthstring_ = lws;
159 LyXLength const & ParagraphParameters::leftIndent() const
165 void ParagraphParameters::leftIndent(LyXLength const & li)
171 void ParagraphParameters::read(LyXLex & lex)
175 string const token = lex.getString();
180 if (token[0] != '\\') {
181 lex.pushToken(token);
185 if (token == "\\noindent") {
187 } else if (token == "\\leftindent") {
189 LyXLength value(lex.getString());
191 } else if (token == "\\start_of_appendix") {
192 startOfAppendix(true);
193 } else if (token == "\\paragraph_spacing") {
195 string const tmp = rtrim(lex.getString());
196 if (tmp == "single") {
197 spacing(Spacing(Spacing::Single));
198 } else if (tmp == "onehalf") {
199 spacing(Spacing(Spacing::Onehalf));
200 } else if (tmp == "double") {
201 spacing(Spacing(Spacing::Double));
202 } else if (tmp == "other") {
204 spacing(Spacing(Spacing::Other,
207 lex.printError("Unknown spacing token: '$$Token'");
209 } else if (token == "\\align") {
210 int tmpret = lex.findToken(string_align);
213 align(LyXAlignment(1 << tmpret));
214 } else if (token == "\\labelwidthstring") {
216 labelWidthString(lex.getString());
218 lex.pushToken(token);
225 void ParagraphParameters::write(ostream & os) const
227 // Maybe the paragraph has special spacing
228 spacing().writeFile(os, true);
230 // The labelwidth string used in lists.
231 if (!labelWidthString().empty())
232 os << "\\labelwidthstring "
233 << labelWidthString() << '\n';
235 // Start of appendix?
236 if (startOfAppendix())
237 os << "\\start_of_appendix ";
243 // Do we have a manual left indent?
244 if (!leftIndent().zero())
245 os << "\\leftindent " << leftIndent().asString()
249 if (align() != LYX_ALIGN_LAYOUT) {
252 case LYX_ALIGN_LEFT: h = 1; break;
253 case LYX_ALIGN_RIGHT: h = 2; break;
254 case LYX_ALIGN_CENTER: h = 3; break;
255 default: h = 0; break;
257 os << "\\align " << string_align[h] << ' ';
262 void params2string(Paragraph const & par, string & data)
265 ParagraphParameters params = par.params();
267 // This needs to be done separately
268 params.labelWidthString(par.getLabelWidthString());
271 LyXLayout_ptr const & layout = par.layout();
272 if (params.align() == LYX_ALIGN_LAYOUT)
273 params.align(layout->align);
278 // Is alignment possible
279 os << '\n' << "\\alignpossible " << layout->alignpossible << '\n';
281 /// set default alignment
282 os << "\\aligndefault " << layout->align << '\n';
284 /// is paragraph in inset
285 os << "\\ininset " << (par.inInset()?1:0) << '\n';
292 bool operator==(ParagraphParameeters const & ps1,
293 ParagraphParameeters const & ps2)
296 ps1.spacing == ps2.spacing
297 && ps1.noindent == ps2.noindent
298 && ps1.align == ps2.align
299 && ps1.depth == ps2.depth
300 && ps1.start_of_appendix == ps2.start_of_appendix
301 && ps1.appendix == ps2.appendix
302 && ps1.labelstring == ps2.labelstring
303 && ps1.labelwidthstring == ps2.labelwidthstring
304 && ps1.leftindent == ps2.leftindent;