| 503 | } |
| 504 | |
| 505 | void TextIterator::cutMaxLengthFromBeginning(size_t _max) |
| 506 | { |
| 507 | // узнаем размер без тегов |
| 508 | size_t size = getSize(); |
| 509 | if (size <= _max) |
| 510 | return; |
| 511 | |
| 512 | // разница |
| 513 | size_t diff = size - _max; |
| 514 | |
| 515 | // последний цвет |
| 516 | UString::utf32string::iterator iter_colour = mEnd; |
| 517 | |
| 518 | // теперь пройдем от начала и узнаем реальную позицию разницы |
| 519 | UString::utf32string::iterator iter = mText.begin(); |
| 520 | for (; iter != mEnd; ++iter) |
| 521 | { |
| 522 | if ((*iter) == L'#') |
| 523 | { |
| 524 | UString::utf32string::iterator save = iter; |
| 525 | |
| 526 | // следующий символ |
| 527 | ++iter; |
| 528 | if (iter == mEnd) |
| 529 | break; |
| 530 | |
| 531 | // тэг цвета |
| 532 | if ((*iter) != L'#') |
| 533 | { |
| 534 | // остальные 5 символов цвета |
| 535 | for (size_t pos = 0; pos < 5; pos++) |
| 536 | { |
| 537 | ++iter; |
| 538 | if (iter == mEnd) |
| 539 | { |
| 540 | --iter; |
| 541 | break; |
| 542 | } |
| 543 | } |
| 544 | // сохраняем цвет |
| 545 | iter_colour = save; |
| 546 | } |
| 547 | continue; |
| 548 | } |
| 549 | // обычный символ был |
| 550 | if (diff == 0) |
| 551 | break; |
| 552 | --diff; |
| 553 | } |
| 554 | |
| 555 | UString::utf32string colour; |
| 556 | // если бы цвет, то вставляем назад |
| 557 | if (iter_colour != mEnd) |
| 558 | { |
| 559 | colour.append(iter_colour, iter_colour + size_t(7)); |
| 560 | } |
| 561 | |
| 562 | mCurrent = erase(mText.begin(), iter); |