summaryrefslogtreecommitdiffstats
path: root/common/sphinxcontrib/bibtex/transforms.py
diff options
context:
space:
mode:
Diffstat (limited to 'common/sphinxcontrib/bibtex/transforms.py')
-rw-r--r--common/sphinxcontrib/bibtex/transforms.py127
1 files changed, 0 insertions, 127 deletions
diff --git a/common/sphinxcontrib/bibtex/transforms.py b/common/sphinxcontrib/bibtex/transforms.py
deleted file mode 100644
index 8e4cdcb..0000000
--- a/common/sphinxcontrib/bibtex/transforms.py
+++ /dev/null
@@ -1,127 +0,0 @@
-"""
- New Doctree Transforms
- ~~~~~~~~~~~~~~~~~~~~~~
-
- .. autoclass:: BibliographyTransform
- :show-inheritance:
-
- .. autoattribute:: default_priority
- .. automethod:: apply
-
- .. autofunction:: node_text_transform
-
- .. autofunction:: transform_curly_bracket_strip
-
- .. autofunction:: transform_url_command
-"""
-
-import docutils.nodes
-import docutils.transforms
-
-from pybtex.plugin import find_plugin
-
-from sphinxcontrib.bibtex.nodes import bibliography
-
-
-def node_text_transform(node, transform):
- """Apply transformation to all Text nodes within node."""
- for child in node.children:
- if isinstance(child, docutils.nodes.Text):
- node.replace(child, transform(child))
- else:
- node_text_transform(child, transform)
-
-
-def transform_curly_bracket_strip(textnode):
- """Strip curly brackets from text."""
- text = textnode.astext()
- if '{' in text or '}' in text:
- text = text.replace('{', '').replace('}', '')
- return docutils.nodes.Text(text)
- else:
- return textnode
-
-
-def transform_url_command(textnode):
- """Convert '\\\\url{...}' into a proper docutils hyperlink."""
- text = textnode.astext()
- if '\\url' in text:
- text1, _, text = text.partition('\\url')
- text2, _, text3 = text.partition('}')
- text2 = text2.lstrip(' {')
- ref = docutils.nodes.reference(refuri=text2)
- ref += docutils.nodes.Text(text2)
- node = docutils.nodes.inline()
- node += transform_url_command(docutils.nodes.Text(text1))
- node += ref
- node += transform_url_command(docutils.nodes.Text(text3))
- return node
- else:
- return textnode
-
-
-class BibliographyTransform(docutils.transforms.Transform):
-
- """A docutils transform to generate citation entries for
- bibliography nodes.
- """
-
- # transform must be applied before references are resolved
- default_priority = 10
- """Priority of the transform. See
- http://docutils.sourceforge.net/docs/ref/transforms.html
- """
-
- def apply(self):
- """Transform each
- :class:`~sphinxcontrib.bibtex.nodes.bibliography` node into a
- list of citations.
- """
- env = self.document.settings.env
- docname = env.docname
- for bibnode in self.document.traverse(bibliography):
- id_ = bibnode['ids'][0]
- bibcache = env.bibtex_cache.get_bibliography_cache(
- docname=docname, id_=id_)
- entries = env.bibtex_cache.get_bibliography_entries(
- docname=docname, id_=id_, warn=env.app.warn)
- # locate and instantiate style and backend plugins
- style = find_plugin('pybtex.style.formatting', bibcache.style)()
- backend = find_plugin('pybtex.backends', 'docutils')()
- # create citation nodes for all references
- if bibcache.list_ == "enumerated":
- nodes = docutils.nodes.enumerated_list()
- nodes['enumtype'] = bibcache.enumtype
- if bibcache.start >= 1:
- nodes['start'] = bibcache.start
- env.bibtex_cache.set_enum_count(
- env.docname, bibcache.start)
- else:
- nodes['start'] = env.bibtex_cache.get_enum_count(
- env.docname)
- elif bibcache.list_ == "bullet":
- nodes = docutils.nodes.bullet_list()
- else: # "citation"
- nodes = docutils.nodes.paragraph()
- # remind: style.format_entries modifies entries in unpickable way
- for entry in style.format_entries(entries):
- if bibcache.list_ in ["enumerated", "bullet"]:
- citation = docutils.nodes.list_item()
- citation += backend.paragraph(entry)
- else: # "citation"
- citation = backend.citation(entry, self.document)
- # backend.citation(...) uses entry.key as citation label
- # we change it to entry.label later onwards
- # but we must note the entry.label now;
- # at this point, we also already prefix the label
- key = citation[0].astext()
- bibcache.labels[key] = bibcache.labelprefix + entry.label
- node_text_transform(citation, transform_url_command)
- if bibcache.curly_bracket_strip:
- node_text_transform(
- citation,
- transform_curly_bracket_strip)
- nodes += citation
- if bibcache.list_ == "enumerated":
- env.bibtex_cache.inc_enum_count(env.docname)
- bibnode.replace_self(nodes)