diff options
author | James Simmons <jim@simmons.olpc> | 2010-06-19 02:28:11 (GMT) |
---|---|---|
committer | James Simmons <jim@simmons.olpc> | 2010-06-19 02:28:11 (GMT) |
commit | c1cda09c098eb0369bc250f6c93e9dfe1ca39018 (patch) | |
tree | f034a84ee31c05c35fe62e696a446f9fbd750627 | |
parent | 5d2d125b996540132c7a72027b57f70e424d6bc8 (diff) |
Add proofer utility
-rwxr-xr-x | proofer.py | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/proofer.py b/proofer.py new file mode 100755 index 0000000..1a449fe --- /dev/null +++ b/proofer.py @@ -0,0 +1,169 @@ +#! /usr/bin/env python +# +# proofer.py +# Copyright (C) 2010 James D. Simmons +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program; if not, write to the Free Software Foundation, Inc., +# 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# + +import sys +import os +import gtk +import getopt +import pango + +page=0 +IMAGE_WIDTH = 600 +ARBITRARY_LARGE_HEIGHT = 10000 + +class Proofer(): + + def keypress_cb(self, widget, event): + "Respond when the user presses one of the arrow keys" + keyname = gtk.gdk.keyval_name(event.keyval) + if keyname == 'plus': + self.font_increase() + return True + if keyname == 'minus': + self.font_decrease() + return True + if keyname == 'Page_Up' : + self.page_previous() + return True + if keyname == 'Page_Down': + self.page_next() + return True + return False + + def font_decrease(self): + font_size = self.font_desc.get_size() / 1024 + font_size = font_size - 1 + if font_size < 1: + font_size = 1 + self.font_desc.set_size(font_size * 1024) + self.textview.modify_font(self.font_desc) + + def font_increase(self): + font_size = self.font_desc.get_size() / 1024 + font_size = font_size + 1 + self.font_desc.set_size(font_size * 1024) + self.textview.modify_font(self.font_desc) + + def page_previous(self): + global page + self.save_current_file(self.filenames[page]) + page=page-1 + if page < 0: page=0 + self.read_file(self.filenames[page]) + self.show_image(self.filenames[page]) + + def page_next(self): + global page + self.save_current_file(self.filenames[page]) + page=page+1 + if page >= len(self.filenames): page=0 + self.read_file(self.filenames[page]) + self.show_image(self.filenames[page]) + + def read_file(self, filename): + "Read the text file" + self.window.set_title("Proofer " + filename) + etext_file = open(filename,"r") + textbuffer = self.textview.get_buffer() + text = '' + line = '' + while etext_file: + line = etext_file.readline() + if not line: + break + text = text + unicode(line, 'iso-8859-1') + textbuffer.set_text(text) + self.textview.set_buffer(textbuffer) + etext_file.close() + + def save_current_file(self, filename): + f = open(filename, 'w') + textbuffer = self.textview.get_buffer() + text = textbuffer.get_text(textbuffer.get_start_iter(), textbuffer.get_end_iter()) + try: + f.write(text) + finally: + f.close + return True + + + def show_image(self, filename): + "display a resized image in a full screen window" + + filename_tuple = filename.split('.') + image_filename = filename_tuple[0] + '.png' + scaled_pixbuf = gtk.gdk.pixbuf_new_from_file_at_size(image_filename, IMAGE_WIDTH, ARBITRARY_LARGE_HEIGHT) + self.image.set_from_pixbuf(scaled_pixbuf) + self.image.show() + + def destroy_cb(self, widget, data=None): + self.save_current_file(self.filenames[page]) + gtk.main_quit() + + def main(self, args): + self.filenames = args + self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) + self.window.connect("destroy", self.destroy_cb) + self.window.set_title("Proofer " + args[0]) + self.window.set_size_request(1200, 600) + self.window.set_border_width(0) + self.scrolled_window = gtk.ScrolledWindow(hadjustment=None, \ + vadjustment=None) + self.textview = gtk.TextView() + self.textview.set_editable(True) + self.textview.set_left_margin(50) + self.textview.set_cursor_visible(True) + self.textview.connect("key_press_event", self.keypress_cb) + self.font_desc = pango.FontDescription("sans 12") + self.textview.modify_font(self.font_desc) + self.scrolled_window.add(self.textview) + self.read_file(args[0]) + self.textview.show() + self.scrolled_window.show() + self.window.show() + + self.scrolled_image = gtk.ScrolledWindow() + self.scrolled_image.set_policy(gtk.POLICY_NEVER, gtk.POLICY_AUTOMATIC) + self.scrolled_image.props.shadow_type = gtk.SHADOW_NONE + self.image = gtk.Image() + self.image.show() + self.show_image(args[0]) + self.scrolled_image.add_with_viewport(self.image) + + self.hpane = gtk.HPaned() + self.hpane.add1(self.scrolled_window) + self.hpane.add2(self.scrolled_image) + self.hpane.show() + + self.window.add(self.hpane) + self.scrolled_window.show() + self.scrolled_image.show() + self.window.show() + + gtk.main() + +if __name__ == "__main__": + try: + opts, args = getopt.getopt(sys.argv[1:], "") + Proofer().main(args) + except getopt.error, msg: + print msg + print "This program has no options" + sys.exit(2) |