{*******************************
| Parseur de fichier HTML |
| Début de projet |
| Par LEVEUGLE Damien |
*******************************}
unit UHtml;
interface
uses Windows, Forms, SysUtils, Classes, ComCtrls, Graphics;
type TParse = class(TParser)
private
BALISES : TStringList;
CHAMPS : TStringList;
public
constructor Create( Stream : TStream );
destructor Destroy;
procedure Color( Editeur : TRichEdit );
end;
const
FICHIER_BALISES = 'BALISES.txt';
FICHIER_CHAMPS = 'CHAMPS.txt';
implementation
{ constructeur }
constructor TParse.Create( Stream : TStream );
begin
BALISES := TStringList.Create;
CHAMPS := TStringList.Create;
BALISES.LoadFromFile( ExtractFilePath(Application.ExeName) + FICHIER_BALISES );
CHAMPS.LoadFromFile ( ExtractFilePath(Application.ExeName) + FICHIER_CHAMPS );
inherited Create( Stream );
end;
{ Destructeur }
destructor TParse.Destroy;
begin
BALISES.Free;
CHAMPS.Free;
inherited Destroy;
end;
{ Procedure qui parse et colorise le texte }
procedure TParse.Color( Editeur : TRichEdit );
var
Memoire : Integer;
begin
Editeur.SelStart := 1;
Editeur.SelLength := Length( Editeur.Text );
Editeur.SelAttributes.Color := clBlack;
while ( Self.Token <> toEOF ) do
begin
Application.ProcessMessages;
case ( Self.Token ) of
toString, toWString, toInteger, toFloat :
begin
Editeur.SelStart := Self.SourcePos;
Editeur.SelLength := Length(Self.TokenString);
Editeur.SelAttributes.Color := clGray;
Editeur.SelLength := 0;
end;
toSymbol :
begin
{ BALISES D'EN TETE ( ex : BODY ) }
if ( BALISES.IndexOf( UpperCase(Self.TokenString) ) > -1 ) then
begin
Editeur.SelStart := Self.SourcePos;
Editeur.SelLength := Length(Self.TokenString);
Editeur.SelAttributes.Color := clBlue;
Editeur.SelLength := 0;
end;
{ PROPRIETES DES BALISES ( ex : "href" ) }
if ( CHAMPS.IndexOf( UpperCase(Self.TokenString) ) > -1 ) then
begin
Editeur.SelStart := Self.SourcePos;
Editeur.SelLength := Length(Self.TokenString);
Editeur.SelAttributes.Color := clGray;
Editeur.SelLength := 0;
end;
end;
else begin
{ *** Valeurs *** }
if ( Self.TokenString = '"' ) then
begin
Memoire := Self.SourcePos;
Self.NextToken;
while ( Self.TokenString <> '"' ) do Self.NextToken;
Editeur.SelStart := Memoire;
Editeur.SelLength := ( Self.SourcePos + 1 ) - Memoire;
Editeur.SelAttributes.Style := [fsItalic];
Editeur.SelAttributes.Color := clRed;
Editeur.SelLength := 0;
Memoire := 0;
end;
{ *** Feuille Style *** }
if ( Self.TokenString = '{' ) then
begin
Memoire := Self.SourcePos;
while ( Self.TokenString <> '}' ) do Self.NextToken;
Editeur.SelStart := Memoire;
Editeur.SelLength := ( Self.SourcePos + 1 ) - Memoire;
Editeur.SelAttributes.Style := [fsItalic];
Editeur.SelAttributes.Color := clGreen;
Editeur.SelLength := 0;
Memoire := 0;
end;
{ *** Symboles & Balises *** }
if ( Self.TokenString = '>' ) or
( Self.TokenString = '/' ) or
( Self.TokenString = '<' ) then
begin
Editeur.SelStart := Self.SourcePos;
Editeur.SelLength := Length(Self.TokenString);
Editeur.SelAttributes.Color := clNavy;
Editeur.SelLength := 0;
end;
end;
end;
Self.NextToken;
end;
end;
end.