*****  Mo 17. Dez 14:49:54 CET 2018  *****

Added prompt_toolkit and pygments modules for fancy prompting.
Refactored loadfile() to process a multi-line string (as well as  files).
Edited banner to begin with a line break.
Added color syntax in remove_duplicates() dialogs.
Drafted add_entries() function to add entries manually.

*****

Implemented add_entries() to manually add entries though the prompt.
Refactored merge() to take list of Bib() objects as argument (optional).
Added color syntax to filter_field() dialog.
Added color syntax to merge() dialog.


*****  Di 18. Dez 15:27:46 CET 2018  *****

Implemented edit() to manually edit the bibmanager database.


*****  Fri Dec 21 19:46:20 CLT 2018  *****

Implemented search() to querry into bibmanager database by author,
year, or keywords in title.
Added documentation to Bib.__contains__().


*****  Sat Dec 22 10:03:49 CLT 2018  *****

Removed cond_replace() function. Use cond_find() with join() instead.

*****

Renamed cond_find() to cond_split().
Renamed cond_split() arguments from line,regex to text,pattern.

*****

Added ret_nests argument to cond_split(). When enabled, return the
nested level for the returned substrings.

*****

Changed default behavior of nlev in cond_split() to assume level of
first character in text.

*****

Added 'nested' argument to parse_name() to receive nested level of
input name.

*****

Removed 'protect' argument from cond_split().

*****

Swapped order of first two arguments in cond_next() to have the same
format as cond_split().

*****

Added documentation to next_char() and last_char().
Caught special case when the input string has only blank characters
(return zero).


*****  Sun Dec 23 10:00:15 CLT 2018  *****

Cleaned up many of the docstrings.
Prepended 'r' to docstrings where I need to escape chars.
There are still many functions that need a proper example (wait until
we have the project structured as a package, and integration tests
and examples).

*****

Implemented ordinal() function to compute ordinal representation
of numbers.

*****

Implemented display_bibs() function to show color-syntax bib
entries on screen.
Updated remove_duplicates(), filter_fields(), and merge() to use
display_bibs().

*****

Some minor clean up.

*****

Bumped bibmanager version to 0.1.0.
This next merge closes #1


*****  Mon Dec 24 15:28:54 CLT 2018  *****

Initiated latex management file (latex_manager.py):
Implemented no_comments() to remove comments from latex text.
Implemented citations() to extract citation keys from latex text.

*****

Proposed project/file structure:
utils.py          Utilities
bib_manager.py    BibTeX/database management
latex_manager.py  LaTeX management
ads_manager.py    ADS I/O management
cli_manager.py    Command-line-interface management

*****

Implemented build_bib() function which generates a bib file
from an imput tex file.

*****

Renamed bibm.py to bib_manager.py.
Fixed typo in buid_bib() output file.

*****

Bumped bibmanager version to 0.2.0.
This next merge closes #2


*****  Tue Dec 25 16:36:54 CLT 2018  *****

Added the bibmanager __init__.py file (placeholder mostly,
not much going on there).
Added setup.py file.

*****

Drafted the command-line interface (main command calls).
(just the facade, still need to document and link the commands to
the bibmanager calls).
This is implemented in the __main__.py file.

*****

Cleaned up bib_manager.py, added __all__ list of functions.

*****

Added bib_manager.py functions into bibmanager __init__.py package.

*****

Implemented init command-line interface and documentation.

*****

Added copyright text at the top of files.

*****

Implemented edit command-line interface and documentation.


*****  Wed Dec 26 10:04:30 CLT 2018  *****

Implemented merge command-line interface and documentation.
Tweaked main docs to display 'command' rather than a list of all
the commands.

*****

Implemented export command-line interface and documentation.


*****  Thu Dec 27 16:12:04 CLT 2018  *****

Raise exceptions for input entries without required fields in Bib().
Raise exceptions for user-input errors in loadfile().
Caught dry-run case in add_entries(), i.e., no new entries.

*****

Implemented add command-line interface and documentation.

*****

Added bibfile argument to build_bib() function, to redirect output.
Raise exception if there is bibfile is None and there is no
bibliography call in the .tex file.

*****

Implemented bibtex command-line interface and documentation.

*****

Renamed setup command to config.

*****

Added 'bold face' to some titles in command-line interface text.

*****

Renamed Sauthor() namedtuple to Sort_author().
Re-arranged Author() fields to be consistent with Sort_author().

*****

Modified Bib.__containts__() to match only against the first author
if the querry string begins with '^'.

*****

Raise exceptions for invalid inputs in parse_name().

*****

Re-factored bm.search() to search multiple authors.
Renamed 'author' argument to 'authors'.
Raise exceptions for invalid inputs.

******

Tweaked display_bibs() function to receive None as labels argument.
Added the function to __all__.

*****

Implemented repr_author() function to get a string representation of
an Author namedtuple in 'von Last, Jr, First' format.


*****  Fri Dec 28 09:51:56 CLT 2018  *****

Implemented get_authors() method for Bib() object, to get the string
representation of the author list of the entry.

*****

Implemented search command-line interface and documentation.

*****

Added license to main CLI docs.

*****

Bumped bibmanager version to 0.3.0.
This next merge closes #8


*****  Sat Dec 29 17:05:22 CLT 2018  *****

Implemented clear_latex(), compile_latex(), and compile_pdflatex()
in latex_management.py.  These functions compile a .tex file into
pdf using the latex or pdflatex directives.

Implemented ignored() context manager to simplify file deletions
withour running into exceptions.

*****

Added cd() context manager to change folders.

*****

Modified compile_latex() and compile_pdflatex() to work when called
from different folders where the .tex file is.

*****

Implemented pdflatex command-line interface and documentation.
Renamed pdftex to pdflatex to avoid confusion.

*****

Implemented latex command-line interface and documentation.

*****

Simplified cd() context manager, using a decorator.

*****

Some cosmetics cleanup in __main__.py

*****

Added message at end of merge() call with the number of new entries.

*****

Fixed bug in compile_pdflatex(), I forgot to call build_bib().

*****

Modified build_bib() to return the list of missing keys.
Used this output to display missing refs at the end of
compile_latex() and compile_pdflatex().

*****

Modifications to bm.export() function:
Added header text at begining of bibmanager output .bib files.
If bibmanager attempts to overwrite a user's bibfile (one that does
not begin with the bibmanager header), make a copy labeled as:
orig_yyyy-mm-dd_bibfile.

