[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)