8.8.3. Модуль ptopu

На верх  Назад  Вперёд

Исходные коды программы PtoP размещены в двух файлах. Один – это модуль, содержащий объект, который выполняет все основные операции по работе с кодом, другой – это командный процессор, выполняющий методы этого объекта таким образом, что их можно использовать в командной строке. Это решение делает возможным включать объект в программу (например, в IDE), а затем использовать его для форматирования кода.

Объект находится в модуле PtoPU, и объявлен следующим образом:

TPrettyPrinter=Object(TObject)
  Indent : Integer; { How many characters to indent ? }
  InS : PStream;
  OutS : PStream;
  DiagS : PStream;
  CfgS : PStream;
  Constructor Create;
  Function PrettyPrint : Boolean;
end;

Использовать этот объект очень просто. Процедура использования объекта заключается в следующем:

1.Создать объект, используя конструктор.

2.Установить поток InS. Это открывает поток, из которого будет читаться исходный код Pascal. Это обязательный шаг.

3.Установить поток OutS. Это открывает поток, в который будет записывать структурированный исходный код Pascal. Это обязательный шаг.

4.Установить поток DiagS. Вся диагностика будет записываться в этот поток. Этот шаг не является обязательным. Если вы его не выполните, то диагностика выполняться не будет.

5.Установить поток CfgS. Конфигурация читается из этого потока (см. предыдущий раздел, где подробно описано конфигурирование). Этот шаг не является обязательным. Если вы его не выполните, то будет использоваться конфигурация по умолчанию.

6.Установить переменную Indent. Это количество пробелов для отступа. Символы табуляции не используются в программе. Этот шаг не является обязательным. Эта переменная инициализируется числом 2.

7.Вызвать PrettyPrint. Это начнёт чтения исходных кодов из InS и запись результата в OutS. Функция возвращает TRUE, если не было ошибок, иначе возвращает FALSE.

Таким образом, минимальный набор операторов будет таким:

Procedure CleanUpCode;
var
  Ins,OutS : PBufStream;
  PPRinter : TPrettyPrinter;
begin
  Ins:=New(PBufStream,Init(’ugly.pp’,StopenRead,TheBufSize));
  OutS:=New(PBufStream,Init(’beauty.pp’,StCreate,TheBufSize));
  PPrinter.Create;
  PPrinter.Ins:=Ins;
  PPrinter.outS:=OutS;
  PPrinter.PrettyPrint;
end;

использование потоков позволяет очень быстро форматировать код и является очень полезным при редактировании.