OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 29 Ноябрь, 2020 12:37

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




Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.
Автор Сообщение
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 01:07 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Коллеги,

в юникоде полным полно литер, которые не влезают в тип CHAR целиком. Как полагаете, это проблема? Выходит, на КП/ББ невозможно написать программу, которая будет работать с такими литерами? Что с этим делать, если надо выкрутиться; и какое было бы элегантное и грамотное решение?

Вот поскольку в ETH Active Oberon тип CHAR вообще 0Х..0FFX, Денис Будяк budden, как я понял, использовал 4-байтные записи для представления юникодных литер. Но, поскольку это получается не языковое средство, мне кажется, это громоздко, хотя, видимо, решает поставленную им задачу; и, возможно, вмещает все литеры Ю.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 03:02 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 186
Откуда: Russia
В А2 поддерживается UTF32 без всяких плясок с бубном/рекордами


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 10:43 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9327
Откуда: Россия, Орёл
Для случая ББ, думаю, смотреть в сторону UTF-16, на базе CHAR.

Но вводить его всюду как-то... Только местами, но как?
Если всюду - то об индексируемости можно забыть, это влияет на ряд библиотечных алгоритмов.

Как вариант - для выводов на экран и проч., местно.

Есть ещё одна сырая мысль:
- в КП всегда известен конец массива. В отличие от Цы. Т.е. формат 0-завершённой строки можно дополнить для каких-то библиотек, если нужно, соглашением, что в конце массива лежит что-то служебное. Например, маркер того, что строка не UCS2, а UTF-16.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 13:02 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 945
Откуда: Казань
Чтобы не было танцев с бубном, то проще использовать UTF-32, тогда все коды будут помещаться в одно 32-битное значение. Будет проще работать, в каких-то местах.
Или же использовать UTF-8, тогда все символы будут иметь разную длину, но так как это будет во всей системе, то поддержка этого будет реализована и протестирована.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 17:24 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9327
Откуда: Россия, Орёл
Возможный вариант:

- введение типа LONGCHAR.

И тогда чётко выделены те строки/функции, которые работают с полным Юникодом.

Надо ещё раз взвесить, кто "обделён" при UCS2.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 17:52 

Зарегистрирован: Пятница, 13 Март, 2009 16:36
Сообщения: 945
Откуда: Казань
Там много кто обделен. В два байта влезает 65536 символов, а всего юникод символов около миллиона.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 17:53 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2896
Вот из вики https://en.wikipedia.org/wiki/UTF-16
"UCS-2 should now be considered obsolete. It no longer refers to an encoding form in either 10646 or the Unicode Standard."
Так что лучше бы и правда как-то обновить. И сразу обновить формат текстовых документов, чтобы русские тексты не рубились на кусочки при сохранении на фрагменты CHAR и SHORTCHAR.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 19:40 
Аватара пользователя

Зарегистрирован: Воскресенье, 09 Декабрь, 2018 15:14
Сообщения: 65
Откуда: Equestria
Utf-8 как вариант не рассматривается? Utf-16/32 не очень как-то. Везде придется использовать специальные функции в любом случае для новомодного юникода, так зачем заморачиваться с корявыми кодировками?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 23:21 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Как я понимаю, если избрать Utf8 или Utf16, то мы расплачиваемся сложностью алгоритмов, поскольку литеры кодируются переменным числом байт. Элементарное LEN(str$) становится неэлементарным.

А если избрать Utf32, то расплачиваемся размером памяти: для большинства модульных текстов вообще 3/4 памяти - нули, для русскоязычных - половина. Однако выигрываем в простоте алгоритмов, и вообще прозрачности понятий: один CHAR - это именно одна литера, как и подразумевает название, а не половина, не треть и не четверть, в зависимости от того, что было до нее.

Я очень ценю память, и хвастаюсь низким памятепотреблением ББ; но когда на чашах весов прозрачность и простота, с одной стороны, а с другой - удвоение памятепотребления (с 2-4МБ до 4-8МБ, в моих сценариях использования) - я выбираю терять мегабайты и сохранять простоту и прозрачность. Иван Андреич, а в близких к аппаратуре применениях это, наэн, существенно - столько байтов терять?..

Я тоже думал про тип LONGCHAR (возможно - SYSTEM.LONGCHAR, чтобы, например, поэкспериментировать в "песочнице"). Тогда, выходит, будет в языке уже три вида литер и три вида строк.
Любопытно, насколько "совместимы" UCS2 и UTF32: т.е. если приставить "старшие нули" к UCS2 коду литеры, то получится ли валидный UTF32 код той же самой литеры? (Это работает от ASCII к UCS2, что позволяет иметь элементарную реализацию LONG(sstr)/SHORT(str))

