Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Convert.py
diff options
context:
space:
mode:
Diffstat (limited to 'Convert.py')
-rwxr-xr-xConvert.py238
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)