Source code for formatting.unsrtwithlinks
from pybtex.style.formatting.unsrt import Style as UnsrtStyle
from pybtex.style.template import field, sentence, href, join, optional, tag
from pybtex.style import FormattedEntry, FormattedBibliography
from pybtex.plugin import find_plugin
from plugin_data import plugin_data
from publi import group_entries_by_key
[docs]class Style(UnsrtStyle):
"""Style for appending links to html output."""
def __init__(self, label_style=None, name_style=None, sorting_style=None,
abbreviate_names=False, min_crossrefs=2, **kwargs):
sorting_style = 'year_author'
super().__init__(label_style=label_style, name_style=name_style,
sorting_style=sorting_style,
abbreviate_names=abbreviate_names,
min_crossrefs=min_crossrefs, **kwargs)
[docs] def format_title(self, e, which_field, as_sentence=True):
formatted_title = field(
which_field
)
if as_sentence:
return sentence(capfirst=False)[formatted_title]
else:
return formatted_title
[docs] def format_entries(self, entries):
"""Override for appending links before yielding ``FormattedEntries``.
:param entries: `BibliographyData` entries
:type entries: BibliographyData
"""
if 'groupby' in plugin_data:
sorter = plugin_data['groupby']
group_name_dict = plugin_data.get('mapping_%s' % sorter, {})
grouped_entries = group_entries_by_key(entries, sorter,
group_name_dict)
else:
grouped_entries = {'ALL': list(entries)}
for group_name, group in grouped_entries.items():
sorted_entries = self.sort(group)
labels = list(self.format_labels(sorted_entries))
for label, entry in zip(labels, sorted_entries):
for persons in entry.persons.itervalues():
for person in persons:
person.text = self.format_name(person,
self.abbreviate_names)
f = getattr(self, "format_" + entry.type)
text = f(entry)
bib = optional[
join['[',
tag('tt')[
href[
field('publipy_biburl', raw=True),
'bib'
]
],
']'
]
]
pdf = optional[
join['[',
tag('tt')[
href[
field('publipy_pdfurl', raw=True),
'pdf'
]
],
']'
]
]
abstract = optional[
join['[',
tag('tt')[
href[
field('publipy_abstracturl', raw=True),
'abstract'
]
],
']'
]
]
www = join['[',
tag('tt')[
href[
field('url_home', raw=True),
'www'
]
],
']'
]
text += ' ' # make some space
if entry.fields['url_home']:
text += join(sep=' ')[bib, pdf, abstract,
www].format_data(entry)
else:
text += join(sep=' ')[bib, pdf, abstract].format_data(entry)
yield group_name, FormattedEntry(entry.key, text, label)