OberonCore
https://forum.oberoncore.ru/

#016 Linux: средства преобразования multibyte <-> UCS2
https://forum.oberoncore.ru/viewtopic.php?f=134&t=6492
Страница 1 из 3

Автор:  Евгений Темиргалеев [ Вторник, 26 Ноябрь, 2019 16:26 ]
Заголовок сообщения:  #016 Linux: средства преобразования multibyte <-> UCS2

Такого рода средства рассованы по нескольким модулям.
Код:
   (* decode filename from HostLang.enc encoding *)
   PROCEDURE Long (ss: Iconv.PtrSTR; OUT s: ARRAY OF CHAR);
   (* encode filename to HostLang.enc encoding *)
   PROCEDURE Short (IN s: ARRAY OF CHAR; OUT ss: ARRAY OF SHORTCHAR);
А системные вызовы, для которых цепочки туда-сюда гонять приходится, нужны не только для модулей реализации ББ. Каждый раз копировать?

В нашей консольной сборке такой модуль был для этих целей выделен. Одна копия кода процедур-преобразователей была только в HostFiles.
Код:
Host1K12 C S         HostStringConv — системные средства преобразования цепочек

DEFINITION Host1K12   (* nonportable (i386) *);

   PROCEDURE MbToUcs2 (IN x: ARRAY OF SHORTCHAR; OUT y: ARRAY OF CHAR; OUT result: INTEGER);
   PROCEDURE MbToUcs2P (x: POINTER TO ARRAY [untagged] OF SHORTCHAR; OUT y: ARRAY OF CHAR; OUT result: INTEGER);
   PROCEDURE Ucs2ToMb (IN x: ARRAY OF CHAR; OUT y: ARRAY OF SHORTCHAR);

END Host1K12.

Есть какие-то причины, почему так не удобно сделать здесь?

И, второй вопрос, может и HostFiles стоит собирать с опорой на такой модуль, чтобы копий не было вообще?

Автор:  Alexander Shiryaev [ Вторник, 26 Ноябрь, 2019 22:54 ]
Заголовок сообщения:  Re: Linux: средства преобразования multibyte <-> UCS2

Да, можно так сделать. И ещё уже наверное можно убрать поддержку всех кодировок, кроме UTF-8.

Автор:  Евгений Темиргалеев [ Среда, 27 Ноябрь, 2019 20:20 ]
Заголовок сообщения:  Re: Linux: средства преобразования multibyte <-> UCS2

Да, это было бы хорошо. Сильно прочистит код. Конверсию из UTF8 я бы положил в System, но не в Strings и Kernel, а отдельным модулем.
Код:
MODULE Utf8;
   PROCEDURE ReadStr (IN x: ARRAY OF BYTE; pos, len: INTEGER; OUT y: ARRAY OF CHAR; OUT res: INTEGER);
   PROCEDURE WriteStr (IN x: ARRAY OF CHAR; OUT y: ARRAY OF BYTE; pos: INTEGER; OUT len: INTEGER);
Или вариант с SHORTCHAR вместо BYTE.

Маленький модуль, только преобразователь UTF8. Его можно линковать в пускач и импортировать в Kernel и HostFiles.

А Strings/Kernel от Utf8 освободятся. Если надо сохранить совместимость, то из Strings сделать трансляцию в Utf8.
Кто что думает на этот счет?

Автор:  Иван Денисов [ Вторник, 11 Февраль, 2020 22:53 ]
Заголовок сообщения:  Re: Linux: средства преобразования multibyte <-> UCS2

В ветку dev18 добавили модуль System/Mod/Utf8.odc
В нем сейчас реализация скопирована из ядра.
Используем его уже в HostDialog и HostDates версии 1.8-a1.
Планируется везде заменить использование Strings на этот Utf8, где конвертация делается.

В ядро этот модуль не надо импортировать. Ядро должно автономно работать, или вообще откажемся от SHORTCHAR в компиляторе, как Борис предлагает, то и в ядре эти преобразования не понадобятся.

Автор:  adimetrius [ Воскресенье, 01 Март, 2020 19:35 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Коллеги, может, пока джин еще в бутылке, стоит переназвать модуль просто Utf? А то потом захочется добавить UTF16, UCS какой-нибудь... Да и читать Utf приятней чем Utf8 )

