diff --git a/lektor_citation.py b/lektor_citation.py index 51e1d85..874b102 100644 --- a/lektor_citation.py +++ b/lektor_citation.py @@ -7,7 +7,7 @@ from lektor.pluginsystem import Plugin class CitationPlugin(Plugin): name = 'lektor-citation' - description = u'This Plugin should extend lektor with APA-style citations using bibtex files. It is based on the known lektor-bibtex-support plugin by arunpersaud.' + description = u'This Plugin should extend lektor with APA-styled citations using bibtex files. It was based on the known lektor-bibtex-support plugin by arunpersaud.' def __init__(self, env, id): @@ -39,7 +39,15 @@ class CitationPlugin(Plugin): for item in prelast: authors += "{i} ".format(i = str(item)) authors += str(author.last_names[0]) - + first = author.first_names + if len(first) > 0 : + authors += "," + for item in first: + authors += " {i}.".format(i = str(item[:1])) + middle = author.middle_names + if len(middle) > 0 : + for item in middle: + authors += " {i}.".format(i = str(item[:1])) if len(lAuthor) > 1: @@ -55,7 +63,7 @@ class CitationPlugin(Plugin): edition = "" if 'edition' in e.fields.keys(): edition = e.fields['edition'] - edition = " ({ed}. Aufl.)".format(ed = edition) + edition = " ({ed}. Ed.)".format(ed = edition) else: edition = "" @@ -73,6 +81,100 @@ class CitationPlugin(Plugin): 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 += ", " + + 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 = "" + + if 'pages' in e.fields.keys(): + pages = e.fields['pages'] + else: + pages = "" + + if 'issbn' in e.fields.keys(): + issbn = e.fields['issbn'] + else: + issbn = "" + + if 'note' in e.fields.keys(): + note = e.fields['note'] + else: + note = "" + + + 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 = "" + + + output = """

    {title}

    {authors} ({pubYear})

    +

    {note}

    +
    +
    +
    {edition}
    +
    +
    {editors}
    +
    +
    {pages}
    +
    +
    {issbn}
    +
    +
    {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) + return output @@ -83,6 +185,7 @@ class CitationPlugin(Plugin): 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.filters['decode'] = decode_filter