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

:P Не могу не порадоваться, что вместо 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/