@@ -766,25 +766,26 @@ def __cmp__(self, other):
766766 return cmp (self ._value , other )
767767
768768class StringHTMLProperty (HTMLProperty ):
769- url_re = re .compile (r'\w{3,6}://\S+' )
770- email_re = re .compile (r'[\w\.]+@[\w\.\-]+' )
771- designator_re = re .compile (r'([a-z_]+)(\d+)' )
772- def _url_repl (self , match ):
773- s = match .group (0 )
774- return '<a href="%s">%s</a>' % (s , s )
775- def _email_repl (self , match ):
776- s = match .group (0 )
777- return '<a href="mailto:%s">%s</a>' % (s , s )
778- def _designator_repl (self , match ):
779- s = match .group (0 )
780- s1 = match .group (1 )
781- s2 = match .group (2 )
782- try :
783- # make sure s1 is a valid tracker classname
784- self ._db .getclass (s1 )
785- return '<a href="%s">%s %s</a>' % (s , s1 , s2 )
786- except KeyError :
787- return '%s%s' % (s1 , s2 )
769+ hyper_re = re .compile (r'((?P<url>\w{3,6}://\S+)|'
770+ r'(?P<email>[\w\.]+@[\w\.\-]+)|'
771+ r'(?P<item>(?P<class>[a-z_]+)(?P<id>\d+)))' )
772+ def _hyper_repl (self , match ):
773+ if match .group ('url' ):
774+ s = match .group ('url' )
775+ return '<a href="%s">%s</a>' % (s , s )
776+ elif match .group ('email' ):
777+ s = match .group ('email' )
778+ return '<a href="mailto:%s">%s</a>' % (s , s )
779+ else :
780+ s = match .group ('item' )
781+ s1 = match .group ('class' )
782+ s2 = match .group ('id' )
783+ try :
784+ # make sure s1 is a valid tracker classname
785+ self ._db .getclass (s1 )
786+ return '<a href="%s">%s %s</a>' % (s , s1 , s2 )
787+ except KeyError :
788+ return '%s%s' % (s1 , s2 )
788789
789790 def plain (self , escape = 0 , hyperlink = 0 ):
790791 ''' Render a "plain" representation of the property
@@ -802,9 +803,7 @@ def plain(self, escape=0, hyperlink=0):
802803 if hyperlink :
803804 if not escape :
804805 s = cgi .escape (s )
805- s = self .url_re .sub (self ._url_repl , s )
806- s = self .email_re .sub (self ._email_repl , s )
807- s = self .designator_re .sub (self ._designator_repl , s )
806+ s = self .hyper_re .sub (self ._hyper_repl , s )
808807 return s
809808
810809 def stext (self , escape = 0 ):
0 commit comments