Source code for backends.customhtml

import pybtex
from pybtex.backends.html import Backend as HTMLBackend
from plugin_data import plugin_data
import os

PROLOGUE = '''<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html>
<head><meta name="generator" content="Pybtex">
<meta http-equiv="Content-Type" content="text/html; charset={encoding}">
<title>Bibliography</title>
<style>
{stylesheet}
</style>
</head>
<body>
<dl>
'''

fname = os.path.join(os.path.dirname(__file__), '../publications.css')
with open(fname) as css_file:
    STYLESHEET = css_file.read()


[docs]class Backend(HTMLBackend):
[docs] def write_entry(self, key, label, text): # TODO: If CSS fails, do HTML stuff here self.output('<dt>%s</dt>\n' % label) self.output('<dd>%s</dd>\n' % text)
[docs] def write_section(self, text): self.output('<h2 class="publipy-section">%s</h2>' % text)
[docs] def write_epilogue(self): if plugin_data['write_html_wrapper']: super().write_epilogue() else: pass
[docs] def write_prologue(self): if plugin_data['write_html_wrapper']: encoding = self.encoding or pybtex.io.get_default_encoding() self.output(PROLOGUE.format(encoding=encoding, stylesheet=STYLESHEET)) else: pass
[docs] def write_to_stream(self, formatted_bibliography, stream): """Will be called by write to file. We override to deal with the case where the FormattedBibliography has groups.""" self.output = stream.write self.formatted_bibliography = formatted_bibliography self.write_prologue() entries = list(formatted_bibliography) last_group = None if len(entries) == 0: pass else: if isinstance(entries[0], tuple): for group_name, entry in entries: if group_name != last_group: self.write_section(group_name) last_group = group_name self.write_entry(entry.key, entry.label, entry.text.render(self)) else: for entry in entries: self.write_entry(entry.key, entry.label, entry.text.render(self)) self.write_epilogue()