X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FParagraphParameters.C;h=1f5da6720a93de1cb22715edf5508c2a1a17f7d3;hb=e7fc677261bd14fdf159e594fcf422e985c72664;hp=958e3b1f416c8a2669721dae940728cd0cc86a17;hpb=92d522b7f1be6046adcac062c558bbf0bf021612;p=lyx.git diff --git a/src/ParagraphParameters.C b/src/ParagraphParameters.C index 958e3b1f41..1f5da6720a 100644 --- a/src/ParagraphParameters.C +++ b/src/ParagraphParameters.C @@ -1,282 +1,191 @@ +/** + * \file ParagraphParameters.C + * This file is part of LyX, the document processor. + * Licence details can be found in the file COPYING. + * + * \author Lars Gullik Bjønnes + * \author Angus Leeming + * \author John Levon + * \author André Pönitz + * \author Jürgen Vigna + * + * Full author contact details are available in file CREDITS. + */ + #include #include "ParagraphParameters.h" -#include "ParameterStruct.h" -#include "tex-strings.h" -#include "lyxlex.h" #include "buffer.h" #include "BufferView.h" -#include "Lsstream.h" #include "gettext.h" -#include "paragraph.h" +#include "lyxlayout.h" +#include "lyxlex.h" #include "lyxtext.h" -#include "Lsstream.h" +#include "paragraph.h" +#include "tex-strings.h" #include "frontends/LyXView.h" #include "support/lstrings.h" -#include +#include -using namespace lyx::support; +using lyx::support::rtrim; +using std::istringstream; using std::ostream; +using std::ostringstream; +using std::string; -// Initialize static member var. -ShareContainer ParagraphParameters::container; - -ParagraphParameters::ParagraphParameters() -{ - ParameterStruct tmp; - set_from_struct(tmp); -} - - -void ParagraphParameters::clear() +// anonym namespace +namespace { +int findToken(char const * const str[], string const search_token) { - ParameterStruct tmp(*param); - tmp.line_top = false; - tmp.line_bottom = false; - tmp.pagebreak_top = false; - tmp.pagebreak_bottom = false; - tmp.added_space_top = VSpace(VSpace::NONE); - tmp.added_space_bottom = VSpace(VSpace::NONE); - tmp.spacing.set(Spacing::Default); - tmp.align = LYX_ALIGN_LAYOUT; - tmp.depth = 0; - tmp.noindent = false; - tmp.labelstring.erase(); - tmp.labelwidthstring.erase(); - tmp.start_of_appendix = false; - set_from_struct(tmp); -} + int i = 0; + if (search_token != "default") { + while (str[i][0] && str[i] != search_token) { + ++i; + } + if (!str[i][0]) { + i = -1; + } + } -bool ParagraphParameters::sameLayout(ParagraphParameters const & pp) const -{ - return param->align == pp.param->align && - param->line_bottom == pp.param->line_bottom && - param->pagebreak_bottom == pp.param->pagebreak_bottom && - param->added_space_bottom == pp.param->added_space_bottom && - - param->line_top == pp.param->line_top && - param->pagebreak_top == pp.param->pagebreak_top && - param->added_space_top == pp.param->added_space_top && - param->spacing == pp.param->spacing && - param->noindent == pp.param->noindent && - param->depth == pp.param->depth; + return i; } - -void ParagraphParameters::set_from_struct(ParameterStruct const & ps) -{ - // get new param from container with tmp as template - param = container.get(ps); } -VSpace const & ParagraphParameters::spaceTop() const -{ - return param->added_space_top; -} +ParagraphParameters::ParagraphParameters() + : noindent_(false), + start_of_appendix_(false), appendix_(false), + align_(LYX_ALIGN_LAYOUT), depth_(0) +{} -void ParagraphParameters::spaceTop(VSpace const & vs) +void ParagraphParameters::clear() { - ParameterStruct tmp(*param); - tmp.added_space_top = vs; - set_from_struct(tmp); + operator=(ParagraphParameters()); } -VSpace const & ParagraphParameters::spaceBottom() const +ParagraphParameters::depth_type ParagraphParameters::depth() const { - return param->added_space_bottom; + return depth_; } -void ParagraphParameters::spaceBottom(VSpace const & vs) +bool ParagraphParameters::sameLayout(ParagraphParameters const & pp) const { - ParameterStruct tmp(*param); - tmp.added_space_bottom = vs; - set_from_struct(tmp); + return align_ == pp.align_ + && spacing_ == pp.spacing_ + && noindent_ == pp.noindent_ + && depth_ == pp.depth_; } Spacing const & ParagraphParameters::spacing() const { - return param->spacing; + return spacing_; } void ParagraphParameters::spacing(Spacing const & s) { - ParameterStruct tmp(*param); - tmp.spacing = s; - set_from_struct(tmp); + spacing_ = s; } bool ParagraphParameters::noindent() const { - return param->noindent; + return noindent_; } void ParagraphParameters::noindent(bool ni) { - ParameterStruct tmp(*param); - tmp.noindent = ni; - set_from_struct(tmp); -} - - -bool ParagraphParameters::lineTop() const -{ - return param->line_top; -} - - -void ParagraphParameters::lineTop(bool lt) -{ - ParameterStruct tmp(*param); - tmp.line_top = lt; - set_from_struct(tmp); -} - - -bool ParagraphParameters::lineBottom() const -{ - return param->line_bottom; -} - - -void ParagraphParameters::lineBottom(bool lb) -{ - ParameterStruct tmp(*param); - tmp.line_bottom = lb; - set_from_struct(tmp); -} - - -bool ParagraphParameters::pagebreakTop() const -{ - return param->pagebreak_top; -} - - -void ParagraphParameters::pagebreakTop(bool pbt) -{ - ParameterStruct tmp(*param); - tmp.pagebreak_top = pbt; - set_from_struct(tmp); -} - - -bool ParagraphParameters::pagebreakBottom() const -{ - return param->pagebreak_bottom; -} - - -void ParagraphParameters::pagebreakBottom(bool pbb) -{ - ParameterStruct tmp(*param); - tmp.pagebreak_bottom = pbb; - set_from_struct(tmp); + noindent_ = ni; } LyXAlignment ParagraphParameters::align() const { - return param->align; + return align_; } void ParagraphParameters::align(LyXAlignment la) { - ParameterStruct tmp(*param); - tmp.align = la; - set_from_struct(tmp); + align_ = la; } void ParagraphParameters::depth(depth_type d) { - ParameterStruct tmp(*param); - tmp.depth = d; - set_from_struct(tmp); + depth_ = d; } bool ParagraphParameters::startOfAppendix() const { - return param->start_of_appendix; + return start_of_appendix_; } void ParagraphParameters::startOfAppendix(bool soa) { - ParameterStruct tmp(*param); - tmp.start_of_appendix = soa; - set_from_struct(tmp); + start_of_appendix_ = soa; } bool ParagraphParameters::appendix() const { - return param->appendix; + return appendix_; } void ParagraphParameters::appendix(bool a) { - ParameterStruct tmp(*param); - tmp.appendix = a; - set_from_struct(tmp); + appendix_ = a; } string const & ParagraphParameters::labelString() const { - return param->labelstring; + return labelstring_; } void ParagraphParameters::labelString(string const & ls) { - ParameterStruct tmp(*param); - tmp.labelstring = ls; - set_from_struct(tmp); + labelstring_ = ls; } string const & ParagraphParameters::labelWidthString() const { - return param->labelwidthstring; + return labelwidthstring_; } void ParagraphParameters::labelWidthString(string const & lws) { - ParameterStruct tmp(*param); - tmp.labelwidthstring = lws; - set_from_struct(tmp); + labelwidthstring_ = lws; } LyXLength const & ParagraphParameters::leftIndent() const { - return param->leftindent; + return leftindent_; } void ParagraphParameters::leftIndent(LyXLength const & li) { - ParameterStruct tmp(*param); - tmp.leftindent = li; - set_from_struct(tmp); + leftindent_ = li; } @@ -297,21 +206,9 @@ void ParagraphParameters::read(LyXLex & lex) if (token == "\\noindent") { noindent(true); } else if (token == "\\leftindent") { - lex.nextToken(); + lex.next(); LyXLength value(lex.getString()); leftIndent(value); - } else if (token == "\\fill_top") { - spaceTop(VSpace(VSpace::VFILL)); - } else if (token == "\\fill_bottom") { - spaceBottom(VSpace(VSpace::VFILL)); - } else if (token == "\\line_top") { - lineTop(true); - } else if (token == "\\line_bottom") { - lineBottom(true); - } else if (token == "\\pagebreak_top") { - pagebreakTop(true); - } else if (token == "\\pagebreak_bottom") { - pagebreakBottom(true); } else if (token == "\\start_of_appendix") { startOfAppendix(true); } else if (token == "\\paragraph_spacing") { @@ -326,33 +223,16 @@ void ParagraphParameters::read(LyXLex & lex) } else if (tmp == "other") { lex.next(); spacing(Spacing(Spacing::Other, - lex.getFloat())); + lex.getString())); } else { lex.printError("Unknown spacing token: '$$Token'"); } } else if (token == "\\align") { - int tmpret = lex.findToken(string_align); + lex.next(); + int tmpret = findToken(string_align, lex.getString()); if (tmpret == -1) ++tmpret; align(LyXAlignment(1 << tmpret)); - } else if (token == "\\added_space_top") { - lex.nextToken(); - VSpace value = VSpace(lex.getString()); - // only add the length when value > 0 or - // with option keep - if ((value.length().len().value() != 0) || - value.keep() || - (value.kind() != VSpace::LENGTH)) - spaceTop(value); - } else if (token == "\\added_space_bottom") { - lex.nextToken(); - VSpace value = VSpace(lex.getString()); - // only add the length when value > 0 or - // with option keep - if ((value.length().len().value() != 0) || - value.keep() || - (value.kind() != VSpace::LENGTH)) - spaceBottom(value); } else if (token == "\\labelwidthstring") { lex.eatLine(); labelWidthString(lex.getString()); @@ -366,14 +246,6 @@ void ParagraphParameters::read(LyXLex & lex) void ParagraphParameters::write(ostream & os) const { - // Maybe some vertical spaces. - if (spaceTop().kind() != VSpace::NONE) - os << "\\added_space_top " - << spaceTop().asLyXCommand() << ' '; - if (spaceBottom().kind() != VSpace::NONE) - os << "\\added_space_bottom " - << spaceBottom().asLyXCommand() << ' '; - // Maybe the paragraph has special spacing spacing().writeFile(os, true); @@ -382,30 +254,17 @@ void ParagraphParameters::write(ostream & os) const os << "\\labelwidthstring " << labelWidthString() << '\n'; - // Lines above or below? - if (lineTop()) - os << "\\line_top "; - if (lineBottom()) - os << "\\line_bottom "; - - // Pagebreaks above or below? - if (pagebreakTop()) - os << "\\pagebreak_top "; - if (pagebreakBottom()) - os << "\\pagebreak_bottom "; - // Start of appendix? if (startOfAppendix()) - os << "\\start_of_appendix "; + os << "\\start_of_appendix\n"; // Noindent? if (noindent()) - os << "\\noindent "; + os << "\\noindent\n"; // Do we have a manual left indent? if (!leftIndent().zero()) - os << "\\leftindent " << leftIndent().asString() - << ' '; + os << "\\leftindent " << leftIndent().asString() << '\n'; // Alignment? if (align() != LYX_ALIGN_LAYOUT) { @@ -416,39 +275,11 @@ void ParagraphParameters::write(ostream & os) const case LYX_ALIGN_CENTER: h = 3; break; default: h = 0; break; } - os << "\\align " << string_align[h] << ' '; + os << "\\align " << string_align[h] << '\n'; } } -void setParagraphParams(BufferView & bv, string const & data) -{ - istringstream is(STRCONV(data)); - LyXLex lex(0,0); - lex.setStream(is); - - ParagraphParameters params; - params.read(lex); - - LyXText * text = bv.getLyXText(); - text->setParagraph(params.lineTop(), - params.lineBottom(), - params.pagebreakTop(), - params.pagebreakBottom(), - params.spaceTop(), - params.spaceBottom(), - params.spacing(), - params.align(), - params.labelWidthString(), - params.noindent()); - - // Actually apply these settings - bv.update(text, BufferView::SELECT); - - bv.owner()->message(_("Paragraph layout set")); -} - - void params2string(Paragraph const & par, string & data) { // A local copy @@ -466,13 +297,31 @@ void params2string(Paragraph const & par, string & data) params.write(os); // Is alignment possible - os << '\n' << "\\alignpossible " << layout->alignpossible << '\n'; + os << "\\alignpossible " << layout->alignpossible << '\n'; /// set default alignment os << "\\aligndefault " << layout->align << '\n'; - /// is paragraph in inset - os << "\\ininset " << (par.inInset()?1:0) << '\n'; + /// paragraph is always in inset. This is redundant. + os << "\\ininset " << 1 << '\n'; - data = STRCONV(os.str()); + 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; } +*/