4747except ImportError :
4848 _ = lambda x : x
4949
50- from .sedregex import SED_REGEX
50+ from .sedregex import makeSedRegex
5151
5252TAG_SEEN = 'SedRegex.seen'
5353TAG_IS_REGEX = 'SedRegex.isRegex'
@@ -92,7 +92,7 @@ class SedRegex(callbacks.Plugin):
9292 public = True
9393
9494 @staticmethod
95- def _unpack_sed (expr ):
95+ def _unpack_sed (sedRegex , expr ):
9696 if '\0 ' in expr :
9797 raise ValueError ('Expression can\' t contain NUL' )
9898
@@ -107,7 +107,7 @@ def _unpack_sed(expr):
107107
108108 escaped_expr += c
109109
110- match = SED_REGEX .search (escaped_expr )
110+ match = sedRegex .search (escaped_expr )
111111
112112 if not match :
113113 return
@@ -145,7 +145,13 @@ def doPrivmsg(self, irc, msg):
145145 # SedRegex was enabled.
146146 msg .tag (TAG_SEEN )
147147
148- regexMatch = SED_REGEX .match (msg .args [1 ])
148+
149+ delimiters = self .registryValue ('delimiters' , msg .channel , irc .network )
150+ if delimiters :
151+ delimiters = re .escape (delimiters )
152+ sedRegex = makeSedRegex (delimiters )
153+ text = msg .args [1 ]
154+ regexMatch = sedRegex .match (text )
149155 if not regexMatch :
150156 return
151157
@@ -154,7 +160,7 @@ def doPrivmsg(self, irc, msg):
154160 msg .tag (TAG_IS_REGEX )
155161
156162 try :
157- (pattern , replacement , count , flags ) = self ._unpack_sed (msg . args [ 1 ] )
163+ (pattern , replacement , count , flags ) = self ._unpack_sed (sedRegex , text )
158164 except Exception as e :
159165 self .log .warning (_ ("SedRegex parser error: %s" ), e , exc_info = True )
160166 if self .registryValue ('displayErrors' , msg .channel , irc .network ):
@@ -172,7 +178,7 @@ def doPrivmsg(self, irc, msg):
172178 regex_timeout = self .registryValue ('processTimeout' )
173179 try :
174180 message = process (self ._replacer_process , irc , msg ,
175- target , pattern , replacement , count , iterable ,
181+ target , pattern , replacement , count , iterable , sedRegex ,
176182 timeout = regex_timeout , pn = self .name (), cn = 'replacer' )
177183 except ProcessTimeoutError :
178184 irc .error (_ ("Search timed out." ))
@@ -187,7 +193,7 @@ def doPrivmsg(self, irc, msg):
187193 else :
188194 irc .reply (message , prefixNick = False )
189195
190- def _replacer_process (self , irc , msg , target , pattern , replacement , count , messages ):
196+ def _replacer_process (self , irc , msg , target , pattern , replacement , count , messages , sedRegex ):
191197 for m in messages :
192198 if m .command in ('PRIVMSG' , 'NOTICE' ) and \
193199 ircutils .strEqual (m .args [0 ], msg .args [0 ]) and m .tagged ('receivedBy' ) == irc :
@@ -209,7 +215,7 @@ def _replacer_process(self, irc, msg, target, pattern, replacement, count, messa
209215 # so we only need to do this check once per message.
210216 if not m .tagged (TAG_SEEN ):
211217 m .tag (TAG_SEEN )
212- if SED_REGEX .match (m .args [1 ]):
218+ if sedRegex .match (m .args [1 ]):
213219 m .tag (TAG_IS_REGEX )
214220 # Ignore messages containing a regexp if ignoreRegex is on.
215221 if self .registryValue ('ignoreRegex' , msg .channel , irc .network ) and m .tagged (TAG_IS_REGEX ):
0 commit comments