From: David G. <go...@us...> - 2002-08-05 16:50:21
|
Update of /cvsroot/docutils/docutils/docutils/transforms In directory usw-pr-cvs1:/tmp/cvs-serv644 Modified Files: peps.py Log Message: Added ``mask_email()`` function, updating to pep2html.py's functionality. Index: peps.py =================================================================== RCS file: /cvsroot/docutils/docutils/docutils/transforms/peps.py,v retrieving revision 1.9 retrieving revision 1.10 diff -C2 -d -r1.9 -r1.10 *** peps.py 23 Jul 2002 02:34:21 -0000 1.9 --- peps.py 5 Aug 2002 16:50:17 -0000 1.10 *************** *** 85,99 **** if name == 'author': for node in para: ! if isinstance(node, nodes.reference) \ ! and node.has_key('refuri') \ ! and node['refuri'].startswith('mailto:'): ! replacement = node.astext().replace('@', ' at ') ! node.parent.replace(node, nodes.Text(replacement)) elif name == 'discussions-to': for node in para: ! if isinstance(node, nodes.reference) \ ! and node.has_key('refuri') \ ! and node['refuri'].startswith('mailto:'): ! node['refuri'] += '?subject=PEP%%20%s' % pep elif name in ('replaces', 'replaced-by'): newbody = [] --- 85,94 ---- if name == 'author': for node in para: ! if isinstance(node, nodes.reference): ! node.parent.replace(node, mask_email(node)) elif name == 'discussions-to': for node in para: ! if isinstance(node, nodes.reference): ! node.parent.replace(node, mask_email(node, pep)) elif name in ('replaces', 'replaced-by'): newbody = [] *************** *** 145,152 **** Perform the special processing needed by PEP 0: ! - For all email-address references such as "user@host", mask the address ! as "user at host" (text) to thwart simple email address harvesters ! (except for those listed in `non_masked_addresses` and addresses in the ! "Discussions-To" field). - Link PEP numbers in the second column of 4-column tables to the PEPs --- 140,144 ---- Perform the special processing needed by PEP 0: ! - Mask email addresses. - Link PEP numbers in the second column of 4-column tables to the PEPs *************** *** 154,160 **** """ - non_masked_addresses = ('pe...@py...', - 'pyt...@py...', - 'pyt...@py...') pep_url = Headers.pep_url --- 146,149 ---- *************** *** 163,170 **** def visit_reference(self, node): ! if node.hasattr('refuri') and node['refuri'].startswith('mailto:') \ ! and node['refuri'][8:] not in self.non_masked_addresses: ! replacement = node.astext().replace('@', ' at ') ! node.parent.replace(node, nodes.Text(replacement)) def visit_field_list(self, node): --- 152,156 ---- def visit_reference(self, node): ! node.parent.replace(node, mask_email(node)) def visit_field_list(self, node): *************** *** 197,198 **** --- 183,215 ---- except ValueError: pass + + + non_masked_addresses = ('pe...@py...', + 'pyt...@py...', + 'pyt...@py...') + + def mask_email(ref, pepno=None): + """ + Mask the email address in `ref` and return a replacement node. + + `ref` is returned unchanged if it contains no email address. + + For email addresses such as "user@host", mask the address as "user at + host" (text) to thwart simple email address harvesters (except for those + listed in `non_masked_addresses`). If a PEP number (`pepno`) is given, + return a reference including a default email subject. + """ + if ref.hasattr('refuri') and ref['refuri'].startswith('mailto:'): + if ref['refuri'][8:] in non_masked_addresses: + replacement = ref[0] + else: + replacement_text = ref.astext().replace('@', ' at ') + replacement = nodes.raw('', replacement_text, format='html') + if pepno is None: + return replacement + else: + ref['refuri'] += '?subject=PEP%%20%s' % pepno + ref[:] = [replacement] + return ref + else: + return ref |