Source code for bibpy.entries

# -*- coding: utf-8 -*-

"""All valid bib(la)tex entry types.

As of the Biblatex package documentation version 3.2 (27/12/2015)

"""

__all__ = ('aliases', 'Entries')


base_entry_types = frozenset([
    'article',
    'book',
    'booklet',
    'inbook',
    'incollection',
    'inproceedings',
    'manual',
    'misc',
    'proceedings',
    'unpublished'
])

##################################################################
# Bibtex
##################################################################
bibtex_entry_types = frozenset([
    'conference',
    'masterthesis',
    'phdthesis',
    'techreport'
])

##################################################################
# Biblatex
##################################################################
# The set of all valid Biblatex entry types
biblatex_entry_types = frozenset([
    'bookinbook',
    'booklet',
    'collection',
    'inference',
    'mvbook',
    'mvcollection',
    'mvproceedings',
    'mvreference',
    'online',
    'patent',
    'periodical',
    'reference',
    'report',
    'set',
    'suppbook',
    'suppcollection',
    'suppperiodical',
    'thesis',
    'xdata'
])

# Unsupported entry types
biblatex_unsupported_entry_types = frozenset([
    'artwork',
    'audio',
    'bibnote',
    'commentary',
    'image',
    'juristiction',
    'legislation',
    'legal',
    'letter',
    'movie',
    'music',
    'performance',
    'review',
    'software',
    'standard',
    'video'
])

# Type aliases for all Biblatex entry types
biblatex_entry_type_aliases = {
    'inproceedings': ['conference'],
    'online':        ['electronic', 'www'],
    'report':        ['techreport'],
    'thesis':        ['masterthesis', 'phdthesis']
}

bibtex = base_entry_types | bibtex_entry_types
biblatex = base_entry_types\
    | biblatex_entry_types\
    | biblatex_unsupported_entry_types\
    | frozenset(
        [alias for value in biblatex_entry_type_aliases.values()
         for alias in value]
    )

all = biblatex | bibtex


[docs]def aliases(bibtype, format): """Return the biblatex aliases of the given entry type and format.""" # There are no aliases in bibtex if format != 'biblatex': return [] return biblatex_entry_type_aliases.get(bibtype, [])
[docs]class Entries: """Light-weight container object for parsed entries.""" def __init__(self, entries=[], strings=[], preambles=[], comment_entries=[], comments=[]): """Initialise with lists of bibliographic entries and comments.""" self._entries = entries self._strings = strings self._preambles = preambles self._comment_entries = comment_entries self._comments = comments @property def entries(self): """A list of all bibliographic entries.""" return self._entries @property def strings(self): """A list of all string entries.""" return self._strings @property def preambles(self): """A list of all preamble entries.""" return self._preambles @property def comment_entries(self): """A list of all comment entries.""" return self._comment_entries @property def comments(self): """A list of all non-entry comments.""" return self._comments @property def all_entries(self): """Return all entries (excluding comments) as a list.""" return [ self.strings, self.preambles, self.comment_entries, self.entries, ] @property def all(self): """Return all entries including comments.""" return self.all_entries + [self.comments] def __iter__(self): """Iterate over all entries, including non-entry comments.""" for entries in self.all: yield from entries def __getitem__(self, idx): return ( self.strings, self.preambles, self.comment_entries, self.entries, self.comments, )[idx] def __str__(self): return repr(self) def __repr__(self): return ( '{0}(strings={1}, preambles={2}, comment_entries={3}, ' 'entries={4})' ).format( self.__class__.__name__, len(self.strings), len(self.preambles), len(self.comment_entries), len(self.entries) )