From 144b3a16f5a3711738814fd262d54bdc60cf0035 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 25 Apr 2007 02:20:22 +0000 Subject: [PATCH] Added support for headers to LRF convertors --- src/libprs500/lrf/__init__.py | 17 +++++++++++++++-- src/libprs500/lrf/html/convert_from.py | 10 ++++++++-- src/libprs500/lrf/pylrs/pylrs.py | 2 +- src/libprs500/lrf/txt/convert_from.py | 7 +++++++ 4 files changed, 31 insertions(+), 5 deletions(-) diff --git a/src/libprs500/lrf/__init__.py b/src/libprs500/lrf/__init__.py index f682803a08..df8894183f 100644 --- a/src/libprs500/lrf/__init__.py +++ b/src/libprs500/lrf/__init__.py @@ -20,6 +20,7 @@ At the time fo writing, this package only supports reading and writing LRF meat from optparse import OptionParser from libprs500.lrf.pylrs.pylrs import Book as _Book +from libprs500.lrf.pylrs.pylrs import TextBlock, Header, PutObj, Paragraph, TextStyle from libprs500 import __version__ as VERSION __docformat__ = "epytext" @@ -30,6 +31,8 @@ class ConversionError(Exception): def option_parser(usage): parser = OptionParser(usage=usage, version='libprs500 '+VERSION) + parser.add_option('--header', action='store_true', default=False, dest='header', + help='Add a header to all the pages with title and author.') parser.add_option("-t", "--title", action="store", type="string", \ dest="title", help="Set the title") parser.add_option("-a", "--author", action="store", type="string", \ @@ -42,7 +45,17 @@ def option_parser(usage): help='Output file name. Default is derived from input filename') return parser -def Book(font_delta=0, **settings): +def Book(font_delta=0, header=None, **settings): + ps = dict(textwidth=575, textheight=747) + if header: + hdr = Header() + hb = TextBlock(TextStyle(align='foot', fontsize=50)) + hb.append(header) + hdr.PutObj(hb) + ps['headheight'] = 30 + ps['header'] = header + ps['header'] = hdr + ps['topmargin'] = 10 return _Book(textstyledefault=dict(fontsize=100+font_delta*20), \ - pagestyledefault=dict(textwidth=575, textheight=747), \ + pagestyledefault=ps, \ **settings) \ No newline at end of file diff --git a/src/libprs500/lrf/html/convert_from.py b/src/libprs500/lrf/html/convert_from.py index f66fe53c02..00f15b3133 100644 --- a/src/libprs500/lrf/html/convert_from.py +++ b/src/libprs500/lrf/html/convert_from.py @@ -31,7 +31,7 @@ from operator import itemgetter from libprs500.lrf.html.BeautifulSoup import BeautifulSoup, Comment, Tag, \ NavigableString, Declaration from libprs500.lrf.pylrs.pylrs import Paragraph, CR, Italic, ImageStream, TextBlock, \ - ImageBlock, JumpButton, CharButton, Page, BlockStyle + ImageBlock, JumpButton, CharButton, Page, Bold from libprs500.lrf.pylrs.pylrs import Span as _Span from libprs500.lrf import ConversionError, option_parser, Book from libprs500 import extract @@ -618,7 +618,13 @@ def process_file(path, options): freetext=options.freetext, category=options.category) if tpath: args['thumbnail'] = tpath - book = Book(**args) + header = None + if options.header: + header = Paragraph() + header.append(Bold(options.title)) + header.append(' by ') + header.append(Italic(options.author)) + book = Book(header=header, **args) conv = HTMLConverter(book, path, font_delta=options.font_delta, cover=cpath) conv.process_links() oname = options.output diff --git a/src/libprs500/lrf/pylrs/pylrs.py b/src/libprs500/lrf/pylrs/pylrs.py index acbd768bea..af3aca9b9e 100644 --- a/src/libprs500/lrf/pylrs/pylrs.py +++ b/src/libprs500/lrf/pylrs/pylrs.py @@ -1034,7 +1034,7 @@ class LrsStyle(LrsObject, LrsAttributes, LrsContainer): def setDefaults(selfClass, settings): for name, value in settings.items(): if name not in selfClass.validSettings: - raise LrsError, "default setting %s not recognized" + raise LrsError, "default setting %s not recognized" % name selfClass.defaults[name] = value diff --git a/src/libprs500/lrf/txt/convert_from.py b/src/libprs500/lrf/txt/convert_from.py index 83a1816d09..384e891c84 100644 --- a/src/libprs500/lrf/txt/convert_from.py +++ b/src/libprs500/lrf/txt/convert_from.py @@ -19,6 +19,7 @@ import os, sys from libprs500.lrf import ConversionError, option_parser from libprs500.lrf import Book +from libprs500.lrf.pylrs.pylrs import Paragraph, Italic, Bold def main(): @@ -57,6 +58,12 @@ def convert_txt(path, options): the text in C{path}.) """ import fileinput + header = None + if options.header: + header = Paragraph() + header.append(Italic(options.title)) + header.append(' by ') + header.append(Bold(options.author)) book = Book(title=options.title, author=options.author, \ sourceencoding=options.encoding, freetext=options.freetext, \ category=options.category)