![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Форматирование исходного кода?
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]В настройки форматирования заглядывал?