Mój prawie gotowy kod:
program program1;
uses crt, Dialogs, SysUtils;
Function Kolorowanie(Linia: String): String; //funkcja kolorujaca tekst pomiedzy apostrofami
Const Apostrof = '''';
Var I: Integer;
opened: Boolean;
Begin
opened:=False;
Kolorowanie := '';
For i := 1 To Length(Linia) Do
if (Linia[i] = Apostrof) Then
Begin
opened := not opened;
Case opened of
True: Kolorowanie := Kolorowanie+'’<span class="string">';
False: Kolorowanie := Kolorowanie+'</span>’';
End;
End Else
Kolorowanie:=Kolorowanie+Linia[i];
End;
Function zamiana(a,b,c:string): string; //funkcja do zamiany tekstu(kolorowanie i pogrubianie tekstu)
var OldStr, NewStr: String;
Begin
c:=lowercase(c);
OldStr := a;
NewStr := b;
zamiana:=StringReplace(c, OldStr, NewStr, [rfReplaceAll]);
End;
var
i,j:integer;
plik1,plik2:text;
tab:array[1..1000] of string;
begin
i:=1;
assign(plik1,'plik.pas'); //plik wejsciowy(.pas)
Reset(plik1);
while not eof(plik1) do // petla podmienianiajaca tekst przy pomocy funkcji "zamiana"
begin
readLN(plik1,tab[i]);
tab[i]:=zamiana('>','>',tab[i]);
tab[i]:=zamiana('<','<',tab[i]);
tab[i]:=zamiana('for','<b>for</b>',tab[i]);
tab[i]:=zamiana('begin','<b>begin</b>',tab[i]);
tab[i]:=zamiana('program','<b>program</b>',tab[i]);
tab[i]:=zamiana('if','<b>if</b>',tab[i]);
tab[i]:=zamiana('end.','<b>end.</b>',tab[i]);
tab[i]:=zamiana('end;','<b>end;</b>',tab[i]);
tab[i]:=zamiana('else','<b>else</b>',tab[i]);
tab[i]:=zamiana('uses','<b>uses</b>',tab[i]);
tab[i]:=zamiana('var','<b>var</b>',tab[i]);
tab[i]:=zamiana('const','<b>var</b>',tab[i]);
tab[i]:=zamiana('assign','<b>assign</b>',tab[i]);
tab[i]:=zamiana('while','<b>while</b>',tab[i]);
tab[i]:=zamiana('function','<b>function</b>',tab[i]);
tab[i]:=zamiana('do','<b>do</b>',tab[i]);
tab[i]:=zamiana('repeat','<b>repeat</b>',tab[i]);
tab[i]:=zamiana('until','<b>until</b>',tab[i]);
tab[i]:=zamiana('then','<b>then</b>',tab[i]);
tab[i]:=zamiana('integer','<b>integer</b>',tab[i]);
tab[i]:=zamiana('longint','<b>longint</b>',tab[i]);
tab[i]:=zamiana('shortint','<b>shortint</b>',tab[i]);
tab[i]:=zamiana('byte','<b>byte</b>',tab[i]);
tab[i]:=zamiana('word','<b>word</b>',tab[i]);
tab[i]:=zamiana('real','<b>real</b>',tab[i]);
tab[i]:=zamiana('string','<b>string</b>',tab[i]);
tab[i]:=zamiana('char','<b>char</b>',tab[i]);
tab[i]:=zamiana('0','<font color=red>0</font>',tab[i]);
tab[i]:=zamiana('1','<font color=red>1</font>',tab[i]);
tab[i]:=zamiana('2','<font color=red>2</font>',tab[i]);
tab[i]:=zamiana('3','<font color=red>3</font>',tab[i]);
tab[i]:=zamiana('4','<font color=red>4</font>',tab[i]);
tab[i]:=zamiana('5','<font color=red>5</font>',tab[i]);
tab[i]:=zamiana('6','<font color=red>6</font>',tab[i]);
tab[i]:=zamiana('7','<font color=red>7</font>',tab[i]);
tab[i]:=zamiana('8','<font color=red>8</font>',tab[i]);
tab[i]:=zamiana('9','<font color=red>9</font>',tab[i]);
tab[i]:=zamiana(':=','<font color=green>:=</font>',tab[i]);
tab[i]:=zamiana('ran<b>do</b>m','random',tab[i]);
tab[i]:=zamiana('ran<b>do</b>mize','randomize',tab[i]);
tab[i]:=zamiana('(','<b>(</b>',tab[i]);
tab[i]:=zamiana(')','<b>)</b>',tab[i]);
tab[i]:=kolorowanie(tab[i]); //odwolanie do funkcji kolorowanie
inc(i);
end;
close(plik1);
assign(plik2,'plik.html'); //plik wyjsciowy(.html)
Rewrite(plik2);
write(plik2,'<html><pre><style type="text/css">span.string {color: green;}</style>');
for j:=1 to i do writeln(plik2,tab[j]);
writeln(plik2,'</body></html>');
close(plik2);
end.
Czy mógłby ktoś sprawdzić i zrecenzować ten mój program?
Plus potrzebowałbym jeszcze porady na zrobienie funkcji kolorującej komentarze(// i {})
Próbowałem kolorować komentarze funkcją 'zamiana', ale jak można się domyślić były to kiepskie próby
gdyż nakładały mi się kolory i pogrubienia z innych zamian. Jak wiec zrobić funkcje która w przypadku napotkania '{'
aż to napotkania '}' zignoruje wszystkie dotychczasowe zamiany ?
Ponadto za poradą Patryk27 chciałbym zastosować w swoim programie tablicę dynamiczną i mam pytanie
jak mógłbym policzyć ilość linijek kodu pliku wejściowego ?
Wszelkie uwagi i rady dotyczące kodu mile widziane.
Dziękuję wszystkim za dotychczasową pomoc ; ))