<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286301</guid>
        <pubDate>Sun, 10 Mar 2013 15:58:52 +0000</pubDate>
        <title>Форматтеры исходного кода Pascal</title>
        <link>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286301</link>
        <description><![CDATA[Федосеев Павел: Я помню, несколько лет назад на другом форуме Вы предлагали GUI для ptop. Но потом, из-за невозможности проверить результат преобразований Unicode-&gt;OEM на компьютерах с другой системной кодировкой решили не продолжать разработку и удалить программу из общего доступа.<br><br>Если Вы сочтёте возможным, опубликуйте программу, добавив в описании ограничения на имена файлов форматируемых текстов.]]></description>
        <author>Федосеев Павел</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286146</guid>
        <pubDate>Sun, 10 Mar 2013 09:21:50 +0000</pubDate>
        <title>Форматтеры исходного кода Pascal</title>
        <link>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286146</link>
        <description><![CDATA[volvo877: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=373648&view=findpost&p=3286064'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Федосеев Павел &#064; <time class="tag-quote__quoted-time" datetime="2013-03-09T18:10:15+00:00">09.03.13, 18:10</time></span><div class='quote '>Программа — консольная, и у неё отсутствует графический интерфейс.</div></div>Специально для этой утилиты мной несколько лет назад был написан GUI, на Лазарусе, с возможностью менять язык интерфейса, изменять некоторые настройки форматирования, и изменять кодировку исходника (этим, кстати, тексты на форуме тоже грешат):]]></description>
        <author>volvo877</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286064</guid>
        <pubDate>Sat, 09 Mar 2013 18:10:15 +0000</pubDate>
        <title>Форматтеры исходного кода Pascal</title>
        <link>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286064</link>
        <description><![CDATA[Федосеев Павел: <div class='tag-align-center'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='11' style='font-size:11pt;'><strong class='tag-b'>PTOP (из Free Pascal)</strong></span></span></div><br>
<br>
Эта утилита входит в состав <strong class='tag-b'>Free Pascal Compiler</strong> <a class='tag-url' href='http://www.freepascal.org' target='_blank'>http://www.freepascal.org</a>, и скачать её исполняемый файл и исходники можно только вместе со всем пакетом программ. Описание на английском (довольно ироничное) доступно по <a class='tag-url' href='http://www.freepascal.org/tools/ptop.var' target='_blank'>http://www.freepascal.org/tools/ptop.var</a>.<br>
<br>
Как следует из описания утилиты, она является модернизацией другой утилиты, восходящей корнями к программе PP (pretty-printer), опубликованной в 1977 году.<br>
<br>
Программа — консольная, и у неё отсутствует графический интерфейс.<br>
При форматировании иногда получается не вполне корректный результат:<br>
<span class='tag-u'>из «каши»</span><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">If a=0 then</div><div class="code_line">Begin</div><div class="code_line">If b=0 then</div><div class="code_line">If c=0 then</div><div class="code_line">Writeln(&#39;-1&#39;)</div><div class="code_line">else</div><div class="code_line">Writeln(&#39;0&#39;)</div><div class="code_line">Else</div><div class="code_line">Begin</div><div class="code_line">x:=c/b;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<span class='tag-u'>получается</span><div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp;If a=0 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp;Begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;If b=0 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;If c=0 Then</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Writeln(&#39;-1&#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Else &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#60;---------- здесь не хватает ещё одного отступа</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Writeln(&#39;0&#39;)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp;Else</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;Begin</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp;x := c/b;</div></ol></div></div></div></div><br>
Но, в целом, утилита хорошая.<br>
<br>
<strong class='tag-b'>Перед тем как перечислить опции запуска утилиты, расскажу о том, как я её использую.</strong><br>
<div class="tag-spoiler spoiler closed"><div class="spoiler_header" onclick="openCloseParent(this)">Скрытый текст</div><div class="body">Если нужно по-быстренькому переформатировать «исходную кашу», просто запускаю из командной строки<br>
<strong class='tag-b'>ptop исходный.pas результат.pas</strong><br>
Т. к. я пользуюсь файловым менеджером a-la NortonCommander (a-la Far или a-la TotalCommander), то проблем с вводом имени исходного файла не возникает (Ctrl-Enter). Имя выходного файла я обычно делаю похожим на исходное, т. е. опять ввожу имя исходного файла и добаляю какой-либо символ. Например,<br>
<strong class='tag-b'>ptop test1.pas test1x.pas</strong><br>
<br>
Но, иногда, возникает желание получить на выходе файл, отформатированный с настройками не «по-умолчанию», а «на мой вкус». Такой вариант также предусмотрен разработчиками. Запускаем утилиту со следующими параметрами<br>
<strong class='tag-b'>ptop -g ptop.cfg</strong><br>
После этого будет создан файл «<strong class='tag-b'><span class="tag-color tag-color-named" data-value="green" style="color: green">ptop.cfg</span></strong>». Это текстовый файл, его можно открыть и отредактировать в штатном для Windows «Блокноте». Возможностей редактирования, правда, немного — формат только прописанных разработчиком ключеых слов, новых — не добавить. Поэкспериментировав с настройками, получаем итоговый «<strong class='tag-b'><span class="tag-color tag-color-named" data-value="green" style="color: green">my_ptop.cfg</span></strong>», который и будем использовать при вызове<br>
<strong class='tag-b'>ptop -c my_ptop.cfg test1.pas test1x.pas</strong><br>
Строка вызова немного увеличилась, что вызывает неудобство, но тут уж ничего не поделаешь. Вариант улучшения ситуации — только создание пакетного файла (&quot;.<strong class='tag-b'>bat</strong>&quot;, &quot;.<strong class='tag-b'>cmd</strong>&quot;, &quot;.<strong class='tag-b'>vbs</strong>&quot; или др.) для запуска утилиты с параметрами.</div></div><br>
<br>
Теперь, можно привести вольный перевод официальной странички для <strong class='tag-b'>ptop</strong>. Я его приведу здесь только потому, что ранее мне он не встречался, и не каждый умеет читать по-английски.<br>
<br>
<strong class='tag-b'>Строка запуска программы</strong><br>
<strong class='tag-b'>ptop [-v] [-i  <em class='tag-i'>indent</em>] [-b  <em class='tag-i'>bufsize</em> ] [-c <em class='tag-i'>optsfile</em>] <em class='tag-i'>infile</em> <em class='tag-i'>outfile</em></strong><br>
<br>
<strong class='tag-b'><em class='tag-i'>infile</em></strong> и <strong class='tag-b'><em class='tag-i'>outfile</em></strong> – соответственно входной и выходной файлы.<br>
<strong class='tag-b'>-h</strong>     выводит на экран краткую справку о параметрах запуска программы из командной строки.<br>
<strong class='tag-b'>-c</strong> <em class='tag-i'>optsfile</em> взять настройки форматирования из конфигурационного файла <em class='tag-i'>optsfile</em>. Если параметр пропущен, то будут использоваться внутренние настройки «по-умолчанию». Также см. параметр <strong class='tag-b'>-g</strong><br>
<strong class='tag-b'>-i</strong> <em class='tag-i'>ident</em> устанавливает размер отступа в блоке равным <em class='tag-i'>ident</em> пробелов (для блоков BEGIN END и др)<br>
<strong class='tag-b'>-b</strong> <em class='tag-i'>bufsize</em> устанавливает размер буфера равным <em class='tag-i'>bufsize</em>.<br>
<strong class='tag-b'>-v</strong> выводит дополнительные подробности. На настоящий момент — только номер считываемой/записываемой строки и некоторые сообщения об ошибках.<br>
<strong class='tag-b'>-g</strong>  <em class='tag-i'>optsfile</em> сохраняет настройки «по-умолчанию» в файл <em class='tag-i'>optsfile</em>.<br>
<br>
<strong class='tag-b'>Описание конфигурационного файла «<span class="tag-color tag-color-named" data-value="green" style="color: green">ptop.cfg</span>»</strong><br>
<br>
Структура конфигурационного файла это простые блоки, повторяющиеся некоторое (20-30) количество раз для каждого ключевого слова Pascal&#39;я, которое известно программе <strong class='tag-b'>ptop</strong>. Список ключевых слов можно уточнить взглянув в дефолтный конфигурационный файл <strong class='tag-b'>ptop</strong> или в исходник «<strong class='tag-b'>ptopu.pp</strong>».<br>
<br>
Каждый блок конфигурационного файла состоит из двух строк, описывающих как <strong class='tag-b'>ptop</strong> должен реагировать на каждое конкретное ключевое слово.<br>
<br>
Первая строка без квадратных скобок имеет следующий формат:<br>
<strong class='tag-b'>keyword=option1,option2,option3,...</strong><br>
<br>
Если среди опций присутствует опция &quot;<strong class='tag-b'>dindonkey</strong>&quot;, то необходима вторая строка вида:<br>
<strong class='tag-b'>[keyword]=otherkeyword1,otherkeyword2,otherkeyword3,...</strong><br>
<br>
Как видно, блок содержит два вида идентификаторов - ключевые слова (keyword и otherkeyword1..3) и опции (option1..3).<br>
<br>
Ключевые слова (keyword) это зарезервированные слова Pascal&#39;я (вроде, BEGIN, END, CASE, IF, THEN, ELSE, IMPLEMENTATION). Дефолтный конфигурационный файл <strong class='tag-b'>ptop</strong> содержит большинство из них.<br>
<br>
Кроме зарезервированных слов Pascal&#39;я к ключевым словам относятся и символьные конструкции языка, используемые в операторах и для обозначения комментариев. Вот они:<br>
<table class='post_table tag-table'><tr><th>Название конструкции</th><th>Оператор в Pascal&#39;е</th></tr><tr><td><strong class='tag-b'>casevar</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">:</span></strong> в метке опрератора case (не то же, что и &#39;<strong class='tag-b'>colon</strong>&#39;)</td></tr><tr><td><strong class='tag-b'>becomes</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">:=</span></strong></td></tr><tr><td><strong class='tag-b'>delphicomment</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">//</span></strong></td></tr><tr><td><strong class='tag-b'>opencomment</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">{</span></strong> или <strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">(*</span></strong></td></tr><tr><td><strong class='tag-b'>closecomment</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">}</span></strong> или <strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">*)</span></strong></td></tr><tr><td><strong class='tag-b'>semicolon</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">;</span></strong></td></tr><tr><td><strong class='tag-b'>colon</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">:</span></strong></td></tr><tr><td><strong class='tag-b'>equals</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">=</span></strong></td></tr><tr><td><strong class='tag-b'>openparen</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">[</span></strong></td></tr><tr><td><strong class='tag-b'>closeparen</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">]</span></strong></td></tr><tr><td><strong class='tag-b'>period</strong></td><td><strong class='tag-b'><span class="tag-color tag-color-named" data-value="blue" style="color: blue">.</span></strong> в конструкции подобной &#39;1..6&#39;</td></tr></table><br>
<br>
Действия, которые должны выполнятся, если в обрабатываемом тексте встретится ключевое слово описываются опциями<br>
<table class='post_table tag-table'><tr><th>Опция (option)</th><th>Действие</th></tr><tr><td><strong class='tag-b'>upper</strong></td><td>Выводит ключевое слово в верхнем регистре (&quot;СЛОВО&quot;).</td></tr><tr><td><strong class='tag-b'>lower</strong></td><td>Выводит ключевое слово в нижнем  регистре (&quot;слово&quot;).</td></tr><tr><td><strong class='tag-b'>capital</strong></td><td>Выводит ключевое слово с заглавной первой буквой, и маленькими остальными буквами (&quot;Слово&quot;).</td></tr><tr><td><strong class='tag-b'>crsupp</strong></td><td>Подавляет «перевод строки» перед ключевым словом.</td></tr><tr><td><strong class='tag-b'>crbefore</strong></td><td>Ставит «перевод строки» перед ключевым словом. (не действует вместе с опцией <strong class='tag-b'>crsupp</strong> :) )</td></tr><tr><td><strong class='tag-b'>crafter</strong></td><td>Ставит «перевод строки» после ключевого слова.</td></tr><tr><td><strong class='tag-b'>blinbefore</strong></td><td>Вставляет пустую строку перед ключевым словом.</td></tr><tr><td><strong class='tag-b'>spbef</strong></td><td>Добавляет один пробел перед ключевым словом.</td></tr><tr><td><strong class='tag-b'>spaft</strong></td><td>Добавляет один пробел после ключевого слова.</td></tr><tr><td><strong class='tag-b'>gobsym</strong></td><td>Выводит символы, которые следуют за ключевым словом, но не влияющих на вывод. Выводит до терминатора (терминаторы жестко прописаны в PtoP).</td></tr><tr><td><strong class='tag-b'>dindonkey</strong></td><td>Это ключевое слово отменяет предыдущий уровень отступа блока операторов в обрабатываемом тексте для других ключевых слов из списка, который приводится в следующей строке конфигурационного файла.</td></tr><tr><td><strong class='tag-b'>dindent</strong></td><td>Это ключевое слово всегда отменяет предыдущий уровень отступа в обрабатываемом тексте.</td></tr><tr><td><strong class='tag-b'>inbytab</strong></td><td>Ключевое слово является началом следующего уровня отступа (блока операторов в тексте, до окончания которого все последующие элементы блока сдвинута в строке на несколько пробелов) относительно первого символа этого ключевого слова.<br>
<span class='tag-u'>Например</span>,<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">TRec = Record</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; field1 : Integer;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; field1 : Byte;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; End;</div></ol></div></div></div></div></td></tr><tr><td><strong class='tag-b'>inbyindent</strong></td><td>                 То же,что и <strong class='tag-b'>inbytab</strong>, но отступ будет относительно предыдущего отступа.<br>
<span class='tag-u'>Например</span>,<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">TRec = Record</div><div class="code_line">&nbsp;&nbsp;field1 : Integer;</div><div class="code_line">&nbsp;&nbsp;field1 : Byte;</div><div class="code_line">End;</div></ol></div></div></div></div><br>
 </td></tr></table><br>
Опция &quot;<strong class='tag-b'>dindonkey</strong>&quot; требует несколько дополнительных параметров, которые определяются во второй строке описания ключевого слова (с квадратными скобками).<br>
В этой строке определяются ключевые слова, завершающие блок операторов в обрабатываемом тексте, выделяемых отступом в строках.<br>
<br>
<span class='tag-u'>Пример</span> <br>
Строки<br>
<strong class='tag-b'>       else=crbefore,dindonkey,inbytab,upper<br>
       [else]=if,then,else</strong><br>
Означают:<br>
1. Рассматриваем ключевое слово &#39;<strong class='tag-b'>else</strong>&#39; (оно расположено слева от знака равно).<br>
2. Когда парсер <strong class='tag-b'>ptop</strong> найдёт &#39;<strong class='tag-b'>else</strong>&#39;, исходя из опций, будет выполнено следующее:<br>
  - (<strong class='tag-b'>crbefore</strong>) Не позволить другому коду находится на одной строке перед ключевым словом (&#39;<strong class='tag-b'>else</strong>&#39; будет одним в строке)<br>
  - (<strong class='tag-b'>dindonkey</strong>) В следующей строке конфигурационного файла будут определены ключевые слова, для которых &quot;наше&quot; (&#39;<strong class='tag-b'>else</strong>&#39;) отменяет отступ для блока операторов из обрабатываемого текста.<br>
  - (<strong class='tag-b'>inbytab</strong>) Следующие опрераторы из обрабатываемого текста будут выводится с отступом.<br>
  - (<strong class='tag-b'>upper</strong>) Ключевое слово вывести в верхнем регистре (&#39;<strong class='tag-b'>ELSE</strong>&#39;).]]></description>
        <author>Федосеев Павел</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286040</guid>
        <pubDate>Sat, 09 Mar 2013 16:29:19 +0000</pubDate>
        <title>Форматтеры исходного кода Pascal</title>
        <link>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286040</link>
        <description><![CDATA[Федосеев Павел: <div class='tag-align-center'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='11' style='font-size:11pt;'><strong class='tag-b'>JCF (JEDI Code Format)</strong></span></span></div><br>
<br>
Описание этого пакета программ будет довольно коротким из-за интуитивно понятного интерфейса, а также  хорошей справки к этому пакету.<br>
<br>
Это самостоятельный пакет программ, который можно найти по <a class='tag-url' href='http://jedicodeformat.sourceforge.net' target='_blank'>ссылке</a>.<br>
<br>
Из недостатков хочется отметить пару несущественных:<br>
- при описании блока констант, почему-то не делает отступ,<br>
- в начале форматируемого файла обязательно присутствие строки <strong class='tag-b'>program</strong>, <strong class='tag-b'>unit</strong>, <strong class='tag-b'>package</strong> или <strong class='tag-b'>library</strong>,<br>
- только англоязычный интерфейс.<br>
<br>
Установка пакета:<br>
1. Скачать два архивных файла «jcf_243_exe.zip» и «Jcf_243_source.zip».<br>
2. Создать папку «c:&#092;Program Files&#092;JCF».<br>
3. Распаковать содержимое архива «jcf_243_exe.zip» в эту папку.<br>
<br>
В состав пакета входит несколько исполняемых файлов. Нас будут интересовать только три, а точнее два из них:<br>
<strong class='tag-b'><span class="tag-color tag-color-named" data-value="green" style="color: green">JCF.exe</span></strong> — консольная версия форматтера<br>
<strong class='tag-b'><span class="tag-color tag-color-named" data-value="green" style="color: green">JCFGui.exe</span></strong> — GUI версия форматтера кода<br>
<strong class='tag-b'><span class="tag-color tag-color-named" data-value="green" style="color: green">JCFNotepad.exe</span></strong> – GUI версия форматтера кода с текстовым редактором<br>
<br>
Настроек форматирования очень много, но пользуясь JCFNotepad можно сразу наблюдать за результатоми их изменения.<br>
<br>
&quot;Из коробки&quot; он поступает с ненастроенным форматированием - нужно настроить самостоятельно. Но если поискать в интернете, то можно узнать, что архив с исходниками JCF в папке <span class="tag-color tag-color-named" data-value="green" style="color: green">&quot;Jcf_243_source.zip&#092;Test&#092;TestCases&#092;&quot;</span> содержит три файла с &quot;готовыми&quot; настройками. Один из них <span class="tag-color tag-color-named" data-value="green" style="color: green">&quot;JCFTestSettings.cfg&quot;</span> - настроен согласно рекомендациям от <a class='tag-url' href='http://edn.embarcadero.com/article/10280' target='_blank'>Borland</a>. Его нужно скопировать в папку с распакованным JCF и переименовать в <span class="tag-color tag-color-named" data-value="green" style="color: green">&quot;JCFSettings.cfg&quot;</span>.<br>
<br>
Результат форматирования сохраняется в папке с исходником, с тем же именем, что и у исходника, но с расширением &quot;.out&quot; (возможно настроить иначе).]]></description>
        <author>Федосеев Павел</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286030</guid>
        <pubDate>Sat, 09 Mar 2013 15:54:36 +0000</pubDate>
        <title>Форматтеры исходного кода Pascal</title>
        <link>https://forum.sources.ru/index.php?showtopic=373648&amp;view=findpost&amp;p=3286030</link>
        <description><![CDATA[Федосеев Павел: <div class='tag-align-center'><span class="tag-color tag-color-named" data-value="blue" style="color: blue"><span class='tag-size' data-value='11' style='font-size:11pt;'><strong class='tag-b'>Форматтеры кода для Pascal</strong></span></span></div><br>
<br>
Часто, при просмотре чужих исходников на форуме, возникает желание отформатировать код. Свои тексты также иногда неплохо бы приводить в «божий вид». Тогда и возникает желание автоматизировать рутинную работу. А т.к. Pascal появился далеко не вчера, то и подобные утилиты для него уже давно существуют. Перечислю лишь некоторые:<br>
<br>
<table class='post_table tag-table'><tr><th>Название</th><th>Лицензия</th><th>Тип приложения</th><th>ОС</th><th>Год выпуска</th><th>Примечание</th></tr><tr><td>BP7SB</td><td>проприетарная, платная</td><td>консольное</td><td>DOS</td><td>1993</td><td></td></tr><tr><td>PTOP</td><td>?</td><td>консольное</td><td></td><td>2004</td><td>Автор  Aleksej Kozlov, для Virtual Pascal</td></tr><tr><td>PTOP</td><td>GPL</td><td>консольное</td><td>DOS, Linux, Windows</td><td>2008</td><td>Входит в состав Free Pascal</td></tr><tr><td>JCF (JEDI Code Format)</td><td>MPL 1.1 или GPL 2.0</td><td>консольное, GUI, плагин к IDE</td><td>Windows</td><td>2009</td><td></td></tr><tr><td>GExperts</td><td>The Open Source Definition</td><td>плагин к IDE</td><td>Windows</td><td>2011</td><td></td></tr></table><br>
<br>
В интернете можно встретить упоминания и о множестве других форматтеров.<br>
<br>
Лично мне довелось пользоваться двумя:<br>
- ptop (из состава FPC)<br>
- JCF<br>
<br>
О них я и расскажу.<br>
<br>
Для начала о JCF, как о более удобном и лёгком в освоении, а затем о ptop, т.к. вместе с FPC он присутствует на многих компьютерах у школьников и студентов - основных авторов тем форума Pascal.]]></description>
        <author>Федосеев Павел</author>
        <category>Все языки: Статьи, заготовки в FAQ</category>
      </item>
	
      </channel>
      </rss>
	