[Idle-dev] CVS: idle ReplaceDialog.py,1.2,1.3

Stephen elguavas@users.sourceforge.net
Wed, 11 Jul 2001 23:54:18 -0700


Update of /cvsroot/idlefork/idle
In directory usw-pr-cvs1:/tmp/cvs-serv24922

Modified Files:
	ReplaceDialog.py 
Log Message:
py-cvs merge, python 1.5.2 compatability

Index: ReplaceDialog.py
===================================================================
RCS file: /cvsroot/idlefork/idle/ReplaceDialog.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -r1.2 -r1.3
*** ReplaceDialog.py	2001/07/04 03:15:10	1.2
--- ReplaceDialog.py	2001/07/12 06:54:16	1.3
***************
*** 91,95 ****
              chars = text.get("%d.0" % line, "%d.0" % (line+1))
              orig = m.group()
!             new = re.pcre_expand(m, repl)
              i, j = m.span()
              first = "%d.%d" % (line, i)
--- 91,95 ----
              chars = text.get("%d.0" % line, "%d.0" % (line+1))
              orig = m.group()
!             new = self._expand(m, repl)
              i, j = m.span()
              first = "%d.%d" % (line, i)
***************
*** 143,147 ****
          if not prog:
              return 0
!         new = re.pcre_expand(m, self.replvar.get())
          text.mark_set("insert", first)
          text.undo_block_start()
--- 143,147 ----
          if not prog:
              return 0
!         new = self._expand(m, self.replvar.get())
          text.mark_set("insert", first)
          text.undo_block_start()
***************
*** 154,157 ****
--- 154,173 ----
          self.ok = 0
          return 1
+ 
+     def _expand(self, m, template):
+         # XXX This code depends on internals of the regular expression
+         # engine!  There's no standard API to do a substitution when you
+         # have already found the match.  One should be added.
+         # The solution here is designed to be backwards compatible
+         # with previous Python versions, e.g. 1.5.2.
+         # XXX This dynamic test should be done only once.
+         if getattr(re, "engine", "pre") == "pre":
+             return re.pcre_expand(m, template)
+         else: # sre
+             # XXX This import should be avoidable...
+             import sre_parse
+             # XXX This parses the template over and over...
+             ptemplate = sre_parse.parse_template(template, m.re)
+             return sre_parse.expand_template(ptemplate, m)
  
      def show_hit(self, first, last):