[Python-checkins] python/nondist/peps/docutils/parsers/rst states.py,1.1,1.2

goodger@users.sourceforge.net goodger@users.sourceforge.net
Sat, 16 Nov 2002 16:09:21 -0800


Update of /cvsroot/python/python/nondist/peps/docutils/parsers/rst
In directory usw-pr-cvs1:/tmp/cvs-serv25859/parsers/rst

Modified Files:
	states.py 
Log Message:
updated from Docutils

Index: states.py
===================================================================
RCS file: /cvsroot/python/python/nondist/peps/docutils/parsers/rst/states.py,v
retrieving revision 1.1
retrieving revision 1.2
diff -C2 -d -r1.1 -r1.2
*** states.py	8 Nov 2002 23:47:52 -0000	1.1
--- states.py	17 Nov 2002 00:09:19 -0000	1.2
***************
*** 535,541 ****
      # Alphanumerics with isolated internal [-._] chars (i.e. not 2 together):
      simplename = r'(?:(?!_)\w)+(?:[-._](?:(?!_)\w)+)*'
      uric = r"""[-_.!~*'()[\];/:@&=+$,%a-zA-Z0-9]"""
!     urilast = r"""[_~/\]a-zA-Z0-9]"""   # no punctuation
      emailc = r"""[-_!~*'{|}/#?^`&=+$%a-zA-Z0-9]"""
      parts = ('initial_inline', start_string_prefix, '',
               [('start', '', non_whitespace_after,  # simple start-strings
--- 535,549 ----
      # Alphanumerics with isolated internal [-._] chars (i.e. not 2 together):
      simplename = r'(?:(?!_)\w)+(?:[-._](?:(?!_)\w)+)*'
+     # Valid URI characters (see RFC 2396 & RFC 2732):
      uric = r"""[-_.!~*'()[\];/:@&=+$,%a-zA-Z0-9]"""
!     # Last URI character; same as uric but no punctuation:
!     urilast = r"""[_~/a-zA-Z0-9]"""
      emailc = r"""[-_!~*'{|}/#?^`&=+$%a-zA-Z0-9]"""
+     email_pattern = r"""
+           %(emailc)s+(?:\.%(emailc)s+)*   # name
+           @                               # at
+           %(emailc)s+(?:\.%(emailc)s*)*   # host
+           %(urilast)s                     # final URI char
+           """
      parts = ('initial_inline', start_string_prefix, '',
               [('start', '', non_whitespace_after,  # simple start-strings
***************
*** 582,585 ****
--- 590,605 ----
                %(end_string_suffix)s
                """ % locals(), re.VERBOSE | re.UNICODE),
+           embedded_uri=re.compile(
+               r"""
+               (
+                 [ \n]+                  # spaces or beginning of line
+                 <                       # open bracket
+                 %(non_whitespace_after)s
+                 ([^<>\0]+)              # anything but angle brackets & nulls
+                 %(non_whitespace_before)s
+                 >                       # close bracket w/o whitespace before
+               )
+               $                         # end of string
+               """ % locals(), re.VERBOSE),
            literal=re.compile(non_whitespace_before + '(``)'
                               + end_string_suffix),
***************
*** 589,594 ****
                                        + r'(\|_{0,2})'
                                        + end_string_suffix),
            uri=re.compile(
!                 r"""
                  %(start_string_prefix)s
                  (?P<whole>
--- 609,615 ----
                                        + r'(\|_{0,2})'
                                        + end_string_suffix),
+           email=re.compile(email_pattern % locals() + '$', re.VERBOSE),
            uri=re.compile(
!                 (r"""
                  %(start_string_prefix)s
                  (?P<whole>
***************
*** 616,627 ****
                  |                       # *OR*
                    (?P<email>              # email address
!                     %(emailc)s+(\.%(emailc)s+)*  # name
!                     @                            # at
!                     %(emailc)s+(\.%(emailc)s*)*  # host
!                     %(urilast)s                  # final URI char
                    )
                  )
                  %(end_string_suffix)s
!                 """ % locals(), re.VERBOSE),
            pep=re.compile(
                  r"""
--- 637,645 ----
                  |                       # *OR*
                    (?P<email>              # email address
!                     """ + email_pattern + r"""
                    )
                  )
                  %(end_string_suffix)s
!                 """) % locals(), re.VERBOSE),
            pep=re.compile(
                  r"""
***************
*** 737,741 ****
                      return string[:rolestart], [prb], string[textend:], [msg]
                  return self.phrase_ref(string[:matchstart], string[textend:],
!                                        rawsource, text)
              else:
                  return self.interpreted(string[:rolestart], string[textend:],
--- 755,759 ----
                      return string[:rolestart], [prb], string[textend:], [msg]
                  return self.phrase_ref(string[:matchstart], string[textend:],
!                                        rawsource, escaped, text)
              else:
                  return self.interpreted(string[:rolestart], string[textend:],
***************
*** 748,761 ****
          return string[:matchstart], [prb], string[matchend:], [msg]
  
!     def phrase_ref(self, before, after, rawsource, text):
          refname = normalize_name(text)
          reference = nodes.reference(rawsource, text)
          if rawsource[-2:] == '__':
!             reference['anonymous'] = 1
!             self.document.note_anonymous_ref(reference)
          else:
!             reference['refname'] = refname
!             self.document.note_refname(reference)
!         return before, [reference], after, []
  
      def interpreted(self, before, after, rawsource, text, role, position):
--- 766,809 ----
          return string[:matchstart], [prb], string[matchend:], [msg]
  
!     def phrase_ref(self, before, after, rawsource, escaped, text):
!         match = self.patterns.embedded_uri.search(escaped)
!         if match:
!             text = unescape(escaped[:match.start(0)])
!             uri_text = match.group(2)
!             uri = ''.join(uri_text.split())
!             uri = self.adjust_uri(uri)
!             if uri:
!                 target = nodes.target(match.group(1), refuri=uri)
!             else:
!                 raise ApplicationError('problem with URI: %r' % uri_text)
!         else:
!             target = None
          refname = normalize_name(text)
          reference = nodes.reference(rawsource, text)
+         node_list = [reference]
          if rawsource[-2:] == '__':
!             if target:
!                 reference['refuri'] = uri
!             else:
!                 reference['anonymous'] = 1
!                 self.document.note_anonymous_ref(reference)
          else:
!             if target:
!                 reference['refuri'] = uri
!                 target['name'] = refname
!                 self.document.note_external_target(target)
!                 self.document.note_explicit_target(target, self.parent)
!                 node_list.append(target)
!             else:
!                 reference['refname'] = refname
!                 self.document.note_refname(reference)
!         return before, node_list, after, []
! 
!     def adjust_uri(self, uri):
!         match = self.patterns.email.match(uri)
!         if match:
!             return 'mailto:' + uri
!         else:
!             return uri
  
      def interpreted(self, before, after, rawsource, text, role, position):
***************
*** 1640,1645 ****
              target['name'] = name
              if refuri:
!                 target['refuri'] = refuri
!                 self.document.note_external_target(target)
              else:
                  self.document.note_internal_target(target)
--- 1688,1697 ----
              target['name'] = name
              if refuri:
!                 uri = self.inliner.adjust_uri(refuri)
!                 if uri:
!                     target['refuri'] = uri
!                     self.document.note_external_target(target)
!                 else:
!                     raise ApplicationError('problem with URI: %r' % refuri)
              else:
                  self.document.note_internal_target(target)