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 добавлена на уровня ядра. Прелесть такой реализации в том, что не теряется совместимость со старыми символьными файлами. Не нужна даже перекомпиляция старых компонентов. Работает все очень слажено. Прошу желающих протестировать по возможности эту сборку. Вложение: Еще новость. Цинн добавил русский (и другие) языки в свою свежую сборку от 20 октября для форм и меню. |
Автор: | Борис Рюмшин [ Вторник, 28 Октябрь, 2014 21:20 ] |
Заголовок сообщения: | Re: Поддержка юникодных обозначений |
Иван Денисов писал(а): Хельмута Цинна, у которого, в свою очередь, эта поддержка появилась в итоге обсуждений на форуме Центра. Ну скажем так, для точности: не только на форуме Центра. |
Автор: | 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/ |