Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJames Simmons <jim@simmons.olpc>2010-06-19 02:28:11 (GMT)
committer James Simmons <jim@simmons.olpc>2010-06-19 02:28:11 (GMT)
commitc1cda09c098eb0369bc250f6c93e9dfe1ca39018 (patch)
treef034a84ee31c05c35fe62e696a446f9fbd750627
parent5d2d125b996540132c7a72027b57f70e424d6bc8 (diff)
Add proofer utility
-rwxr-xr-xproofer.py169
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)