#include "bufferparams.h"
#include "BufferView.h"
#include "cursor.h"
+#include "pariterator.h"
#include "coordcache.h"
#include "CutAndPaste.h"
#include "debug.h"
#include <sstream>
+using lyx::char_type;
using lyx::pit_type;
using lyx::pos_type;
using lyx::word_location;
int LyXText::singleWidth(Paragraph const & par,
- pos_type pos, char c, LyXFont const & font) const
+ pos_type pos, char_type c, LyXFont const & font) const
{
// The most common case is handled first (Asger)
- if (IsPrintable(c)) {
+ if (isPrintable(c)) {
Language const * language = font.language();
- if (language->RightToLeft()) {
+ if (language->rightToLeft()) {
if ((lyxrc.font_norm_type == LyXRC::ISO_8859_6_8 ||
lyxrc.font_norm_type == LyXRC::ISO_10646_1)
&& language->lang() == "arabic") {
- if (Encodings::IsComposeChar_arabic(c))
+ if (Encodings::isComposeChar_arabic(c))
return 0;
c = par.transformChar(c, pos);
} else if (language->lang() == "hebrew" &&
- Encodings::IsComposeChar_hebrew(c))
+ Encodings::isComposeChar_hebrew(c))
return 0;
}
return font_metrics::width(c, font);
pos_type point = end;
pos_type i = pos;
for ( ; i < end; ++i, ++fi) {
- char const c = par.getChar(i);
+ char_type const c = par.getChar(i);
int thiswidth = singleWidth(par, i, c, *fi);
// add the auto-hfill from label end to the body
w -= singleWidth(par, i - 1);
w = max(w, labelEnd(pit));
}
- char const c = par.getChar(i);
+ char_type const c = par.getChar(i);
w += singleWidth(par, i, c, *fi);
}
}
while (!pars_[next_par].empty() && pars_[next_par].isNewline(0))
pars_[next_par].erase(0);
- updateCounters(cur.buffer());
+ ParIterator current_it(cur);
+ ParIterator next_it(cur); next_it.pit() = next_par;
+
+ if (needsUpdateCounters(cur.buffer(), current_it)
+ || needsUpdateCounters(cur.buffer(), next_it))
+ updateCounters(cur.buffer());
// Mark "carriage return" as inserted if change tracking:
if (cur.buffer().params().tracking_changes) {
// insert a character, moves all the following breaks in the
// same Paragraph one to the right and make a rebreak
-void LyXText::insertChar(LCursor & cur, char c)
+void LyXText::insertChar(LCursor & cur, char_type c)
{
BOOST_ASSERT(this == cur.text());
BOOST_ASSERT(c != Paragraph::META_INSET);
static string const number_seperators = ".,:";
if (current_font.number() == LyXFont::ON) {
- if (!IsDigit(c) && !contains(number_operators, c) &&
+ if (!isDigit(c) && !contains(number_operators, c) &&
!(contains(number_seperators, c) &&
cur.pos() != 0 &&
cur.pos() != cur.lastpos() &&
getFont(par, cur.pos() - 1).number() == LyXFont::ON)
)
number(cur); // Set current_font.number to OFF
- } else if (IsDigit(c) &&
+ } else if (isDigit(c) &&
real_current_font.isVisibleRightToLeft()) {
number(cur); // Set current_font.number to ON
if (cur.pos() != 0) {
- char const c = par.getChar(cur.pos() - 1);
+ char_type const c = par.getChar(cur.pos() - 1);
if (contains(number_unary_operators, c) &&
(cur.pos() == 1
|| par.isSeparator(cur.pos() - 2)
// When the free-spacing option is set for the current layout,
// disable the double-space checking
- if (!freeSpacing && IsLineSeparatorChar(c)) {
+ if (!freeSpacing && isLineSeparatorChar(c)) {
if (cur.pos() == 0) {
static bool sent_space_message = false;
if (!sent_space_message) {
pos = 0;
continue;
}
- unsigned char c = pars_[pit].getChar(pos);
+ char_type c = pars_[pit].getChar(pos);
if (c != Paragraph::META_INSET) {
switch (action) {
case text_lowercase:
}
-bool LyXText::Delete(LCursor & cur)
+bool LyXText::erase(LCursor & cur)
{
BOOST_ASSERT(this == cur.text());
bool needsUpdate = false;
--cur.pos();
// the counters may have changed
- updateCounters(cur.buffer());
+ ParIterator par_it(cur);
+ if (needsUpdateCounters(cur.buffer(), par_it))
+ updateCounters(cur.buffer());
+
setCursor(cur, cur.pit(), cur.pos(), false);
}
return needsUpdate;