void readParToken(Buffer const & buf, Paragraph & par, LyXLex & lex,
- string const & token, LyXFont & font)
+ string const & token, LyXFont & font, Change & change)
{
- static Change change;
-
BufferParams const & bp = buf.params();
if (token[0] != '\\') {
lex.nextToken();
string token = lex.getString();
LyXFont font;
+ Change change;
while (lex.isOK()) {
- readParToken(buf, par, lex, token, font);
+ readParToken(buf, par, lex, token, font, change);
lex.nextToken();
token = lex.getString();
int LyXText::singleWidth(Paragraph const & par,
pos_type pos, char c, LyXFont const & font) const
{
- BOOST_ASSERT(pos < par.size());
-
// The most common case is handled first (Asger)
if (IsPrintable(c)) {
Language const * language = font.language();
&& !isFirstInSequence(pit, pars_)))
&& align == LYX_ALIGN_BLOCK
&& !par.params().noindent()
+ // in some insets, paragraphs are never indented
+ && !(par.inInset() && par.inInset()->neverIndent())
// display style insets are always centered, omit indentation
&& !(!par.empty()
&& par.isInset(pos)
&& par.getInset(pos)->display())
- // in charstyles, tabulars and ert paragraphs are never indented!
- && ((par.ownerCode() != InsetBase::TEXT_CODE || isMainText())
- && par.ownerCode() != InsetBase::ERT_CODE
- && par.ownerCode() != InsetBase::CHARSTYLE_CODE)
&& (par.layout() != tclass.defaultLayout()
|| bv()->buffer()->params().paragraph_separation ==
BufferParams::PARSEP_INDENT))
return;
}
BOOST_ASSERT(cur.pos() > 0);
- if (par.isLineSeparator(cur.pos() - 1)
- || par.isNewline(cur.pos() - 1)) {
+ if ((par.isLineSeparator(cur.pos() - 1)
+ || par.isNewline(cur.pos() - 1))
+ && par.lookupChange(cur.pos() - 1) != Change::DELETED) {
static bool sent_space_message = false;
if (!sent_space_message) {
cur.message(_("You cannot type two spaces this way. "
X2 = !isRTL(par2) ? endx : 0 + dim_.wid;
}
- if (!above && !below && &par1.getRow(beg.pos(), end.boundary())
+ if (!above && !below && &par1.getRow(beg.pos(), beg.boundary())
== &par2.getRow(end.pos(), end.boundary()))
{
// paint only one rectangle
- pi.pain.fillRectangle(x + x1, y1, X2 - x1, y2 - y1,
- LColor::selection);
+ int const b( !isRTL(par1) ? x + x1 : x + X1 );
+ int const w( !isRTL(par1) ? X2 - x1 : x2 - X1 );
+ pi.pain.fillRectangle(b, y1, w, y2 - y1, LColor::selection);
return;
}
bool LyXText::read(Buffer const & buf, LyXLex & lex)
{
- static Change current_change;
-
Paragraph::depth_type depth = 0;
while (lex.isOK()) {
body_pos = 0;
// Use font span to speed things up, see below
- FontSpan font_span = par.fontSpan(row_pos);
- LyXFont font = getFont(par, row_pos);
+ FontSpan font_span;
+ LyXFont font;
for (pos_type vpos = row_pos; vpos < cursor_vpos; ++vpos) {
pos_type pos = bidi.vis2log(vpos);
// see correction above
if (boundary_correction)
- x += singleWidth(par, ppos);
+ if (getFont(par, ppos).isRightToLeft())
+ x -= singleWidth(par, ppos);
+ else
+ x += singleWidth(par, ppos);
return int(x);
}