diff options
Diffstat (limited to 'biblio/bibtex/utils/pybib/bib2html')
-rw-r--r-- | biblio/bibtex/utils/pybib/bib2html | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/biblio/bibtex/utils/pybib/bib2html b/biblio/bibtex/utils/pybib/bib2html new file mode 100644 index 0000000000..36c12c1b4e --- /dev/null +++ b/biblio/bibtex/utils/pybib/bib2html @@ -0,0 +1,146 @@ +#! /usr/bin/env python +# +# Convert bib file to HTML +# +# TODO +# take out tex fragments, backslash, braces etc +# convert tex accents to HTML accents +# do string substitution using templates +# better handling of different reference types +# probably needs more rigour in the HTML code +# use CSS + + +# Copyright (c) 2007, Peter Corke +# +# All rights reserved. +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# * The name of the copyright holder may not be used to endorse or +# promote products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' +# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS AND CONTRIBUTORS BE +# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF +# THE POSSIBILITY OF SUCH DAMAGE. + +import Bibliography; +import BibEntry; +import BibTeX; +import string; +import sys; +import time; +import optparse; + + +str = ""; + +def append(s): + global str; + + str += s; + +def append_nl(s): + global str; + + str += s + '\n'; + +class HBibEntry(BibEntry.BibEntry): + + def __init__(self, be): + self.fieldDict = be.fieldDict; + + def display(self): + append( "<p>" ); + # put title + if self.getURL(): + append( '<a href="%s"><i>"%s"</i></a>, ' % (self.getURL(), self.getTitle()) ); + else: + append( '<i>"%s"</i>, ' % self.getTitle() ); + + # put authors + append( self.getAuthors() + '. ' ); + month = self.getMonthName(); + year = self.getYear(); + + # put more fields + for k in ['Journal', 'Volume', 'Number', 'Booktitle', + 'Address', 'Institution']: + + if k in self.fieldDict: + append( self.fieldDict[k].strip('"') + ', ' ); + eds = self.getEditorsNames(); + if eds: + append("eds. " + eds + ', '); + if month: + append( month ); + if year > 0: + append( " " + `year` ); + else: + if year > 0: + append( ", " + `year` ); + append( " (%s)" % be.getKey() ); + append_nl( "</p>" ); + + + +## parse switches +p = optparse.OptionParser() +p.add_option('--highlight', dest='highlight', action='store', type='str', + help='highlight the specified word in the output'); +#p.add_option('--resolve', dest='resolve', action='store_true', +# help='resolve cross reference entries'); +p.set_defaults(highlight=None); +(opts, args) = p.parse_args() +globals().update(opts.__dict__) + +if len(args) == 0 and sys.stdin.isatty(): + p.print_help(); + sys.exit(0); + +## read the input files +bib = BibTeX.BibTeX(); +if args: + for f in args: + bib.parseFile(f); +else: + bib.parseFile(); + +bib.resolveAbbrev(); + +## generate HTML +append_nl( "<html>" ); +append_nl( "<head>" ); +append_nl( " <title>Bibliography %s</title>" % ( args[0] if args else '(stdin)',) ); +append_nl( """ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">""" ); +append_nl( "</head>" ); +append_nl( "<body>" ); + +for be in bib: + hb = HBibEntry(be); + hb.display(); + +if highlight: + str = string.replace(str, highlight, """<font color="ff0000">%s</font>""" % highlight); + +append_nl( "<hr>" ); +append_nl( "<p>Generated by bib2html at %s. bib2html by Peter Corke</p>" % time.asctime() ); +append_nl( "</body>" ); +append_nl( "</html>" ); + +print str; + |