diff options
Diffstat (limited to 'Convert.py')
-rwxr-xr-x | Convert.py | 238 |
1 files changed, 0 insertions, 238 deletions
diff --git a/Convert.py b/Convert.py deleted file mode 100755 index fae30f7..0000000 --- a/Convert.py +++ /dev/null @@ -1,238 +0,0 @@ -#!/usr/bin/env python - -#---------------------------------------------------------------------- -# Convert.py -# Dave Reed -# 01/23/2008 -#---------------------------------------------------------------------- - -import sys, os - -try: - from xml.etree import ElementTree as etree -except: - sys.exit() - -from GladeWindow import * - -#---------------------------------------------------------------------- - -class Window(GladeWindow): - - #---------------------------------------------------------------------- - - def __init__(self): - - ''' ''' - - self.init() - - #---------------------------------------------------------------------- - - def init(self): - - filename = 'Convert.glade' - - widget_list = [ - 'window1', - 'entry1', - 'entry2', - ] - - handlers = [ - 'on_entry2_activate', - ] - - top_window = 'window1' - GladeWindow.__init__(self, filename, top_window, widget_list, handlers) - #---------------------------------------------------------------------- - - def on_entry2_activate(self, *args): - output_folder = self.widgets['entry2'].get_text() - convert_main(output_folder) - - def main_window_destroy(): - self.destroy() - -#---------------------------------------------------------------------- -class InTree(): - - def __init__(self, filename): - self.tree = etree.parse(filename) - self.xml = self.tree.getroot() - - def get(self, node): - idcard = node.attrib.get("id") - if not idcard: - idcard = '0' - question = node.findtext("front") - if not question: - question = '' - hint = node.findtext('comment') - if not hint: - hint = '' - sound = node.findtext('sound') - if not sound: - sound = '' - answer = node.findtext("back") - if not answer: - answer = '' - more = node.findtext('backexample') - if not more: - more = '' - image = node.findtext('image') - if not image: - image = '' - return (idcard, question, hint, answer, more, sound, image) - -#---------------------------------------------------------------------- -class SaveDeck(): - def __init__(self): - self.xml = etree.Element("quiz") - - def put(self, card): - if len(card) < 7: - print 'fatal error in put:', len(card) - sys.exit() - xmlcard = etree.Element("card") - xmlcard.set("id",str(card[0])) - question = etree.SubElement(xmlcard, "question") - question.text = card[1] - if len(card[2]) > 0: - hint = etree.SubElement(question, "hint") - hint.text = card[2] - if len(card[5]) > 0: - sound = etree.SubElement(question, 'sound') - sound.text = card[5] - answer = etree.SubElement(xmlcard, "answer") - answer.text = card[3] - if len(card[4]) > 0: - more = etree.SubElement(answer, "more") - more.text = card[4] - if len(card[6]) > 0: - image = etree.SubElement(answer, 'image') - image.text = card[6] - self.xml.append(xmlcard) - - # in-place prettyprint formatter - - def indent(self, elem, level=0): - i = "\n" + level*" " - if len(elem): - if not elem.text or not elem.text.strip(): - elem.text = i + " " - for elem in elem: - self.indent(elem, level+1) - if not elem.tail or not elem.tail.strip(): - elem.tail = i - else: - if level and (not elem.tail or not elem.tail.strip()): - elem.tail = i - - def printtree(self, filename, last): - self.xml.set("last",str(last)) - #prettyprint - tree = etree.ElementTree(self.xml) - self.indent(self.xml) - tree.write(filename, encoding = 'utf-8') - -#---------------------------------------------------------------------- -def get_filenames(): - #select decks using file chooser dialog [ user must select in correct order ] - chooser = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_OPEN, \ - buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_OPEN,gtk.RESPONSE_OK)) - chooser.set_select_multiple(True) - chooser.set_default_response(gtk.RESPONSE_OK) - response = chooser.run() - if response != gtk.RESPONSE_OK: - sys.exit() - decks = chooser.get_filenames() - chooser.destroy() - return decks - -def fix_file(filename, outfilename): - infile = open(filename) - s = unicode(infile.read(),'ISO 8859-1') - infile.close() - t = s.replace('<?xml version="1.0" ?>','<?xml version="1.0" encoding= "utf-16" ?>') - s = t - t = s.replace('utf-16', 'utf-8') - s = t - s = t - t = s.replace('front example', 'frontexample') - s = t - s = t - t = s.replace('back example', 'backexample') - s = t - outfile = open(outfilename, 'w') - outfile.write(t) - outfile.close - -def get_deck(tree): - deck = [] - for node in tree.xml: - card = tree.get(node) - deck.append(card) - return deck - -def get_tree(filename): - global w - tree = InTree(filename) - return tree - -def convert_deck(deck): - cards = [] - for card in deck: - #card = [id, question, hint, answer, more, sound, image] - id = str(len(cards)) - #make newcard [id, card[1], card[2], card[3], card[4], card[5], card[6]] - #sound = card[5] - #if len(sound) > 0: - # newcard = [id, card[1], card[2], sound[:-4], card[4], card[5], card[6]] - #else: - newcard = [id, card[1], card[2], card[3], card[4], card[5], card[6]] - #add to cards - cards.append(newcard) - return cards - -def save_deck(filename, cards): - #create tree from cards - out = SaveDeck() - for card in cards: - out.put(card) - #write tree with pretty print - number = len(cards) - out.printtree(filename, number) - -def path_strip(pathname): - # get part after last /, if any - filename = os.path.basename(pathname) - return filename - - -def convert_main(outfolder): - global w - decks = get_filenames() - for filename in decks: - w.widgets['entry1'].set_text(path_strip(filename)) - outfilename = './' + outfolder + '/' + path_strip(filename) - #fix_file(filename, outfilename) - tree = get_tree(filename) - deck = get_deck(tree) - cards = convert_deck(deck) - save_deck(outfilename, cards) - sys.exit() - -#---------------------------------------------------------------------- - -def main(argv): - global w - w = Window() - w.show() - w.widgets['entry2'].grab_focus() - gtk.main() - -#---------------------------------------------------------------------- - -if __name__ == '__main__': - main(sys.argv) |