Автор:  Иван Денисов [ Воскресенье, 01 Март, 2020 20:56 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Согласен. Александр предлагает Unicode тогда назвать. Сможем туда поместить разные кроссплатформенные реализации IsAlpha и т.п.

Автор:  adimetrius [ Воскресенье, 01 Март, 2020 21:45 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Unicode? Even better!

Автор:  Trurl [ Воскресенье, 01 Март, 2020 22:19 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

А можно назвать Everything и помещать туда, что потребуется.

Автор:  Trurl [ Воскресенье, 01 Март, 2020 23:23 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Что-то я запутался. В kernel же есть преобразования. Или у вас не 1.7?

Автор:  SovietPony [ Воскресенье, 01 Март, 2020 23:30 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Иван Денисов писал(а):
Согласен. Александр предлагает Unicode тогда назвать. Сможем туда поместить разные кроссплатформенные реализации IsAlpha и т.п.
У меня в bmbb давно есть такой модуль(HostUnicode), что бы не тягать в Kernel, а прикручивать через хук.
(* этот модуль у меня был сгенерирован автоматически утилиткой на сишке, можно ещё оптимизировать выхлоп *)

Автор:  adimetrius [ Воскресенье, 01 Март, 2020 23:50 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

А что не поместится в Everything, помещать в ОйВсё - даром штоли у нас кириллица поддерживается, и все эти пляски с УТФ8? :wink:

Автор:  Евгений Темиргалеев [ Понедельник, 02 Март, 2020 04:47 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Иван Денисов писал(а):
Согласен. Александр предлагает Unicode тогда назвать. Сможем туда поместить разные кроссплатформенные реализации IsAlpha и т.п.

Есть одна проблема. Преобразование UTF8 <-> UCS2 это тривиальная задача. А кроссплатформенные реализации IsAlpha -- нет. UCS2 -- это не ASCII. Иван Горячев к этому вопросу подходил серьезно, там целая подсистема.

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 06:50 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Я уверен, что подсистему любого размера возможно поместить в один модуль :)
Правда размер приложение будет увеличиваться. Но зато мы сможем убрать из Strings зависимость от ядра, что важно при разработке динамических библиотек на Блэкбоксе.

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 07:00 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Trurl писал(а):
Что-то я запутался. В kernel же есть преобразования. Или у вас не 1.7?

В этом подфоруме сейчас больше обсуждаем версию 1.8.
В 1.7.2 кросс-платформенной сборки сейчас статус бета и там никаких нововведений не планируется.

Автор:  Trurl [ Понедельник, 02 Март, 2020 07:59 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Та все же, вы планируете в 1.8 убрать то, что добавили в 1.7?

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 08:04 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Trurl писал(а):
Та все же, вы планируете в 1.8 убрать то, что добавили в 1.7?

Некоторые рациональные изменения будут, которые противоречат решениям, примененным в 1.7
1. которые понизят издержки орловско/воронежской команды по использованию их разработок на новой версии
2. которые упростят поддержку кросс-платформенности

Однако будет больше именений 1.8 от 1.6, чем 1.7 от 1.6 в совокупности.

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 08:12 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Возвращаясь к теме utf8, в ядре предлагается убрать экспорт процедур преобразований. А использовать в компиляторе и средствах отладки модуль Unicode, который будет упаковывать/распаковывать идентификаторы в/из ARRAY OF SHORTCHAR.

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 18:15 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

SovietPony писал(а):
Иван Денисов писал(а):
Согласен. Александр предлагает Unicode тогда назвать. Сможем туда поместить разные кроссплатформенные реализации IsAlpha и т.п.
У меня в bmbb давно есть такой модуль(HostUnicode), что бы не тягать в Kernel, а прикручивать через хук.
(* этот модуль у меня был сгенерирован автоматически утилиткой на сишке, можно ещё оптимизировать выхлоп *)

Снимаем шляпу, вы сделали большое дело! Помещу его сюда, чтобы людям было проще ознакомиться.

Вложения:
HostUnicode.txt [18.36 КБ]
Скачиваний: 409

Автор:  Иван Денисов [ Понедельник, 02 Март, 2020 19:57 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Думал думал и придумал, что надо этот код вставлять напрямую в Strings. Раз он кросс-платформенный раз. А также раз Евгений считает, что надо отдельным модулем. А нам модули совершенно не надо плодить в огромном количестве. Есть отличное место для этих процедур - Strings.

Автор:  Илья Ермаков [ Понедельник, 02 Март, 2020 20:21 ]
Заголовок сообщения:  Re: #016 Linux: средства преобразования multibyte <-> UCS2

Чрезмерный размер Strings тоже не особо хорош. Иногда он статически линкуется, например.
Если только иметь там интерфейс, а реализацию хранить отдельно.

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