Metadata-Version: 2.1
Name: biblib-simple
Version: 0.1.2
Summary: Simple, correct BibTeX parser and algorithms
Home-page: https://github.com/colour-science/biblib
Author: Austin Clements
Author-email: colour-science@googlegroups.com
Keywords: bibtex,tex
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Topic :: Database
Classifier: Topic :: Text Processing
License-File: LICENSE

Biblib
------

This repository was forked from [Austin Clements
repository](https://github.com/aclements/biblib) to create
a [PyPi package](https://pypi.org/project/biblib-simple/).

Biblib provides a simple, standalone Python3 package for parsing
BibTeX bibliographic databases, as well as algorithms for manipulating
BibTeX entries in BibTeX-y ways.

There are a lot of BibTeX parsers out there.  Most of them are
complete nonsense based on some imaginary grammar made up by the
module's author that is almost, but not quite, entirely unlike
BibTeX's actual grammar.  *BibTeX has a grammar*.  It's even pretty
simple, though it's probably not what you think it is.  The hardest
part of BibTeX's grammar is that it's only written down in one place:
the BibTeX source code.

Biblib's parser is derived directly from the WEB source code for
BibTeX and hence (barring bugs in translation) should be fully
compatible with BibTeX's own parser.


Features
--------

* BibTeX-compatible `.bib` file parser

* BibTeX-compatible name parser for fields like `author`

* Crossref resolution

* BibTeX-compatible title casing

* Translator for common TeX markup (like accents) to Unicode (which
  can, in turn, be used in HTML and other formats).


Installation
------------

Since biblib has no external dependencies or C modules, you can use
biblib in your project by simply unpacking it under your source tree
and adding

    sys.path.append('biblib')

before importing it.

Biblib can also be installed system-wide with

    python3 setup.py install


Examples
--------

There are a few simple examples of biblib's use in `examples/`.  To
run these dircetly from the source tree, use, for example

    PYTHONPATH=$PWD ./examples/bibparse test.bib


Recognized grammar
------------------

For reference, the `.bib` parser implements a grammar equivalent to
the following PEG.  All literals are matched case-*insensitively*.

    bib_db = comment (command_or_entry comment)*

    comment = [^@]*

    ws = [ \t\n]*

    ident = ![0-9] (![ \t"#%'(),={}] [\x20-\x7f])+

    command_or_entry = '@' ws (comment / preamble / string / entry)

    comment = 'comment'

    preamble = 'preamble' ws ( '{' ws preamble_body ws '}'
                             / '(' ws preamble_body ws ')' )

    preamble_body = value

    string = 'string' ws ( '{' ws string_body ws '}'
                         / '(' ws string_body ws ')' )

    string_body = ident ws '=' ws value

    entry = ident ws ( '{' ws key ws entry_body? ws '}'
                     / '(' ws key_paren ws entry_body? ws ')' )

    key = [^, \t}\n]*

    key_paren = [^, \t\n]*

    entry_body = (',' ws ident ws '=' ws value ws)* ','?

    value = piece (ws '#' ws piece)*

    piece
        = [0-9]+
        / '{' balanced* '}'
        / '"' (!'"' balanced)* '"'
        / ident

    balanced
        = '{' balanced* '}'
        / [^{}]
