Вверх ↑
Ответов: 4639
Рейтинг: 755
#1: 2025-03-08 22:43:20 ЛС | профиль | цитата
Итак, в приложенном архиве поправленный файл CodeGen.dll, который понимает коды юникодных символов в строковых свойствах HiAsm.
То-есть, для юникодных символов, которые невозможно ввести на схеме HiAsm, поскольку среда является не-юникодной, можно указать их коды, например:
"абвгд \9824\9827\9829\9830"

Закройте HiAsm и закиньте содержимое папки "code" из архива в папку "code" моего пакета.

В официальном кодогенераторе и предыдущих версиях моего распознавались только коды из 3-х цифр после обратного слеша до 255, например: "\13\165\220".

После поправки распознаётся до 5-ти цифр с максимальным значением до 65535, например: \11234.
Больше 65535 вставляется без преобразования (типа "\98765").
В связи с этим могут появиться побочные эффекты при компиляции схем официального пакета в моей версии пакета.
Если в свойстве компонента было указано: "абвгд\255321"
то официальный пакет выведет: "абвгдя321", где \255 преобразовано в символ "я"
а в моем пакете выведет "абвгд?1", где "?" - какой-то там символ с кодом 25532.
Решение - указать ведущие 0 после слеша, добив код до 5 символов: "абвгд\00255321".
Тогда результат будет аналогичный.
Соответственно, схемы с такими строками из моего пакета нужно будет поправить в обратном порядке для компиляции официальным пакетом. Юникодные символы там все равно не будут отображаться.
Также юникодные символы будут потеряны при компиляции в моем пакете не-юникодными компиляторами.

По-прежнему распознаются специальные последовательности \r, \n, \t.
Если после обратного слеша "\" идет "r", "n", "t" или цифра, но их не надо распознавать как специальный символ, то надо удвоить слеш, например: "c:\Windows\\notepad.exe".
Независимо от символов после 2-го слеша, два слеши подряд будут преобразованы в один, поэтому чтобы вывести двойной слеш "\\", надо указать 4 слеша: "\\\\"

В архиве есть схема, которая поможет подготовить юникодную строку для вставки в свойства компонентов.
Если вам нужно вставить в схему символы, которые HiAsm не поддерживает - получите их коды этой схемой.
Схема должна компилироваться в юникодном режиме.

Дополнительное изменение в кодогенераторе: строки длиной больше 254 символа теперь не помещаются в ресурсы. Вместо этого разбиваются в коде через символ соединения "+", что позволяет обойти ограничение Delphi на длину строковой константы. Соответственно, символ с кодом #0 ("\0") теперь сохраняется и в строках длиной больше 254. В официальном пакете последовательность "\0" во всех случаях обрезает строку. (Напомню: символ с кодом 0 также обрезает строку при выводе в оконные элементы и используется разве что при хранении бинарных данных в строковых свойствах).

Потестируйте, если всё нормально, то выложу обновление пакета.

CodeGen_for_Unicode_props.zip
карма: 26

0
Редактировалось 1 раз(а), последний 2025-03-09 14:21:06