
               Скрипты для массовой вставки кода в программные модули.



CodeIns.pl  - скрипт для массовой правки кода в текущем модуле, или во всех модулях. 
  Работает так: определяет тип модуля, затем берёт соответствующий шаблон из каталога 
  базы данных, и выполняет его. Шаблон - это просто скрипт, написанный на перле, и 
  вызывающий методы CodeWorks.

RunPerlScripts.vbs - служит для запуска CodeIns.pl из OpenConf.
	

ФормаДокумента.pl и ФормаЭлемента.pl - примеры шаблонов.



#########################################################################################################
CodeWorks.pm - модуль (package) с базовыми функциями для обработки кода. Его нужно положить 
               в каталог перловых библиотек. В случае стандартной установки ActivePerl это будет c:\perl\lib

Методы: 
	LoadModule($FileName) - загружает текст модуля из файла
		- $FileName -	имя файла, который нужно загрузить.
	
	ProcessModule($ProcName) - сбор статистики по загруженному модулю
		- $ProcName -	имя процедуры, которую нужно найти в модуле. Может быть пустой строкой.

	FindProc($ProcName) - поиск указанной процедуры в модуле. Результат работы в переменных $proc_start, $proc_end и $proc_body
		- $ProcName -	имя процедуры, которую нужно найти в модуле.

	CreateProc($ProcName, $ProcText, $PeforeProc) - создаёт указанную процедуру
		- $ProcName   - имя процедуры
		- $ProcText   - полный текст процедуры
		- $PeforeProc - имя процедуры, перед которой нужно сделать вставку. Параметр не обязательный.

	RemoveProc($ProcName, $WithComments) - удаляет указанную процедуру
		- $ProcName     - имя удаляемой процедуры
		- $WithComments - если не пустое, то будут удалены комментарии перед процедурой и после неё.

	InsertVarDecl($ObjName, $ProcName, $VarName) - вставка объявления переменной
		- $ObjName  - имя объекта метаданных. Служит для замены в шаблоне кода: если в имени переменной содержится 
		              строка вида <ObjectName>, то она будет заменена на значение $ObjName.
		- $ProcName - имя процедуры, в которой нужно объявить переменную. Если пустая строка, то переменная будет 
		              объявлена как переменная модуля.
		- $VarName  - имя переменной.

	RenameObject($ObjName, $ProcName, $OldName, $NewName) - переименовывает все лексические объекты
		- $ObjName  - имя объекта метаданных. Служит для замены в шаблоне кода: если в имени переменной 
		              содержится строка вида <ObjectName>, то она будет заменена на значение $ObjName.
		- $ProcName - имя процедуры, в которой нужно что-то переименовыват. Если пустая строка, 
		              то переименование выполняется во всём модуле.
		- $OldName  - что переименовываем
		- $NewName  - на что перерименовываем

	InsertCode($ObjName, $ProcName, $Code, $AtEnd) - вставка кода
		- $ObjName  - имя объекта метаданных. Служит для замены в шаблоне кода: если в $Code содержится 
		              строка вида <ObjectName>, то она будет заменена на значение $ObjName.
		- $ProcName - имя процедуры, в которую нужно вставить код. Если пустая строка, то код будет 
		              вставлен в модуль.
		- $AtEnd    - если значение не пустое, то код будет вставлен в конец процедуры.

	ReplaceCode($ObjName, $ProcName, $OldCode, $NewCode) - замена одной строки кода на другую.
		- $ObjName  - имя объекта метаданных. Служит для замены в шаблоне кода: если в $Code содержится 
		              строка вида <ObjectName>, то она будет заменена на значение $ObjName.
		- $ProcName - имя процедуры, в которой нужно менять код. Если пустая строка, то код будет 
		              меняться во всём модуле.
		- $OldCode  - Старый код. RegExp шаблон, который должен матчить всю строку, исключая
		              лидирующие и конечные пробелы. Шаблон не должен содержать группировок.
		- $NewCode  - Новый код, который будет вставлен в случае совпадения шаблона $OldCode.

	RemoveCode($ProcName, $StartMarker, $EndMarker) - удаление кода, ограниченного маркерами
		- $ProcName    - имя процедуры, в которой нужно удалять код. Если пустая строка, то код будет 
		                 удалён всём модуле.
		- $StartMarker - регулярное выражение, определяющее начальный маркер куска кода. Например: "\/\/{Универсальная печать"
		- $EndMarker   - регулярное выражение, определяющее завершающий маркер куска кода. Например: "\/\/}Универсальная печать"

	GetObjectName($FullFName) - выковыривает имя объекта из полного пути к файлу. Например, если 
		                        $FullFName = "Src\Справочники\Контрагенты\МодульФормы.1s" то функция вернёт строку "Контрагенты".

	PrintErrors() - выводит построчно содержимое @errors в stdout

	GetErrorsDescr() - возвращает строку - содержимое @errors. Элементы списка разделены символом '\n'

Экспортируемые переменные, в которые записываются результаты анализа модуля:
	$first_proc			- Номер первой строки самой первой процедуры в модуле
	$last_proc			- Номер первой строки самой последней процедуры в модуле
	$last_proc_end		- Номер последней строки самой последней процедуры в модуле
	$last_var			- Последнее объявление переменной модуля
	$first_code			- Первая строка кода модуля (код вне процедур/функций)
	$first_line_for_ins	- Первая строка, куда можно вставлять свою процедуру
	$last_line_for_ins	- Последняя строка, куда можно вставлять процедуру
	$proc_start			- Первая строка искомой процедуры
	$proc_end			- Последняя строка искомой процедуры
	$proc_body			- Полный текст искомой процедуры
	$line_count			- Количество строк в модуле
	@lines				- Все строки модуля 
	@errors				- Все сообщения об ошибках, и всякая другая информация, сгенерированная последней вызванной ф-цией
#########################################################################################################

