Namazu-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pnamazu の Replace について



古川です。

From: "Hiroaki, Sakuma" <nlug@xxxxxxxxxxxxxxxxx>
Subject: [namazu-users-ja] pnamazu の Replace について
Date: Mon, 19 Nov 2001 17:17:11 +0900

nlug> Replace   /C\|/foobaa/(.*)/([^\/]*)/   http://foo.baa/\1/\2/
nlug> のような表現です。これを、本家namazuだときちんと置き換えてくれますが、
nlug> pnamazuだと、
nlug> http://foobaa/\1/\2/
nlug> と\*が置き換えられずに出てきてしまいます。
nlug> 確認をお願いいたします。

こんな感じでどうでしょうか?

-- 
Rei FURUKAWA 
furukawa@xxxxxxxxxxxx

--- ldnmzcnf.pl	2001/09/11 14:48:31	1.18
+++ ldnmzcnf.pl	2001/11/20 16:37:15
@@ -22,15 +22,9 @@
             $URL_REPLACE_FROM = $1;
             $URL_REPLACE_TO = $2;
         }elsif (/^\s*Replace\s+\"((\\.|[^\\])+)\"\s+\"((\\.|[^\\])+)\"/i){ #"
-            unshift(@ReplacePattern, $1);
-            $ReplacePattern{$1} = $3;
-            $URL_REPLACE_FROM = $1;
-            $URL_REPLACE_TO = $3;
+            &entry_replace($1, $3);
         }elsif (/^\s*Replace\s+(\S+)\s+(\S+)/i){
-            unshift(@ReplacePattern, $1);
-            $ReplacePattern{$1} = $2;
-            $URL_REPLACE_FROM = $1;
-            $URL_REPLACE_TO = $2;
+            &entry_replace($1, $2);
         }
         $URL_REPLACE_FROM = $1 if /^URL_REPLACE_FROM\s+(\S+)/i;
         $URL_REPLACE_TO   = $1 if /^URL_REPLACE_TO\s+(\S+)/i;
@@ -105,6 +99,18 @@
     }
 }
 
+sub entry_replace{
+    my ($src, $dst) = @_;
+    my $sub = eval "sub {\$_[0] =~ s\xff$src\xff$dst\xffi}";
+    unless ($@){
+        unshift(@ReplacePattern, $src);
+        $ReplacePattern{$src} = $dst;
+        $ReplaceSub{$src} = $sub;
+        $URL_REPLACE_FROM = $src;
+        $URL_REPLACE_TO = $dst;
+    }
+}
+
 sub replace{
     my $src = $_[0];
     return unless $Replace;
@@ -113,7 +119,7 @@
     }
     my $pat;
     for $pat (@ReplacePattern){
-        &debug_log("replace: $src => $_[0]"), return if $_[0] =~ s/$pat/$ReplacePattern{$pat}/ig;
+        &debug_log("replace: $src => $_[0]"), return if &{$ReplaceSub{$pat}}($_[0]);
     }
 }