25 |
|
|
26 |
__docformat__ = 'reStructuredText' |
__docformat__ = 'reStructuredText' |
27 |
|
|
|
import docutils.transforms.universal, docutils.nodes |
|
|
|
|
28 |
# Replacing existing: Avoiding "unknown target" warnings with latex writer |
# Replacing existing: Avoiding "unknown target" warnings with latex writer |
29 |
# ***ugly*** |
# ***ugly*** |
30 |
|
import docutils.transforms.universal, docutils.nodes |
31 |
class FinalCheckVisitor(docutils.transforms.universal.FinalCheckVisitor): |
class FinalCheckVisitor(docutils.transforms.universal.FinalCheckVisitor): |
32 |
def visit_citation_reference(self, node): |
def visit_citation_reference(self, node): |
33 |
if node.resolved or not node.hasattr('refname'): |
if node.resolved or not node.hasattr('refname'): |
69 |
## self.document.ids[id].referenced = 1 |
## self.document.ids[id].referenced = 1 |
70 |
## node.resolved = 1 |
## node.resolved = 1 |
71 |
docutils.transforms.universal.FinalCheckVisitor = FinalCheckVisitor |
docutils.transforms.universal.FinalCheckVisitor = FinalCheckVisitor |
72 |
|
|
73 |
|
import time |
74 |
|
from docutils import nodes, utils, languages |
75 |
|
def generate_footer(self): |
76 |
|
# @@@ Text is hard-coded for now. |
77 |
|
# Should be made dynamic (language-dependent). |
78 |
|
settings = self.document.settings |
79 |
|
lcode = settings.language_code |
80 |
|
language = languages.get_language(lcode) |
81 |
|
if settings.generator or settings.datestamp or settings.source_link \ |
82 |
|
or settings.source_url: |
83 |
|
text = [] |
84 |
|
if settings.source_link and settings._source \ |
85 |
|
or settings.source_url: |
86 |
|
if settings.source_url: |
87 |
|
source = settings.source_url |
88 |
|
else: |
89 |
|
source = utils.relative_path(settings._destination, |
90 |
|
settings._source) |
91 |
|
try: label = language.labels['viewdocumentsource'] |
92 |
|
except KeyError: label = 'View document source' |
93 |
|
text.extend([ |
94 |
|
nodes.reference('', label, refuri=source), nodes.Text('.\n')]) |
95 |
|
if settings.datestamp: |
96 |
|
datestamp = time.strftime(settings.datestamp, time.gmtime()) |
97 |
|
try: label = language.labels['generatedon'] |
98 |
|
except KeyError: label = 'Generated on' |
99 |
|
text.append(nodes.Text(label+': ' + datestamp + '.\n')) |
100 |
|
if settings.generator: |
101 |
|
try: label = language.labels['generatedby'] |
102 |
|
except KeyError: label = 'Generated by' |
103 |
|
try: label2 = language.labels['from'] |
104 |
|
except KeyError: label2 = 'from' |
105 |
|
try: label3 = language.labels['source'] |
106 |
|
except KeyError: label3 = 'source' |
107 |
|
text.extend([ |
108 |
|
nodes.Text(label+' '), |
109 |
|
nodes.reference('', 'Docutils', refuri= |
110 |
|
'http://docutils.sourceforge.net/'), |
111 |
|
nodes.Text(' '+label2+' '), |
112 |
|
nodes.reference('', 'reStructuredText', refuri='http://' |
113 |
|
'docutils.sourceforge.net/rst.html'), |
114 |
|
nodes.Text(' '+label3+'.\n')]) |
115 |
|
footer = nodes.footer() |
116 |
|
footer += nodes.paragraph('', '', *text) |
117 |
|
return footer |
118 |
|
else: |
119 |
|
return None |
120 |
|
docutils.transforms.universal.Decorations.generate_footer = generate_footer |