Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Форматирование исходного кода?


Den ©   (2013-04-06 15:45:00) 

Как можно изменить команду Format Source так чтобы
1.Оператор begin не переносился на следующую строку,
for I := 0 to Nodelist.length-1 do begin
kod;
end;

а не

for I := 0 to Nodelist.length-1 do
begin
kod;
end;

2. Переменные в объявлении функции каждая была на следующей строке -
procedure Universal(
doc: ihtmldocument2;
NotInner: string;
TableIndex: integer;
TabText:string;
table: ixmlDomNode;
DomDoc: IXMLDOMDocument3;
memoForLogme: TMemo): boolean;

3. Строка до оператора ";" полностью была на одной строке например так -
if Nodelist.item[i].nodeName=NodeName then Nodelist.item[i].text:=ValueToSet;
а не
if Nodelist.item[i].nodeName=NodeName then
Nodelist.item[i].text:=ValueToSet;


Den   (2013-04-07 15:39:00) [1]

Имхо автору решение нужно для чего-то другого. -  нет именно для этого и нужно, чтоб быстро вьехать в код (который я сам же и написал:)). Поясню, есть unit в котором описаны процедуры при вызове которых в XML файле создаются ноды с кучей атрибутов, значения атрибутов лежат на форме в editah comboboxah и тд. и вот чтоб вызвать такую процедуру нужно все эти эдиты в нее запихать и вот это (Второе требование просто бредовое.) намного удобнее глазами просматривается чем когда все в куче. Да и вопрос был про готовое решение, если оно бы было то почему бы и не посмотреть что выйдет из этого.


Германн   (2013-04-07 01:54:00) [2]


> Все три указаных тобой варианта противоречат тому стандарту,
>  которого придерживаются большинство разработчиков, в том
> числе и само Embarcadero.

Первое требование как раз в моём стиле. И когда я начинал знакомиться с ТП большинство придерживалось именно этого.
Второе требование просто бредовое. Его никто никогда не придерживается. Имхо.
Третье - сомнительное. Если законченная строка кода влезает на экран современного монитора, то её не нужно разбивать. Если же нет, то тогда её нужно разбить.

Имхо автору решение нужно для чего-то другого. Например для собственного анализатора/интерпретатора/транслятора и т.п. и т.д.


Den   (2013-04-06 20:07:00) [3]

Фух наконецто вышло что-то, не так уж и быстро правда, но делает то что мне надо по крайней мере -

procedure TForm1.Button6Click(Sender: TObject);
var
 s, s1, OutS, procPar, OutProc, FromProcEndToBegin, PrOrFunct, DelTab, tab,
   checkForComment: string;
 Start, Stop, i, dt: integer;
 list, outList, addTab: Tstringlist;
begin
 s := Memo1.text;
 if pos('function', s) <> 0 then
   PrOrFunct := 'function';
 if pos('procedure', s) <> 0 then
   PrOrFunct := 'procedure';
 Start := pos(PrOrFunct, s) - 1;
 Stop := pos('(', s);
 OutS := copy(s, Start + 1, Stop);
 delete(s, Start + 1, Stop);
 procPar := copy(s, 1, pos(')', s) - 1);
 delete(s, 1, pos(')', s) - 1);
 /// func par
 while pos(':', procPar) <> 0 do
 begin
   if pos(';', procPar) = 0 then
   begin
     OutProc := OutProc + trim(procPar) + chr(13) + chr(10);
     delete(procPar, 1, length(procPar));
   end
   else
   begin
     OutProc := OutProc + trim(copy(procPar, 1, pos(';', procPar))) + chr(13)
       + chr(10);
     delete(procPar, 1, pos(';', procPar) + 1);
   end;
 end;
 FromProcEndToBegin := copy(s, 1, pos('begin', s) + length('begin') - 1);
 delete(s, 1, pos('begin', s) + length('begin') - 1);
 list := Tstringlist.create;
 list.text := s;
 outList := Tstringlist.create;
 s := '';
 for i := 0 to list.Count - 1 do
 begin
   DelTab := list[i];
   while pos('  ', DelTab) <> 0 do
   begin
     dt := pos('  ', DelTab);
     delete(DelTab, dt, 1);
   end;

   checkForComment := copy(trim(DelTab), 1, 2);
   if checkForComment <> '//' then
   begin
     s := s + ' ' + DelTab;
     if pos(';', s) <> 0 then
     begin
       outList.Add(s);
       s := '';
     end;
   end;
 end;
 list.text := outList.text;
 outList.text := '';
 for i := 0 to list.Count - 1 do
 begin
   s := list[i];
   if (pos('begin', s) <> 0) and (pos('//', s) = 0) then
   begin
     while pos('begin', s) <> 0 do
     begin
       s1 := copy(s, 1, pos('begin', s) + length('begin') - 1);
       outList.Add(s1);
       delete(s, 1, pos('begin', s) + length('begin') - 1);
       if (pos('begin', s) = 0) and (length(s) <> 0) then
         outList.Add(s);

     end;
     s := 'skjhfsdjkfhsdjfy78y7eee';
   end;
   if s <> 'skjhfsdjkfhsdjfy78y7eee' then
     outList.Add(s);

   s := '';
 end;

 Memo2.text := OutS + chr(13) + chr(10) + OutProc + FromProcEndToBegin +
   outList.text;
 // memo2.Text:=outList.Text;
 addTab := Tstringlist.create;
 addTab.text := OutS + chr(13) + chr(10) + OutProc + FromProcEndToBegin +
   outList.text;
 tab := '';
 for i := 0 to addTab.Count - 1 do
 begin

   if pos('end;', addTab[i]) <> 0 then
     delete(tab, 1, 2);
   addTab[i] := tab + addTab[i];
   if pos('begin', addTab[i]) <> 0 then
     tab := tab + '  ';
 end;
 Memo2.text := addTab.text;
end;


Дмитрий С   (2013-04-06 18:30:00) [4]


>  Все три указаных тобой варианта противоречат тому стандарту,
>  которого придерживаются большинство разработчиков, в том
> числе и само Embarcadero.

К сожалению разработчики фрипаскаля не всегда придерживаются :(


Den   (2013-04-06 18:27:00) [5]

s:=s+DelTab;
if pos(';',s)<>0 then begin
outList.Add(s);
s:='';
end else s:=s;

end;


Den   (2013-04-06 18:26:00) [6]

Кто чего придерживается это такое, к томуже, к тому виду, которого все придерживаются, код приводится нажатием ctrl-d за 2 секунды, а вот готовый инструмент по форматированию кода так как удобней, а не так как все, было бы иметь не плохо. кстати там сверху for I := 0 to List.Count - 1 do begin лучще на это заменить
for I := 0 to List.Count - 1 do begin
DelTab:=list[i];
while pos('  ',DelTab)<>0 do begin
dt:=pos('  ',DelTab);
//DelTab:=copy(DelTab,1,dt-1)+' '+copy(DelTab,dt,length(DelTab)) ;
 delete(DelTab,dt,1);

end;


Rouse_   (2013-04-06 17:50:00) [7]


> Форматирование исходного кода?

А зачем? Все три указаных тобой варианта противоречат тому стандарту, которого придерживаются большинство разработчиков, в том числе и само Embarcadero.


Den   (2013-04-06 17:32:00) [8]

Как бы еще чтоб блоки между begin end; табулировало, сделать, надо придумать и все...

procedure TForm1.Button6Click(Sender: TObject);
var
s,OutS, procPar,OutProc, FromProcEndToBegin,PrOrFunct:string;
Start, Stop,i:integer;
list,outList:Tstringlist;
begin
s:=memo1.Text;
if pos('function',s)<>0 then PrOrFunct:='function';
if pos('procedure',s)<>0 then PrOrFunct:='procedure';
Start:=pos(PrOrFunct,s)-1;
Stop:=pos('(',s);
OutS:=copy(s,Start+1,Stop);
delete(s,Start+1,Stop);
procPar:=copy(s,1,pos(')',s)-1);
delete(s,1,pos(')',s)-1);
///func par
while pos(':',procPar)<>0 do begin
if pos(';',procPar)=0 then begin
OutProc:=OutProc+trim(procPar)+chr(13)+chr(10);
delete(procPar,1,length(procPar));
end else begin
OutProc:=OutProc+trim(copy(procPar, 1, pos(';',procPar)))+chr(13)+chr(10);
delete(procPar,1,pos(';',procPar)+1);
end;
end;
FromProcEndToBegin:=copy(s,1,pos('begin',s)+length('begin')-1);
delete(s,1,pos('begin',s)+length('begin')-1);
list:=TstringList.create;
list.Text:=s;
outList:=TstringList.create;
s:='';
for I := 0 to List.Count - 1 do begin
s:=s+trim(list[i]);
if pos(';',s)<>0 then begin
outList.Add(s);
s:='';
end else s:=trim(s);

end;

memo2.Text:=Outs+chr(13)+chr(10)+OutProc+FromProcEndToBegin+outList.Text;

end;


MBo   (2013-04-06 16:18:00) [9]

Первое точно должно быть.


Den   (2013-04-06 16:15:00) [10]

Было дело. Чето ощущения у меня такие что быстрее будет свой парсер написать, чем я счас и займусь наверное....


MBo   (2013-04-06 16:03:00) [11]

В настройки форматирования заглядывал?


Наверх

Титульная страница Поиск, карта сайта Написать письмо