Создание макросов с использованием DWScript - PullRequest
1 голос
/ 13 марта 2012

Я прочитал этот абзац с сайта Delphi Tools

Changes since the last SVN update are:
  Added support for FreePascal-like compile-time $INCLUDE “macros”:
    %FILE% and %LINE% insert the current filename and line number into the source
    %FUNCTION% inserts the current function name, or class.method name into the source
    %DATE% and %TIME% allow inserting the compile date/time

Есть ли способ определить макросы в DWScript (кроме этих функций) так же, как люди определяют макросы в Excel(используя VBscript) простым способом, где имя скрипта будет именем функции, которая будет использоваться позже, без добавления {$Include XXX} в исполняемый скрипт?

NB: Я знаю, что это можетбыть сделано путем управления письменным сценарием, который будет сохранен в определенном файле с именем functions для ex.затем сохраните добавленную функцию с именем, которое будет использоваться ( Add ), затем пользователь напишет Add (1,2), чтобы получить результат;но мой начальник на работе хочет, чтобы это было что-то похожее на VBScript в Excel.

1 Ответ

4 голосов
/ 13 марта 2012

Я не уверен, что понимаю вопрос, поэтому я перечислю различные ответы на различные возможные интерпретации ...

  • Если вы хотите объявить функции, которые неявно поддерживаютсямеханизм сценариев без необходимости "{$ include}" или "использовать" их, вы можете объявить их через компонент TdwsUnit и прикрепить его к компоненту сценария.Если у вас не установлена ​​опция "coExplicitUses", они будут доступны автоматически, и вы получите поддержку во время разработки в IDE.

  • Если вы хотите добавить внутренние функции(которые всегда есть), используйте одну из перегрузок RegisterInternalFunction, вы можете проверить любой из модулей "dwsXxxxFunctions.pas" для примеров.Это потенциально более эффективно, но и более громоздко.

  • Если вы хотите предварительно обработать пользовательские макросы на уровне исходного кода в исходном коде (макросы ala C), вы можете использовать функцию фильтров(проверьте фильтры HTML или JS как пример того, как фильтр может быть реализован).

  • Если вы хотите динамически реагировать на «неизвестные» имена, чтобы вы могли объявить их на местеили связать их с чем-то динамически, вы можете использовать TdwsLanguageExtension.FindUnknownName, именно так работает среда RTTI (см. TRTTIEnvironment в dwsRTTIConnector).

  • Если вы хотите полностью проанализировать пользовательские области кодаполностью настраиваемым способом, вы также можете использовать языковые расширения, переопределить ReadInstr и проверить, как asmLib и JSLibModule делают это для поддержки «asm».

...