*****

Fixed bug in bm.export() function, check that input file exists
before checking for overwrite.

*****

Added try-finally sequence to bm.edit() to ensure always removing
the temporary file.

*****

Minor cosmetics in bm.edit().

*****

Bumped bibmanager version to 0.3.1.
This next merge closes #9


*****  Sun Dec 30 11:39:31 CLT 2018  *****

Drafted config file, and config_manager.py to handle the variables
in the config file.
Implemented cm.reset().

*****

Implemented cm.get_key() function to display config values.

*****

Implemented cm.set_key() function to set bibmanager config values.
Display help when input value is None (implemented for 'style' and 'paper').

*****

Updates to cm.set_key() function.
Added docstring, put exceptions before updating the values,
added help docs for 'text_editor' option.

*****

Added help docs for 'adstoken' key.

*****

Split cm.get_key() function into get() and display().
Added examples to docstring.

*****

Split cm.set_key() function into set() and help().
Added examples to set() docstring.

*****

Sorted order of functions in config_manager.py (cosmetics).

*****

Added list of functions to __all__ in config_manager.py
Cleaned up bib_manager.py

*****

Modified bibmanager to take the pygments style from the config file.

*****

Renamed bm_home to HOME in bib_manager.py.
Ultimately, need to set this in a single location once I factor the
code into a package.

*****

Modified bm.edit() to take the text editor from the config file.
Still, need to figure out how to deal with windows platform.

*****

Fixed bug in cm.set() to accept 'default' for text_editor.

*****

Modified lm.latex() and latex CLI to get default paper format from
the config file.

*****

Implemented config command-line interface and documentation.

*****

Bumped bibmanager version to 0.3.2.
This next merge closes #15


*****  Mon Dec 31 22:12:36 CLT 2018  *****

Moved Bib()'s get_authors() method into bm.get_author() function,
to make it accessible to others without needing to make a Bib()
object.  Pointed get_author() method to the get_author() function.

*****

Created ads_manager.py file to handle ADS related requests.
Implemented am.search() function to make querries into ADS.


*****  Tue Jan  1 08:50:45 CLT 2019  *****

Modified adstoken config parameter to ads_token.
ADS functions are pending (broken at this point).

*****

Added utils.py file to keep low-level utility functions and constants
Adjusted latex_manager.py, __main__.py, and bib_manager.py
(but still need to move many functions from bm into utils).

*****

Moved low-level functions from bib_manager.py into utils.py

*****

Moved bm.get_authors() function to utils (and added docstrings).
Added BM_CACHE to utils.

*****

Implemented am.display() to show a sub-set of entries on the prompt.
Renamed rows to cache_rows in am.search() to distinguish from
ads_diplay rows.

*****

Implemented am.manager() function defining protocol for ADS searches:
- search new querries or cache continuation
- load, save, and delete cache
- display entries
Fixed typo in indices for am.display() print statement.

*****

Added ads_diplay to the bibmanager config keys.
Tweaked config_manager.py code to user more f-strings.

*****

Implemented ads-search command-line interface and documentation.

*****

Implemented am.add_bibtex() function to add entries into the bibmanager
database by passing ADS bibcodes.
Partially implemented ads-search command-line interface and docs.
Still need to implement multi-entries case.
Fixed typo(?) in ADSURL constant string.
Shortened the length of ADS entries display from 80 to 76 characters.

*****

Finished implementing ads-search command-line interface and docs.


*****  Wed Jan  2 20:22:46 CLT 2019  *****

Refactored am.add_bibtex() to consider updated bibcodes
(arxiv to published).

*****

Implemented am.update() function to launch an ADS querry on the
bibmanager entries that have an 'adsurl' field.

*****

Fixed behavior issue in bm.filter_fields() function to truly take
new entry, when findinf duplicate fields (before it was also
requesting better publish status or different keys).

*****

Fixed indentation in bm.filter_fields() function to four spaces.

*****

Implemented am.key_update() to adjust keys of entries that were
updated from their arxiv version.
Potentially, it can be extended to all entries (I'm thinking wrong
user input in keys).
Added update_keys argument to am.add_bibtex() and am.update()
functions to indicate when to modify the keys of arxiv-updated
entries.
Added some on-screen reports of arxiv updates in am.add_bibtex().

*****

Implemented ads-search command-line interface and documentation.
Fixed a few typos in command-line function docstrings.

*****

Some tweaks to the main-help display (mostly, avoiding ANSI color
encoding).

*****

Bumped bibmanager version to 0.4.0.
This next merge closes #3


*****  Thu Jan  3 23:43:01 CLT 2019  *****

Updated copyright year all over the place.

*****

Created sphinx docs.
Drafted main structure of the docs.
Added logo.
Wrote intex.rst
Wrote getstarted.rst (quick example is TBD)
Drafted bibtex.rst, latex.rst, and ads.rst sections (need to copy info from
argparse docs, expand examples).
faq.rst sections needs a complete make over.
Need to figure out how to do/automate API docs (for api.rst).
Wrote contributing.rst and license.rst sections.
Updated README to point to docs.


*****  Sun Jan  6 13:08:42 CLT 2019  *****

Finished drafting a decent bibtex.rst docs page.

*****

