Update of /cvsroot/docstring/dps/dps/transforms
In directory usw-pr-cvs1:/tmp/cvs-serv9233/dps/dps/transforms
Modified Files:
references.py
Log Message:
- Added support for symbolic footnotes and mixed
manual/auto-numbered footnotes.
Index: references.py
===================================================================
RCS file: /cvsroot/docstring/dps/dps/transforms/references.py,v
retrieving revision 1.7
retrieving revision 1.8
diff -C2 -d -r1.7 -r1.8
*** references.py 22 Feb 2002 02:11:24 -0000 1.7
--- references.py 7 Mar 2002 04:01:40 -0000 1.8
***************
*** 366,369 ****
--- 366,386 ----
"""Keep track of unlabeled autonumbered footnotes."""
+ symbols = [
+ # The first six entries below are from section 12.51 of
+ # The Chicago Manual of Style, 14th edition.
+ '*', # asterisk/star
+ u'\u2020', # dagger †
+ u'\u2021', # double dagger ‡
+ u'\u00A7', # section mark §
+ # (Should be parallels; perhaps u'\u2016' ‖? Not in HTML.)
+ u'\u00B6', # paragraph mark (pilcrow) ¶
+ '#', # number sign
+ # The entries below were chosen arbitrarily.
+ u'\u2660', # spade suit ♠
+ u'\u2663', # club suit ♣
+ u'\u2665', # heart suit ♥
+ u'\u2666', # diamond suit ♦
+ ]
+
def transform(self, doctree):
self.setup_transform(doctree)
***************
*** 372,375 ****
--- 389,393 ----
self.number_footnotes()
self.number_footnote_references(startnum)
+ self.symbolize_footnotes()
def number_footnotes(self):
***************
*** 381,386 ****
"""
for footnote in self.doctree.autofootnotes:
! label = str(self.doctree.autofootnote_start)
! self.doctree.autofootnote_start += 1
footnote.insert(0, nodes.label('', label))
if footnote.hasattr('dupname'):
--- 399,407 ----
"""
for footnote in self.doctree.autofootnotes:
! while 1:
! label = str(self.doctree.autofootnote_start)
! self.doctree.autofootnote_start += 1
! if not self.doctree.explicit_targets.has_key(label):
! break
footnote.insert(0, nodes.label('', label))
if footnote.hasattr('dupname'):
***************
*** 411,418 ****
--- 432,473 ----
% len(self.autofootnote_labels))
self.doctree.messages += msg
+ for ref in self.doctree.autofootnote_refs[i:]:
+ if not (ref.resolved or ref.hasattr('refname')):
+ ref.parent.replace(
+ ref, nodes.problematic(ref.rawsource,
+ ref.rawsource))
break
ref.resolved = 1
i += 1
+ def symbolize_footnotes(self):
+ """Add symbols indexes to "[*]"-style footnotes and references."""
+ labels = []
+ for footnote in self.doctree.symbol_footnotes:
+ reps, index = divmod(self.doctree.symbol_footnote_start,
+ len(self.symbols))
+ labeltext = self.symbols[index] * (reps + 1)
+ labels.append(labeltext)
+ footnote.insert(0, nodes.label('', labeltext))
+ self.doctree.symbol_footnote_start += 1
+ self.doctree.set_id(footnote)
+ i = 0
+ for ref in self.doctree.symbol_footnote_refs:
+ try:
+ ref += nodes.Text(labels[i])
+ ref['refid'] = self.doctree.symbol_footnotes[i]['id']
+ except IndexError:
+ msg = self.doctree.reporter.error(
+ 'Too many symbol footnote references: only %s '
+ 'corresponding footnotes available.' % len(labels))
+ self.doctree.messages += msg
+ for ref in self.doctree.symbol_footnote_refs[i:]:
+ if not (ref.resolved or ref.hasattr('refid')):
+ ref.parent.replace(
+ ref, nodes.problematic(ref.rawsource,
+ ref.rawsource))
+ break
+ ref.resolved = 1
+ i += 1
class Substitutions(Transform):
|