IPB
ЛогинПароль:

> Форматтер кода, Подскажите где найти
сообщение
Сообщение #1


Я.
****

Группа: Пользователи
Сообщений: 809
Пол: Мужской
Реальное имя: Саша

Репутация: -  11  +


подскажите, пожалуйста, где можна найти такую программку, которая оформляла бы текст программы, или как такую самому сделать.
например, так:
из:
begin
a:=1;
end;

в:
begin
a:=1;
end;

Даже как называется не знаю:)
пробовал что-то сам такое сделать за минут 10, но там столько разных вариантов...

Что-то типа такого вышло:
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}

procedure into_dop_from_trimmed;
var
fin,fout:textfile;
str:string;
begin
assignfile(fin,Form1.edit1.Text+'(Trimmed).PAS');
reset(fin);
assignfile(fout,'dop.txt');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
writeln(fout,str);
end;
Closefile(fout);
Closefile(fin);
end;

function min(a,b:byte):byte;
begin
if a<=b then min:=a
else min:=b;
end;

(*После каждой точки с запятой перенос на новую строку*)
procedure into_new_line;
var
fin,fout:textfile;
str:string;
position:byte;
begin
assignfile(fin,Form1.edit1.Text+'.PAS');
reset(fin);
assignfile(fout,Form1.Edit1.Text+'(Trimmed).PAS');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
repeat
if pos(';',str)=0 then Position:=Length(str)
else Position:=pos(';',str);
writeln(fout,Copy(str,1,Position));
Delete(str,1,Position);
while (0<Length(str))and(str[1]=' ') do Delete(str,1,1);
until str='';
end;
Closefile(fout);
Closefile(fin);
end;

(*Отступы перед каждой строкой*)
procedure otstup;
const Dlina_otstup=2;
var
fin,fout:textfile;
str:string;
i,kol_otstup:byte; (*Количество отступов*)
begin
into_dop_from_trimmed;
kol_otstup:=0;
assignfile(fin,'dop.txt');
reset(fin);
assignfile(fout,Form1.Edit1.Text+'(Trimmed).PAS');
rewrite(fout);
while not Eof(fin) do
begin
readln(fin,str);
if (pos('end',str)<>0)then if kol_otstup>0 then dec(kol_otstup);
for i:=1 to kol_otstup*Dlina_otstup do str:=' '+str;
writeln(fout,str);
if (pos('begin',str)<>0)or (pos('case',str)<>0)then inc(kol_otstup);
end;
Closefile(fout);
Closefile(fin);
Erase(fin);
end;



procedure TForm1.Button1Click(Sender: TObject);
begin
into_new_line;
otstup;
halt;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
{edit1.SetFocus;}
end;

end.



Сообщение отредактировано: sheka -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Знаток
****

Группа: Пользователи
Сообщений: 480
Пол: Мужской
Реальное имя: Федосеев Павел

Репутация: -  9  +


Недавно, отвечая на вопрос, попытался отформатировать код топикстартера к удобоваримому виду при помощи ptop из FPC 2.6.0 с настройками по-умолчанию. Результат немного огорчил.
Что было
...................
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;
...................

Тогда я вспомнил о другом форматтере - JCF (JEDI Code Format).
"Из коробки" он поступает с ненастроенным форматированием - нужно настроить самостоятельно. Но если поискать в интернете, то можно узнать, что архив с исходниками JCF в папке "Jcf_243_source.zip\Test\TestCases\" содержит три файла с "готовыми" настройками. Один из них "JCFTestSettings.cfg" - настроен согласно рекомендациям от Borland. Его нужно скопировать в папку с распакованным JCF и переименовать в "JCFSettings.cfg".
Работать с JCF достаточно удобно - есть GUI, есть консольный вариант, а также имеется GUI утилита "JCFNotepad.exe", в закладках которой можно просматривать как изменяется форматирование при изменении настроек.
Вот результат
...................
if a = 0 then
begin
if b = 0 then
if c = 0 then
Writeln('-1')
else
Writeln('0')
else
begin
x := c / b;
...................


Ссылка на официальный сайт JEDI Code Format.
На этой страничке есть ссылка к рекомендациям по оформлению кода от Borland.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
sheka   Форматтер кода   27.08.2009 0:32
volvo   Ты о форматтере кода? Полезные программы и утилит…   27.08.2009 1:36
sheka   Да, спасибо, о ней. Только как этим "форматте…   27.08.2009 2:45
volvo   Ей надо передавать параметры через командную строк…   27.08.2009 2:51
sheka   Разберешься? Врядли. На сколько я понял надо з…   27.08.2009 3:10
volvo   Взял неформатированный файл (без отступов вообще),…   27.08.2009 3:27
sheka   Класс, супер, то что хотел! Только один вопрос…   27.08.2009 4:18
volvo   Я вот так делаю:   27.08.2009 4:35
sheka   Понял, спасибо. т.е. надо поставить сначала перена…   27.08.2009 4:39
maksimla   а может есть такае же программа сделана на Дельфи …   26.10.2009 20:25
volvo   Ну, напиши оболочку на Дельфи, которая будет дават…   26.10.2009 20:58
maksimla   Не знаю я Дельфи языка еще вот в этом вся проблема…   27.10.2009 13:38
volvo   Ну, вот тебе оболочка: Кладешь оба EXE-шника в од…   28.10.2009 5:39
Jabbson   Было бы здорово добавить функцию "убрать форм…   28.05.2010 3:57
volvo   Вот так что-ли? <файл удален...>   28.05.2010 5:52
Jabbson   Вот так что-ли? Да, класс!!! Тепер…   18.07.2010 15:07
volvo   Долго думал, почему такое происходит. Потом сообра…   2.08.2010 2:26
volvo   Продолжаем. Итак, просьба потестировать программку…   7.09.2010 19:26
Федосеев Павел   Недавно, отвечая на вопрос, попытался отформатиров…   20.01.2013 21:54


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.12.2019 22:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name