diff --git a/README.md b/README.md
index 7d4859e..b1863ba 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,7 @@ And put a _Literature.bib_ BibTex-file into the project's _assets_-folder respec
## Jinja_env
+### Bibliography
To get a formated output of your whole BibTex library you can either
1. Use method citation\_short\_output in the template of your literature page. It creates an unordered list of entries.
```
@@ -66,7 +67,32 @@ produces
This creates an unordered list of all the titles of your bibtex file.
Of course you can also use citation\_entry without a loop and put any id of your bibtex entries into it as parameter.
-## Limitations
-It would be awesome if one could use s.th. like a _cite(id)_-function in the entire project to automatically convert it to proper links to the literature list.
-Like e.g. ```Stahl (2015)```
-But as the only templates can make use of the functions this won't be possible for the markdown content of the page. Or maybe I just don't know how to implement this :shrug:
+Alternatively to the pybtex methods you can use the following **jinja_env globals**:
+
+ citation\_authors\_short(entry)
+ citation\_authors\_full(entry)
+ citation\_editors\_short(entry)
+ citation\_editors\_full(entry)
+ citation\_pubYear(entry)
+ citation\_edition(entry)
+ citation\_publisher(entry)
+ citation\_title(entry)
+ citation\_url(entry)
+ citation\_issbn(entry)
+ citation\_pages(entry)
+ citation\_note(entry)
+
+### In-text Cites
+To cite a certain entry in your texts you can use the **jinja_env globals**:
+
+ citation\_full\_cite(id, link="")
+ citation\_full\_citeNP(id, link="")
+
+Both methods create a complete hyperlink inside your text for the entry with _id_. You may give it any url to the _link_ parameter to e.g. link it to your bibliography page. The NP in the second stands for _No Parantheses_. So you'll receive e.g.
+
+ AuthorI & AuthorII (2019)
+or
+
+ (AuthorI & AuthorII, 2019)
+
+Thanks to the **lektor-jinja-content** plugin which is a dependency of this plugin you might also use the globals inside your markdown or html contents, too.
diff --git a/lektor_citation.py b/lektor_citation.py
index f862ca1..d5b2385 100644
--- a/lektor_citation.py
+++ b/lektor_citation.py
@@ -23,15 +23,40 @@ class CitationPlugin(Plugin):
def citation_entry(self, id):
return self.bib_data.entries[id]
-
- def citation_short_output(self, id, link=None):
- e = self.citation_entry(id)
- if "url" in e.fields.keys() and len(e.fields['url']) > 0:
- link = e.fields['url']
- else:
- link = "?"
+
+ def get_people_full(self, lAuthor):
+ authors = ""
+ n = 1
+ for author in lAuthor:
+ first = author.first_names
+ if len(first) > 0 :
+ for item in first:
+ authors += "{i} ".format(i = str(item))
+ middle = author.middle_names
+ if len(middle) > 0 :
+ for item in middle:
+ authors += "{i} ".format(i = str(item))
+
+ prelast = author.prelast_names
+ if len(prelast) > 0:
+ for item in prelast:
+ authors += "{i} ".format(i = str(item))
+ authors += str(author.last_names[0])
+
+ if len(lAuthor) > 1:
+
+ if n == (len(lAuthor) - 1):
+ authors += " \& "
+ elif n < (len(lAuthor) -1):
+ authors += ", "
+
+ n = n + 1
+ return authors
+
+
+
+ def get_people_short(self, lAuthor):
authors = ""
- lAuthor = e.persons['author']
n = 1
for author in lAuthor:
prelast = author.prelast_names
@@ -57,17 +82,33 @@ class CitationPlugin(Plugin):
authors += ", "
n = n + 1
+ return authors
+
+ def get_pubYear(self, e):
+ if "year" in e.fields.keys():
+ year = e.fields['year']
+ else:
+ year = ""
+ return year
+
+ def get_title(self, e):
+ if "title" in e.fields.keys():
+ title = e.fields['title']
+ else:
+ title = ""
+ return title
+
+ def get_edition(self, e):
-
- year = e.fields['year']
- edition = ""
if 'edition' in e.fields.keys():
edition = e.fields['edition']
edition = " ({ed}. Ed.)".format(ed = edition)
else:
edition = ""
-
+
+ return edition
+ def get_publisher(self, e):
if 'publisher' in e.fields.keys():
publisher = e.fields['publisher']
if 'address' in e.fields.keys():
@@ -77,88 +118,93 @@ class CitationPlugin(Plugin):
publisher = " {publisher}.".format(publisher = publisher)
else:
publisher = ""
-
- output = '
{authors} ({pubYear}). {title}{edition}. {publisher}'.format(eid = id, link = link, authors = authors, pubYear = year, title = e.fields['title'], edition = edition, publisher = publisher)
- return output
-
- def citation_full_output(self, id):
- e = self.citation_entry(id)
- if "url" in e.fields.keys() and len(e.fields['url']) > 0:
- link = e.fields['url']
- else:
- link = "?"
-
- def circle_people(lAuthor):
- authors = ""
- n = 1
- for author in lAuthor:
- first = author.first_names
- if len(first) > 0 :
- for item in first:
- authors += "{i} ".format(i = str(item))
- middle = author.middle_names
- if len(middle) > 0 :
- for item in middle:
- authors += "{i} ".format(i = str(item))
-
- prelast = author.prelast_names
- if len(prelast) > 0:
- for item in prelast:
- authors += "{i} ".format(i = str(item))
- authors += str(author.last_names[0])
-
- if len(lAuthor) > 1:
-
- if n == (len(lAuthor) - 1):
- authors += " \& "
- elif n < (len(lAuthor) -1):
- authors += ", "
+ return publisher
- n = n + 1
- return authors
-
-
- authors = circle_people(e.persons['author'])
- if "editor" in e.persons.keys():
- editors = circle_people(e.persons['editor'])
- else:
- editors = ""
-
-
- year = e.fields['year']
- edition = ""
- if 'edition' in e.fields.keys():
- edition = e.fields['edition']
- edition = " {ed}. Ed.".format(ed = edition)
- else:
- edition = ""
+ def get_pages(self, e):
if 'pages' in e.fields.keys():
pages = e.fields['pages']
else:
pages = ""
-
+ return pages
+
+ def get_issbn(self, e):
if 'issbn' in e.fields.keys():
issbn = e.fields['issbn']
else:
issbn = ""
+ return issbn
+ def get_note(self, e):
if 'note' in e.fields.keys():
note = e.fields['note']
else:
note = ""
+ return note
+
+ def get_url(self, e):
+ if "url" in e.fields.keys() and len(e.fields['url']) > 0:
+ link = e.fields['url']
+ else:
+ link = "?"
+ return link
+
+
+ def get_editors_short(self, e):
+ if "editor" in e.persons.keys():
+ editors = self.get_people_short(e.persons['editor'])
+ else:
+ editors = ""
+ return editors
+
+ def get_editors_full(self, e):
+ if "editor" in e.persons.keys():
+ editors = self.get_people_full(e.persons['editor'])
+ else:
+ editors = ""
+ return editors
+
+ def get_authors_short(self, e):
+ if "author" in e.persons.keys():
+ authors = self.get_people_short(e.persons['author'])
+ else:
+ authors = ""
+ return authors
+
+ def get_authors_full(self, e):
+ if "author" in e.persons.keys():
+ authors = self.get_people_full(e.persons['author'])
+ else:
+ authors = ""
+ return authors
+
- if 'publisher' in e.fields.keys():
- publisher = e.fields['publisher']
- if 'address' in e.fields.keys():
- location = e.fields['address']
- publisher = " {location}: {publisher}.".format(location = location, publisher = publisher)
- elif publisher:
- publisher = " {publisher}.".format(publisher = publisher)
- else:
- publisher = ""
-
+
+ def citation_short_output(self, id, link=None):
+ e = self.citation_entry(id)
+ link = self.get_url(e)
+ authors = self.get_authors_short(e)
+ title = self.get_title(e)
+ year = self.get_pubYear(e)
+ edition = self.get_edition(e)
+ publisher = self.get_publisher(e)
+
+ output = '{authors} ({pubYear}). {title}{edition}. {publisher}'.format(eid = id, link = link, authors = authors, pubYear = year, title = title, edition = edition, publisher = publisher)
+ return output
+
+ def citation_full_output(self, id):
+ e = self.citation_entry(id)
+ link = self.get_url(e)
+ authors = self.get_authors_full(e)
+ editors = self.get_editors_full(e)
+ title = self.get_title(e)
+ year = self.get_pubYear(e)
+ edition = self.get_edition(e)
+ pages = self.get_pages(e)
+ issbn = self.get_issbn(e)
+ note = self.get_note(e)
+ publisher = self.get_publisher(e)
output = """{title}
{authors} ({pubYear})
{note}
@@ -174,17 +220,46 @@ class CitationPlugin(Plugin):
{publisher}
-""".format(eid = id, link = link, authors = authors, pubYear = year, title = e.fields['title'], edition = edition, publisher = publisher, editors = editors, pages = pages, issbn = issbn, note = note)
+""".format(eid = id, link = link, authors = authors, pubYear = year, title = title, edition = edition, publisher = publisher, editors = editors, pages = pages, issbn = issbn, note = note)
+ return output
+
+ def citation_full_cite(self,id,link=""):
+ e = self.citation_entry(id)
+ authors = self.get_authors_short(e)
+ year = self.get_pubYear(e)
+ output = """({authors}, {pubYear})""".format(link = link, id = id, authors = authors, pubYear = year)
+ return output
+
+ def citation_full_citeNP(self,id,link=""):
+ e = self.citation_entry(id)
+ authors = self.get_authors_short(e)
+ year = self.get_pubYear(e)
+ output = """{authors} ({pubYear})""".format(link = link, id = id, authors = authors, pubYear = year)
return output
def on_setup_env(self, **extra):
def decode_filter(value):
+ """ Make sure that special chars like german umlaute or accents are displayed in unicode """
return LatexNodes2Text().latex_to_text(value)
self.env.jinja_env.globals['citation_entries'] = self.citation_entries
self.env.jinja_env.globals['citation_entry'] = self.citation_entry
self.env.jinja_env.globals['citation_short_output'] = self.citation_short_output
self.env.jinja_env.globals['citation_full_output'] = self.citation_full_output
+ self.env.jinja_env.globals['citation_full_cite'] = self.citation_full_cite
+ self.env.jinja_env.globals['citation_full_citeNP'] = self.citation_full_citeNP
+ self.env.jinja_env.globals['citation_authors_short'] = self.get_authors_short
+ self.env.jinja_env.globals['citation_authors_full'] = self.get_authors_full
+ self.env.jinja_env.globals['citation_editors_short'] = self.get_editors_short
+ self.env.jinja_env.globals['citation_editors_full'] = self.get_editors_full
+ self.env.jinja_env.globals['citation_pubYear'] = self.get_pubYear
+ self.env.jinja_env.globals['citation_edition'] = self.get_edition
+ self.env.jinja_env.globals['citation_publisher'] = self.get_publisher
+ self.env.jinja_env.globals['citation_title'] = self.get_title
+ self.env.jinja_env.globals['citation_url'] = self.get_url
+ self.env.jinja_env.globals['citation_issbn'] = self.get_issbn
+ self.env.jinja_env.globals['citation_pages'] = self.get_pages
+ self.env.jinja_env.globals['citation_note'] = self.get_note
self.env.jinja_env.filters['decode'] = decode_filter
diff --git a/setup.py b/setup.py
index ac66bd8..eef5cb7 100644
--- a/setup.py
+++ b/setup.py
@@ -35,5 +35,5 @@ setup(
'citation = lektor_citation:CitationPlugin',
]
},
- install_requires=['pybtex','pylatexenc']
+ install_requires=['pybtex','pylatexenc','lektor-jinja-content']
)