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; Или вариант с SHORTCHAR вместо BYTE.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); Маленький модуль, только преобразователь 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? |
Автор: | Евгений Темиргалеев [ Понедельник, 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, а прикручивать через хук.(* этот модуль у меня был сгенерирован автоматически утилиткой на сишке, можно ещё оптимизировать выхлоп *) Снимаем шляпу, вы сделали большое дело! Помещу его сюда, чтобы людям было проще ознакомиться.
|
Автор: | Иван Денисов [ Понедельник, 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/ |