OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 22 Октябрь, 2017 22:14

Часовой пояс: UTC + 3 часа




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

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1922
Откуда: Красноярск
В рабочей версии сборки Центра теперь есть поддержка Юникода для обозначения переменных, процедур, модулей, констант.

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

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

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

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


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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 28 Октябрь, 2014 21:20 
Администратор

Зарегистрирован: Вторник, 15 Ноябрь, 2005 01:14
Сообщения: 4030
Откуда: Россия, Орёл
Иван Денисов писал(а):
Хельмута Цинна, у которого, в свою очередь, эта поддержка появилась в итоге обсуждений на форуме Центра.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Среда, 29 Октябрь, 2014 11:05 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Kernel.Utf8ToString реализована неправильно, обсуждали здесь.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Суббота, 01 Ноябрь, 2014 02:55 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1922
Откуда: Красноярск
Alexander Shiryaev писал(а):
Kernel.Utf8ToString реализована неправильно, обсуждали здесь.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Ноябрь, 2014 18:19 
Аватара пользователя

Зарегистрирован: Пятница, 25 Сентябрь, 2009 13:10
Сообщения: 1157
Откуда: Tel-Aviv
Проверить верно ли реализована кодировка UTF-8 можно здесь: http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Воскресенье, 02 Ноябрь, 2014 18:38 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Иван Денисов писал(а):
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 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1922
Откуда: Красноярск
Спасибо, Александр! Я попробую эту тему продвинуть.
http://forum.blackboxframework.org/view ... 1458#p1453


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Вторник, 04 Ноябрь, 2014 00:34 
Аватара пользователя

Зарегистрирован: Суббота, 26 Ноябрь, 2005 02:12
Сообщения: 427
Откуда: Егорьевск
Исправлена ошибка
Код:
(* 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 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1922
Откуда: Красноярск
Использовал эту версию конвертера:
blackbox-1.7-a1.025.zip
blackbox-1.7-a1.025-setup.exe
в этой версии также исправлен последний обнаруженный Гансом Клавьером баг.

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


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 11 Декабрь, 2014 15:08 
Аватара пользователя

Зарегистрирован: Четверг, 08 Октябрь, 2009 15:00
Сообщения: 1922
Откуда: Красноярск
Вот что в итоге получилось:
http://blackboxframework.org/unstable/m ... a1.029.zip
http://blackboxframework.org/unstable/m ... -setup.exe

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


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2017, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB