CreatoR, отличная идея с отдельной директивой!
Прошу озвучить все
.
Пожалуй, наилучшим вариантом можно назвать идею с запоминанием положения первого и последнего байта Func/EndFunc или объявления переменной.
Долго думал над проблемой и подумалось, что регулярные выражения нам в этом деле не подходят, поскольку, если скрипт прокручивать через StringRegExpReplace для каждой переменной/функции из длинного списка, еще и по очереди в цикле, произойдет очень много итераций, а производительность в таком случае будет нулевой.
Да и не нужны они, по большому счету. Если переменную объявили, но не используют и упоминание её в коде всего одно (когда объявляют), то какой смысл заменять фразу объявления по регулярке во всем скрипте? Достаточно переместить указатель в позицию первого байта объявления, удалить объявление и всего делов.
Даже чисто гипотетически прокрутить сферические 100 кб скрипта регуляркой через список из 500 переменных по очереди, а вторым циклом еще и функции повырезать... жутко становится.
Но если в одну итерацию пройтись по скрипту, перечислить функции и переменные, запомнить их положение, а второй итерацией вырезать их или (заполнить эти интервалы пробелами/StringStripWS в финале на весь скрипт), работать программа будет быстро.
Второй вариант - это, конечно же, регулярные выражения, но, во-первых, может получиться очень медленно, а во-вторых, тут от меня помощи мало, т.к. владею ими в недостаточной степени.
Интрига в задаче есть, и когда выдастся минутка после работы, попробую нечто такое сваять. Заодно и проверю работоспособность и производительность метода. Буду держать в курсе дела.