OneScript icon indicating copy to clipboard operation
OneScript copied to clipboard

ПодключитьСценарий() - ошибка "Неверное значение аргумента" при содержании "й" в названии класса

Open Macegor opened this issue 8 months ago • 17 comments

В ПодключитьСценарий вторым параметром передаётся строка с именем класса. Если передать туда строку содержащую "й" то возникает исключение: Неверное значение аргумента

Воспроизведение ошибки

  1. Создать любой скрипт и вызвать в нём ПодключитьСценарий("адрес", "НовыйКласс")
  2. Запустить код ...
  3. Увидеть ошибку

Ожидаемое поведение Класс регистрируется без возникновения исключения

Окружение

  • ОС: MacOS 15
  • Версия: 2.0 rc6

Дополнительная информация Возможно будет ругаться и на "ё"

Macegor avatar May 10 '25 15:05 Macegor

Важно - маковская й вечно создаёт проблемы

nixel2007 avatar May 10 '25 15:05 nixel2007

и ё тоже. Это не ошибка, многобуквенные буквы компилятором сейчас не поддерживаются (в 1С тоже не поддерживаются)

EvilBeaver avatar May 12 '25 09:05 EvilBeaver

И чё делать?)

Macegor avatar May 12 '25 16:05 Macegor

Не писать двусимвольную й на маке. Возможно можно что-то настроить, чтобы использовалась нормальная?

nixel2007 avatar May 12 '25 17:05 nixel2007

Черт его знает, я жму Й и всё. и нет тут никаких двух символов

Macegor avatar May 12 '25 17:05 Macegor

Юникод вьювером посмотри

nixel2007 avatar May 13 '25 05:05 nixel2007

Применить String.Normalize() везде, где в строке должен быть идентификатор? Или даже String.Normalize(NormalizationForm.FormKC)

Mr-Rm avatar May 13 '25 06:05 Mr-Rm

Применить String.Normalize() везде, где в строке должен быть идентификатор? Или даже String.Normalize(NormalizationForm.FormKC)

Это незнакомая мне магия, но если это оно, то да, имеет смысл. Правда лексер передвигается на следующий символ по i++ и Normalize, кажется, будет недостаточно

EvilBeaver avatar May 13 '25 08:05 EvilBeaver

Строка собирается лексером от кавычки до кавычки. Как соберётся - нормализовать.

Mr-Rm avatar May 13 '25 08:05 Mr-Rm

С другой стороны, ПодключитьСценарий ошибки не вызывает, там нормальная буква или нет?

Mr-Rm avatar May 13 '25 08:05 Mr-Rm

Я думаю это достаточно сделать только для процедуры "ПодключитьСценарий"

Macegor avatar May 13 '25 11:05 Macegor

Строка собирается лексером от кавычки до кавычки. Как соберётся - нормализовать.

Так речь же не только про кавычки, ё и й могут быть и в идентификаторах. А Лексер переходит на следующую букву инкрементом позиции. И сейчас он будет попадать на знак диакритики, вместо следующей значащей буквы

EvilBeaver avatar May 13 '25 12:05 EvilBeaver

Нет стопроцентно совместимого решения. Понятно, что в идентификаторах должны быть только символы UNICODE Letter, но чем модифицировать под нормализацию лексер, лучше явно наложить такое требование на исходники. Что делает с комбинированными символами редактор - видимо, зависит от настроек редактора, если такие есть. С файлами хуже. В маковской HFS+ выполняется принудительная денормализация имён, а в APFS уже нет. Если Файл.Существует("МойФайл.txt") - непереносимо. #Если MacOS не поможет. Для библиотек можно придумать что-нибудь с lib.config, но нужно ли?.. Won't (or can't) fix?

Mr-Rm avatar May 13 '25 14:05 Mr-Rm

wontfix, конечно же. Извращенцы из Apple, придумывающие ни с чем не совместимую ересь, не должны навязывать ее всем подряд.

EvilBeaver avatar May 15 '25 07:05 EvilBeaver

У меня, и не только, динамически создаваемые классы из файлов, мне бы как то обойти этот прикол) Я так понимаю на уровне платформы решаться это не будет

Macegor avatar May 15 '25 10:05 Macegor

ИмяКласса = "НовыйКласс";
#Если MacOS тогда
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1048)+Символ(774), Символ(1049)); // Й
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1080)+Символ(774), Символ(1081)); // и
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1045)+Символ(776), Символ(1025)); // Ё
ИмяКласса = СтрЗаменить(ИмяКласса, Символ(1077)+Символ(776), Символ(1105)); // ё
#КонецЕсли
ПодключитьСценарий(Адрес, ИмяКласса);

Mr-Rm avatar May 15 '25 12:05 Mr-Rm

Спасибо)))

Macegor avatar May 15 '25 12:05 Macegor