X-Git-Url: https://git.lyx.org/gitweb/?a=blobdiff_plain;f=src%2FFontList.cpp;h=f6b456d9db495d4383cede00d8e38a71dbd77151;hb=8c73b3d2ce356e2720186f8cf5208614d124fdcf;hp=09edbefb9490dc6fef481e5af90d4de54a13edf7;hpb=5ddc612b735317d5b22553a63aad7879503e3950;p=lyx.git diff --git a/src/FontList.cpp b/src/FontList.cpp index 09edbefb94..f6b456d9db 100644 --- a/src/FontList.cpp +++ b/src/FontList.cpp @@ -24,10 +24,7 @@ #include -using std::distance; -using std::endl; -using std::string; -using std::ostream; +using namespace std; namespace lyx { @@ -139,22 +136,36 @@ void FontList::set(pos_type pos, Font const & font) iterator beg = list_.begin(); iterator it = beg; iterator endit = list_.end(); + bool found = false; for (; it != endit; ++it) { - if (it->pos() >= pos) + if (it->pos() >= pos) { + found = true; break; + } } - size_t const i = distance(beg, it); - bool notfound = (it == endit); - - if (!notfound && list_[i].font() == font) + if (found && it->font() == font) return; - bool begin = pos == 0 || notfound || - (i > 0 && list_[i - 1].pos() == pos - 1); + size_t const i = distance(beg, it); + // Is position pos is a beginning of a font block? - bool end = !notfound && list_[i].pos() == pos; + bool begin = pos == 0 || !found + || (i > 0 && list_[i - 1].pos() == pos - 1); + // Is position pos is the end of a font block? - if (begin && end) { // A single char block + bool end = found && list_[i].pos() == pos; + + if (!begin && !end) { + // The general case: The block is splitted into 3 blocks + list_.insert(list_.begin() + i, + FontTable(pos - 1, list_[i].font())); + list_.insert(list_.begin() + i + 1, + FontTable(pos, font)); + return; + } + + if (begin && end) { + // A single char block if (i + 1 < list_.size() && list_[i + 1].font() == font) { // Merge the singleton block with the next block @@ -179,11 +190,6 @@ void FontList::set(pos_type pos, Font const & font) list_[i + 1].font() == font)) list_.insert(list_.begin() + i + 1, FontTable(pos, font)); - } else { // The general case. The block is splitted into 3 blocks - list_.insert(list_.begin() + i, - FontTable(pos - 1, list_[i].font())); - list_.insert(list_.begin() + i + 1, - FontTable(pos, font)); } }