aboutsummaryrefslogtreecommitdiff
path: root/docs/source/bibstyle.py
diff options
context:
space:
mode:
authorMike Toews <mwtoews@gmail.com>2018-06-14 15:54:39 +1200
committerMike Toews <mwtoews@gmail.com>2018-06-14 20:24:07 +1200
commit7796cb7e5c23b06aac9ce84245e11dd82730fbcf (patch)
tree454ba312753fc64a29f1e05dd2dcdf098ca8d599 /docs/source/bibstyle.py
parentaea86ed356d462fc7cfddbd402253ac0d3a72dd6 (diff)
downloadPROJ-7796cb7e5c23b06aac9ce84245e11dd82730fbcf.tar.gz
PROJ-7796cb7e5c23b06aac9ce84245e11dd82730fbcf.zip
Start a `customstyle` for bibliographic references
Modifies label to use BibTeX key name, and format names with lastfirst
Diffstat (limited to 'docs/source/bibstyle.py')
-rw-r--r--docs/source/bibstyle.py64
1 files changed, 64 insertions, 0 deletions
diff --git a/docs/source/bibstyle.py b/docs/source/bibstyle.py
new file mode 100644
index 00000000..8e2cc02a
--- /dev/null
+++ b/docs/source/bibstyle.py
@@ -0,0 +1,64 @@
+###############################################################################
+#
+# Purpose: Configure custom bibliography style for sphinxcontrib-bibtex
+# Author: Mike Toews <mwtoews at gmail.com>
+#
+###############################################################################
+# Copyright (c) 2018, Mike Toews <mwtoews at gmail.com>
+#
+# Permission is hereby granted, free of charge, to any person obtaining a
+# copy of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the
+# Software is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+# DEALINGS IN THE SOFTWARE.
+###############################################################################
+
+import re
+from pybtex.style.formatting.unsrt import Style as UnsrtStyle
+from pybtex.style.labels.alpha import LabelStyle
+from pybtex.plugin import register_plugin
+
+
+class LinkLabelStyle(LabelStyle):
+ """Citation label used in text, and before each item in the
+ References section"""
+
+ re_char_nums = re.compile(r'^[\d\w]+$')
+
+ def format_label(self, entry):
+ """Returns BibTeX key for label
+
+ Raises KeyError if BibTeX key has other characters other than letters
+ and numbers.
+ """
+ label = entry.key
+ if not self.re_char_nums.match(label):
+ raise KeyError(
+ 'BibTeX key must contain only letters and numbers '
+ '(found {0!r})'.format(label))
+ return label
+
+
+class CustomStyle(UnsrtStyle):
+ """Citation style in the References section"""
+
+ default_label_style = 'linklabel'
+ default_name_style = 'lastfirst'
+ default_sorting_style = 'author_year_title'
+ # TODO: Make more Harvard-like, i.e. year after name(s)
+
+
+register_plugin('pybtex.style.labels', 'linklabel', LinkLabelStyle)
+register_plugin('pybtex.style.formatting', 'customstyle', CustomStyle)