Форк Refal-05 с поддержкой Unicode, добавляющий полную поддержку Unicode с использованием ICU (International Components for Unicode).
Этот форк расширяет оригинальный компилятор Refal-05 полной поддержкой Unicode, позволяя программам обрабатывать текст на любом языке и письменности. Реализация использует UTF-32 внутри для эффективной обработки символов и UTF-8 для ввода/вывода.
- Полный набор символов Unicode: Поддержка всех символов Unicode, включая эмодзи
- UTF-8 ввод/вывод: Весь ввод и вывод использует кодировку UTF-8
- Внутреннее представление UTF-32: Кодировка фиксированной ширины для эффективного сопоставления с образцом
- Оптимизация ASCII: Символы < 128 используют устаревшие узлы CHAR для производительности
- Свойства символов: Функция
Typeрасширена для определения категорий Unicode - Преобразование регистра: Функции
UpperиLowerработают со всеми письменностями Unicode - Сопоставление с образцом с учётом Unicode: Правильная обработка многобайтовых символов
- Шестнадцатеричная поддержка:
ChrHexиOrdHexдля шестнадцатеричной записи (например, 0x4E2D) - Шестнадцатеричные литералы: Прямая шестнадцатеричная запись в исходном коде (0xFF, 0x1F389)
- Классификация символов: определение буквенных, цифровых, пробельных, печатаемых символов
- Преобразование регистра: преобразование верхнего/нижнего/заглавного регистра с учётом локали
- Нормализация: формы NFC, NFD, NFKC, NFKD
- Определение письменности: идентификация системы письма символов
- Графемные кластеры: правильная обработка комбинирующих символов
-
Расширенная структура узлов (
refal05rts.h):- Добавлен
R05_DATATAG_UNICODEдля символов UTF-32 - Добавлено поле
unicode_в объединение узла - Сохранена обратная совместимость с ASCII
- Добавлен
-
Библиотека Unicode (
r05-unicode.h/c):- Функции преобразования UTF-8 ↔ UTF-32
- Запросы свойств символов через ICU
- API нормализации и определения письменности
-
Обновления среды выполнения:
- Функции выделения памяти с учётом Unicode
- Разбор строк UTF-8 с быстрым путём для ASCII
- Сравнение символов Unicode при сопоставлении с образцом
- Преобразование вывода в UTF-8
-
Встроенные функции:
Chr/Ord: Расширены для кодовых точек Unicode (0-0x10FFFF)ChrHex/OrdHex: Шестнадцатеричные операции UnicodeType: Определение категории UnicodeUpper/Lower: Полное преобразование регистра UnicodeProut/Print: Поддержка вывода UTF-8
-
Улучшения парсера:
- Поддержка шестнадцатеричных литералов: префикс
0xдля чисел (например, 0x4E2D = 20013) - Кодировка исходных файлов UTF-8
- Строки Unicode в исходном коде
- Поддержка шестнадцатеричных литералов: префикс
Система сборки автоматически определяет ICU и включает поддержку Unicode:
./makeself.sh lambda # Собирает с Unicode, если ICU доступенНеобходимые зависимости:
- Библиотеки разработки ICU (icu4c)
- Компилятор C с поддержкой C99
- Символы ASCII (< 128) используют оригинальный тип узла CHAR для эффективности
- Декодирование UTF-8 включает быстрый путь для ASCII
- Сопоставление с образцом оптимизировано для распространённых случаев только с ASCII
- Свойства Unicode кэшируются ICU для производительности
Тестовые программы демонстрируют функциональность Unicode:
test-unicode-hello.ref: "Hello World" на разных языкахtest-simple-unicode.ref: Операции с символами и преобразование регистраtest-unicode-comprehensive.ref: Сопоставление с образцом и граничные случаиtest-unicode-advanced.ref: Типы символов и смешанные строкиtest-hex-literals.ref: Разбор шестнадцатеричных литераловtest-hex-functions.ref: Функциональность ChrHex/OrdHex
Пример вывода:
Hello, World!
Привет, мир!
你好,世界!
こんにちは、世界!
🌍🌎🌏 Unicode Test 🎉
- Сохраняет полную обратную совместимость с существующими программами Refal-05
- Программы только с ASCII работают без потери производительности
- Исходные файлы могут использовать кодировку UTF-8 для строковых литералов
- Двоичная совместимость сохранена для сборок без Unicode
Та же, что и у оригинального Refal-05 (см. файл LICENSE)
Реализация Unicode: Данслав Славенской.
Refal-05: Александр Коновалов.