Add full year option to formatter

This commit is contained in:
Marty Oehme 2023-09-15 09:56:50 +02:00
parent f2d8306f1f
commit 12f0935ed4
Signed by: Marty
GPG key ID: EDBF2ED917B2EF6A
2 changed files with 45 additions and 14 deletions

View file

@ -30,20 +30,40 @@ or `Harvey22reflectionsacademiclife` (for Harvey, D. (2022). Reflections on an a
## Configuration ## Configuration
No configuration except for the above setup is required for the formatting to work, No configuration except for the above setup is required for the formatting to work,
but you can set a couple additional ones to customize the bevhavior to your liking: but you can set a couple additional ones to customize the behavior to your liking.
Listed below are all options with their defaults:
### Title length
Currently, you can change the length that the `TitleShort` in `Name2008TitleShort` will be cut down to by setting
the maximum length in words `title-words=4` or in characters `title-chars=20` under the `[plugins.bbt-formatter]` section in your papis configuration file (usually located at `~/.config/papis/config`).
To set a maximum word length, do:
```cfg ```cfg
[settings] [settings]
formater = bbt formater = bbt
ref-format = bbt ref-format = bbt
[plugins.bbt-formatter]
fallback = python
full-year = False
title-words = 4
title-chars = -1
```
### Full year
You can specifiy whether the reference should contain the full 4-digit year representation (i.e. `1997`, `2018`) or just a shortened 2-digit version (`97`, `18`):
```cfg
[plugins.bbt-formatter]
full-year = True
```
This will insert the full 4-digit publication year instead of the (default) shortened version.
### Title length
You can change the length that the `TitleShort` in `Name2008TitleShort` will be cut down to by setting
the maximum length in words `title-words=4` or in characters `title-chars=20` under the `[plugins.bbt-formatter]` section in your papis configuration file (usually located at `~/.config/papis/config`).
To set a maximum word length, do:
```cfg
[plugins.bbt-formatter] [plugins.bbt-formatter]
title-words = 4 title-words = 4
``` ```
@ -93,8 +113,8 @@ Can be any of the installed papis formatters, including custom ones
--- ---
For now this plugin is a rather simple adaption from [this](https://github.com/hrdl-github/papis/commit/b9b9c6eaa3de159e1b210174ef49e90a89271eb8) commit, This plugin is a fairly simple adaption from [this](https://github.com/hrdl-github/papis/commit/b9b9c6eaa3de159e1b210174ef49e90a89271eb8) commit,
turned into an installable papis plugin and extended slightly. turned into an installable papis plugin and extended a bit.
If you spot a bug or have an idea feel free to open an issue.\ If you spot a bug or have an idea feel free to open an issue.\
I might be slow to respond but will consider them all! I might be slow to respond but will consider them all!

View file

@ -36,11 +36,9 @@ class BBTFormatter(papis.format.Formater):
if "author" in doc if "author" in doc
else "UNKNOWN" else "UNKNOWN"
) )
title_unfmt = doc["title"] if "title" in doc else "NO TITLE"
year_unfmt = str(doc["year"]) if "year" in doc else "0000"
author = re.sub("[^a-z]+", "", author_unfmt.lower()) author = re.sub("[^a-z]+", "", author_unfmt.lower())
year = year_unfmt[-2:] year = self.get_year(int(doc["year"]) if "year" in doc else 0000)
title = self.get_title(title_unfmt) title = self.get_title(doc["title"] if "title" in doc else "NO TITLE")
return f"{author}{year}{title}" return f"{author}{year}{title}"
else: else:
# TODO find less hacky way of calling another formatter? # TODO find less hacky way of calling another formatter?
@ -54,7 +52,20 @@ class BBTFormatter(papis.format.Formater):
papis.format._FORMATER = None papis.format._FORMATER = None
return formatter return formatter
def get_year(self, year: int) -> str:
"""Returns year string according to set year display options.
Returns either the full 4-digit year or a shortened 2-digit
version depending on the plugin year options. """
if papis.config.getboolean("full-year", "plugins.bbt-formatter"):
return str(year)
return str(year)[-2:]
def get_title(self, title: str) -> str: def get_title(self, title: str) -> str:
"""Returns cleaned and shortened title.
Removes skip-words, cleans any punctuation and spaces and trims
the title length to that set in plugin length options."""
title = re.sub("[^0-9a-z ]+", "", title.lower()) title = re.sub("[^0-9a-z ]+", "", title.lower())
title_words = list( title_words = list(
map( map(