OSDN Git Service

PresetReplace.pasをStrReplace.pasに名称変更。
authornaru <bottle@mikage.to>
Sat, 13 Mar 2004 03:29:02 +0000 (03:29 +0000)
committernaru <bottle@mikage.to>
Sat, 13 Mar 2004 03:29:02 +0000 (03:29 +0000)
エディタの置換やアクションでの置換も含んだ、スクリプト文字列置換全般に関係するユニットとなりそうなので。

bottleclient/SstpBottle.dpr
bottleclient/StrReplace.pas [moved from bottleclient/PresetReplace.pas with 58% similarity]

index 4477610..5bac011 100755 (executable)
@@ -58,8 +58,9 @@ uses
   HtmlOutputConfig in 'HtmlOutputConfig.pas' {frmHTMLOutputConfig},
   HtmlOutputProgress in 'HtmlOutputProgress.pas' {frmHTMLOutputProgress},
   SearchLog in 'SearchLog.pas' {frmSearchLog},
-  PresetReplace in 'PresetReplace.pas',
-  RegexUtils in 'RegexUtils.pas';
+  StrReplace in 'StrReplace.pas',
+  RegexUtils in 'RegexUtils.pas',
+  StrReplaceFrame in 'StrReplaceFrame.pas' {frmStrReplaceFrame: TFrame};
 
 // \8c^\95t\82«\92è\90\94\82ð\95Ï\8dX\82Å\82«\82é\82æ\82¤\82É\82·\82é\83R\83\93\83p\83C\83\89\83I\83v\83V\83\87\83\93
 // \88ê\95\94\82Ì\83R\83\93\83|\81[\83l\83\93\83g\82É\82±\82ê\82ª\95K\97v
similarity index 58%
rename from bottleclient/PresetReplace.pas
rename to bottleclient/StrReplace.pas
index d0776a7..1deb1c0 100644 (file)
@@ -1,35 +1,52 @@
-unit PresetReplace;
+unit StrReplace;
 
 {
-  PresetReplace.pas
-  GUI\82©\82ç\93Æ\97§\82µ\82½\81A\81u\83v\83\8a\83Z\83b\83g\92u\8a·\81v\83\8d\83W\83b\83N\83N\83\89\83X\82Ì\8eÀ\91\95
+  StrReplace.pas
+  GUI\82©\82ç\93Æ\97§\82µ\82½\81A\95\8e\9a\97ñ\92u\8a·\8aÖ\98A\83\8d\83W\83b\83N\83N\83\89\83X\82Ì\8eÀ\91\95
 }
 
 interface
 
-uses Classes, SysUtils, Forms, Menus;
+uses Classes, SysUtils, Forms, Menus, RegexUtils;
 
 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Æ
   // \8bL\8fq\82µ\82Ä\82 \82é(\8aÜ\82Ü\82ê\82é\95û\82©\82ç\8aÜ\82Þ\95û\81A\82Ì\8f\87\94Ô)
 
-  // \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é
+  // \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;
+    IgnoreCase: boolean;
+    UseRegExp: boolean;
+  end;
+
+  // \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é\83N\83\89\83X
   TReplacePair = class(TCollectionItem)
   private
-    FIgnoreCase: boolean;
-    FBeforeStr: String;
-    FAfterStr: String;
+    FPairRec: TReplacePairRec;
     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 GetIgnoreCase: boolean;
+    function GetUseRegExp: boolean;
+  public
+    function ExecuteReplace(TargetStr: String): String;
+    procedure Assign(Source: TPersistent); override;
   published
-    property BeforeStr: String read FBeforeStr write SetBeforeStr;
-    property AfterStr: String read FAfterStr write SetAfterStr;
-    property IgnoreCase: boolean read FIgnoreCase write SetIgnoreCase;
+    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;
   end;
 
   // TReplacePair\82Ì\83R\83\8c\83N\83V\83\87\83\93\83N\83\89\83X
   TReplacePairCollection = class(TCollection)
+  public
+    function ExecuteReplace(TargetStr: String): 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Ä
@@ -73,19 +90,67 @@ implementation
 
 { TReplacePair }
 
+procedure TReplacePair.Assign(Source: TPersistent);
+begin
+  if not (Source is TReplacePair) then
+    inherited
+  else
+    FPairRec := (Source as TReplacePair).FPairRec;
+end;
+
+function TReplacePair.ExecuteReplace(TargetStr: String): String;
+var
+  Options: TReplaceFlags;
+begin
+  // 1\82Â\82Ì\92u\8a·\82ð\8eÀ\91\95\82·\82é
+  Result := TargetStr;
+  Options := [rfReplaceAll];
+  if IgnoreCase then
+    Options := Options + [rfIgnoreCase];
+  if UseRegExp then
+    Result := StringReplaceRegExp(Result, BeforeStr, AfterStr, Options)
+  else
+    Result := StringReplace(Result, BeforeStr, AfterStr, Options);
+end;
+
+function TReplacePair.GetAfterStr: String;
+begin
+  Result := FPairRec.AfterStr;
+end;
+
+function TReplacePair.GetBeforeStr: String;
+begin
+  Result := FPairRec.BeforeStr;
+end;
+
+function TReplacePair.GetIgnoreCase: boolean;
+begin
+  Result := FPairRec.IgnoreCase;
+end;
+
+function TReplacePair.GetUseRegExp: boolean;
+begin
+  Result := FPairRec.UseRegExp;
+end;
+
 procedure TReplacePair.SetAfterStr(const Value: String);
 begin
-  FAfterStr := Value;
+  FPairRec.AfterStr := Value;
 end;
 
 procedure TReplacePair.SetBeforeStr(const Value: String);
 begin
-  FBeforeStr := Value;
+  FPairRec.BeforeStr := Value;
 end;
 
 procedure TReplacePair.SetIgnoreCase(const Value: boolean);
 begin
-  FIgnoreCase := Value;
+  FPairRec.IgnoreCase := Value;
+end;
+
+procedure TReplacePair.SetUseRegExp(const Value: boolean);
+begin
+  FPairRec.UseRegExp := Value;
 end;
 
 { TReplacePreset }
@@ -165,6 +230,19 @@ begin
   FPresets.Assign(Value);
 end;
 
+{ TReplacePairCollection }
+
+function TReplacePairCollection.ExecuteReplace(TargetStr: String): String;
+var
+  i: integer;
+begin
+  Result := TargetStr;
+  for i := 0 to Count-1 do
+  begin
+    Result := (Items[i] as TReplacePair).ExecuteReplace(Result);
+  end;
+end;
+
 initialization
 
 Classes.RegisterClass(TReplacePresets);