Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[35.173.48.18] |
|
Сообщ.
#1
,
|
|||||||||||||||||||||||||||||||||||||
|
Форматтеры кода для Pascal Часто, при просмотре чужих исходников на форуме, возникает желание отформатировать код. Свои тексты также иногда неплохо бы приводить в «божий вид». Тогда и возникает желание автоматизировать рутинную работу. А т.к. Pascal появился далеко не вчера, то и подобные утилиты для него уже давно существуют. Перечислю лишь некоторые:
В интернете можно встретить упоминания и о множестве других форматтеров. Лично мне довелось пользоваться двумя: - ptop (из состава FPC) - JCF О них я и расскажу. Для начала о JCF, как о более удобном и лёгком в освоении, а затем о ptop, т.к. вместе с FPC он присутствует на многих компьютерах у школьников и студентов - основных авторов тем форума Pascal. |
Сообщ.
#2
,
|
|
|
JCF (JEDI Code Format) Описание этого пакета программ будет довольно коротким из-за интуитивно понятного интерфейса, а также хорошей справки к этому пакету. Это самостоятельный пакет программ, который можно найти по ссылке. Из недостатков хочется отметить пару несущественных: - при описании блока констант, почему-то не делает отступ, - в начале форматируемого файла обязательно присутствие строки program, unit, package или library, - только англоязычный интерфейс. Установка пакета: 1. Скачать два архивных файла «jcf_243_exe.zip» и «Jcf_243_source.zip». 2. Создать папку «c:\Program Files\JCF». 3. Распаковать содержимое архива «jcf_243_exe.zip» в эту папку. В состав пакета входит несколько исполняемых файлов. Нас будут интересовать только три, а точнее два из них: JCF.exe — консольная версия форматтера JCFGui.exe — GUI версия форматтера кода JCFNotepad.exe – GUI версия форматтера кода с текстовым редактором Настроек форматирования очень много, но пользуясь JCFNotepad можно сразу наблюдать за результатоми их изменения. "Из коробки" он поступает с ненастроенным форматированием - нужно настроить самостоятельно. Но если поискать в интернете, то можно узнать, что архив с исходниками JCF в папке "Jcf_243_source.zip\Test\TestCases\" содержит три файла с "готовыми" настройками. Один из них "JCFTestSettings.cfg" - настроен согласно рекомендациям от Borland. Его нужно скопировать в папку с распакованным JCF и переименовать в "JCFSettings.cfg". Результат форматирования сохраняется в папке с исходником, с тем же именем, что и у исходника, но с расширением ".out" (возможно настроить иначе). |
Сообщ.
#3
,
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
PTOP (из Free Pascal) Эта утилита входит в состав Free Pascal Compiler http://www.freepascal.org, и скачать её исполняемый файл и исходники можно только вместе со всем пакетом программ. Описание на английском (довольно ироничное) доступно по http://www.freepascal.org/tools/ptop.var. Как следует из описания утилиты, она является модернизацией другой утилиты, восходящей корнями к программе PP (pretty-printer), опубликованной в 1977 году. Программа — консольная, и у неё отсутствует графический интерфейс. При форматировании иногда получается не вполне корректный результат: из «каши» If a=0 then Begin If b=0 then If c=0 then Writeln('-1') else Writeln('0') Else Begin x:=c/b; получается If a=0 Then Begin If b=0 Then If c=0 Then Writeln('-1') Else <---------- здесь не хватает ещё одного отступа Writeln('0') Else Begin x := c/b; Но, в целом, утилита хорошая. Перед тем как перечислить опции запуска утилиты, расскажу о том, как я её использую. Скрытый текст Если нужно по-быстренькому переформатировать «исходную кашу», просто запускаю из командной строки ptop исходный.pas результат.pas Т. к. я пользуюсь файловым менеджером a-la NortonCommander (a-la Far или a-la TotalCommander), то проблем с вводом имени исходного файла не возникает (Ctrl-Enter). Имя выходного файла я обычно делаю похожим на исходное, т. е. опять ввожу имя исходного файла и добаляю какой-либо символ. Например, ptop test1.pas test1x.pas Но, иногда, возникает желание получить на выходе файл, отформатированный с настройками не «по-умолчанию», а «на мой вкус». Такой вариант также предусмотрен разработчиками. Запускаем утилиту со следующими параметрами ptop -g ptop.cfg После этого будет создан файл «ptop.cfg». Это текстовый файл, его можно открыть и отредактировать в штатном для Windows «Блокноте». Возможностей редактирования, правда, немного — формат только прописанных разработчиком ключеых слов, новых — не добавить. Поэкспериментировав с настройками, получаем итоговый «my_ptop.cfg», который и будем использовать при вызове ptop -c my_ptop.cfg test1.pas test1x.pas Строка вызова немного увеличилась, что вызывает неудобство, но тут уж ничего не поделаешь. Вариант улучшения ситуации — только создание пакетного файла (".bat", ".cmd", ".vbs" или др.) для запуска утилиты с параметрами. Теперь, можно привести вольный перевод официальной странички для ptop. Я его приведу здесь только потому, что ранее мне он не встречался, и не каждый умеет читать по-английски. Строка запуска программы ptop [-v] [-i indent] [-b bufsize ] [-c optsfile] infile outfile infile и outfile – соответственно входной и выходной файлы. -h выводит на экран краткую справку о параметрах запуска программы из командной строки. -c optsfile взять настройки форматирования из конфигурационного файла optsfile. Если параметр пропущен, то будут использоваться внутренние настройки «по-умолчанию». Также см. параметр -g -i ident устанавливает размер отступа в блоке равным ident пробелов (для блоков BEGIN END и др) -b bufsize устанавливает размер буфера равным bufsize. -v выводит дополнительные подробности. На настоящий момент — только номер считываемой/записываемой строки и некоторые сообщения об ошибках. -g optsfile сохраняет настройки «по-умолчанию» в файл optsfile. Описание конфигурационного файла «ptop.cfg» Структура конфигурационного файла это простые блоки, повторяющиеся некоторое (20-30) количество раз для каждого ключевого слова Pascal'я, которое известно программе ptop. Список ключевых слов можно уточнить взглянув в дефолтный конфигурационный файл ptop или в исходник «ptopu.pp». Каждый блок конфигурационного файла состоит из двух строк, описывающих как ptop должен реагировать на каждое конкретное ключевое слово. Первая строка без квадратных скобок имеет следующий формат: keyword=option1,option2,option3,... Если среди опций присутствует опция "dindonkey", то необходима вторая строка вида: [keyword]=otherkeyword1,otherkeyword2,otherkeyword3,... Как видно, блок содержит два вида идентификаторов - ключевые слова (keyword и otherkeyword1..3) и опции (option1..3). Ключевые слова (keyword) это зарезервированные слова Pascal'я (вроде, BEGIN, END, CASE, IF, THEN, ELSE, IMPLEMENTATION). Дефолтный конфигурационный файл ptop содержит большинство из них. Кроме зарезервированных слов Pascal'я к ключевым словам относятся и символьные конструкции языка, используемые в операторах и для обозначения комментариев. Вот они:
Действия, которые должны выполнятся, если в обрабатываемом тексте встретится ключевое слово описываются опциями
Опция "dindonkey" требует несколько дополнительных параметров, которые определяются во второй строке описания ключевого слова (с квадратными скобками). В этой строке определяются ключевые слова, завершающие блок операторов в обрабатываемом тексте, выделяемых отступом в строках. Пример Строки else=crbefore,dindonkey,inbytab,upper [else]=if,then,else Означают: 1. Рассматриваем ключевое слово 'else' (оно расположено слева от знака равно). 2. Когда парсер ptop найдёт 'else', исходя из опций, будет выполнено следующее: - (crbefore) Не позволить другому коду находится на одной строке перед ключевым словом ('else' будет одним в строке) - (dindonkey) В следующей строке конфигурационного файла будут определены ключевые слова, для которых "наше" ('else') отменяет отступ для блока операторов из обрабатываемого текста. - (inbytab) Следующие опрераторы из обрабатываемого текста будут выводится с отступом. - (upper) Ключевое слово вывести в верхнем регистре ('ELSE'). |
Сообщ.
#4
,
|
|
|
Цитата Федосеев Павел @ Специально для этой утилиты мной несколько лет назад был написан GUI, на Лазарусе, с возможностью менять язык интерфейса, изменять некоторые настройки форматирования, и изменять кодировку исходника (этим, кстати, тексты на форуме тоже грешат): Программа — консольная, и у неё отсутствует графический интерфейс. Прикреплённая картинка
|
Сообщ.
#5
,
|
|
|
Я помню, несколько лет назад на другом форуме Вы предлагали GUI для ptop. Но потом, из-за невозможности проверить результат преобразований Unicode->OEM на компьютерах с другой системной кодировкой решили не продолжать разработку и удалить программу из общего доступа.
Если Вы сочтёте возможным, опубликуйте программу, добавив в описании ограничения на имена файлов форматируемых текстов. |
Сообщ.
#6
,
Сообщение отклонено: negram -
|