Unified one-liner descriptions between main and command help menus.
Change 'bibkey' to 'key' in bibm search output.
Edit docs to refer to 'config params' rather than config keys (to
avoid confusion with the BibTeX's key).

*****

Drafted latex.rst docs page.
Revised a few details in bibtex.rst and command-line docs.

*****

Drafted ads.rst docs page.
Fixed typos and style here and there.

*****

Fixed bug in am.add_bibtex(), assign updated key to new Bib() object
when updated from arxiv to peer-reviewed.

*****

Drafted faq.rst docs page.
Added link to BibTeX naming format in search docs.


*****  Mon Jan  7 18:21:04 CLT 2019  *****

Tweaked ads-add parser to split bibcode and key into two arguments.
Unified ads-search argparse docs with sphinx docs.
Fixed bibm search usage's text to be consistent with docs.

*****

Bumped bibmanager version to 0.5.0.
This next merge closes #10

*****

Added bibcode to Bib() object.

*****

Updated Bib.published() to check with bibcode instead of adsurl.
Updated bm.merge() and bm.loadfile() to check duplicates by bibcode
instead of adsurl.

*****

Added script to prefer peer-reviewed over arxiv entries in
remove_duplicates() function.

*****

Changed indentation in bm.remove_duplicates() func to four spaces.

*****

Updated am.update() to look directly at bibcodes.
Updated bibcode extraction in Bib.__init__() to remove any backslash.
Added bibcode in cli_search() report.
Updated sphinx and argparse docs according to adsurl/bibcode changes.

*****

Updated bibmanager url in bm.export().

*****

Bumped bibmanager version to 0.5.1.
This next merge closes #17

*****

Added key and bibcode arguments to bm.search() function.

*****

Updated cli_search() function to incorporate new search fields to
command-line interface.
Updated search argparse and sphinx docs.

*****

Bumped bibmanager version to 0.5.2.
This next merge closes #19


*****  Tue Jan  8 09:34:46 CLT 2019  *****

Deleted cm.reset() function.
Added default-config copy in bm.init().

*****

Added cm.update_keys() function to update bibmanager config.
Refactored bm.init() to truly reset database, and to querry when
to reset database and config.

*****

Added database and config mutually exclusive options to init command
allowing to reset only the database or the config file.
Updated argparse and sphinx docs accordingly.

*****

Renamed init command-line command to reset.

*****

Updated u.ROOT constant to point to the root of the package.

*****

Ensured bm.init() always update the examples folder.
Removed obsolete bm.loadfile2().

*****

Added bm.init() call after python setup.py install/develop calls.

*****

Added exception to bm.load() to return an empty list when there
is no bibmanager database.

*****

Added examples/ folder with sample bibtex and latex files for demo.

*****

Changed bibfile of sample.tex to avoid conflict with sample.bib.
Updated sphinx docs to add quick example documentation, and note
when other examples use the sample.bib file.

*****

Added dependencies for setup.py.
Fixed bug with setup.py for install call.
Cleaned up setup.py.

*****

Hid sphinx requirements in docs (needed only for development).

*****

Bumped bibmanager version to 0.5.3.
This next merge closes #21

*****

Corrected intentation in bib_manager.py to four spaces.

*****

Rewrote string formatting as f-strings.

*****

Rewrote string formatting as f-strings in __init__.py and __main__.py

*****

Minor cleanup in __init__.py.

*****

Rewrote string formatting as f-strings in utils.py

*****

Rewrote string formatting as f-strings in latex_manager.py

*****

Rewrote string formatting as f-strings in config_manager.py

*****

Added try-except clause in cli_config() to avoid throwing traceback
at user.

*****

Bumped bibmanager version to 0.5.4.
This next merge closes #5
(Did my best to throw specific errors in API, and catch them to
avoid throwing tracebacks at user).


*****  Thu Jan 10 13:47:49 CET 2019  *****

Fixed bug in bm.init(), set the right order: create HOME folder,
reset config, reset database.
Removed obsolete None-check for loadfile().
Fixed bug with pygments style (get it on execution rather than during
import).

*****

Added ignored context manager for bm.init() calls in develop/install.

*****

Fixed error message in am.add_bibtex() for invalid ADS token.

*****

Bumped bibmanager version to 0.5.5.


*****  Fr 11. Jan 16:11:43 CET 2019  *****

Changed ROOT (again) to point to location of bibmanager/__init__.py
(Will need to update in utils.py once I set the package structure).
PS: This commit breaks untill I fix setup.py

*****

Updated setup.py to add package_data, automate packages, and comment
out cmdclass (until I get it working).
Moved examples folder into bibmanager folder (so it can be included
during install).

*****

Restored cmdclass in setup.py.  Install works as expected.

*****

Fixed bug in u.repr_author(), missed the f before the f-string.

*****

Added MANIFEST.in file.

*****

Bumped bibmanager version to 0.5.6.


*****  Sat Jan 12 12:15:33 CET 2019  *****

Refactored files and package structure to a standard package format.
Fixed a few typos here and there.
Updated docstring examples accordingly.

*****

Moved ads_token and ads_display loading into functions
to update them at runtime.
Removed unnecessary constants (url paths) from ads_manager.py

*****

Bumped bibmanager version to 0.6.0.
This next merge closes #12


*****  Sun Jan 13 14:06:24 CET 2019  *****

Caught case of empty input string in utils.cond_next() returning zero
(thought it's not expected to occur).

*****

Fixed bug in utils.parse_name() for input strings ending (starting)
with a comma.
Fixed missing f in f-string of len-fields exception.

*****

Tweaked utils.cond_split() to count matches at the beginning and end
of string, returning an empty substring for the edges (this is more
inline with the BibTeX name formatting).

*****

Modified utils.cond_split() to remove blanks around first/von/last/jr
and collapse blanks in between.

*****

Added test_utils.py testing file.

*****

Added requirements.txt and .travis.yml files to set up continuous
integration.

*****

Updated .travis.yml file.

*****

Updated README.md to include logo and build badge.
(Update with doi when ready).

*****

Modified lm.no_comments() to match comment line when the first line
in string begins with a comment.

*****

Tweaked lm.citations() to remove outer commas and remove blanks
more cleanly.


*****  Mon Jan 14 22:45:16 CET 2019  *****

Added test_latex_manager.py testing file.
(Still need tests for functions that need fixtures).

*****

Changed import format for utils, getting module rather than the
module's variables.  This fixes an issue with a monkeypatch testing
(constants were get from utils before runtime, .i.e., before monkey
patching).


*****  Tue Jan 15 23:32:15 CET 2019  *****

Added check at Bib.__init__() to count zero net braces.


*****  Thu Jan 17 00:20:11 CET 2019  *****

Tweaked bm.display_bibs(), cleaner trimming of ending newline.

*****

Added remove_duplicates() to bm.__all__.
Fixed bug, in bm.remove_duplicates() when there are no entries
without the field to check.

*****

Added conftest.py file with fixtures for pytest.
Added mock_input() fixture.
Implemented tests for bm.remove_duplicate() function.


*****  Fri Jan 18 00:22:30 CET 2019  *****

Implemented mock_init() fixture (which uses mock_home), to really
make sure that each test starts from sratch in isolation.

Implemented tests for bm.save(), bm.load(), and bm.export().


*****  Fri Jan 18 17:37:50 CET 2019  *****

Implemented test for bm.filter_field().

*****

Added exception to bm.remove_duplicate(), return immediately if
there are no entries with (non null) requested field.

*****

Resorted order fixtures in conftest.py.
Added entries fixture to define a list of entries.
Modified bibs fixture to inherit from entries fixture.
Added mock_prompt fixture to mock prompt_toolkit.prompt() function.

*****

Reshufled merge function in bib_manager.py (no real edits).

*****

Adapted test_bib_manager.py tests to use entries fixture when needed.
Implemented tests for bm.add_entries() function.

*****

Implemented tests for bm.merge() function.
Moved 'Merged ...' print statement to the very end of bm.merge().


*****  Sat Jan 19 14:25:35 CET 2019  *****

Updated docstrings and docs for search (in database).

*****

Implemented tests for bm.search() function.
This completes test_bib_manager.py (for now, need to think about
bm.edit()).

*****

Fixing travis file to run both 3.6 and 3.7

*****

New attempt at fixing travis file.

*****

Some cosmetic edits in config_manager.py.

*****

Added test_config_manager.py file testing test.

*****

Fixed bug in lm.build_bib(), need to prepend path to bibfile when
taken form bibiliography, and ran remotely.

*****

Allowed lm.build_bib() to receive texfile without extension
(but still check that it has a .tex extension).
Added extension checks to lm.compile_latex() and lm.compile_pdflatex().

*****

Implemented tests for lm.build_bib() and clear_latex() functions.
Only the compiling functions remain to be tested.  But those require
either heavy monkeypatching or lear how to integrate the compilation
commands into travis CI.


*****  Sun Jan 20 18:36:49 CET 2019  *****

Modified mock_init fixture to monkey patch functions' defaults.

******

Added mock_init_sample fixture to initialize database with entries
from sample.bib file.

*****

Moved main_description string in __main__.py to outer scope so the
user can access to it.

*****

Updated test_bib_manager.py to use mock_init_sample fixture.

*****

Implemented test_cli.py with tests for command-line functions.

*****

Removed unit subfolder in tests.


*****  Di 22. Jan 18:07:43 CET 2019  *****


Added ads_entries() fixture to test ads_manager.py functions.

*****

Implemented test_ads.py with tests for the ADS features.
Since there are many that depend on requests, there are many skipped
tests.  That should be resolved either monkeypatching or learning
how to test requests properly (ideally).

*****

Added skip pytest marks in latex and pdflatex functions
(while I figure out whether these commands are testable or not).

*****

Upped required prompt_toolkit requirement to version 2.0.7
since it was failing (locally) during Linux py3.6 testings.

*****

Updated docs.

*****

Bumped bibmanager version to 1.0.0.
This next merge closes #6
And completes the tasks for first release (exclamation mark)


*****  Do 7. Feb 17:56:15 CET 2019  *****

Added tests that involve the requets package using requests_mock.
Added requests_mock to tests_requires in setup.py.

*****

Updated purify() to include case when special characters are followed
by braces.

*****

Updated docs.


*****  Sat Apr  6 18:24:53 CEST 2019  *****

Tweaked entries screen output spacing for better clarity.

*****

Updated screen output of ADS URLs.

*****

Added long_description to setup.py.

*****

Bumped bibmanager version to 1.0.1.

*****

Added PyPi shield to README.md, index.rst, and setup.py.
Added travis and license shields to index.rst and setup.py.

*****

Added DOI shield to index.rst and setup.py
Added license shield to README.md
Updated DOI shield in README.md

*****

Bumped bibmanager version to 1.0.2.


*****  Sun Apr  7 14:12:54 CEST 2019  *****

Refactored cli_search() to read user inputs from prompt_toolkit.promt
rather than CLAs.  This mimics a search in ADS.  This changes the
behavior for the user.

Updated mock_prompt() fixture to handle input arguments as keywords
(makes it more flexible).
Updated docs and tests accordingly.

*****

Catch no user-input case for bibm search.
Added test.

*****

Added tests for different command-line search scenarios.
Minor tweaks to the docs.


*****  Thu Apr 11 22:23:35 CEST 2019  *****

Added tests for am.manager() function.
Added more entries for reqs decorator.

*****

Refactored cli_ads_search() to use promp_toolkit.prompt(), enabling
autocompleter. Added '-n' argument to request next chunk of entries.
Added tests for cli_ads_search().

*****

Fixed script to launch tests in travis file.

*****

Added install -e line in travis file.

*****

Fixed typo in setup.py, requests-mock module name in test_requires.

*****

Added explicit requests-mock install command in travis file.


*****  Sun Apr 14 10:36:44 CEST 2019  *****

Added auto-suggest for the auto-complete word list in cli_search()
and cli_ads_search().  Replaced prompt_toolkit.prompt() with a
prompt_toolkit.PromptSession.prompt() call.
Moved search_completer and ads_completer WordCompleters form
__main__.py into utils.
Added AutoSuggestCompleter() class into utils to handle the
suggestions.
Added mock_prompt_session() fixture into conftests.py to monkeypatch
a PromptSession object.
Updated tests accordingly.

*****

Added history to cli_search() and cli_ads_search() prompts.
Added path to history files in utils.

*****

Update docs.
Minor tweaks here and there.

*****

Bumped bibmanager version to 1.1.0.
Next merge resolves #32
Although this does not resolve the original idea of enabling
autocomplete for the main bibm command-line calls, it adds very
convenient auto-complete help in searches. So I will close #28

*****

Updated Zenodo links.

*****

Bumped bibmanager version to 1.1.1.


*****  Sat May 25 21:43:36 CEST 2019  *****

Refactored bm.merge() to accept base argument.  When provided
merge new entries into base, rather than into the BM database.
Also, bm.merge() now returns the merged list of entries.
Tested.


*****  Mo 27. Mai 09:06:02 CEST 2019  *****

Modified Bib.eprint to keep only the ID (remove 'arxiv' and
'astro-ph' preamble) to prevent duplicate non-detections.

*****

Implemented Bib.update_key() method to updated the key and content
of a Bib instance.
Tested.

*****

Fixed bug in setup.py (changed tests_requires to tests_require).

*****

Refactored am.add_bibtex(), adding base argument which merges
new/updated entries into base (if not None).
Also, am.add_bibtex() now returns the the updated list of entries.
API was completely refactored to catch matching DOIs and eprint IDs.

*****

Tweaked am.add_bibtex() to accept eprints and dois lists.
If provided, the code will attempt to match ADS results against
the provided fields.
Some other minor tweaks in the screen output.
Updated tests.

*****

Refactored am.update() to accept base argument. When provided,
ads-update entries in base rather than the BM database entries.
Added passing DOI and eprint lists into am.add_bibtex().
Also, am.update() now returns the updated list of entries.

*****

Swapped order of author and first-author auto-suggestion.
Show first-author option first.

*****

Implemented cleanup command-line argument to clean a bibfile
independently of the bibmanager database.
Fixed minor bug in ads-search CLI docs.

*****

Added cleanup docs.

*****

Added bash-bibm FAQ into docs.

*****

Updated link of zenodo badge to always-latest version.

*****

Updated README.md with RTD docs badge.

*****

Added docs badge to setup/PyPI (long description) and index.rst.
Fixed docs path in README.md.

*****

Bumped bibmanager version to 1.1.2.

*****

Updated MANIFEST.in to include tests, docs, and requirements.txt

*****

Bumped bibmanager version to 1.1.3.


***** Sun Jun 16 22:55:12 CEST 2019  *****

Updated docs, added tutorial and tweaked get-started text.


*****  Wed Jun 26 14:37:36 PDT 2019  *****

Fixed link in pypi long description.

*****

Updated docs, added api.

*****

Minor tweak in conf.py.

*****

Bumped bibmanager version to 1.1.4.

*****  Fr 12. Jul 14:59:28 CEST 2019  *****

Try to fix viewcode docs extension to show source code of api.

*****

More tweaks to docs/conf.py.

*****  Sat Jul 27 12:07:14 CEST 2019  *****

Updated url in help display.

*****

Minor tweaks/clean-up in the docs.

*****

Updated contributing.rst docs.

*****

Bumped bibmanager version to 1.1.5.


*****  Tue Aug 20 22:00:46 CEST 2019  *****

Grabbed PR #45 that removes cmdclass post-install functions
(which seemed to be causing troubles).
Replaced with a check that HOME folder exists.

Added bibmanager.__version__ as second element of pickled file
in bib_manager.save().

Added check between pickled file and bibm versions before CLI runs.
Update database when v_pickle < v_bibm.
Stop and recommend to update if v_bibm < v_pickle.

Implemented bib_manager.get_version() that gets the pickled file
version.
Tested and documented.

*****

Minor tweaks and cosmetics in config_manager.py.

*****

Updated API docs.

*****

Added packaging package to requirements.

*****

Rolled back tweak in config_manager.py.

*****

Bumped bibmanager version to 1.1.6.

The next merge removes the need for post-installation commands
and thus resolves #45 and #49
By the way, above where it says PR #45, should have been PR #46


*****  So 8. Sep 13:15:44 CEST 2019  *****

Moved first-ever initialization checks from config_manager.py
get() and set() function into the very beginning of the main().

*****

Updated some tests to make sure that they run on the mocked database.

*****

Added long_description_content_type into setup.py.


*****  Tue Dec 24 19:06:55 CLT 2019  *****

Some cosmetics edits in bib_manager.py

*****

Set explicitly the output of print_formatted_text() calls to stdout.
This fixes the testing for prompt_toolkit versions 2 and 3.

*****

Added update_content() method to Bib() object.
This method updates the attributes that are defined by a bibtex entry
and updates any extra info only if the new data is not None.
Added tests.

Added pdf and freeze attributes to Bib() object.  The info for these
attributes is not defined by the bibtex file.  Thus it has to be set
by the user, and such info is stored in the BM pickle database rather
than the BM bibtex database.
For now, these are just a placeholder (more on these soon).

Modified filter_field() and merge() functions to preserve non-bitex
information when updating/merging a new list of entries into the
database.


*****  Thu Dec 26 21:10:38 CLT 2019  *****

Channeled bm.edit() through merge(), now all database editing calls
(merge(), edit(), add_entries(), and add_bibtex()) go through the
merge() function; therefore, going through the update_content()
calls that preserve/update the meta info.

*****

Re-indented bm.edit() to four spaces.

*****

Added pdf and freeze arguments to Bib.__init__() method
allowing it to store meta information not contained in bibtex.
Added tests and docstrings.

Modified bm.loadfile() to extract meta information (at the moment,
freeze and pdf) which must be specified before a bibtex entry.

*****

Re-indented bm.loadfile() function to four spaces.


*****  Fri Dec 27 12:15:32 CLT 2019  *****

Added Bib.meta() method, which returns a string with the meta info
that is not None.
Added meta info to Bib.__repr__().
Added meta argument to bm.display_bibs(). This is a flag to diplay
meta info when True.
Added and updated tests.

*****

Added PDF file in cli_search results when 0 < verb < 3.
Added test.
Modified sample.bib to include pdf meta info to an entry.

*****

Added meta argument to bm.export() to include meta information
in output bib file.
Included meta information in tmp file for bm.edit() calls.
Updated mock_home fixture of bm.export() accordingly.
Added meta command-line argument in export CLI.
Added tests.

*****

Re-indented bm.export() function to four spaces.

*****

Modified am.update() to prevent updating entries with freeze flag.
Needs documenting.


*****  Sun Dec 29 22:18:51 CLT 2019 *****

Refactored u.get_author(), replaced short Bool argument
with format string argument, adding ultra-short option (ushort).
Updated docstrings. Fixed and added tests.

*****

Implemented u.AlwaysPassValidator() class, used to display a bottom
toolbar with author and title of current entry on the prompt while
searching.
(PS: I'm pretty sure there must be a smarter way to do this)

Implemented u.KeyWordCompleter() class, which enables completion
by key or bibcode while searching on the prompt.

Implemented u.AutoSuggestKeyCompleter() class adapted to autosuggest
from u.KeyWordCompleter().

Replaced u.search_completer, u.ads_completer WordCompleters with
u.search_keywords, u.ads_keywords lists that contain the kewords
to create the completers.

Updated completer and autosuggester of cli_search() prompt.
Added validator/bottom toolbar to cli_search() prompt.

I have not idea how to pytest the bottom toolbar nor the
auto-completions/auto-suggestions.


*****  Mon Dec 30 09:09:56 CLT 2019  *****

Added pdf_dir config parameter where to store PDF files.
Create u.HOME/pdf/ folder on bm.init() call (default dir for PDFs).
Updated and added tests.


*****  Tue Dec 31 14:23:32 CLT 2019  *****

Modified u.get_authors() 'ushort' format to trim out every character
except letters, spaces, dashes, non-ascii, and parentheses.
Added tests.

*****

Added pdf_manager module.
Implemented pm.guess_name() function.
Tested and documented.

*****

Implemented pm.open() function to open PDF files.
Added tests (Except for when open actually works).

*****

Implemented pm.request_ads() function to request a PDF from ADS.
Documented and tested.
Added mock_webbrowser() fixture into conftest.py and added new
requests_mock entries.


*****  Wed Jan  1 01:21:14 CLT 2020  *****

Changed query argument of pm.guess_name() function to arxiv Bool.
Updated docstrings and tests accordingly.
Fixed docstring of pm.request_ads() function.

*****

Implemented pm.add_ads_request() function to add requested PDF into
the database.
Documented and tested.

*****

Implemented bm.find() function to get an specific entry.
Documented and tested.

*****

Cleaned up a couple tests in tests_bib_manager.py.

*****

Tweaked pm.open() and pm.add_ads_request() functions with bm.find()
Enabled bibcode argument for pm.open().
Updated tests and docstring.

*****

Implemented pm.fetch() function.
This is the high-level function to fetch PDF files from ADS.
Tested and documented.
Updated conftest.py with mock requests.

*****

Implemented cli_fetch() function.
Added fetch_keyword variable to utils.py
Tested.
Need to implement docs for PDF manager module.

*****

Fixed typo querry -> query.
Added to FAQs: UnicodeEncodeError when running over ssh.


*****  Thu Jan  2 19:04:31 CLT 2020  *****

Updated Copyright year to 2020.

*****

Implemented bm.prompt_search() function for interactive prompt
searches in the Bibmanager database by keywords, including
auto-complete, auto-suggest, and bottom toolbar helps.
Documented and tested.
(Pulled code from cli_fetch() to generalize it).
Documented and tested.

*****

Some minor PEP8 cosmetics.

*****

Fixed hard-coded variable in u.KeyWordCompleter() class.
Removed u.fetch_keywords constant (no longer used).

*****

Modified pm.open() function, added pdf argument.
Added check that PDF file exists (raising ValueError if not).
Added check that at least one argument must be not None (ValueError).
Updated docstrings and tests.

*****

Implemented cli_open() function for open CLI.
Some tweaks in cli_fetch() function (no behavior change).
Documented and tested.


*****  Mon Jan  6 11:01:02 CET 2020  *****

Fixed bug in test_latex_manager.py, needed a teardown to return to
current folder after a change of directory that was deleted in test.

*****

Implemented pm.set_pdf() function, a more general function than
pm.add_ads_request().
Removed pm.add_ads_request() function.
Tested and documented.

*****

Renamed name argument to filename in pm.set_pdf() function
to be consistent with other functions.
Added Exceptions for invalid filenames to pm.set_pdf().
(Pulled from pm.fetch()).
Updated docs and tests.

*****

Modified u.KeyWordCompleter() class for broader compatibility.
There are no secondary effects.

*****

Implemented cli_link() function to enable pdf CLI.
This CLI allows for manual setting/linking of PDF files to entries.
Tweaked cli_fetch(), minor screen output changes.
Documented and tested.

*****

Fixed tests screen-output mismatch.


*****  Tue Jan  7 21:40:38 CET 2020  *****

Fixed bug with search autocompleter and autosuggester, enforced
options to be a list of string elements.

*****

Tweaked u.KeyWordCompleter() and u.AutoSuggestKeyCompleter() to sort
and unique the options.


*****  Thu Jan  9 22:25:12 CET 2020  *****

Updated docs: Added PDF Management section and description of Meta-info
in bibm edit section.
Updated argparse docs in __main__.py consistenly.
Updated Bibmanager BibTex's doi and URL to always point to latest.


*****  Sun Jan 19 14:59:22 CET 2020  *****

Repurposed pdf_dir config parameter to home, which now serves as
the home folder where to place the database files.  pdf_dir is now
located at home/pdf/

Refactored u.BM_DATABASE, u.BM_BIBFILE, u.BM_TMP_BIB, u.BM_CACHE,
u.BM_HISTORY_SEARCH, and u.BM_HISTORY_ADS from constants into
functions that return the file path, but now evaluate home at
run time (hence the need to be funtionalized).

Added u.BM_PDF() function with the location of the PDF database
folder.

Changed default value of bibfile argument in bm.export() function
to None.  Set it to the previous value at runtime instead if None.

Tweaked config resetting in bm.init() function to always execute
cm.update_keys(), necessary to set the proper home path.

Simplified mock_home() fixture, now that HOME -> home is evaluated
at run time (no need to mock constants).

Changed default behavior when exporting into the database's bibfile
representation.  Now, set meta=True to display the meta-information.
This also allow this info to be read when calling bm.loadfile().

Added bm_database argument to bm.load() function enabling loading
of pickle files that are not the Bibmanager's home database.
Same with get_version() function.

Updated and added docs and tests accordingly.

*****

Tweaked README.md, larger logo, 'fixed' docs URL.

*****

Updated Bibmanager's BibTex in docs (added ADS info).

*****

Fixed bug in cm.get() error message.  Take the available options from
the ROOT config rather than the one at HOME (which might have been
manually modified).

*****

Tweaked u.AlwaysPassValidator() class to use toolbar_text argument
as a default toolbar text.


*****  Mon Jan 20 00:18:44 CET 2020  *****

Modified pm.fetch() function to enable fetching PDFs that are not in
the Bibmanager database.
Added test.
Needs docs.


*****  Mon Jan 20 21:24:05 CET 2020  *****

Updated License line.

*****

Updated docs all around (ready for version 1.2 release).

*****

Added check that PDF files exist when they have a path. If they do
moeve them into the BM_PDF folder. If they don't, set bib.pdf to
None.
Added tests.

*****

Fixed error in latest added tests. Needed to initialize the database.

*****

Added CONTRIBUTING.md file.

*****

Bumped bibmanager version to 1.2.0rc1.
(pre-release).


*****  Thu Jan 23 21:21:04 CET 2020  *****

Refactored u.KeyWordCompleter() class for a cleaner code.
Stop sorting keywords (only keyword options).
Prevent error when tab-completing after keywords that are no
variables of a Bib() object.

*****

Implemented u.KeyPathCompleter() class to enable path completions.
First, suggest keywords, then suggest keyword-options, and finally
suggest files in system.

*****

Enabled bottom-toolbar info for PDFs in u.AlwaysPassValidator().

*****

Reworded bibm pdf prompt text (more descriptive).

*****

Added history to PDF-related prompts.

*****

Couple of tweaks in tests to prevent creating files while testing.


*****  So 26. Jan 16:38:17 CET 2020  *****

Adjusted u.KeyWordCompleter() to offer value options only when
key ends with a colon (improve ADS-searches).

Tweaked u.AutoSuggestCompleter() to parse text in the same way as
u.KeyWordCompleter() does.

*****

Use u.KeyWordCompleter() instead of a WordCompleter() in the
cli_ads_search() function.
Some other minor tweaks in screen outputs.
Adjusted CLI tests.

*****

Added gifs to docs (search and fetch commands) to show auto-complete
behavior.

*****

Added 'Featured Articles' into the docs home.

*****

Added the gif files.

*****

Updated API docs.

*****

Added exceptions for file not found in lm.compile_latex() and
lm.compile_pdflatex() functions.
Enable passing argument without extension. 
Added respective tests.

*****

Catch file-not-found errors when compiling latex files via the CLI
Added respective tests.
This resolves #31


*****  Mon Jan 27 08:57:49 CET 2020  *****

Bumped bibmanager version to 1.2.0rc2.


*****  Di 28. Jan 09:34:52 CET 2020  *****

Ensured to expand user of PDF files in cli_link() function.

*****

Bumped bibmanager version to 1.2.0rc3.

*****

Fixed bug from last edit when pdf is None.

*****

Bumped bibmanager version to 1.2.0rc4.


*****  Fri Jan 31 12:46:22 CET 2020  *****

Added month ValueError when input is not a valid string.
Added tests for month inputs.


*****  Sun Feb  2 20:09:54 CET 2020  *****

Updated contributors section in docs.

*****

Fixed typo in pip-install command in the docs.

*****

Bumped bibmanager version to 1.2.0.
New release (exclamation mark).


*****  Mi 12. Feb 18:11:31 CET 2020  *****

Added check for requests before getting json from response.
Untested, only for debugging purposes.
Set version to 1.2.1.dev0

*****

Modified am.add_bibtex() function to request no more than 2000
entries at a time.
Replaced print statements of failed requests with ValueError
exceptions raises.
Updated test of failing request accordingly.

*****

Modified cli_cleanup(), cli_ads_add(), and cli_ads_update()
to capture the am.add_bibtex() exceptions and print nicely to the
screen output.
Added test for failing cli_ads_add() case.

*****

Fixed email and link to ADS blog article in docs.

*****

Bumped bibmanager version to 1.2.1.
This commit fixes a bug when requesting more than 2000 bibcode
entries at once from ADS (thanks to bug report from Brice-Olivier
Demory).


*****  So 16. Feb 16:00:33 CET 2020  *****

Cleaned up exceptions in the am.search() function
in a similar fashion as the exceptions in am.add_bibtex().

*****

Updated testing for failing ADS searches.

*****

Catch exceptions in cli_ads_search() calls to print out nicely
to the user.

*****

Minor bug fix in test_cli_ads_search() and test_cli_ads_search_next()
tests to prevent modifying the user's config file.

*****

Bumped bibmanager version to 1.2.2.


*****  Mi 19. Feb 16:24:09 CET 2020  *****

Added AtroBetter entry in Featured Articles section in docs.


*****  Mi 4. Mär 17:40:11 CET 2020  *****

Modified lm.build_bib() to remove everything before \begin{document}.


*****  Thu Apr  2 00:18:27 CEST 2020  *****

Implemented lm.parse_subtex_files() to parse subtex files
included in main tex text (recursively).  It currently captures
input, include, and subfile calls.  It does not look for import
calls.
Documented and tested.


*****  Fri Apr 3 20:03:12 CEST 2020  *****

Bumped bibmanager version to 1.2.3.


*****  Sun May 31 14:58:05 CEST 2020  *****

Changed the pickle protocol from pickle.HIGHEST_PROTOCOL to 4
to allow for compatibility between Python 3.6/3.7 and later versions
(which have higer pickle.HIGHEST_PROTOCOL).

*****

Bumped bibmanager version to 1.2.4.
Fixes #63


*****  Sat Aug 15 14:53:10 2020 +0200  *****

Fixed bug in bm.loadfile() when entry is in a single line.

*****

Fixed indentation error in tests.

*****

Cosmetics.

*****

Bumped bibmanager version to 1.2.5.
Fixes #66


*****  Sun Aug 16 13:16:21 2020 +0200  *****

Enabled fetch and open optional arguments for ads-add command.
Solves first part of issue #65.

*****

Bumped bibmanager version to 1.2.6.


*****  Sat Sep  5 20:51:09 CEST 2020  *****

Added --add --fetch --open options to ads_search command-line arg
Documentations is TBD.

*****

Modified pm.set_pdf() and pm.fetch() functions to return the
output PDF file path/name if successfully dowloaded or the entry has
a non None pdf value.
Updated docs and tests accordingly.

*****

Added pdf_file argument to pm.open() function that sets the output
PDF file path/name (even if not in the database).

*****

Enabled fetching PDF files from ADS for entries that are not in the
database.

*****

Redirect ads-add's fetch/open to cli_fetch().


*****  Sun Sep 6 13:29:18 CEST 2020  *****

Documented add, fetch, and open arguments for ads-search and ads-add.

*****

Changed fetch's open command from -open to -o, --open for consistency
with the rest of the options in the ads-add and ads-search commands.
Updated docs and tests.

*****

Cleaned up ADS and PDF docs.

*****

Bumped bibmanager version to 1.2.7.


*****  Sat Oct 24 21:17:54 CEST 2020  *****

Added stdout argument to in subprocess call to open PDF
to redirect any screen output into nothingness.

*****

Added initial implementation of the bibmanager database browser
which is enabled through the 'bibm browse' command.
The code is in the new browser.py file.
The browser provides an interactive full-screen visualization
of the entries in the database.

*****

Updated requirements (prompt_toolkit > 3.0).

*****

Updated docs to describe the new browse command.


*****  Mon Oct 26 22:10:37 CET 2020  *****

Enabled PDF fetching in browser when requested entry doesn't have one


*****  Tue Oct 27 21:06:02 CET 2020  *****

Updated pm.open() to redirect the stdout to DEVNULL to avoid blocking
async routines.

*****

Updated browser search toolbar with a completer with the BibTex keys.
Also, set ignore case to False.

*****

Tweaked MessageDialog class in browser.py to wrap text.

*****

Bumped bibmanager version to 1.3.0rc1.
(pre-release).


*****  Wed Oct 28 20:29:28 CET 2020  *****

Added replace argument to pm.fetch() function to enforce replace
without asking when the user wants.


*****  Mon Nov 2 08:07:57 CET 2020  *****

Modified the browser's BibTeX lexer style to use the user's style.

*****

Enforce replace=True when requesting to fetch PDFs from the browser
to avoid IO dialogs that let the application hanging.
It is still possible to hang if someone removes the pdf meta info
from a file without removing the PDF file, and attempts to fetch.

*****

Bumped bibmanager version to 1.3.0.

*****

Added infograph.

*****

Updated README.

*****

Updated pypi readme.


*****  Thu Dec 31 21:48:43 CET 2020  *****

Moved find_closing_bracket() from browser.py to utils.py.
Updated docstring and added tests.


*****  Sat Jan 2 13:21:39 CET 2021  *****

Re-wrote bm.loadfile() to comply with the bibtex/bst file formatting
when reading a file/piece of text.
See section 8 of the Tame the BeaST document:
http://mirror.easyname.at/ctan/info/bibtex/tamethebeast/ttb_en.pdf
Updated example and tests.

*****

Renamed bm.loadfile() to read_file().
Along with the last two commits, this fixes #79

*****

Refactored Bib.__init__() to default title to None, get value from
booktitle (if there is no title field).
Skipped no-title test (to be removed).

*****

Refactored Bib.__init__() to check that year field has a correct value.
Added test.

*****

Updated invalid-month error in Bib.__init__() to output the key of the
offending entry.
Updated tests.

*****

Added mock_open() fixture to patch subprocess.run call in pm.open().
(I would need to be careful of this fixture if I ever need to use
subprocess.run in another part of the code).
Added mocks to tests where I need to open a PDF to avoid raising
'can't open PDF' sort of issues.

*****

Tweaked entry in tests/conftest.py to prevent minor format warning.


*****  So 10. Jan 13:45:02 CET 2021  *****

Added removal of files created during testing in test_cli.py

*****

Modified u.cond_split() to ignore lettercase as BibTeX does.
Added respective tests.

*****

Added in bm.Bib() constructor an exception to avoid crashing when
the value of the month field is an empty string.
Added test.

*****

Added get_opening argument to u.find_closing_bracket() function
to also return the position of the opening bracket when requested.
Updated and added u.find_closing_bracket() tests.

*****

Tweaked bm.read_file() to ignore @comment entries like BibTeX does.
Added respective tests.


*****  Di 12. Jan 16:56:08 CET 2021  *****

Refactored u.AlwaysPassValidator() class to improve workflow.
No change in behavior.

*****

Modified u.AlwaysPassValidator() class to display the year of entry
in the bottom toolbar.

*****

Updated tests for prompt_toolkit >= 3.0.10.
Added version requirement for tests.

*****

Allowed entries to not have a title.
Added respective test for bm.search().
When an entry has no title, display 'NO_TITLE' in browser and search
bottom toolbars.
Added test to prevent identifying None titles as duplicates.


*****  Mi 13. Jan 15:29:55 CET 2021  *****

Removed title-not-found-error test (no longer needed).

*****

Stored number of entries in the examples/sample.bib file into
a variable.  To simplify further edits during testing.

*****

Allowed entries to not have a year.
Added entry with no year into examples/sample.bib for testing.
Added tests for Bib1 equal or lower than Bib2 when an entry has
no year.


*****  Do 14. Jan 18:29:27 CET 2021  *****

Allowed entries to not have an author.
Added entry with no author into examples/sample.bib for testing.
Added tests for Bib1 equal or lower than Bib2 when entries have
no author.

*****

Modified u.get_authors() to return an empty string when the input
is None.
Added respective tests.

*****

Added Exception to pm.guess_name() when entry does not have author
nor year (cannot guess an appropriate filename).
Added respective test.


*****  Fr 15. Jan 17:09:50 CET 2021  *****

Refactored year parsing in Bib.__init__() to allow years 0--999.

*****

Implemented u.warnings_format() to set a custom warnings format.
Modified Bib.__init__() to throw a warning instead of an exception
for a bad year format.
Added respective tests.

*****

Turned invalid-month exception into a warning.
Updated respective tests.

*****

Added key argument to u.parse_name() to display when raising warnings
Turned invalid-author format into too-many-commas warning.
Attemt to correct the entry when that's the case (guessing what
BibTeX does).
Added respective tests.

*****

Bumped bibmanager to version 1.3.1
The next merge should solve #47 #77 #78 #79


*****  Sat Jan 16 14:29:17 CET 2021  *****

Added youtube tutorial for version 1.3 into the docs.

*****

PEP8ed setup.py

*****

PEP8ed utils.py

*****

PEP8ed bib_manager.py

*****

PEP8ed config_manager.py

*****

PEP8ed ads_manager.py

*****

PEP8ed latex_manager.py

*****

Updated api.rst


*****

Updated copyright year to 2021.

*****

Updated copyright year of license in docs.

*****

Last cosmetic edits in docs.

*****

Bumped bibmanager to version 1.3.2


*****  Mi 20. Jan 16:53:38 CET 2021  *****

Refactored VERSION.py to avoid importing the package in setup.py

*****

Bumped bibmanager to version 1.3.3


*****  Wed Jan 27 10:56:51 CET 2021  *****

Added in README.md conda badge, install options, and how to cite.

*****

Added conda badge to docs.
Added Aaron to contributors to docs.

*****

Added conda installing instructions to docs.

*****

Added link to conda setup guideline to docs.

*****

Added badge to setup.py for PyPI description.

*****

Cosmetics.


*****  Sun Feb 28 12:37:05 CET 2021  *****

Fixed some extra typos (besides those corrected by astromancer).

*****

Propagated typo corrections into the docs.

*****

Updated link of license badge to point to RTD docs. 


*****  Sat Jun 12 19:01:21 CEST 2021  *****

In bm.remove_dubplicates() added additional check for DOI after
identical ISBN values in case the entries refer to different chapters
of a same book.
Added respective tests.

*****

Small tweak to docs (put latest tutorial video first).

*****

Bumped bibmanager to version 1.3.4

*****

Added mock_init to test_duplicate_isbn_same_unknown_doi() tests
because the code needs the config file initialized to set the screen
output style.

