Example #1
0
def iterentries(filename, encoding=None):
    encoding = encoding or 'utf8'
    with memorymapped(str(filename)) as source:
        try:
            for entrytype, (bibkey, fields) in iterentries_from_text(source, encoding):
                yield entrytype, (bibkey, fields)
        except PybtexSyntaxError as e:  # pragma: no cover
            debug_pybtex(source, e)
Example #2
0
 def __getitem__(self, item):
     if item.startswith(self.id + ':'):
         item = item.split(':', 1)[1]
     text = None
     with memorymapped(self.fname) as string:
         m = re.search(b'@[A-Za-z]+\{' + re.escape(item.encode('utf8')), string)
         if m:
             next = string.find(b'\n@', m.end())
             if next >= 0:
                 text = string[m.start():next]
             else:
                 text = string[m.start():]
     if text:
         for k, (t, f) in _bibtex.iterentries_from_text(text, encoding=self.encoding):
             return Entry(k, t, f, self)
     raise KeyError(item)
Example #3
0
 def __getitem__(self, item: str) -> 'Entry':
     """
     :param item: BibTeX citation key of an entry
     :raises KeyError: if no matching `Entry` is contained in the `BibFile`
     """
     if item.startswith(self.id + ':'):
         item = item.split(':', 1)[1]
     text = None
     with memorymapped(self.fname) as string:
         m = re.search(
             b'@[A-Za-z]+{' + re.escape(item.encode(self.encoding)) + rb'[\s,]', string)
         if m:
             next = string.find(b'\n@', m.end())
             if next >= 0:
                 text = string[m.start():next]
             else:
                 text = string[m.start():]
     if text:
         for k, (t, f) in bibtex.iterentries_from_text(text, encoding=self.encoding):
             return Entry(k, t, f, self, self.api)
     raise KeyError(item)
Example #4
0
def test_memorymapped(tmppath):
    p = make_file(tmppath, text='äöü', encoding='utf-8')
    with memorymapped(p) as b:
        assert b.find('ö'.encode('utf-8')) == 2