OSDN Git Service

タブ文字チェック
[winbottle/winbottle.git] / bottleclient / StrReplace.pas
index 1deb1c0..f90b759 100644 (file)
@@ -7,7 +7,7 @@ unit StrReplace;
 
 interface
 
-uses Classes, SysUtils, Forms, Menus, RegexUtils;
+uses Classes, SysUtils, Forms, Menus, RegexUtils, Contnrs;
 
 type
   // \88È\89º\82Ì5\82Â\82Ì\83N\83\89\83X\82Ì\92è\8b`\82Í\81A\8f¬\82³\82¢\95û\82©\82ç\81¨\91å\82«\82¢\95û\82Ö\81A\82Æ
@@ -15,8 +15,8 @@ type
 
   // \8c\9f\8dõ\8cê\82Æ\92u\8a·\8cê\82Ì\83y\83A\82Æ\82»\82Ì\83I\83v\83V\83\87\83\93\82ð\8bL\98^\82·\82é\8d\\91¢\91Ì
   TReplacePairRec = record
-    BeforeStr: String;
-    AfterStr:  String;
+    BeforeStr: string;
+    AfterStr:  string;
     IgnoreCase: boolean;
     UseRegExp: boolean;
   end;
@@ -25,52 +25,67 @@ type
   TReplacePair = class(TCollectionItem)
   private
     FPairRec: TReplacePairRec;
-    procedure SetAfterStr(const Value: String);
-    procedure SetBeforeStr(const Value: String);
+    procedure SetAfterStr(const Value: string);
+    procedure SetBeforeStr(const Value: string);
     procedure SetIgnoreCase(const Value: boolean);
     procedure SetUseRegExp(const Value: boolean);
-    function GetAfterStr: String;
-    function GetBeforeStr: String;
+    function GetAfterStr: string;
+    function GetBeforeStr: string;
     function GetIgnoreCase: boolean;
     function GetUseRegExp: boolean;
   public
-    function ExecuteReplace(TargetStr: String): String;
+    constructor Create(Collection: TCollection); override;
+    function ExecuteReplace(TargetStr: string): string;
     procedure Assign(Source: TPersistent); override;
+    procedure Clear;
+    function IsValidPair: Boolean;
   published
-    property BeforeStr: String read GetBeforeStr write SetBeforeStr;
-    property AfterStr: String read GetAfterStr write SetAfterStr;
-    property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase;
-    property UseRegExp: boolean read GetUseRegExp write SetUseRegExp;
+    property BeforeStr: string read GetBeforeStr write SetBeforeStr;
+    property AfterStr: string read GetAfterStr write SetAfterStr;
+    property IgnoreCase: boolean read GetIgnoreCase write SetIgnoreCase default false;
+    property UseRegExp: boolean read GetUseRegExp write SetUseRegExp default false;
   end;
 
-  // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X
+  // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X\81B
   TReplacePairCollection = class(TCollection)
+  private
+    function GetItem(Index: Integer): TReplacePair;
   public
-    function ExecuteReplace(TargetStr: String): String;
+    function Add: TReplacePair;
+    property Items[Index: Integer]: TReplacePair read GetItem; default;
+    function ExecuteReplace(TargetStr: string): string;
+    function StringExpression: string;
   end;
 
   // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\82ð\95Û\8e\9d\82µ\81A\83^\83C\83g\83\8b\82È\82Ç\82ð\82Ü\82Æ\82ß\82Ä
   // 1\82Â\82Ì\83v\83\8a\83Z\83b\83g\90Ý\92è\8d\80\96Ú\82ð\95\\8c»\82·\82é\83N\83\89\83X
   TReplacePreset = class(TCollectionItem)
   private
-    FTitle: String;
+    FTitle: string;
     FPairs: TReplacePairCollection;
     FShortCut: TShortCut;
+    FConfirmAfterReplace: Boolean;
     procedure SetPairs(const Value: TReplacePairCollection);
     procedure SetShortCut(const Value: TShortCut);
-    procedure SetTitle(const Value: String);
+    procedure SetTitle(const Value: string);
+    procedure SetConfirmAfterReplace(const Value: Boolean);
   public
     constructor Create(Collection: TCollection); override;
     destructor Destroy; override;
     procedure Assign(Source: TPersistent); override;
   published
     property Pairs: TReplacePairCollection read FPairs write SetPairs;
-    property Title: String read FTitle write SetTitle;
+    property Title: string read FTitle write SetTitle;
     property ShortCut: TShortCut read FShortCut write SetShortCut;
+    property ConfirmAfterReplace: Boolean read FConfirmAfterReplace write SetConfirmAfterReplace;
   end;
 
-  // \83v\83\8a\83Z\83b\83g\90Ý\92è\8d\80\96ÚTReplacePreset\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X
   TReplacePresetCollection = class(TCollection)
+  private
+    function GetItem(Index: Integer): TReplacePreset;
+  public
+    function Add: TReplacePreset;
+    property Items[Index: Integer]: TReplacePreset read GetItem; default;
   end;
 
   // \8dÅ\8fI\93I\82É\82±\82ê\82ð\83V\83\8a\83A\83\89\83C\83Y\82·\82é
@@ -98,7 +113,24 @@ begin
     FPairRec := (Source as TReplacePair).FPairRec;
 end;
 
-function TReplacePair.ExecuteReplace(TargetStr: String): String;
+procedure TReplacePair.Clear;
+begin
+  with FPairRec do
+  begin
+    BeforeStr := '';
+    AfterStr := '';
+    UseRegExp := false;
+    IgnoreCase := false;
+  end;
+end;
+
+constructor TReplacePair.Create(Collection: TCollection);
+begin
+  inherited;
+  IgnoreCase := true;
+end;
+
+function TReplacePair.ExecuteReplace(TargetStr: string): string;
 var
   Options: TReplaceFlags;
 begin
@@ -113,12 +145,12 @@ begin
     Result := StringReplace(Result, BeforeStr, AfterStr, Options);
 end;
 
-function TReplacePair.GetAfterStr: String;
+function TReplacePair.GetAfterStr: string;
 begin
   Result := FPairRec.AfterStr;
 end;
 
-function TReplacePair.GetBeforeStr: String;
+function TReplacePair.GetBeforeStr: string;
 begin
   Result := FPairRec.BeforeStr;
 end;
@@ -133,12 +165,25 @@ begin
   Result := FPairRec.UseRegExp;
 end;
 
-procedure TReplacePair.SetAfterStr(const Value: String);
+function TReplacePair.IsValidPair: Boolean;
+begin
+  Result := true;
+  if BeforeStr = '' then
+    Result := false
+  else
+    try
+      ExecuteReplace(' ')
+    except
+      Result := false;
+    end;
+end;
+
+procedure TReplacePair.SetAfterStr(const Value: string);
 begin
   FPairRec.AfterStr := Value;
 end;
 
-procedure TReplacePair.SetBeforeStr(const Value: String);
+procedure TReplacePair.SetBeforeStr(const Value: string);
 begin
   FPairRec.BeforeStr := Value;
 end;
@@ -167,6 +212,7 @@ begin
     Pairs.Assign(Src.Pairs);
     Title := Src.Title;
     ShortCut := Src.ShortCut;
+    ConfirmAfterReplace := Src.ConfirmAfterReplace;
   end;
 end;
 
@@ -192,23 +238,25 @@ begin
   FShortCut := Value;
 end;
 
-procedure TReplacePreset.SetTitle(const Value: String);
+procedure TReplacePreset.SetTitle(const Value: string);
 begin
   FTitle := Value;
 end;
 
+procedure TReplacePreset.SetConfirmAfterReplace(const Value: Boolean);
+begin
+  FConfirmAfterReplace := Value;
+end;
+
 { TReplacePresets }
 
 procedure TReplacePresets.Assign(Source: TPersistent);
-var
-  Src: TReplacePresets;
 begin
   if not (Source is TReplacePresets) then
     inherited
   else
   begin
-    Src := Source as TReplacePresets;
-    Presets.Assign(Src.Presets);
+    FPresets.Assign((Source as TReplacePresets).FPresets);
   end;
 end;
 
@@ -232,9 +280,14 @@ end;
 
 { TReplacePairCollection }
 
-function TReplacePairCollection.ExecuteReplace(TargetStr: String): String;
+function TReplacePairCollection.Add: TReplacePair;
+begin
+  Result := inherited Add as TReplacePair;
+end;
+
+function TReplacePairCollection.ExecuteReplace(TargetStr: string): string;
 var
-  i: integer;
+  i: Integer;
 begin
   Result := TargetStr;
   for i := 0 to Count-1 do
@@ -243,6 +296,37 @@ begin
   end;
 end;
 
+function TReplacePairCollection.GetItem(Index: Integer): TReplacePair;
+begin
+  Result := (inherited GetItem(Index)) as TReplacePair;
+end;
+
+function TReplacePairCollection.StringExpression: string;
+var
+  i: Integer;
+begin
+  Result := '';
+  for i := 0 to Count-1 do
+  begin
+    if i > 0 then
+      Result := Result + '\81A';
+    Result := Result + Format('\81u%s\81v\81¨\81u%s\81v',
+      [Items[i].BeforeStr, Items[i].AfterStr]);
+  end;
+end;
+
+{ TReplacePresetCollection }
+
+function TReplacePresetCollection.Add: TReplacePreset;
+begin
+  Result := inherited Add as TReplacePreset;
+end;
+
+function TReplacePresetCollection.GetItem(Index: Integer): TReplacePreset;
+begin
+  Result := inherited GetItem(Index) as TReplacePreset;
+end;
+
 initialization
 
 Classes.RegisterClass(TReplacePresets);