www.pudn.com > TMS.Component.Pack.v5.0.rar > AdvMAddict.pas, change:2009-01-24,size:5870b
{***************************************************************************}
{ TAdvMemo component }
{ for Delphi & C++Builder }
{ }
{ written by TMS Software }
{ copyright © 2001 - 2007 }
{ Email : info@tmssoftware.com }
{ Web : http://www.tmssoftware.com }
{ }
{ The source code is given as is. The author is not responsible }
{ for any possible damage done due to the use of this code. }
{ The component can be freely used in any application. The complete }
{ source code remains property of the author and may not be distributed, }
{ published, given or sold in any form as such. No parts of the source }
{ code can be included in any other component or application without }
{ written authorization of TMS software. }
{***************************************************************************}
unit AdvMAddict;
interface
uses
AdvMemo, Classes, Dialogs,
ad3ThesaurusBase, ad3Thesaurus, ad3SpellBase, ad3Spell,ad3StringParser,
ad3ParserBase,ad3ParseEngine;
type
TAdvMemoAddictChecker = class(TAdvMemoChecker)
private
FAddictSpell: TAddictSpell3;
FShowDialog: Boolean;
protected
procedure Notification(AComponent: TComponent; AOperation: TOperation); override;
public
procedure CheckLine(LineNo: Integer); override;
procedure CheckWord(LineNo,LinePos: Integer; s: string); override;
procedure CorrectLine(LineNo: Integer); override;
procedure CorrectWord(LineNo,LinePos: Integer; var s: string); override;
published
property AutoCorrectType;
property AddictSpell: TAddictSpell3 read FAddictSpell write FAddictSpell;
property ShowDialog: Boolean read FShowDialog write FShowDialog;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('TMS Memo',[TAdvMemoAddictChecker]);
end;
{ TAdvMemoAddictChecker }
procedure TAdvMemoAddictChecker.CheckLine(LineNo: Integer);
var
FStringParser: TStringParser;
FParsingEngine : TMainParsingEngine;
s, Word,Corr, Res:string;
x,y: integer;
begin
if not Assigned(Memo) then
Exit;
if not Assigned(FAddictSpell) then
Exit;
Corr := '';
s := Memo.Lines[LineNo];
Res := s;
FStringParser := TStringParser.Create;
FParsingEngine := TMainParsingEngine.Create;
FParsingEngine.Initialize( FStringParser, CheckType_All );
FStringParser.Initialize(@S);
Memo.ClearLineErrors(LineNo);
Word := FParsingEngine.NextWord;
while Word <> '' do
begin
FStringParser.GetPosition(x,y);
if not FAddictSpell.WordAcceptable(Word) then
begin
Memo.SetError(LineNo, x - Length(Word) - 1, Length(word));
end;
FStringParser.GetPosition(x,y);
Word := FParsingEngine.NextWord;
end;
FParsingEngine.Free;
FStringParser.Free;
end;
procedure TAdvMemoAddictChecker.CheckWord(LineNo, LinePos: Integer;
s: string);
begin
if not Assigned(Memo) then
Exit;
if not Assigned(FAddictSpell) then
Exit;
if not FAddictSpell.WordAcceptable(s) then
begin
CheckLine(LineNo);
// Memo.ClearWordError(LineNo, Memo.CurX - length(s));
// Memo.SetError(LineNo, Memo.CurX - length(s), Length(s));
// Memo.Refresh;
end
else
Memo.ClearWordError(LineNo, Memo.CurX - length(s));
end;
procedure TAdvMemoAddictChecker.CorrectLine(LineNo: Integer);
var
FStringParser: TStringParser;
FParsingEngine : TMainParsingEngine;
s, Word,Corr,Repl, Res, FUndoText:string;
begin
if not Assigned(Memo) then
Exit;
if not Assigned(FAddictSpell) then
Exit;
Corr := '';
s := Memo.Lines[LineNo];
FUndoText := s;
Res := s;
if FShowDialog then
begin
FAddictSpell.CheckString(s);
Memo.Lines[LineNo] := s;
if (s <> FUndoText) then
AddUndo(LineNo, FUndoText);
Exit;
end;
FStringParser := TStringParser.Create;
FParsingEngine := TMainParsingEngine.Create;
FParsingEngine.Initialize( FStringParser, CheckType_All );
FStringParser.Initialize(@S);
Word := FParsingEngine.NextWord;
while Word <> '' do
begin
if not FAddictSpell.WordAcceptable(Word) then
begin
if FAddictSpell.WordHasCorrection(Word,Repl) then
Res := ReplaceOnce(Res,Corr,Repl);
{
else
Res := HiLight(Result,Word,'e',False);
}
end;
Word := FParsingEngine.NextWord;
end;
FParsingEngine.Free;
FStringParser.Free;
if (Res <> Memo.Lines[LineNo]) then
begin
Memo.Lines[LineNo] := Res;
if (Res <> FUndoText) then
AddUndo(LineNo, FUndoText);
end;
end;
procedure TAdvMemoAddictChecker.CorrectWord(LineNo, LinePos: Integer;
var s: string);
var
Repl: string;
begin
if not Assigned(Memo) then
Exit;
if not Assigned(FAddictSpell) then
Exit;
if not FAddictSpell.WordAcceptable(s) then
begin
if ShowDialog then
begin
FAddictSpell.CheckString(s);
Exit;
end;
if FAddictSpell.WordHasCorrection(s,Repl) then
begin
s := Repl;
end;
end;
end;
procedure TAdvMemoAddictChecker.Notification(AComponent: TComponent;
AOperation: TOperation);
begin
inherited;
if (AOperation = opRemove) and (AComponent = FAddictSpell) then
FAddictSpell := nil;
end;
end.