OberonCore
https://forum.oberoncore.ru/

Что делать с невместимым юникодом?
https://forum.oberoncore.ru/viewtopic.php?f=29&t=6658
Страница 2 из 4

Автор:  adimetrius [ Суббота, 03 Октябрь, 2020 20:40 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Иван Денисов писал(а):
А вот знак удар́ения — полезная шт́ука. Хотелось бы, чтобы это в Блэкбоксе работало. И от него тоже каретка убегает. Так что, пожалуй, что придется это дело как-то учитывать.


А почему вы ударяете согласные? Это баг или фича?

Научить каретку не убегать - несложно, это небольшие изменения. Правда, они, наэн, размазаны будут по трем модулям: TextViews, TextSetters, TextControllers.

Автор:  Иван Денисов [ Суббота, 03 Октябрь, 2020 20:45 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

В теме prosilver они ставятся правильно. А у вас наверное стоит subsilver2, в ней и правда, ударения рисуются над другими буквами. Наверное, от шрифта зависит.

Вложения:
Снимок экрана от 2020-10-04 00-46-00.png
Снимок экрана от 2020-10-04 00-46-00.png [ 20.41 КБ | Просмотров: 5881 ]

Автор:  Илья Ермаков [ Воскресенье, 04 Октябрь, 2020 23:10 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Переходить к UTF-кодировкам, в итоге, не хочется (ломать удобную логику "1 элемент массива = 1 литера". Про сборные знаки - понятно, но всё же, это не совсем то же самое). И попытки их введения втаскивают BlackBox в длительную турбулентность - когда "пока не поймёшь, что где валяется и когда всё это кончится".

Проще всего логически, алгоритмически - принять CHAR 4-байтным. Это решает всё, но ведёт к двухкратному перерасходу памяти. Ну и требует анализа всех библиотек, где там вместо SIZE(CHAR) сидит просто 2.

Но можно принять размерность CHAR решением этапа компиляции. Так же, как платформу.
Тогда по-умолчанию графическая среда собрана и работает с 4-байтным CHAR, но можно собрать, например, серверное приложение с 2-байтным, если мы знаем, что нам не нужно обслуживать азиатские тексты, например.

Плюсы:
- можно прямо сейчас закрепить консенсусно это решение;
- при этом можно программировать и библиотеки оставлять, как есть, никуда не переделывая;
- постепенно подготовить вариант компилятора на 4-байтный CHAR, также прочистить от завязки на 2-байтный весь код.

Автор:  Info21 [ Пятница, 16 Октябрь, 2020 03:38 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
Info21 писал(а):
К несчастью, стали встречаться html-странички, где й сделана парой символов. Какая-то дурная мода.
Ужас какой... пришлите, пож, ссылку, когда попадется такая в след раз
Вот попалась:
https://polit.ru/article/2020/10/13/neuroeconomy/print/
Там таких й не все, но довольно много.

Автор:  adimetrius [ Пятница, 16 Октябрь, 2020 15:50 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Прошу прощения, я внимательно прочел html-файл, но не нашел ни одной. Возможно, я не знаю, чего ищу? Или мы др др не поняли? Вы не могли бы указать точнее, в каком предложении?

Автор:  Info21 [ Пятница, 16 Октябрь, 2020 18:10 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Если открыть ссылку в Хроме, сделать Ctrl+A, Ctrl+C, потом пойти в Blackbox и сделать Ctrl+V в окошко Log, то первая композитная й стоит в конце первого же предложения основного текста:

Даниэль Канеман выдвинул предположение о существовании двух систем, обусловливающих принятие решений.

Если поставить курсор после между "й" и "." и нажать пробел, то "й" развалится на две литеры.

Автор:  adimetrius [ Суббота, 17 Октябрь, 2020 12:05 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Страшно жить...

Если видишь в тексте й
Изображение

Не верь глазам своим...
Вот она, правда:
Изображение


Ужас... окопаться... по периметру блекбокса выставить санитарные кордоны и беспощадно выкорчевывать UTF8 СС86...

Вот интересно, откуда же она у них в их аштээмэлах берется?

Следом падёт жертвой буква Ё, я полагаю.

Автор:  adimetrius [ Суббота, 17 Октябрь, 2020 12:12 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Видимо, придется в Text реализовывать поддержку этих псевдолитер.

Наверное, стоит в режиме показа скрытых символов считать эти литеры отдельными, а в режиме без скрытых символов - толковать эти две литеры как единое целое?

Автор:  Info21 [ Суббота, 17 Октябрь, 2020 23:59 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
в режиме показа скрытых символов считать эти литеры отдельными,
а в режиме без скрытых символов - толковать эти две литеры как единое целое?
Другого способа не видно, если не размножать режимы.

Но что делать с Find?

Автор:  arlean1 [ Понедельник, 19 Октябрь, 2020 21:07 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Вот ещё какая хрень бывает с юникодом:
Цитата:
Использование символов юникода
Юникод — один из стандартов кодирования символов. Позволяет представить
знаки почти всех письменных языков. Операционная система Windows
поддерживает символы юникода в названиях файлов. А так как, Windows
является самой распространённой системой на ПК, то значит и злоумышленник
имеет некоторое преимущество перед жертвой. Юникод в название файла
добавить очень просто, достаточно вызвать контекстное меню и выбрать
нужный символ (рис. 1). В нашем случае,
это код RLO (Начать отмену справа налево).

Суть данного кода — зеркалирование символов послевставленного кода.
Например, файл имеет название «TESTgpj. exe», вставив RLO после
«TEST», то получим: «TESTexe. jpg». Смысл перестановки расширений
файлов в том, что обычный пользователь в первую очередь посмотрит
на расширение файла, чтобы не заразить свой компьютер.
Жертва, руководствуясь своими базовыми знаниями, поймёт, что это
изображение (формат «.jpg») и отбросит всякие подозрения.
Антивирусные программы также бессильны в данном случае, так как
просто-напросто не проверяют названия файлов на символы юникода
в нём. Данная функция в операционной системе Windows является
стандартной.

Автор:  adimetrius [ Среда, 21 Октябрь, 2020 13:35 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Коллеги, я обнаружил еще одну, кмк, жемчужинку, доставшуюся ББ от Оберона.

Формат OCF вмещает множество метаданных, многие из которых представляются числами - там и сям всякие индексы. Напр, сведения о процедуре содержат: ее номер в таблице; количество параметров; имя и имена всех параметров, которые представляются индексами в массиве имен; каждое имя начинается с указания длины и т.п. (не претендую на точность).
И большинство этих чисел - небольшие. В памяти ЭВМ они занимают по 4 байта.

А вот в файл выводится количество байт, необходимое и достаточное для представления каждого числа. Т.е. напр. число 28 займет 1 байт в файле, а число 1978 - два.

Меня почему-то в восторг привела эта находка!

Какое отношение к Уникоду: даже если использовать LONGCHAR или CHAR = {0X..FFFFFFFFX}, в ODC файл можно записывать, пользуясь той же методикой: ровно столько байт, сколько необходимо и достаточно для конкретной литеры. И это сбережет файлы от распухания.

Автор:  Илья Ермаков [ Среда, 21 Октябрь, 2020 13:40 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Что-то очень странно про OCF. Учитывая, что он загружается в память блоками, как есть - и просто настраиваются ссылки.

Автор:  adimetrius [ Среда, 21 Октябрь, 2020 13:51 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

arlean1 писал(а):
Вот ещё какая хрень бывает с юникодом:


А тут, я полагаю, проблема не в юникоде. А в том, что файл и его идентификация - это дело вовсе не пользователя. Файл - низкоуровневое понятие системного программирования, такого же уровня, как ячейки памяти, регистры ЦП, сегменты и т.п. (ну, мож чуть повыше :)

Грамотно организованный интерфейс пользователя вообще не должен включать понятие файла. Пользователь не должен решать вопросы идентификации файлов (по имени, в таком-то каталоге, на таком-то диске и т.п.) Как пример - гугл-документы: пользователь создает документы, таблички, презентации и т.п., как-то там их для себя называет; файлы? не, там нет файлов, и нет имен файлов.

Другой пример - модули в КП/ББ: модули - это не файлы. Это фундаментально отличает от других языков и "экосистем". (Не хватает только пары команд в меню, которые позволяли бы сохранять модули, не залезая в меню "Файл" и не открывая папочное окно; но для себя я сделал ; )

Т.е. следует развести два понятия: идентификатор файла (используется программистами); и некое название, обозначение того, что внутри него, которое используется пользователем. Названия может и не быть; название может быть реализовано как метаданные файла, если таковые поддерживает ФС, или приложения должны хранить их внутри файлов, если ФС не поддерживает метаданные.
А к идентификаторам файлов можно бы предъявить те же требования, что и к идентификаторам переменных: буквы и цифры, и никаких головняков про пробелы, запятые, и всякие уникодные чудо-литеры, которые не видны или вообще левое обозначают правым )

Автор:  Александр Ильин [ Среда, 21 Октябрь, 2020 13:59 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
А вот в файл выводится количество байт, необходимое и достаточное для представления каждого числа. Т.е. напр. число 28 займет 1 байт в файле, а число 1978 - два.

Меня почему-то в восторг привела эта находка!

Какое отношение к Уникоду: даже если использовать LONGCHAR или CHAR = {0X..FFFFFFFFX}, в ODC файл можно записывать, пользуясь той же методикой: ровно столько байт, сколько необходимо и достаточно для конкретной литеры. И это сбережет файлы от распухания.
Надеюсь, новый вариант UTF8 переизобратать не будете?

Автор:  adimetrius [ Среда, 21 Октябрь, 2020 14:00 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Илья Ермаков писал(а):
Что-то очень странно про OCF. Учитывая, что он загружается в память блоками, как есть - и просто настраиваются ссылки.


Взгляните на DevCPM.WriteNum и .ReadNum; Kernel.RefNum. возможно, я и ошибся.

Автор:  adimetrius [ Среда, 21 Октябрь, 2020 14:02 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Александр Ильин писал(а):
Надеюсь, новый вариант UTF8 переизобратать не будете?

Я правильно понял вас, что описанная методика напоминает UTF8?

Автор:  Александр Ильин [ Среда, 21 Октябрь, 2020 14:04 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
Илья Ермаков писал(а):
Что-то очень странно про OCF. Учитывая, что он загружается в память блоками, как есть - и просто настраиваются ссылки.


Взгляните на DevCPM.WriteNum и .ReadNum; Kernel.RefNum. возможно, я и ошибся.

Я читал когда-то описание этого формата. По-моему, старший бит кодирует необходимость прочитать и добавить ещё один байт. Почти как в UTF-8.

Код:
WHILE b < 0 DO

Это как раз цикл по старшему биту при чтении. В UTF-8 отличие в том, что первый байт сразу содержит длину литеры.

Автор:  Александр Ильин [ Среда, 21 Октябрь, 2020 14:16 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Впрочем, Обероновский формат компактнее UTF-8, так что можно, наверное, хранить прямо так же, как числа. Вроде как избыточность не нужна, да и вопрос совместимости не стоит.

Автор:  adimetrius [ Среда, 21 Октябрь, 2020 21:21 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

Оберон рулит ) даже в мелочах

Изображение

Автор:  Илья Ермаков [ Четверг, 22 Октябрь, 2020 10:39 ]
Заголовок сообщения:  Re: Что делать с невместимым юникодом?

adimetrius писал(а):
Илья Ермаков писал(а):
Что-то очень странно про OCF. Учитывая, что он загружается в память блоками, как есть - и просто настраиваются ссылки.


Взгляните на DevCPM.WriteNum и .ReadNum; Kernel.RefNum. возможно, я и ошибся.


А, в доп. символьной информации да.

В основных дескрипторах метаинформации - нет.

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