1 Artur Ayukhanov, [20.11.20 18:33] @orefkov подскажи, плиз, где найти код, который 1 обрабатывает вставку текстоа из списка подсказки - хочу поправить вставку методов перед выражением
- было "Строка" + Параметр
- вставил СтрШаблон
- стало СтрШаблон("Строка" + Параметр) вместо текущего СтрШаблон()"Строка" + Параметр
2 обрабатывает удаление символов () - здесь можно искать по хоткею backspace для скриптов, да?
Орефков Александр, [20.11.20 23:21] 2. Да
- Смотреть core\engine\intellisite.as метод onDoSelect. Ключевой момент - у объекта вставляемого пункта списка сначала вызывается updateInsertPosition - и он может скорректировать позицию вставки После у него же вызывается textForInsert - там он вернёт текст для вставки. Так что нужно найти один из классов наследников от SmartBoxInsertableItem, который отвечает за этот пункт списка, и поправить эти методы.
Орефков Александр, [01.10.20 10:43] смотрите engine\ModuleTextProcessor.as, bool doAutoReplace в строке 267, там код достаточно откомментирован
Орефков Александр, [10.11.20 12:48] Тут надо целую лекцию писать об внутреннем устройстве движка 1С. Постараюсь коротенько. Итак, как выполняется код в 1С? Есть интерпретатор байт кода, и есть среда выполнения, в которой он выполняется. Имеется ряд простых функций, которые непосредственно встроены в сам язык 1С. Это функции типа СтрЗаменить, СокрЛП и т.п., которые интерпретерар сам умеет выполнять, не обращаясь к среде выполнения. Для них в байт-коде 1С имеется свои оп-коды, по отдельному коду на каждую такую функцию. Список таких "встроенных" функций снегопат может получить от движка 1С, см. core\engine\typereader.as, readBuiltinFuncs(). Их состав невелик, и даже раньше в справке Конфигуратора они шли отдельно. Все остальные методы - добавляются в язык 1С средой исполнения. Она просто регистрирует их в интерепретаторе. В терминах 1С - методы глобального контекста. Например, среда исполнения регистриует в движке метод СтрЗаканчиваетсяНа. Как его выполнять - интерпретатор совершенно не знает, он просто вызывает его откуда-то извне. Для них уже нет отдельных оп-кодов, а используется один оп-код - вызвать функцию объекта по имени. Таким образом - набор встроенных функций - ограничен и конечен, и не так уж велик. Набор подключаемых средой исполнения функций - теоретечески бесконечен, среда исполнения их может добавить сколько угодно. Это я еще не углублялся в детали, что на самом деле глобальных методов в 1С нет, а есть куча глобальных объектов, чьи методы просто вызываются без указания объекта.
Орефков Александр, [10.11.20 12:49] Вообще, если человек занимается делом, а не хернёй, у него просто не должно возникнуть такого вопроса, потому что ему нет необходимости в рабочем коде писать СтрЗаменить, не присваивая результат вызова чему-либо
core\engine\scriptLoader.as
Addin&& load(const string& uri) {
string fullPath = findFullPath(uri);
if (fullPath.isEmpty()) {
oneAddinMgr._lastAddinError = "Не удалось найти файл " + uri;
return null;
}
v8string textOfFile;
readTextFile(textOfFile, fullPath);
string source = textOfFile;
if (source.isEmpty()) {
oneAddinMgr._lastAddinError = "Не удалось получить текст файла " + fullPath;
return null;
}