| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178 |
- { $HDR$}
- {**********************************************************************}
- { Unit archived using Team Coherence }
- { Team Coherence is Copyright 2002 by Quality Software Components }
- { }
- { For further information / comments, visit our WEB site at }
- { http://www.TeamCoherence.com }
- {**********************************************************************}
- {
- $Log: 21834: EZPersonality.pas
- Rev 1.0 2003.07.13 12:12:04 AM czhower
- Initial checkin
- Rev 1.0 2003.05.19 2:54:06 PM czhower
- }
- unit ezpersonality;
- interface
- {$ifdef fpc}
- {$mode objfpc}{$H+}
- {$endif}
- uses
- Classes;
- type
- TEZPersonalityAttributes = record
- Name: string;
- Description: string;
- end;
- TEZPersonality = class;
- TEZPersonalityClass = class of TEZPersonality;
- TEZPersonality = class(TCollection)
- protected
- FKeywords: TStrings;
- //
- procedure AddReply(const AKeywords: array of string;
- const AReplies: array of string); overload;
- procedure AddReply(const AKeywords: array of string;
- const AReplies: array of string; const ASounds: array of string); overload;
- procedure InitReplies; virtual; abstract;
- public
- class function Attributes: TEZPersonalityAttributes; virtual; abstract;
- class function ConstructPersonality(const AName: string): TEZPersonality;
- constructor Create; virtual;
- destructor Destroy; override;
- class procedure PersonalityList(AStrings: TStrings);
- class procedure RegisterPersonality;
- //
- property Keywords: TStrings read FKeywords;
- end;
- TEZReply = class(TCollectionItem)
- protected
- FIndex: Integer;
- FSound: string;
- FSounds: TStrings;
- FTexts: TStrings;
- public
- procedure AddText(const AText: string; const ASound: string = '');
- constructor Create(AOwner: TCollection); override;
- destructor Destroy; override;
- function NextText: string;
- //
- property Sound: string read FSound;
- end;
- implementation
- uses
- SysUtils;
- var
- GPersonalities: TStringList;
- { TEZReply }
- procedure TEZReply.AddText(const AText: string; const ASound: string = '');
- begin
- FTexts.Add(AText);
- FSounds.Add(ASound);
- end;
- constructor TEZReply.Create(AOwner: TCollection);
- begin
- inherited;
- FSounds := TStringList.Create;
- FTexts := TStringList.Create;
- end;
- destructor TEZReply.Destroy;
- begin
- FreeAndNil(FTexts);
- FreeAndNil(FSounds);
- inherited;
- end;
- function TEZReply.NextText: string;
- begin
- Result := FTexts[FIndex];
- FSound := FSounds[FIndex];
- Inc(FIndex);
- if FIndex = FTexts.Count then begin
- FIndex := 0;
- end;
- end;
- { TEZPersonality }
- procedure TEZPersonality.AddReply(const AKeywords, AReplies: array of string;
- const ASounds: array of string);
- var
- i: integer;
- LReply: TEZReply;
- begin
- LReply := TEZReply.Create(Self);
- for i := Low(AReplies) to High(AReplies) do begin
- if i <= High(ASounds) then begin
- LReply.AddText(AReplies[i], ASounds[i]);
- end else begin
- LReply.AddText(AReplies[i]);
- end;
- end;
- for i := Low(AKeywords) to High(AKeywords) do begin
- FKeywords.AddObject(Uppercase(AKeywords[i]), LReply);
- end;
- end;
- procedure TEZPersonality.AddReply(const AKeywords, AReplies: array of string);
- begin
- AddReply(AKeywords, AReplies, []);
- end;
- class function TEZPersonality.ConstructPersonality(
- const AName: string): TEZPersonality;
- var
- i: Integer;
- begin
- i := GPersonalities.IndexOf(AName);
- if i = -1 then begin
- raise Exception.Create('Personality not found.');
- end;
- Result := TEZPersonalityClass(GPersonalities.Objects[i]).Create;
- end;
- constructor TEZPersonality.Create;
- begin
- inherited Create(TEZReply);
- FKeywords := TStringList.Create;
- InitReplies;
- end;
- destructor TEZPersonality.Destroy;
- begin
- FreeAndNil(FKeywords);
- inherited;
- end;
- class procedure TEZPersonality.PersonalityList(AStrings: TStrings);
- begin
- AStrings.AddStrings(GPersonalities);
- end;
- class procedure TEZPersonality.RegisterPersonality;
- begin
- GPersonalities.AddObject(Self.Attributes.Name, TObject(Self));
- end;
- initialization
- GPersonalities := TStringList.Create;
- GPersonalities.Sorted := True;
- finalization
- FreeAndNil(GPersonalities)
- end.
|