OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 19 Март, 2024 12:27

Часовой пояс: UTC + 3 часа




Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: 13: Юникод в TextModels
СообщениеДобавлено: Воскресенье, 17 Декабрь, 2017 13:34 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Воскресенье, 17 Декабрь, 2017 19:18 
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Воскресенье, 17 Декабрь, 2017 21:11 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
А Вы попробуйте открыть текст на тыщу страниц.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Воскресенье, 17 Декабрь, 2017 22:11 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 3774
Trurl писал(а):
А Вы попробуйте открыть текст на тыщу страниц.

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

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


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

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Понедельник, 18 Декабрь, 2017 12:18 

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Вторник, 26 Декабрь, 2017 16:47 
Модератор
Аватара пользователя

Зарегистрирован: Среда, 16 Ноябрь, 2005 00:53
Сообщения: 4625
Откуда: Россия, Орёл
Я мельком сталкивался, когда преобразовывал документацию из 1.5 в 1.6 -- русские литеры переходили в UCS2 и размеры файлов увеличивались. Тогда мне показалось, что хранение юникод и латин-1 отрезков -- это оптимизация. А реально это оказалась реализация на скорую руку, которая реально работает как антиоптимизация...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: 13: Юникод в TextModels
СообщениеДобавлено: Воскресенье, 31 Декабрь, 2017 11:54 

Зарегистрирован: Понедельник, 28 Ноябрь, 2005 10:28
Сообщения: 1428
Да, там на скорую руку.
Цитата:
(u IS LPiece) & ~(u IS Piece)

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Форум закрыт Эта тема закрыта, вы не можете редактировать и оставлять сообщения в ней.  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2024, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB