OberonCore
https://forum.oberoncore.ru/

Поддержка юникодных обозначений
https://forum.oberoncore.ru/viewtopic.php?f=127&t=5241
Страница 1 из 1

Автор:  Иван Денисов [ Вторник, 28 Октябрь, 2014 20:30 ]
Заголовок сообщения:  Поддержка юникодных обозначений

В рабочей версии сборки Центра теперь есть поддержка Юникода для обозначения переменных, процедур, модулей, констант.

blackbox-1.7-a1.020.zip
blackbox-1.7-a1.020-setup.exe

Она аккуратно перенесена Джозефом Темплом из версии Хельмута Цинна, у которого, в свою очередь, эта поддержка появилась в итоге обсуждений на форуме Центра.

Как это работает. При компиляции все обозначения из Unicode16 кодируются в UTF8. Поддержка UTF-8 добавлена на уровня ядра. Прелесть такой реализации в том, что не теряется совместимость со старыми символьными файлами. Не нужна даже перекомпиляция старых компонентов. Работает все очень слажено. Прошу желающих протестировать по возможности эту сборку.

Вложение:
cyrillic.png
cyrillic.png [ 20.93 КБ | Просмотров: 6773 ]


Еще новость. Цинн добавил русский (и другие) языки в свою свежую сборку от 20 октября для форм и меню.

Автор:  Борис Рюмшин [ Вторник, 28 Октябрь, 2014 21:20 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Иван Денисов писал(а):
Хельмута Цинна, у которого, в свою очередь, эта поддержка появилась в итоге обсуждений на форуме Центра.

Ну скажем так, для точности: не только на форуме Центра. 8)

Автор:  Alexander Shiryaev [ Среда, 29 Октябрь, 2014 11:05 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Kernel.Utf8ToString реализована неправильно, обсуждали здесь.

Автор:  Иван Денисов [ Суббота, 01 Ноябрь, 2014 02:55 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Alexander Shiryaev писал(а):
Kernel.Utf8ToString реализована неправильно, обсуждали здесь.

Александр, а как бы ты это реализовал не меняя интерфейс процедур? там в обсуждении немного запутано, я сходу не понял...

Автор:  Роман М. [ Воскресенье, 02 Ноябрь, 2014 18:19 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Проверить верно ли реализована кодировка UTF-8 можно здесь: http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt

Автор:  Alexander Shiryaev [ Воскресенье, 02 Ноябрь, 2014 18:38 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Иван Денисов писал(а):
Alexander Shiryaev писал(а):
Kernel.Utf8ToString реализована неправильно, обсуждали здесь.

Александр, а как бы ты это реализовал не меняя интерфейс процедур? там в обсуждении немного запутано, я сходу не понял...

Код:
PROCEDURE Utf8ToString* (IN in: ARRAY OF SHORTCHAR; OUT out: ARRAY OF CHAR; OUT res: INTEGER);
   VAR d, b, x, i, j, max: INTEGER;
BEGIN
   d := 0; i := 0; j := 0; max := LEN(out) - 1;
   WHILE (i < LEN(in)) & (in[i] # 0X) & (d >= 0) DO x := ORD(in[i]);
      CASE d OF 0:
         CASE x OF 0..127:
            IF j < max THEN out[j] := CHR(x); INC(j)
            ELSE d := -2
            END
         | 194..223: b := x MOD 32; d := 1
         | 224..239: b := x MOD 16; d := 2
         ELSE d := -1
         END
      | 1:
         CASE x OF 128..191:
            IF j < max THEN out[j] := CHR(b * 64 + x MOD 64); INC(j); d := 0
            ELSE d := -2
            END
         ELSE d := -1
         END
      | 2:
         CASE x OF 128..159:
            IF b = 0 THEN d := -1
            ELSE b := b * 64 + x MOD 64; d := 1
            END
         | 160..191: b := b * 64 + x MOD 64; d := 1
         ELSE d := -1
         END
      END;
      INC(i)
   END;
   out[j] := 0X;
   IF d = 0 THEN res := 0 (* ok *) ELSE res := 1 (* truncated, decode incomplete or error *) END
END Utf8ToString;

Автор:  Иван Денисов [ Понедельник, 03 Ноябрь, 2014 19:48 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Спасибо, Александр! Я попробую эту тему продвинуть.
http://forum.blackboxframework.org/view ... 1458#p1453

Автор:  Alexander Shiryaev [ Вторник, 04 Ноябрь, 2014 00:34 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Исправлена ошибка
Код:
(* see http://www.ietf.org/rfc/rfc3629.txt *)
PROCEDURE Utf8ToString* (IN in: ARRAY OF SHORTCHAR; OUT out: ARRAY OF CHAR; OUT res: INTEGER);
   VAR d, b, x, i, j, max: INTEGER;
BEGIN
   d := 0; i := 0; j := 0; max := LEN(out) - 1;
   WHILE (i < LEN(in)) & (in[i] # 0X) & (d >= 0) DO x := ORD(in[i]);
      CASE d OF 0:
         CASE x OF 0..7FH:
            IF j < max THEN out[j] := CHR(x); INC(j)
            ELSE d := -2
            END
         | 0C2H..0DFH: b := x MOD 20H; d := 1
         | 0E0H..0EFH: b := x MOD 10H; d := 2
         ELSE d := -1
         END
      | 1:
         CASE x OF 80H..0BFH:
            IF j < max THEN out[j] := CHR(b * 40H + x MOD 40H); INC(j); d := 0
            ELSE d := -2
            END
         ELSE d := -1
         END
      | 2:
         CASE x OF 80H..9FH:
            IF b = 0 THEN d := -1
            ELSE b := b * 40H + x MOD 40H; d := 1
            END
         | 0A0H..0BFH:
            IF b = 0DH THEN d := -1
            ELSE b := b * 40H + x MOD 40H; d := 1
            END
         ELSE d := -1
         END
      END;
      INC(i)
   END;
   out[j] := 0X;
   IF d = 0 THEN res := 0 (* ok *)
   ELSIF d = -2 THEN res := 1 (* truncated *)
   ELSE res := 2 (* decode incomplete or error *)
   END
END Utf8ToString;

Автор:  Иван Денисов [ Четверг, 13 Ноябрь, 2014 06:46 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Использовал эту версию конвертера:
blackbox-1.7-a1.025.zip
blackbox-1.7-a1.025-setup.exe
в этой версии также исправлен последний обнаруженный Гансом Клавьером баг.

Пока еще мне не удалось убедить Хельмута и Джозефа, что надо использовать проверку диапазонов именно так. Удалось найти убедительную таблицу 3-7 в стандарте юникода, Которая видимо и цитируется в RFC3629.

Автор:  Иван Денисов [ Четверг, 11 Декабрь, 2014 15:08 ]
Заголовок сообщения:  Re: Поддержка юникодных обозначений

Вот что в итоге получилось:
http://blackboxframework.org/unstable/m ... a1.029.zip
http://blackboxframework.org/unstable/m ... -setup.exe

Теперь в главную ветку разработки включена поддержка юникодных идентификаторов.
При этом Блэкбокс совместим со старыми модулями, не требуется их перекомпиляция.

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