I am sufficiently happy with my second patch to post it here for any
takers. It should be applied to 2.3.0b2 or 2.3.0b1. It *has not* been
tested against 2.2.5.

The new patch supports nested comments so long as they are properly
balanced inside the comment. 

As with my first patch it also allows you to create a custom DTML block
tag that contains something other than valid DTML code. It now should
support block continuation tages as well, although this had not been
tested completely. 

Patch files are attached. Enjoy.
-- 
| Casey Duncan
| Kaivo, Inc.
| [EMAIL PROTECTED]
`------------------>
*** DT_String.py~       Tue Dec 12 14:20:25 2000
--- DT_String.py        Wed Jan 24 08:22:11 2001
***************
*** 272,313 ****
          sname=stag
          sstart=start
          sa=sargs
!         while 1:
  
              l=tagre.search(text,start)
              if l < 0: self.parse_error('No closing tag', stag, text, sloc)
  
              try: tag, args, command, coname= self._parseTag(tagre,scommand,sa)
!             except ParseError, m: self.parse_error(m[0],m[1], text, l)
!             
!             if command:
!                 start=l+len(tag)
!                 if hasattr(command, 'blockContinuations'):
!                     # New open tag.  Need to find closing tag.
!                     start=self.parse_close(text, start, tagre, tag, l,
!                                            command, args)
              else:
!                 # Either a continuation tag or an end tag
!                 section=self.SubTemplate(sname)
!                 section._v_blocks=section.blocks=self.parse(text[:l],sstart)
!                 section._v_cooked=None
!                 blocks.append((tname,sargs,section))
      
!                 start=self.skip_eol(text,l+len(tag))
  
!                 if coname:
!                     tname=coname
!                     sname=tag
!                     sargs=args
!                     sstart=start
!                 else:
!                     try:
!                         r=scommand(blocks)
!                         if hasattr(r,'simple_form'): r=r.simple_form
!                         result.append(r)
!                     except ParseError, m: self.parse_error(m[0],stag,text,l)
  
!                     return start
  
      parse_close__roles__=()
      def parse_close(self, text, start, tagre, stag, sloc, scommand, sa):
--- 272,324 ----
          sname=stag
          sstart=start
          sa=sargs
!         # Determine if the tag wants dtml parsing
!         parse_dtml = not hasattr(scommand, 'disable_dtml_block_parsing')
  
+         while 1:
              l=tagre.search(text,start)
              if l < 0: self.parse_error('No closing tag', stag, text, sloc)
  
              try: tag, args, command, coname= self._parseTag(tagre,scommand,sa)
!             except ParseError, m: 
!                 if parse_dtml: self.parse_error(m[0],m[1], text, l)
!                 else: start = l + 1 # Not parsing DTML: Skip malformed tags
              else:
!                 if command:
!                     start=l+len(tag)
!                     if hasattr(command, 'blockContinuations'):
!                         # New open tag.  Need to find closing tag.
!                         try: start=self.parse_close(text, start, tagre, tag, l,
!                                                     command, args)
!                       except: 
!                             if parse_dtml: raise
!                 else:
!                     # Either a continuation tag or an end tag 
!                     if parse_dtml:
!                         section=self.SubTemplate(sname)
!                         section._v_blocks=section.blocks=self.parse(text[:l],sstart)
!                     else:
!                         section = String(text[sstart:l], __name__=sname)
!                         section._v_blocks = section.blocks = [section.raw]
! 
!                     section._v_cooked=None
!                     blocks.append((tname,sargs,section))
      
!                     start=self.skip_eol(text,l+len(tag))
  
!                     if coname:
!                         tname=coname
!                         sname=tag
!                         sargs=args
!                         sstart=start
!                     else:
!                         try:
!                             r=scommand(blocks)
!                             if hasattr(r,'simple_form'): r=r.simple_form
!                             result.append(r)
!                         except ParseError, m: self.parse_error(m[0],stag,text,l)
  
!                         return start
  
      parse_close__roles__=()
      def parse_close(self, text, start, tagre, stag, sloc, scommand, sa):
*** DT_Var.old  Mon Jan 22 15:27:30 2001
--- DT_Var.py   Mon Jan 22 15:28:14 2001
***************
*** 461,466 ****
--- 461,467 ----
      ''' 
      name='comment'
      blockContinuations=()
+     disable_dtml_block_parsing = 1
  
      def __init__(self, args, fmt=''): pass
  

Reply via email to