import string def minpositive(px,px1): if px<0: if px1>=0: return px1 return -1 if px1<0: return px return min(px,px1) def addhrefs(text): tags=text.split("<") newtags=[] in_link=0 for tag in tags: ltag=tag.lower() if not tag: newtags.append("") continue if ltag[0]=="a": in_link=1 elif ltag[0:1]=="/a": in_link=0 if not in_link: p=tag.find(">") if p<0: p=0 tag_pre=tag[:p] tag=tag[p:] ltag=ltag[p:] while tag: is_maillink=0 has_address=ltag.find("www.") has_address=minpositive(has_address,ltag.find("http://")) has_address=minpositive(has_address,ltag.find("ftp://")) has_address=minpositive(has_address,ltag.find("@")) if has_address>=0: address_start=has_address while address_start>=p: if tag[address_start] in (">"," ","\t","\r","\n",'"',"'"): break address_start-=1 if tag[address_start] in (">"," ","\t","\r","\n",'"',"'"): address_start+=1 address_end=has_address while address_end=0: link=""+address+"" else: if address[:3].lower()=="www": link=""+address+"" else: link=""+address+"" tag_pre+=tag[:address_start]+link tag=tag[address_end:] ltag=ltag[address_end:] else: tag_pre+=tag tag=ltag="" tag=tag_pre newtags.append(tag) return string.join(newtags,"<")