Skip to content

Instantly share code, notes, and snippets.

@artbear
Created March 2, 2021 07:47
Show Gist options
  • Save artbear/9e97df6c58f5dc50ac3cbe4d3d87f557 to your computer and use it in GitHub Desktop.
Save artbear/9e97df6c58f5dc50ac3cbe4d3d87f557 to your computer and use it in GitHub Desktop.
Snegopat разные примеры для внутренностей

Snegopat разные примеры для внутренностей

найти код, который обрабатывает вставку текстоа из списка подсказки

1 Artur Ayukhanov, [20.11.20 18:33] @orefkov подскажи, плиз, где найти код, который 1 обрабатывает вставку текстоа из списка подсказки - хочу поправить вставку методов перед выражением

  • было "Строка" + Параметр
  • вставил СтрШаблон
  • стало СтрШаблон("Строка" + Параметр) вместо текущего СтрШаблон()"Строка" + Параметр

2 обрабатывает удаление символов () - здесь можно искать по хоткею backspace для скриптов, да?

Орефков Александр, [20.11.20 23:21] 2. Да

  1. Смотреть core\engine\intellisite.as метод onDoSelect. Ключевой момент - у объекта вставляемого пункта списка сначала вызывается updateInsertPosition - и он может скорректировать позицию вставки После у него же вызывается textForInsert - там он вернёт текст для вставки. Так что нужно найти один из классов наследников от SmartBoxInsertableItem, который отвечает за этот пункт списка, и поправить эти методы.

Автозамена х++ на х = х + 1

Орефков Александр, [01.10.20 10:43] смотрите engine\ModuleTextProcessor.as, bool doAutoReplace в строке 267, там код достаточно откомментирован

о внутреннем устройстве движка 1С

Орефков Александр, [10.11.20 12:48] Тут надо целую лекцию писать об внутреннем устройстве движка 1С. Постараюсь коротенько. Итак, как выполняется код в 1С? Есть интерпретатор байт кода, и есть среда выполнения, в которой он выполняется. Имеется ряд простых функций, которые непосредственно встроены в сам язык 1С. Это функции типа СтрЗаменить, СокрЛП и т.п., которые интерпретерар сам умеет выполнять, не обращаясь к среде выполнения. Для них в байт-коде 1С имеется свои оп-коды, по отдельному коду на каждую такую функцию. Список таких "встроенных" функций снегопат может получить от движка 1С, см. core\engine\typereader.as, readBuiltinFuncs(). Их состав невелик, и даже раньше в справке Конфигуратора они шли отдельно. Все остальные методы - добавляются в язык 1С средой исполнения. Она просто регистрирует их в интерепретаторе. В терминах 1С - методы глобального контекста. Например, среда исполнения регистриует в движке метод СтрЗаканчиваетсяНа. Как его выполнять - интерпретатор совершенно не знает, он просто вызывает его откуда-то извне. Для них уже нет отдельных оп-кодов, а используется один оп-код - вызвать функцию объекта по имени. Таким образом - набор встроенных функций - ограничен и конечен, и не так уж велик. Набор подключаемых средой исполнения функций - теоретечески бесконечен, среда исполнения их может добавить сколько угодно. Это я еще не углублялся в детали, что на самом деле глобальных методов в 1С нет, а есть куча глобальных объектов, чьи методы просто вызываются без указания объекта.

Орефков Александр, [10.11.20 12:49] Вообще, если человек занимается делом, а не хернёй, у него просто не должно возникнуть такого вопроса, потому что ему нет необходимости в рабочем коде писать СтрЗаменить, не присваивая результат вызова чему-либо

Чтение файлов внутри AngelScript с помощью 1С

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;
        }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment