#include "Paragraph.h"
+#include "LayoutFile.h"
#include "Buffer.h"
#include "BufferParams.h"
#include "Changes.h"
{
public:
///
- Private(Paragraph * owner);
+ Private(Paragraph * owner, Layout const & layout);
/// "Copy constructor"
Private(Private const &, Paragraph * owner);
///
InsetList insetlist_;
- ///
- LayoutPtr layout_;
-
/// end of label
pos_type begin_of_body_;
typedef std::set<docstring> Words;
///
Words words_;
+ ///
+ Layout const * layout_;
};
} // namespace anon
-Paragraph::Private::Private(Paragraph * owner)
- : owner_(owner), inset_owner_(0), begin_of_body_(0)
+Paragraph::Private::Private(Paragraph * owner, Layout const & layout)
+ : owner_(owner), inset_owner_(0), begin_of_body_(0), layout_(&layout)
{
id_ = paragraph_id++;
text_.reserve(100);
Paragraph::Private::Private(Private const & p, Paragraph * owner)
: owner_(owner), inset_owner_(p.inset_owner_), fontlist_(p.fontlist_),
params_(p.params_), changes_(p.changes_), insetlist_(p.insetlist_),
- layout_(p.layout_), begin_of_body_(p.begin_of_body_), text_(p.text_),
- words_(p.words_)
+ begin_of_body_(p.begin_of_body_), text_(p.text_), words_(p.words_),
+ layout_(p.layout_)
{
id_ = paragraph_id++;
}
//
/////////////////////////////////////////////////////////////////////
-Paragraph::Paragraph()
- : d(new Paragraph::Private(this))
+namespace {
+ Layout const emptyParagraphLayout;
+}
+
+Paragraph::Paragraph()
+ : d(new Paragraph::Private(this, emptyParagraphLayout))
{
itemdepth = 0;
d->params_.clear();
bool Paragraph::hasSameLayout(Paragraph const & par) const
{
- return par.d->layout_ == d->layout_ && d->params_.sameLayout(par.d->params_);
+ return par.d->layout_ == d->layout_
+ && d->params_.sameLayout(par.d->params_);
}
}
-docstring Paragraph::expandLabel(LayoutPtr const & layout,
+docstring Paragraph::expandLabel(Layout const & layout,
BufferParams const & bparams, bool process_appendix) const
{
- TextClass const & tclass = bparams.textClass();
+ DocumentClass const & tclass = bparams.documentClass();
docstring fmt;
if (process_appendix && d->params_.appendix())
- fmt = translateIfPossible(layout->labelstring_appendix(),
+ fmt = translateIfPossible(layout.labelstring_appendix(),
bparams);
else
- fmt = translateIfPossible(layout->labelstring(), bparams);
+ fmt = translateIfPossible(layout.labelstring(), bparams);
- if (fmt.empty() && layout->labeltype == LABEL_COUNTER
- && !layout->counter.empty())
- fmt = "\\the" + layout->counter;
+ if (fmt.empty() && layout.labeltype == LABEL_COUNTER
+ && !layout.counter.empty())
+ fmt = "\\the" + layout.counter;
// handle 'inherited level parts' in 'fmt',
// i.e. the stuff between '@' in '@Section@.\arabic{subsection}'
}
-void Paragraph::applyLayout(LayoutPtr const & new_layout)
+void Paragraph::applyLayout(Layout const & new_layout)
{
- d->layout_ = new_layout;
+ d->layout_ = &new_layout;
LyXAlignment const oldAlign = d->params_.align();
if (!(oldAlign & d->layout_->alignpossible)) {
bool return_value = false;
- LayoutPtr style;
-
- // well we have to check if we are in an inset with unlimited
- // length (all in one row) if that is true then we don't allow
- // any special options in the paragraph and also we don't allow
- // any environment other than the default layout of the text class
- // to be valid!
bool asdefault = forceEmptyLayout();
- if (asdefault)
- style = bparams.textClass().defaultLayout();
- else
- style = d->layout_;
+ Layout const & style = asdefault ?
+ bparams.documentClass().emptyLayout() :
+ *d->layout_;
// Current base font for all inherited font changes, without any
// change caused by an individual character, except for the language:
// if the paragraph is empty, the loop will not be entered at all
if (empty()) {
- if (style->isCommand()) {
+ if (style.isCommand()) {
os << '{';
++column;
}
os << "}] ";
column +=3;
}
- if (style->isCommand()) {
+ if (style.isCommand()) {
os << '{';
++column;
}
if (c == ' ') {
// FIXME: integrate this case in latexSpecialChar
// Do not print the separation of the optional argument
- // if style->pass_thru is false. This works because
+ // if style.pass_thru is false. This works because
// latexSpecialChar ignores spaces if
- // style->pass_thru is false.
+ // style.pass_thru is false.
if (i != body_pos - 1) {
if (d->simpleTeXBlanks(
runparams, os, texrow,
- i, column, font, *style)) {
+ i, column, font, style)) {
// A surrogate pair was output. We
// must not call latexSpecialChar
// in this iteration, since it would output
}
OutputParams rp = runparams;
- rp.free_spacing = style->free_spacing;
+ rp.free_spacing = style.free_spacing;
rp.local_font = &font;
- rp.intitle = style->intitle;
+ rp.intitle = style.intitle;
// Two major modes: LaTeX or plain
// Handle here those cases common to both modes
d->latexInset(bparams, os,
texrow, rp, running_font,
basefont, outerfont, open_font,
- runningChange, *style, i, column);
+ runningChange, style, i, column);
else {
try {
d->latexSpecialChar(os, rp, running_font, runningChange,
- *style, i, column);
+ style, i, column);
} catch (EncodingException & e) {
if (runparams.dryrun) {
os << "<" << _("LyX Warning: ")
{
bool emph_flag = false;
- LayoutPtr const & style = d->layout_;
+ Layout const & style = *d->layout_;
FontInfo font_old =
- style->labeltype == LABEL_MANUAL ? style->labelfont : style->font;
+ style.labeltype == LABEL_MANUAL ? style.labelfont : style.font;
- if (style->pass_thru && !d->onlyText(buf, outerfont, initial))
+ if (style.pass_thru && !d->onlyText(buf, outerfont, initial))
os << "]]>";
// parsing main loop
} else {
char_type c = d->text_[i];
- if (style->pass_thru)
+ if (style.pass_thru)
os.put(c);
else
os << sgml::escapeChar(c);
os << "</emphasis>";
}
- if (style->free_spacing)
+ if (style.free_spacing)
os << '\n';
- if (style->pass_thru && !d->onlyText(buf, outerfont, initial))
+ if (style.pass_thru && !d->onlyText(buf, outerfont, initial))
os << "<![CDATA[";
}
}
-LayoutPtr const & Paragraph::layout() const
+Layout const & Paragraph::layout() const
{
- return d->layout_;
+ return *d->layout_;
}
-void Paragraph::setLayout(LayoutPtr const & layout)
+void Paragraph::setLayout(Layout const & layout)
{
- d->layout_ = layout;
+ d->layout_ = &layout;
}
-void Paragraph::setEmptyOrDefaultLayout(TextClass const & tclass)
+void Paragraph::setEmptyOrDefaultLayout(DocumentClass const & tclass)
{
if (useEmptyLayout())
setLayout(tclass.emptyLayout());
}
-void Paragraph::collectWords(Buffer const & buf, CursorSlice const & sl)
+void Paragraph::collectWords(CursorSlice const & sl)
{
// find new words
bool inword = false;
}
-void Paragraph::updateWords(Buffer const & buf, CursorSlice const & sl)
+void Paragraph::updateWords(CursorSlice const & sl)
{
BOOST_ASSERT(&sl.paragraph() == this);
deregisterWords();
- collectWords(buf, sl);
+ collectWords(sl);
registerWords();
}