From 12f0935ed43689cd40b607269855f5eb240431e7 Mon Sep 17 00:00:00 2001 From: Marty Oehme Date: Fri, 15 Sep 2023 09:56:50 +0200 Subject: [PATCH] Add full year option to formatter --- README.md | 40 ++++++++++++++++++++++++--------- papis_bbt_formatter/__init__.py | 19 ++++++++++++---- 2 files changed, 45 insertions(+), 14 deletions(-) diff --git a/README.md b/README.md index 52331d5..9899c99 100644 --- a/README.md +++ b/README.md @@ -30,20 +30,40 @@ or `Harvey22reflectionsacademiclife` (for Harvey, D. (2022). Reflections on an a ## Configuration 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: - -### 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: +but you can set a couple additional ones to customize the behavior to your liking. +Listed below are all options with their defaults: ```cfg [settings] formater = 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] 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, -turned into an installable papis plugin and extended slightly. +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 a bit. 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! diff --git a/papis_bbt_formatter/__init__.py b/papis_bbt_formatter/__init__.py index 31adf9c..2db3fd8 100644 --- a/papis_bbt_formatter/__init__.py +++ b/papis_bbt_formatter/__init__.py @@ -36,11 +36,9 @@ class BBTFormatter(papis.format.Formater): if "author" in doc 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()) - year = year_unfmt[-2:] - title = self.get_title(title_unfmt) + year = self.get_year(int(doc["year"]) if "year" in doc else 0000) + title = self.get_title(doc["title"] if "title" in doc else "NO TITLE") return f"{author}{year}{title}" else: # TODO find less hacky way of calling another formatter? @@ -54,7 +52,20 @@ class BBTFormatter(papis.format.Formater): papis.format._FORMATER = None 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: + """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_words = list( map(