OberonCore https://forum.oberoncore.ru/ |
|
#016 Linux: средства преобразования multibyte <-> UCS2 https://forum.oberoncore.ru/viewtopic.php?f=134&t=6492 |
Страница 3 из 3 |
Автор: | Иван Денисов [ Суббота, 14 Март, 2020 07:44 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Вроде пришли к консенсусу, что переименование Utf8 в Utf допустимо. Убрал экспорт в ядре процедур для преобразований UCS2 в UTF8 и обратно. Везде в каркасе все преобразования сделал через модуль Utf. В Strings для совместимости пока оставил процедуры преобразований, но пометил как DEPRECATED, удалил их из документации. Модуль Strings теперь не зависит от ядра, реализует преобразования кодировок через модуль Utf, а преобразования регистров и отличение букв от цифр через модуль Unicode. |
Автор: | Иван Денисов [ Четверг, 07 Май, 2020 07:34 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
С одной стороны, хорошо бы сохранить совместимость с многими подсистемами, которые используют Strings для преобразований Utf8 Но с другой, не хорошо, что Strings таскает зависимость от Utf, да и Unicode тоже. Было бы хорошо оставить там только одну зависимость от Math, как было раньше. Но тогда как быть с IsUpper IsAlpha и т.п. ? |
Автор: | Борис Рюмшин [ Пятница, 08 Май, 2020 18:36 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Иван Денисов писал(а): С одной стороны, хорошо бы сохранить совместимость с многими подсистемами, которые используют Strings для преобразований Utf8 Но с другой, не хорошо, что Strings таскает зависимость от Utf, да и Unicode тоже. Было бы хорошо оставить там только одну зависимость от Math, как было раньше. Но тогда как быть с IsUpper IsAlpha и т.п. ? Забить на них. Кому надо, будут импортировать Unicode посредственно. А преобразования из Strings убрать, это совершенно правильно. |
Автор: | Иван Денисов [ Суббота, 09 Май, 2020 07:56 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Есть ещё мнения? Убираем преобразования из Strings? + более чёткая архитектура, меньше зависимостей - ломаем совместимость с некоторыми расширениями и модулями самого каркаса Модули в ББ, которые это использовали IsUpper, IsLower, IsAlpha будут зависеть от Unicode. |
Автор: | adimetrius [ Суббота, 09 Май, 2020 09:03 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Иван Денисов писал(а): Есть ещё мнения? Убираем преобразования из Strings? + более чёткая архитектура, меньше зависимостей - ломаем совместимость с некоторыми расширениями и модулями самого каркаса Модули в ББ, которые это использовали IsUpper, IsLower, IsAlpha будут зависеть от Unicode. А что предлагаете тогда с IsAlphaNumeric, IsIdent, IsIdentStart? Они же зависят от Unicode, или я ошибаюсь? |
Автор: | Иван Денисов [ Суббота, 09 Май, 2020 15:41 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
adimetrius писал(а): А что предлагаете тогда с IsAlphaNumeric, IsIdent, IsIdentStart? Они же зависят от Unicode, или я ошибаюсь? Верно, их тоже в Unicode вынести. |
Автор: | Иван Денисов [ Суббота, 16 Май, 2020 10:00 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Товарищи, если ли возражения на этот счёт? Мы избавляем Strings от зависимостей, нарушая совместимость с некоторыми расширениями? |
Автор: | Info21 [ Суббота, 16 Май, 2020 12:44 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
У меня нет возражений, грязь надо чистить. |
Автор: | Иван Денисов [ Среда, 20 Май, 2020 17:53 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Подготовил изменение. Таким образом модуль Unicode не будет иметь зависимостей и содержит следующие процедуры. Код: DEFINITION Unicode; PROCEDURE IsAlpha (ch: CHAR): BOOLEAN; PROCEDURE IsAlphaNumeric (ch: CHAR): BOOLEAN; PROCEDURE IsIdent (ch: CHAR): BOOLEAN; PROCEDURE IsIdentStart (ch: CHAR): BOOLEAN; PROCEDURE IsLower (ch: CHAR): BOOLEAN; PROCEDURE IsNumeric (ch: CHAR): BOOLEAN; PROCEDURE IsUpper (ch: CHAR): BOOLEAN; PROCEDURE Lower (ch: CHAR): CHAR; PROCEDURE ToLower (IN in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR); PROCEDURE ToUpper (IN in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR); PROCEDURE Upper (ch: CHAR): CHAR; END Unicode. Модуль Strings соответственно эти процедуры утратил. Но зато он теперь зависит только от Math. Код: DEFINITION Strings; CONST charCode = -1; decimal = 10; digitspace = 8FX; hexadecimal = -2; hideBase = FALSE; roman = -3; showBase = TRUE; PROCEDURE Extract (s: ARRAY OF CHAR; pos, len: INTEGER; OUT res: ARRAY OF CHAR); PROCEDURE Find (IN s: ARRAY OF CHAR; IN pat: ARRAY OF CHAR; start: INTEGER; OUT pos: INTEGER); PROCEDURE IntToString (x: LONGINT; OUT s: ARRAY OF CHAR); PROCEDURE IntToStringForm (x: LONGINT; form, minWidth: INTEGER; fillCh: CHAR; showBase: BOOLEAN; OUT s: ARRAY OF CHAR); PROCEDURE RealToString (x: REAL; OUT s: ARRAY OF CHAR); PROCEDURE RealToStringForm (x: REAL; precision, minW, expW: INTEGER; fillCh: CHAR; OUT s: ARRAY OF CHAR); PROCEDURE Replace (VAR s: ARRAY OF CHAR; pos, len: INTEGER; IN rep: ARRAY OF CHAR); PROCEDURE SetToString (x: SET; OUT str: ARRAY OF CHAR); PROCEDURE StringToInt (IN s: ARRAY OF CHAR; OUT x, res: INTEGER); PROCEDURE StringToLInt (IN s: ARRAY OF CHAR; OUT x: LONGINT; OUT res: INTEGER); PROCEDURE StringToReal (IN s: ARRAY OF CHAR; OUT x: REAL; OUT res: INTEGER); PROCEDURE StringToSet (IN s: ARRAY OF CHAR; OUT x: SET; OUT res: INTEGER); PROCEDURE Valid (IN s: ARRAY OF CHAR): BOOLEAN; PROCEDURE GetDecimalSign (): CHAR; PROCEDURE SetDecimalSign (sign: CHAR); END Strings. В версии 1.6 были вот такие процедуры в Strings, которые работали только в области ASCII. Возникает вопрос, надо ли их оставлять? Код: PROCEDURE Upper* (ch: CHAR): CHAR; BEGIN IF ORD(ch) < 256 THEN RETURN toUpper[ORD(ch)] ELSE RETURN ch END END Upper; PROCEDURE ToUpper* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR); VAR i, max: INTEGER; BEGIN i := 0; max := LEN(out)-1; WHILE (in[i] # 0X) & (i < max) DO IF ORD(in[i]) < 256 THEN out[i] := toUpper[ORD(in[i])] ELSE out[i] := in[i] END; INC(i) END; out[i] := 0X END ToUpper; PROCEDURE Lower* (ch: CHAR): CHAR; BEGIN IF ORD(ch) < 256 THEN RETURN toLower[ORD(ch)] ELSE RETURN ch END END Lower; PROCEDURE ToLower* (in: ARRAY OF CHAR; OUT out: ARRAY OF CHAR); VAR i, max: INTEGER; BEGIN i := 0; max := LEN(out)-1; WHILE (in[i] # 0X) & (i < max) DO IF ORD(in[i]) < 256 THEN out[i] := toLower[ORD(in[i])] ELSE out[i] := in[i] END; INC(i) END; out[i] := 0X END ToLower; Была идея передалать их по SHORTCHAR, но в чате высказывались мнения, что SHORTCHAR не надо использовать. Поэтому я убрал их... Но решил вынести на форум этот вопрос, чтобы услышать больше мнений. Оставить ли для совместимости? |
Автор: | adimetrius [ Среда, 20 Май, 2020 21:59 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Не могу не порадоваться, что вместо Lower(...): BOOLEAN процедура теперь называется IsLower(...): BOOLEAN, и другие подобные изменения. |
Автор: | Иван Денисов [ Четверг, 21 Май, 2020 07:09 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
adimetrius писал(а): :P Не могу не порадоваться, что вместо Lower(...): BOOLEAN процедура теперь называется IsLower(...): BOOLEAN, и другие подобные изменения. Да не... это по старому. |
Автор: | Иван Денисов [ Четверг, 21 Май, 2020 07:12 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Если оставить процедуры Lower Upper ToLower ToUpper в Strings, то получится, что без изменения интерфейса поменяется из функциональность от версии 1.7 к версии 1.8. Так получится, что модули импортирующие и использующие эти процедуры у людей будут компилироваться, но работать будут уже иначе. И это плохо. Это аргумент за то, чтобы убрать эти процедуры из Strings. |
Автор: | Иван Денисов [ Понедельник, 25 Май, 2020 07:25 ] |
Заголовок сообщения: | Re: #016 Linux: средства преобразования multibyte <-> UCS2 |
Добавил эти изменения. Тестовая версия для Windows. https://blackbox.oberon.org/unstable/de ... a1.031.zip Для GNU/Linux https://blackbox.oberon.org/unstable/de ... .31.tar.gz |
Страница 3 из 3 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |