OberonCore
https://forum.oberoncore.ru/

13: Юникод в TextModels
https://forum.oberoncore.ru/viewtopic.php?f=131&t=6203
Страница 1 из 1

Автор:  Trurl [ Воскресенье, 17 Декабрь, 2017 13:34 ]
Заголовок сообщения:  13: Юникод в TextModels

Реализация юникода, действительно, неоптимальная. Русский текст превращается в список слов и пробелов. Понятно, компьютеры сейчас мощные и это незаметно. Но если взять текст побольше, скажем книгу, тормоза начинаешь замечать. А если очень большой (я пробовал словарь Брокгауза-Ефрона), все просто замирает.
В принципе, решение, которое предложил Wolfgang Weck, подходит. Но его надо именно встраивать в TextModels, от отдельного модуля пользы не будет.

Автор:  Иван Денисов [ Воскресенье, 17 Декабрь, 2017 19:18 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

Проводил исследование проблемы. Большая часть времени тратится на вычисление ширины слов.
Это было из-за бага, который мы нашли с Олегом Чередниченко.
https://redmine.blackboxframework.org/p ... 73062d3201
В сборке Центра это применено уже. issue-#96 Rendering unicode strings
https://redmine.blackboxframework.org/issues/96

Автор:  Trurl [ Воскресенье, 17 Декабрь, 2017 21:11 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

А Вы попробуйте открыть текст на тыщу страниц.

Автор:  Иван Денисов [ Воскресенье, 17 Декабрь, 2017 22:11 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

Trurl писал(а):
А Вы попробуйте открыть текст на тыщу страниц.

Отрицать проблему не буду. Привел выше, как возможно немного улучшить состояние дел. В том виде как идет в 1.6 - неприемлемо в принципе. Ширины слов вычисляются по ширинам букв.

Еще для одного проекта сделал буферизацию прокрутки . Это еще существенно улучшило ощущения от прокрутки больших текстов. + ставлю в текстах больше расстояние между строками. Тогда практически никаких артефактов при прокрутке нет. Вот мой модуль HostFonts. Там еще дерево для кэширования применено, которое делал Иван Кузьмицкий.
Вложение:
Fonts.odc.zip [6.78 КБ]
Скачиваний: 81


Trurl писал(а):
В принципе, решение, которое предложил Wolfgang Weck, подходит. Но его надо именно встраивать в TextModels, от отдельного модуля пользы не будет.

А что это за решение? Выложите ссылку или исходник, пожалуйста.

Автор:  Trurl [ Понедельник, 18 Декабрь, 2017 12:18 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

http://oberoncore.ru/blackbox/open_points пункт 13.
Вы правильные исправления сделали, но это другая проблема.
Тексты представляются списками из фрагментов, хранящихся в файлах. Эта схема придумана, чтобы можно было работать с большими текстами при ограниченной памяти. Перемещение по списку - операция небыстрая, но длины списков были небольшими: при открытии файл отбражался в один фрагмент, а при сохранении все фрагменты опять сливались в один. Потом на фрагменты навесили атрибуты и их стало побольше.
А когда добавляли юникод, не придумали ничего лучшего, как ввести дополнительный тип фрагментов для 16-битных символов. Теперь русское слово (в среднем 6 букв) и следующий за ним пробел образуют два фрагмента и занимают в памяти 64 байта. В восточноевропейских языках ситуация не лучше - даже отдельные слова могут разбиваться.
Вольфанг предложил добавлять короткие символы к цепочкам длинных. Это снижает шансы сэкономить место на диске, зато сильно уменьшает фрагментацию. Но он сделал это отдельным модулем UTextModels. Теперь, если сохранить UTextModels.StdModel в документе, он не прочитается там, где нет UTextModels. Поэтому, он сохраняет его как стандарный TextModels.StdModel, но при конвертации опять получаем фрагментацию.

Автор:  Евгений Темиргалеев [ Вторник, 26 Декабрь, 2017 16:47 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

Я мельком сталкивался, когда преобразовывал документацию из 1.5 в 1.6 -- русские литеры переходили в UCS2 и размеры файлов увеличивались. Тогда мне показалось, что хранение юникод и латин-1 отрезков -- это оптимизация. А реально это оказалась реализация на скорую руку, которая реально работает как антиоптимизация...

Автор:  Trurl [ Воскресенье, 31 Декабрь, 2017 11:54 ]
Заголовок сообщения:  Re: 13: Юникод в TextModels

Да, там на скорую руку.
Цитата:
(u IS LPiece) & ~(u IS Piece)

Линейкой бы, да по пальчикам.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/