From 913e7e2cbd89dee2e8ba5fccca1e3ed774577911 Mon Sep 17 00:00:00 2001 From: goodger Date: Sun, 5 May 2002 15:26:53 +0000 Subject: Transforms for PEP processing. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@78 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 99 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 docutils/transforms/peps.py (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py new file mode 100644 index 000000000..d3dca5b0e --- /dev/null +++ b/docutils/transforms/peps.py @@ -0,0 +1,99 @@ +#! /usr/bin/env python +""" +:Author: David Goodger +:Contact: goodger@users.sourceforge.net +:Revision: $Revision$ +:Date: $Date$ +:Copyright: This module has been placed in the public domain. + +Transforms for PEP processing. + +- `Headers`: Used to transform a PEP's initial RFC-2822 header. It remains a + field list, but some entries get processed. +""" + +__docformat__ = 'reStructuredText' + +import sys, os, re, time +from docutils import nodes, utils, ApplicationError, DataError +from docutils.transforms import Transform, TransformError +import mypdb as pdb + + +class Headers(Transform): + + """ + """ + + pep_cvs_url = ('http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/' + 'python/nondist/peps/pep-%04d.txt') + rcs_keyword_substitutions = ( + (re.compile(r'\$' r'RCSfile: (.+),v \$$', re.IGNORECASE), r'\1'), + (re.compile(r'\$[a-zA-Z]+: (.+) \$$'), r'\1'),) + + def transform(self): + if not len(self.document): + raise DataError('Document tree is empty.') + header = self.document[0] + if not isinstance(header, nodes.field_list) or \ + header.get('class') != 'rfc2822': + raise DataError('Document does not begin with an RFC-2822 ' + 'header; it is not a PEP.') + pep = title = None + #pdb.set_trace() + for field in header: + if field[0].astext().lower() == 'pep': # should be the first field + pep = int(field[1].astext()) + break + if pep is None: + raise DataError('Document does not contain an RFC-2822 "PEP" ' + 'header.') + for field in header: + name = field[0].astext().lower() + body = field[1] + print >>sys.stderr, 'name=%s, body=%s' % (name, body.astext()) ; sys.stderr.flush() + if len(body) > 1: + raise DataError('PEP header field body contains multiple ' + 'elements:\n%s' % field.pformat(level=1)) + elif len(body): + if not isinstance(body[0], nodes.paragraph): + raise DataError('PEP header field body may only contain ' + 'a single paragraph:\n%s' + % field.pformat(level=1)) + elif name == 'last-modified': + date = time.strftime( + '%d-%b-%Y', + time.localtime(os.stat(self.document['source'])[8])) + body += nodes.paragraph() + uri = self.pep_cvs_url % int(pep) + body[0][:] = [nodes.reference('', date, refuri=uri)] + else: + continue + para = body[0] + if name == 'title': + title = body.astext() + # @@@ Insert a "pending" element here, since we don't really want a separate document title? + elif name in ('author', 'discussions-to'): + for node in para: + if isinstance(node, nodes.reference) \ + and node.has_key('refuri') \ + and node['refuri'][:7] == 'mailto:': + node['refuri'] += '?subject=PEP%%20%s' % pep + elif name in ('replaces', 'replaced-by'): + newbody = [] + space = nodes.Text(' ') + for refpep in body.astext().split(): + pepno = int(refpep) + newbody.append(nodes.reference( + refpep, refpep, refuri='pep-%04d.html' % pepno)) + newbody.append(space) + para[:] = newbody[:-1] # drop trailing space + elif name == 'last-modified': + #pdb.set_trace() + utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) + date = para.astext() + uri = self.pep_cvs_url % int(pep) + para[:] = [nodes.reference('', date, refuri=uri)] + elif name == 'version' and len(body): + utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) + print >>sys.stderr, 'name=%s, body=%s' % (name, body.astext()) ; sys.stderr.flush() -- cgit v1.2.1 From e46540a319e09246ce45b26776e3b1408d04a7b4 Mon Sep 17 00:00:00 2001 From: goodger Date: Sun, 5 May 2002 16:18:00 +0000 Subject: removed some debugging code git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@96 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index d3dca5b0e..ba311d488 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -17,7 +17,6 @@ __docformat__ = 'reStructuredText' import sys, os, re, time from docutils import nodes, utils, ApplicationError, DataError from docutils.transforms import Transform, TransformError -import mypdb as pdb class Headers(Transform): @@ -40,7 +39,6 @@ class Headers(Transform): raise DataError('Document does not begin with an RFC-2822 ' 'header; it is not a PEP.') pep = title = None - #pdb.set_trace() for field in header: if field[0].astext().lower() == 'pep': # should be the first field pep = int(field[1].astext()) @@ -51,7 +49,6 @@ class Headers(Transform): for field in header: name = field[0].astext().lower() body = field[1] - print >>sys.stderr, 'name=%s, body=%s' % (name, body.astext()) ; sys.stderr.flush() if len(body) > 1: raise DataError('PEP header field body contains multiple ' 'elements:\n%s' % field.pformat(level=1)) @@ -72,7 +69,8 @@ class Headers(Transform): para = body[0] if name == 'title': title = body.astext() - # @@@ Insert a "pending" element here, since we don't really want a separate document title? + # @@@ Insert a "pending" element here, since we don't really + # want a separate document title? elif name in ('author', 'discussions-to'): for node in para: if isinstance(node, nodes.reference) \ @@ -89,11 +87,9 @@ class Headers(Transform): newbody.append(space) para[:] = newbody[:-1] # drop trailing space elif name == 'last-modified': - #pdb.set_trace() utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) date = para.astext() uri = self.pep_cvs_url % int(pep) para[:] = [nodes.reference('', date, refuri=uri)] elif name == 'version' and len(body): utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) - print >>sys.stderr, 'name=%s, body=%s' % (name, body.astext()) ; sys.stderr.flush() -- cgit v1.2.1 From 6e398dc95eb60a5b81047b899954503ce780f1db Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 30 May 2002 02:30:40 +0000 Subject: Cleaned up imports git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@160 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index ba311d488..2c51fa861 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -14,8 +14,12 @@ Transforms for PEP processing. __docformat__ = 'reStructuredText' -import sys, os, re, time -from docutils import nodes, utils, ApplicationError, DataError +import sys +import os +import re +import time +from docutils import nodes, utils +from docutils import ApplicationError, DataError from docutils.transforms import Transform, TransformError -- cgit v1.2.1 From 36e8c4fdb6ac9dc864c9afea3486f259b55b1137 Mon Sep 17 00:00:00 2001 From: goodger Date: Sat, 13 Jul 2002 02:59:13 +0000 Subject: docstring git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@273 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 1 + 1 file changed, 1 insertion(+) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 2c51fa861..70775c930 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -26,6 +26,7 @@ from docutils.transforms import Transform, TransformError class Headers(Transform): """ + Process fields in a PEP's initial RFC-2822 header. """ pep_cvs_url = ('http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/' -- cgit v1.2.1 From 6d6d20b280a38ca0d7b20b018d09c8bd3402758a Mon Sep 17 00:00:00 2001 From: goodger Date: Sun, 14 Jul 2002 02:47:41 +0000 Subject: Added a transform to insert a table of contents. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@279 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 70775c930..d33e0989d 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -21,6 +21,7 @@ import time from docutils import nodes, utils from docutils import ApplicationError, DataError from docutils.transforms import Transform, TransformError +from docutils.transforms import parts class Headers(Transform): @@ -98,3 +99,17 @@ class Headers(Transform): para[:] = [nodes.reference('', date, refuri=uri)] elif name == 'version' and len(body): utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) + + +class Contents(Transform): + + """ + Insert a table of contents into the document after the RFC 2822 header. + """ + + + def transform(self): + pending = nodes.pending(parts.Contents, 'last reader', + {'title': None}) + self.document.insert(1, pending) + self.document.note_pending(pending) -- cgit v1.2.1 From 356d554c756d9b37284f6a1667995962f4ec2c67 Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 18 Jul 2002 00:57:31 +0000 Subject: - Added ``Contents`` to insert TOC. - Added ``PEPZero`` for PEP 0 special processing. - Masked email address of "Author" field. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@302 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 61 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 7 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index d33e0989d..0df6fa246 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -10,6 +10,8 @@ Transforms for PEP processing. - `Headers`: Used to transform a PEP's initial RFC-2822 header. It remains a field list, but some entries get processed. +- `Contents`: Auto-inserts a table of contents. +- `PEPZero`: Special processing for PEP 0. """ __docformat__ = 'reStructuredText' @@ -52,6 +54,11 @@ class Headers(Transform): if pep is None: raise DataError('Document does not contain an RFC-2822 "PEP" ' 'header.') + if pep == 0: + # Special processing for PEP 0. + pending = nodes.pending(PEPZero, 'last reader', {}) + self.document.insert(1, pending) + self.document.note_pending(pending) for field in header: name = field[0].astext().lower() body = field[1] @@ -73,15 +80,18 @@ class Headers(Transform): else: continue para = body[0] - if name == 'title': - title = body.astext() - # @@@ Insert a "pending" element here, since we don't really - # want a separate document title? - elif name in ('author', 'discussions-to'): + if name == 'author': for node in para: if isinstance(node, nodes.reference) \ - and node.has_key('refuri') \ - and node['refuri'][:7] == 'mailto:': + 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 = [] @@ -113,3 +123,40 @@ class Contents(Transform): {'title': None}) self.document.insert(1, pending) self.document.note_pending(pending) + + +class PEPZero(Transform): + + """ + Special processing for PEP 0. + """ + + def transform(self): + visitor = EmailMasker(self.document) + self.document.walk(visitor) + self.startnode.parent.remove(self.startnode) + + +class EmailMasker(nodes.SparseNodeVisitor): + + """ + For all email-address references such as "user@host", mask the address as + "user at host" (text) to thwart simple email address harvesters. + """ + + non_masked_addresses = ('peps@python.org', + 'python-list@python.org', + 'python-dev@python.org') + + def unknown_visit(self, node): + pass + + 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): + if node.hasattr('class') and node['class'] == 'rfc2822': + raise nodes.SkipNode -- cgit v1.2.1 From 0de4a32f1c295a4a63e3e24905eb8a4c654b4f24 Mon Sep 17 00:00:00 2001 From: goodger Date: Fri, 19 Jul 2002 02:30:30 +0000 Subject: Changed ``EmailMasker`` to ``PEPZeroSpecial``, and added PEP table processing. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@323 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 48 +++++++++++++++++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 6 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 0df6fa246..42db98177 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -32,6 +32,7 @@ class Headers(Transform): Process fields in a PEP's initial RFC-2822 header. """ + pep_url = 'pep-%04d.html' pep_cvs_url = ('http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/' 'python/nondist/peps/pep-%04d.txt') rcs_keyword_substitutions = ( @@ -65,7 +66,7 @@ class Headers(Transform): if len(body) > 1: raise DataError('PEP header field body contains multiple ' 'elements:\n%s' % field.pformat(level=1)) - elif len(body): + elif len(body) == 1: if not isinstance(body[0], nodes.paragraph): raise DataError('PEP header field body may only contain ' 'a single paragraph:\n%s' @@ -78,6 +79,7 @@ class Headers(Transform): uri = self.pep_cvs_url % int(pep) body[0][:] = [nodes.reference('', date, refuri=uri)] else: + # empty continue para = body[0] if name == 'author': @@ -99,7 +101,7 @@ class Headers(Transform): for refpep in body.astext().split(): pepno = int(refpep) newbody.append(nodes.reference( - refpep, refpep, refuri='pep-%04d.html' % pepno)) + refpep, refpep, refuri=self.pep_url % pepno)) newbody.append(space) para[:] = newbody[:-1] # drop trailing space elif name == 'last-modified': @@ -132,21 +134,29 @@ class PEPZero(Transform): """ def transform(self): - visitor = EmailMasker(self.document) + visitor = PEPZeroSpecial(self.document) self.document.walk(visitor) self.startnode.parent.remove(self.startnode) -class EmailMasker(nodes.SparseNodeVisitor): +class PEPZeroSpecial(nodes.SparseNodeVisitor): """ - For all email-address references such as "user@host", mask the address as - "user at host" (text) to thwart simple email address harvesters. + 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 + themselves. """ non_masked_addresses = ('peps@python.org', 'python-list@python.org', 'python-dev@python.org') + pep_url = Headers.pep_url def unknown_visit(self, node): pass @@ -160,3 +170,29 @@ class EmailMasker(nodes.SparseNodeVisitor): def visit_field_list(self, node): if node.hasattr('class') and node['class'] == 'rfc2822': raise nodes.SkipNode + + def visit_tgroup(self, node): + if node['cols'] != 4: + raise nodes.SkipNode + self.entry = 0 + + def visit_colspec(self, node): + self.entry += 1 + if self.entry == 2: + node['class'] = 'num' + + def visit_row(self, node): + self.entry = 0 + + def visit_entry(self, node): + self.entry += 1 + if self.entry == 2 and len(node) == 1: + p = node[0] + if isinstance(p, nodes.paragraph) and len(p) == 1: + text = p.astext() + try: + pep = int(text) + ref = self.pep_url % pep + p[0] = nodes.reference(text, text, refuri=ref) + except ValueError: + pass -- cgit v1.2.1 From 8c5bac9a5e09bef0828fab7620bee1faa2fd157b Mon Sep 17 00:00:00 2001 From: goodger Date: Fri, 19 Jul 2002 03:08:44 +0000 Subject: Fixed bug in ``PEPZeroSpecial``. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@329 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 42db98177..5a50bc57c 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -172,13 +172,12 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): raise nodes.SkipNode def visit_tgroup(self, node): - if node['cols'] != 4: - raise nodes.SkipNode + self.pep_table = node['cols'] == 4 self.entry = 0 def visit_colspec(self, node): self.entry += 1 - if self.entry == 2: + if self.pep_table and self.entry == 2: node['class'] = 'num' def visit_row(self, node): @@ -186,7 +185,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): def visit_entry(self, node): self.entry += 1 - if self.entry == 2 and len(node) == 1: + if self.pep_table and self.entry == 2 and len(node) == 1: p = node[0] if isinstance(p, nodes.paragraph) and len(p) == 1: text = p.astext() -- cgit v1.2.1 From a2cb2365b8cb48ba8223356bacde635de0109c5e Mon Sep 17 00:00:00 2001 From: goodger Date: Tue, 23 Jul 2002 02:34:21 +0000 Subject: Mozilla workaround. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@348 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 1 + 1 file changed, 1 insertion(+) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 5a50bc57c..618061649 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -186,6 +186,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): def visit_entry(self, node): self.entry += 1 if self.pep_table and self.entry == 2 and len(node) == 1: + node['class'] = 'num' p = node[0] if isinstance(p, nodes.paragraph) and len(p) == 1: text = p.astext() -- cgit v1.2.1 From 88a5dd42dc5c2a6b77c637700f963e2624932529 Mon Sep 17 00:00:00 2001 From: goodger Date: Mon, 5 Aug 2002 16:50:17 +0000 Subject: Added ``mask_email()`` function, updating to pep2html.py's functionality. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@456 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 57 +++++++++++++++++++++++++++++---------------- 1 file changed, 37 insertions(+), 20 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 618061649..ec8cc91fe 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -84,17 +84,12 @@ class Headers(Transform): para = body[0] 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)) + 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) \ - and node.has_key('refuri') \ - and node['refuri'].startswith('mailto:'): - node['refuri'] += '?subject=PEP%%20%s' % pep + if isinstance(node, nodes.reference): + node.parent.replace(node, mask_email(node, pep)) elif name in ('replaces', 'replaced-by'): newbody = [] space = nodes.Text(' ') @@ -144,28 +139,19 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): """ 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). + - Mask email addresses. - Link PEP numbers in the second column of 4-column tables to the PEPs themselves. """ - non_masked_addresses = ('peps@python.org', - 'python-list@python.org', - 'python-dev@python.org') pep_url = Headers.pep_url def unknown_visit(self, node): pass 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)) + node.parent.replace(node, mask_email(node)) def visit_field_list(self, node): if node.hasattr('class') and node['class'] == 'rfc2822': @@ -196,3 +182,34 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): p[0] = nodes.reference(text, text, refuri=ref) except ValueError: pass + + +non_masked_addresses = ('peps@python.org', + 'python-list@python.org', + 'python-dev@python.org') + +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 -- cgit v1.2.1 From 1ca64904a318386d094f5e14b78e4da1db2944ab Mon Sep 17 00:00:00 2001 From: goodger Date: Wed, 7 Aug 2002 01:08:29 +0000 Subject: Linked "Content-Type: text/x-rst" to PEP 12. Added support for "Requires:" header. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@465 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index ec8cc91fe..edc9ed382 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -90,10 +90,10 @@ class Headers(Transform): for node in para: if isinstance(node, nodes.reference): node.parent.replace(node, mask_email(node, pep)) - elif name in ('replaces', 'replaced-by'): + elif name in ('replaces', 'replaced-by', 'requires'): newbody = [] space = nodes.Text(' ') - for refpep in body.astext().split(): + for refpep in re.split(',?\s+', body.astext()): pepno = int(refpep) newbody.append(nodes.reference( refpep, refpep, refuri=self.pep_url % pepno)) @@ -104,6 +104,10 @@ class Headers(Transform): date = para.astext() uri = self.pep_cvs_url % int(pep) para[:] = [nodes.reference('', date, refuri=uri)] + elif name == 'content-type': + pep_type = para.astext() + uri = self.pep_url % 12 + para[:] = [nodes.reference('', pep_type, refuri=uri)] elif name == 'version' and len(body): utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) -- cgit v1.2.1 From 9fe2dbf1beb29ef9380782bf15f6176c07759fff Mon Sep 17 00:00:00 2001 From: goodger Date: Tue, 13 Aug 2002 03:39:27 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@516 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index edc9ed382..bf04d5868 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -120,7 +120,7 @@ class Contents(Transform): def transform(self): - pending = nodes.pending(parts.Contents, 'last reader', + pending = nodes.pending(parts.Contents, 'first writer', {'title': None}) self.document.insert(1, pending) self.document.note_pending(pending) -- cgit v1.2.1 From afc01457d52d9e450abdf34f7f92a3ceb5c79e12 Mon Sep 17 00:00:00 2001 From: goodger Date: Wed, 14 Aug 2002 02:41:29 +0000 Subject: Added the ``TargetNotes`` PEP-specific transform. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@519 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 52 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 8 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index bf04d5868..8c188b443 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -23,7 +23,7 @@ import time from docutils import nodes, utils from docutils import ApplicationError, DataError from docutils.transforms import Transform, TransformError -from docutils.transforms import parts +from docutils.transforms import parts, references class Headers(Transform): @@ -50,8 +50,14 @@ class Headers(Transform): pep = title = None for field in header: if field[0].astext().lower() == 'pep': # should be the first field - pep = int(field[1].astext()) - break + value = field[1].astext() + try: + pep = int(value) + except ValueError: + raise DataError('"PEP" header must contain an integer; ' + '"%s" is an invalid value.' % value) + else: + break if pep is None: raise DataError('Document does not contain an RFC-2822 "PEP" ' 'header.') @@ -76,7 +82,7 @@ class Headers(Transform): '%d-%b-%Y', time.localtime(os.stat(self.document['source'])[8])) body += nodes.paragraph() - uri = self.pep_cvs_url % int(pep) + uri = self.pep_cvs_url % pep body[0][:] = [nodes.reference('', date, refuri=uri)] else: # empty @@ -102,7 +108,7 @@ class Headers(Transform): elif name == 'last-modified': utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) date = para.astext() - uri = self.pep_cvs_url % int(pep) + uri = self.pep_cvs_url % pep para[:] = [nodes.reference('', date, refuri=uri)] elif name == 'content-type': pep_type = para.astext() @@ -115,10 +121,10 @@ class Headers(Transform): class Contents(Transform): """ - Insert a table of contents into the document after the RFC 2822 header. + Insert a table of contents transform placeholder into the document after + the RFC 2822 header. """ - def transform(self): pending = nodes.pending(parts.Contents, 'first writer', {'title': None}) @@ -126,6 +132,36 @@ class Contents(Transform): self.document.note_pending(pending) +class TargetNotes(Transform): + + """ + Locate the "References" section, insert a placeholder for an external + target footnote insertion transform at the end, and run the transform. + """ + + def transform(self): + doc = self.document + i = len(doc) - 1 + refsect = copyright = None + while i >= 0 and isinstance(doc[i], nodes.section): + if 'references' in doc[i][0].astext().lower().split(): + refsect = doc[i] + break + if 'copyright' in doc[i][0].astext().lower().split(): + copyright = i + i -= 1 + if not refsect: + refsect = nodes.section() + refsect += nodes.title('', 'References') + if copyright: + doc.insert(copyright, refsect) + else: + doc.append(refsect) + pending = nodes.pending(references.TargetNotes, 'immediate', {}) + refsect.append(pending) + pending.transform(doc, self, pending).transform() + + class PEPZero(Transform): """ @@ -142,7 +178,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): """ 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 -- cgit v1.2.1 From 58036bb54a184a823272be8ddf5f52c619d4f83c Mon Sep 17 00:00:00 2001 From: goodger Date: Tue, 8 Oct 2002 01:35:57 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@774 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 8c188b443..9ef0e9b85 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -1,11 +1,10 @@ -#! /usr/bin/env python -""" -:Author: David Goodger -:Contact: goodger@users.sourceforge.net -:Revision: $Revision$ -:Date: $Date$ -:Copyright: This module has been placed in the public domain. +# Author: David Goodger +# Contact: goodger@users.sourceforge.net +# Revision: $Revision$ +# Date: $Date$ +# Copyright: This module has been placed in the public domain. +""" Transforms for PEP processing. - `Headers`: Used to transform a PEP's initial RFC-2822 header. It remains a -- cgit v1.2.1 From 5ce44d6a3d7af489b2440604fed7ecdaa6999de2 Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 17 Oct 2002 01:32:52 +0000 Subject: Added support for pre-acceptance PEPs (no PEP number yet). git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@807 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 9ef0e9b85..f7cea6953 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -52,11 +52,23 @@ class Headers(Transform): value = field[1].astext() try: pep = int(value) + cvs_url = self.pep_cvs_url % pep except ValueError: - raise DataError('"PEP" header must contain an integer; ' - '"%s" is an invalid value.' % value) - else: - break + pep = value + cvs_url = None + msg = self.document.reporter.warning( + '"PEP" header must contain an integer; "%s" is an ' + 'invalid value.' % pep, base_node=field) + msgid = self.document.set_id(msg) + prb = nodes.problematic(value, value or '(none)', + refid=msgid) + prbid = self.document.set_id(prb) + msg.add_backref(prbid) + if len(field[1]): + field[1][0][:] = [prb] + else: + field[1] += nodes.paragraph('', '', prb) + break if pep is None: raise DataError('Document does not contain an RFC-2822 "PEP" ' 'header.') @@ -80,9 +92,9 @@ class Headers(Transform): date = time.strftime( '%d-%b-%Y', time.localtime(os.stat(self.document['source'])[8])) - body += nodes.paragraph() - uri = self.pep_cvs_url % pep - body[0][:] = [nodes.reference('', date, refuri=uri)] + if cvs_url: + body += nodes.paragraph( + '', '', nodes.reference('', date, refuri=cvs_url)) else: # empty continue @@ -106,9 +118,9 @@ class Headers(Transform): para[:] = newbody[:-1] # drop trailing space elif name == 'last-modified': utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) - date = para.astext() - uri = self.pep_cvs_url % pep - para[:] = [nodes.reference('', date, refuri=uri)] + if cvs_url: + date = para.astext() + para[:] = [nodes.reference('', date, refuri=cvs_url)] elif name == 'content-type': pep_type = para.astext() uri = self.pep_url % 12 -- cgit v1.2.1 From afeedfb343c2904e9357997d2a50f8f3cabb2568 Mon Sep 17 00:00:00 2001 From: goodger Date: Fri, 18 Oct 2002 04:55:21 +0000 Subject: Refactored names (options -> settings; .transform() -> .apply(); etc.); updated. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@825 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index f7cea6953..91d59bf72 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -38,7 +38,7 @@ class Headers(Transform): (re.compile(r'\$' r'RCSfile: (.+),v \$$', re.IGNORECASE), r'\1'), (re.compile(r'\$[a-zA-Z]+: (.+) \$$'), r'\1'),) - def transform(self): + def apply(self): if not len(self.document): raise DataError('Document tree is empty.') header = self.document[0] @@ -136,7 +136,7 @@ class Contents(Transform): the RFC 2822 header. """ - def transform(self): + def apply(self): pending = nodes.pending(parts.Contents, 'first writer', {'title': None}) self.document.insert(1, pending) @@ -150,7 +150,7 @@ class TargetNotes(Transform): target footnote insertion transform at the end, and run the transform. """ - def transform(self): + def apply(self): doc = self.document i = len(doc) - 1 refsect = copyright = None @@ -170,7 +170,7 @@ class TargetNotes(Transform): doc.append(refsect) pending = nodes.pending(references.TargetNotes, 'immediate', {}) refsect.append(pending) - pending.transform(doc, self, pending).transform() + pending.transform(doc, self, pending).apply() class PEPZero(Transform): @@ -179,7 +179,7 @@ class PEPZero(Transform): Special processing for PEP 0. """ - def transform(self): + def apply(self): visitor = PEPZeroSpecial(self.document) self.document.walk(visitor) self.startnode.parent.remove(self.startnode) -- cgit v1.2.1 From 1ecb8a1bf993d41cb606a26ca5168809bd75412b Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 24 Oct 2002 00:51:10 +0000 Subject: Completed transform reform; updated. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@853 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 91d59bf72..db1cdf47f 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -31,6 +31,8 @@ class Headers(Transform): Process fields in a PEP's initial RFC-2822 header. """ + default_priority = 360 + pep_url = 'pep-%04d.html' pep_cvs_url = ('http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/python/' 'python/nondist/peps/pep-%04d.txt') @@ -74,7 +76,7 @@ class Headers(Transform): 'header.') if pep == 0: # Special processing for PEP 0. - pending = nodes.pending(PEPZero, 'last reader', {}) + pending = nodes.pending(PEPZero) self.document.insert(1, pending) self.document.note_pending(pending) for field in header: @@ -136,9 +138,10 @@ class Contents(Transform): the RFC 2822 header. """ + default_priority = 380 + def apply(self): - pending = nodes.pending(parts.Contents, 'first writer', - {'title': None}) + pending = nodes.pending(parts.Contents, {'title': None}) self.document.insert(1, pending) self.document.note_pending(pending) @@ -150,6 +153,8 @@ class TargetNotes(Transform): target footnote insertion transform at the end, and run the transform. """ + default_priority = 520 + def apply(self): doc = self.document i = len(doc) - 1 @@ -168,9 +173,9 @@ class TargetNotes(Transform): doc.insert(copyright, refsect) else: doc.append(refsect) - pending = nodes.pending(references.TargetNotes, 'immediate', {}) + pending = nodes.pending(references.TargetNotes) refsect.append(pending) - pending.transform(doc, self, pending).apply() + self.document.note_pending(pending, 0) class PEPZero(Transform): @@ -179,6 +184,8 @@ class PEPZero(Transform): Special processing for PEP 0. """ + default_priority =760 + def apply(self): visitor = PEPZeroSpecial(self.document) self.document.walk(visitor) -- cgit v1.2.1 From 35a1beda765cd44715a9ea7c4064d71b1abbcf1e Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 24 Oct 2002 23:33:52 +0000 Subject: minor updates & fixes git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@859 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index db1cdf47f..fe82175b8 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -160,18 +160,21 @@ class TargetNotes(Transform): i = len(doc) - 1 refsect = copyright = None while i >= 0 and isinstance(doc[i], nodes.section): - if 'references' in doc[i][0].astext().lower().split(): + title_words = doc[i][0].astext().lower().split() + if 'references' in title_words: refsect = doc[i] break - if 'copyright' in doc[i][0].astext().lower().split(): + elif 'copyright' in title_words: copyright = i i -= 1 if not refsect: refsect = nodes.section() refsect += nodes.title('', 'References') if copyright: + # Put the new "References" section before "Copyright": doc.insert(copyright, refsect) else: + # Put the new "References" section at end of doc: doc.append(refsect) pending = nodes.pending(references.TargetNotes) refsect.append(pending) -- cgit v1.2.1 From 67dfd81313b6286fc27502a78353ef445737e8a5 Mon Sep 17 00:00:00 2001 From: goodger Date: Sat, 16 Nov 2002 02:27:32 +0000 Subject: Fixed TargetNotes transform. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@955 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 1 + 1 file changed, 1 insertion(+) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index fe82175b8..67277a9cc 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -170,6 +170,7 @@ class TargetNotes(Transform): if not refsect: refsect = nodes.section() refsect += nodes.title('', 'References') + doc.set_id(refsect) if copyright: # Put the new "References" section before "Copyright": doc.insert(copyright, refsect) -- cgit v1.2.1 From 4ea8903f17cf86452afef915296820e8c7d8225f Mon Sep 17 00:00:00 2001 From: goodger Date: Thu, 21 Nov 2002 02:31:16 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@973 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 67277a9cc..9df903e67 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -150,7 +150,8 @@ class TargetNotes(Transform): """ Locate the "References" section, insert a placeholder for an external - target footnote insertion transform at the end, and run the transform. + target footnote insertion transform at the end, and schedule the + transform to run immediately. """ default_priority = 520 -- cgit v1.2.1 From 8fb2993c1845c8f2b68b150f14b99ca5035799e6 Mon Sep 17 00:00:00 2001 From: goodger Date: Sat, 7 Dec 2002 03:05:29 +0000 Subject: Added ``TargetNotes.cleanup_callback``. Some improvements to ``Headers``. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1003 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 9df903e67..9ae7fa80b 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -22,7 +22,7 @@ import time from docutils import nodes, utils from docutils import ApplicationError, DataError from docutils.transforms import Transform, TransformError -from docutils.transforms import parts, references +from docutils.transforms import parts, references, misc class Headers(Transform): @@ -42,13 +42,14 @@ class Headers(Transform): def apply(self): if not len(self.document): + # @@@ replace these DataErrors with proper system messages raise DataError('Document tree is empty.') header = self.document[0] if not isinstance(header, nodes.field_list) or \ header.get('class') != 'rfc2822': raise DataError('Document does not begin with an RFC-2822 ' 'header; it is not a PEP.') - pep = title = None + pep = None for field in header: if field[0].astext().lower() == 'pep': # should be the first field value = field[1].astext() @@ -79,6 +80,8 @@ class Headers(Transform): pending = nodes.pending(PEPZero) self.document.insert(1, pending) self.document.note_pending(pending) + if len(header) < 2 or header[1][0].astext().lower() != 'title': + raise DataError('No title!') for field in header: name = field[0].astext().lower() body = field[1] @@ -181,6 +184,19 @@ class TargetNotes(Transform): pending = nodes.pending(references.TargetNotes) refsect.append(pending) self.document.note_pending(pending, 0) + pending = nodes.pending(misc.CallBack, + details={'callback': self.cleanup_callback}) + refsect.append(pending) + self.document.note_pending(pending, 1) + + def cleanup_callback(self, pending): + """ + Remove an empty "References" section. + + Called after the `references.TargetNotes` transform is complete. + """ + if len(pending.parent) == 2: # and <pending> + pending.parent.parent.remove(pending.parent) class PEPZero(Transform): -- cgit v1.2.1 From 78e2be643c2cee112989c1675005fd4d4396ce32 Mon Sep 17 00:00:00 2001 From: goodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> Date: Fri, 23 Apr 2004 13:48:24 +0000 Subject: Updated for ToC changes (topic now inserted by directive, so follow suit here). Fixes SF bug 928482. git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@1986 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 9ae7fa80b..fdd750d0c 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -19,7 +19,7 @@ import sys import os import re import time -from docutils import nodes, utils +from docutils import nodes, utils, languages from docutils import ApplicationError, DataError from docutils.transforms import Transform, TransformError from docutils.transforms import parts, references, misc @@ -137,15 +137,24 @@ class Headers(Transform): class Contents(Transform): """ - Insert a table of contents transform placeholder into the document after - the RFC 2822 header. + Insert an empty table of contents topic and a transform placeholder into + the document after the RFC 2822 header. """ default_priority = 380 def apply(self): - pending = nodes.pending(parts.Contents, {'title': None}) - self.document.insert(1, pending) + language = languages.get_language(self.document.settings.language_code) + name = language.labels['contents'] + title = nodes.title('', name) + topic = nodes.topic('', title, CLASS='contents') + name = nodes.fully_normalize_name(name) + if not self.document.has_name(name): + topic['name'] = name + self.document.note_implicit_target(topic) + pending = nodes.pending(parts.Contents) + topic += pending + self.document.insert(1, topic) self.document.note_pending(pending) -- cgit v1.2.1 From d44851200e1a95811d32d00b9ff8e57e92d7fd26 Mon Sep 17 00:00:00 2001 From: goodger <goodger@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> Date: Wed, 16 Jun 2004 17:43:55 +0000 Subject: updated git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@2289 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index fdd750d0c..16260367a 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -118,7 +118,9 @@ class Headers(Transform): for refpep in re.split(',?\s+', body.astext()): pepno = int(refpep) newbody.append(nodes.reference( - refpep, refpep, refuri=self.pep_url % pepno)) + refpep, refpep, + refuri=(self.document.settings.pep_base_url + + self.pep_url % pepno))) newbody.append(space) para[:] = newbody[:-1] # drop trailing space elif name == 'last-modified': @@ -128,7 +130,7 @@ class Headers(Transform): para[:] = [nodes.reference('', date, refuri=cvs_url)] elif name == 'content-type': pep_type = para.astext() - uri = self.pep_url % 12 + uri = self.document.settings.pep_base_url + self.pep_url % 12 para[:] = [nodes.reference('', pep_type, refuri=uri)] elif name == 'version' and len(body): utils.clean_rcs_keywords(para, self.rcs_keyword_substitutions) @@ -266,7 +268,8 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): text = p.astext() try: pep = int(text) - ref = self.pep_url % pep + ref = (self.document.settings.pep_base_url + + self.pep_url % pep) p[0] = nodes.reference(text, text, refuri=ref) except ValueError: pass -- cgit v1.2.1 From 9dbc2adead008935245a396eab10bb7bcb11b226 Mon Sep 17 00:00:00 2001 From: wiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> Date: Sat, 26 Mar 2005 16:21:28 +0000 Subject: merged rev. 3094:3101 and 3102:HEAD from branches/multiple-ids to trunk git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@3129 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 16260367a..201ce314b 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -46,7 +46,7 @@ class Headers(Transform): raise DataError('Document tree is empty.') header = self.document[0] if not isinstance(header, nodes.field_list) or \ - header.get('class') != 'rfc2822': + 'rfc2822' not in header['classes']: raise DataError('Document does not begin with an RFC-2822 ' 'header; it is not a PEP.') pep = None @@ -149,10 +149,10 @@ class Contents(Transform): language = languages.get_language(self.document.settings.language_code) name = language.labels['contents'] title = nodes.title('', name) - topic = nodes.topic('', title, CLASS='contents') + topic = nodes.topic('', title, classes=['contents']) name = nodes.fully_normalize_name(name) if not self.document.has_name(name): - topic['name'] = name + topic['names'].append(name) self.document.note_implicit_target(topic) pending = nodes.pending(parts.Contents) topic += pending @@ -244,7 +244,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): node.parent.replace(node, mask_email(node)) def visit_field_list(self, node): - if node.hasattr('class') and node['class'] == 'rfc2822': + if 'rfc2822' in node['classes']: raise nodes.SkipNode def visit_tgroup(self, node): @@ -254,7 +254,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): def visit_colspec(self, node): self.entry += 1 if self.pep_table and self.entry == 2: - node['class'] = 'num' + node['classes'].append('num') def visit_row(self, node): self.entry = 0 @@ -262,7 +262,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): def visit_entry(self, node): self.entry += 1 if self.pep_table and self.entry == 2 and len(node) == 1: - node['class'] = 'num' + node['classes'].append('num') p = node[0] if isinstance(p, nodes.paragraph) and len(p) == 1: text = p.astext() -- cgit v1.2.1 From 469baf29f163924dca499b0591ca6f2addba6b35 Mon Sep 17 00:00:00 2001 From: wiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> Date: Sun, 11 Sep 2005 21:53:49 +0000 Subject: replaced node.parent.replace(node, new) constructs with node.substitute(new) git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@3870 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 201ce314b..96c265207 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -107,11 +107,11 @@ class Headers(Transform): if name == 'author': for node in para: if isinstance(node, nodes.reference): - node.parent.replace(node, mask_email(node)) + node.substitute(mask_email(node)) elif name == 'discussions-to': for node in para: if isinstance(node, nodes.reference): - node.parent.replace(node, mask_email(node, pep)) + node.substitute(mask_email(node, pep)) elif name in ('replaces', 'replaced-by', 'requires'): newbody = [] space = nodes.Text(' ') @@ -241,7 +241,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): pass def visit_reference(self, node): - node.parent.replace(node, mask_email(node)) + node.substitute(mask_email(node)) def visit_field_list(self, node): if 'rfc2822' in node['classes']: -- cgit v1.2.1 From 69fadff9ca4f067b3042b6383989ce638ff4d42d Mon Sep 17 00:00:00 2001 From: wiemann <wiemann@929543f6-e4f2-0310-98a6-ba3bd3dd1d04> Date: Mon, 26 Sep 2005 18:17:31 +0000 Subject: renamed Element.substitute to Element.replace_self git-svn-id: http://svn.code.sf.net/p/docutils/code/trunk/docutils@3909 929543f6-e4f2-0310-98a6-ba3bd3dd1d04 --- docutils/transforms/peps.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'docutils/transforms/peps.py') diff --git a/docutils/transforms/peps.py b/docutils/transforms/peps.py index 96c265207..edaba2557 100644 --- a/docutils/transforms/peps.py +++ b/docutils/transforms/peps.py @@ -107,11 +107,11 @@ class Headers(Transform): if name == 'author': for node in para: if isinstance(node, nodes.reference): - node.substitute(mask_email(node)) + node.replace_self(mask_email(node)) elif name == 'discussions-to': for node in para: if isinstance(node, nodes.reference): - node.substitute(mask_email(node, pep)) + node.replace_self(mask_email(node, pep)) elif name in ('replaces', 'replaced-by', 'requires'): newbody = [] space = nodes.Text(' ') @@ -241,7 +241,7 @@ class PEPZeroSpecial(nodes.SparseNodeVisitor): pass def visit_reference(self, node): - node.substitute(mask_email(node)) + node.replace_self(mask_email(node)) def visit_field_list(self, node): if 'rfc2822' in node['classes']: -- cgit v1.2.1