А еще, можно же, например, в языке (и, знач, в памяти ЭВМ) использовать UTF32, а при экстернализации по умолчанию (т.е. в Stores.Writer.WriteString/Stores.Reader.ReadString) переходить на UTF8, или как-то иначе упаковывать строки.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Пятница, 02 Октябрь, 2020 23:22 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Sergej Durmanov писал(а):
В А2 поддерживается UTF32 без всяких плясок с бубном/рекордами


А как, если там однобайтовый CHAR?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 09:42 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 186
Откуда: Russia
adimetrius писал(а):
А как, если там однобайтовый CHAR?

SIGNED32


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 09:49 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 186
Откуда: Russia
Ну и в unicode нет соответсвия между codepoint и "символом". Даже для устаревшего UCS2 нужно сканировать строку. Так что в этом плане любая юникодная кодировка не имеет преимуществ.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 10:24 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2896
Пожалуй, что простота и прозрачность лучше. UTF32 выходит более подходит для простоты алгоритмов. А UTF16 и правда не многим лучше UTF8.
Но в два раза больше памяти... тоже плохо.

Про железо. ББ на железе сам то и не работает пока. Там O7, в котором вот не понятно мне пока, как работать с Кириллицей.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 11:08 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2896
Sergej Durmanov писал(а):
Даже для устаревшего UCS2 нужно сканировать строку. Так что в этом плане любая юникодная кодировка не имеет преимуществ.
Зачем сканировать строку?


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 11:45 

Зарегистрирован: Пятница, 11 Январь, 2019 19:26
Сообщения: 186
Откуда: Russia
В юникоде итоговое изображение (глиф) может состоять из нескольких элементов. Соответственно, и юникодных кодов будет несколько. И разрывать эти сочетания нельзя.
https://m.habr.com/ru/company/ruvds/blog/445274/


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 19:42 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2896
Sergej Durmanov писал(а):
В юникоде итоговое изображение (глиф) может состоять из нескольких элементов. Соответственно, и юникодных кодов будет несколько. И разрывать эти сочетания нельзя.
https://m.habr.com/ru/company/ruvds/blog/445274/

Да, это уже какие-то любители всё усложнять придумали. Миллиона символов им мало :) Еще накладывать придумали... усложнение на ровном месте.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 20:24 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Похоже, действительно все сложно. Я, по крайней мере, нашел про юни-коды, которые обозначают диакритические знаки: каждый такой знак - отдельный код, и он считается единой литерой со следующим за ним кодом буквы. А также есть, например, код 25EF - кружок. Он, вроде, должен рисоваться поверх (вокруг?) следующей за ним литеры. Правда, под рукой нет ни одной программы, где бы это работало, хаха.

Но в приложении - документ с рожей, в которой какие-то накладывающиеся псевдолитеры есть. В Линуксе библиотека pango рисует их как надо (накладывает), а в ББ TextSetter считает их за отдельные литеры, из-за этого курсор "убегает". В Wine никакого наложения нет, некоторых символов в шрифтах нет, и рожи почти не видно.

С положительной стороны - это, видимо, касается редких (для нас) случаев. К счастью, в русском языке Е-Ё и И-Й - разные буквы; никому даже в голову не приходит, что это диакритики. (Впрочем, и вокруг Ё не утихают споры).


Вложения:
Юнирожа.odc [1.23 КБ]
Скачиваний: 20
Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 20:29 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 12:02
Сообщения: 8419
Откуда: Троицк, Москва
adimetrius писал(а):
К счастью, в русском языке Е-Ё и И-Й - разные буквы; никому даже в голову не приходит, что это диакритики. (Впрочем, и вокруг Ё не утихают споры).
К несчастью, стали встречаться html-странички, где й сделана парой символов. Какая-то дурная мода.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 20:33 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 2896
А вот знак удар́ения — полезная шт́ука. Хотелось бы, чтобы это в Блэкбоксе работало. И от него тоже каретка убегает. Так что, пожалуй, что придется это дело как-то учитывать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 03 Октябрь, 2020 20:34 
Аватара пользователя

Зарегистрирован: Суббота, 16 Февраль, 2008 02:47
Сообщения: 357
Info21 писал(а):
К несчастью, стали встречаться html-странички, где й сделана парой символов. Какая-то дурная мода.


Ужас какой... пришлите, пож, ссылку, когда попадется такая в след раз


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 55 ]  На страницу 1, 2, 3  След.

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


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

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


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

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