Source code for formatting.gerunsrtwithlinks

import locale
import datetime
import pybtex

from .unsrtwithlinks import Style as UnsrtStyle
from pybtex.style.template import (field, sentence, names, join, words,
                                   optional, together, optional_field, first_of)
from pybtex.style.formatting.unsrt import dashify
from pybtex.richtext import Symbol


[docs]def localize_month(m): # not sure how else to do it; how does apply_func work? try: month_num = datetime.datetime.strptime(str(m), "%B") except ValueError: # strange strings return '' locale.setlocale(locale.LC_ALL, 'de_DE') month = datetime.datetime.strftime(month_num, '%B') locale.setlocale(locale.LC_ALL, locale.getdefaultlocale()) return month
date = words[optional_field('month', apply_func=lambda x: localize_month(x)), field('year')] # use new date instead of module-level function from unsrt.py pybtex.style.formatting.unsrt.date = date
[docs]class Style(UnsrtStyle): """Style for appending links to html output."""
[docs] def format_names(self, role, as_sentence=True): """Override for german""" formatted_names = names(role, sep=', ', sep2=' und ', last_sep=' und ') if as_sentence: return sentence[formatted_names] else: return formatted_names
[docs] def format_editor(self, e, as_sentence=True): """Override for german""" editors = self.format_names('editor', as_sentence=False) if 'editor' not in e.persons: # when parsing the template, a FieldIsMissing exception # will be thrown anyway; no need to do anything now, # just return the template that will throw the exception return editors word = 'Hrsg.' result = join(sep=', ')[editors, word] if as_sentence: return sentence[result] else: return result
[docs] def format_volume_and_series(self, e, as_sentence=True): volume_and_series = optional[ words[ together['Band', field('volume')], optional[ words['von', field('series')] ] ] ] number_and_series = optional[ words[ join(sep=Symbol('nbsp'))['Nr.' if as_sentence else 'nr.', field('number')], optional[ words['in', field('series')] ] ] ] series = optional_field('series') result = first_of[ volume_and_series, number_and_series, series, ] if as_sentence: return sentence(capfirst=True)[result] else: return result
[docs] def format_chapter_and_pages(self, e): pages = field('pages', apply_func=dashify) return join(sep=', ')[ optional[together['Kapitel', field('chapter')]], optional[together['p.', pages]], ]
[docs] def format_edition(self, e): return optional[ words[ field('edition', apply_func=lambda x: x.lower()), 'Auflage', ] ]