#!/usr/bin/env python import Ft.Xml from Ft.Xml import EMPTY_NAMESPACE import sys books = [ 'Genesis', 'Exodus', 'Leviticus', 'Numbers', 'Deuteronomy', 'Joshua', 'Judges', 'Ruth', 'Samuel_1', 'Samuel_2', 'Kings_1', 'Kings_2', 'Chronicles_1', 'Chronicles_2', 'Ezra', 'Nehemiah', 'Esther', 'Job', 'Psalms', 'Proverbs', 'Ecclesiastes', 'Song_of_Songs', 'Isaiah', 'Jeremiah', 'Lamentations', 'Ezekiel', 'Daniel', 'Hosea', 'Joel', 'Amos', 'Obadiah', 'Jonah', 'Micah', 'Nahum', 'Habakkuk', 'Zephaniah', 'Haggai', 'Zechariah', 'Malachi', ]; class Reader: def __init__(self): self.book_number = -1 # hack self.books_data = [] def read(self): v = None while 1: if not v: self.book_number = self.book_number + 1 if self.book_number >= len(books): return doc = Ft.Xml.Parse("WLC/"+self.book_name()+".xml") v = doc.xpath(u'/Tanach/tanach/book/c/v[1]')[0] name_full = doc.xpath(u'/Tanach/tanach/book/names/name/text()')[0].data name_abbr = doc.xpath(u'/Tanach/tanach/book/names/abbrev/text()')[0].data self.books_data.append({'full': name_full, 'abbr': name_abbr}) self.process_verse(v) # Go to the next verse v1 = v.xpath(u"following-sibling::v[1]") if v1: v = v1[0] else: v1 = v.xpath(u"../following-sibling::c[1]/v[1]") if v1: v = v1[0] else: v = None def book_name(self): return books[self.book_number] class TextItem: pass class Word(TextItem): def __init__(self,w): self.value = w class Samekh(TextItem): pass class Pe(TextItem): pass class VerseMark: def __init__(self, book_number, chap, verse): self.book_number, self.chap, self.verse = book_number, chap, verse def book_name(self): return books[self.book_number] def chap_and_verse(self): return str(self.chap) + ':' + str(self.verse) def __str__(self): return self.book_name() + ' ' + self.chap_and_verse() class Verse: def __init__(self, book_number, chap, verse): self.mark = VerseMark(book_number, chap, verse) self.list = [] def book_name(self): return self.mark.book_name(); def chap_and_verse(self): return self.mark.chap_and_verse(); def clean_word(w): res = "" for c in w: if c >= u"\u05D0" and c <= u"\u05EA": res = res + c return res class MyReader(Reader): def __init__(self): Reader.__init__(self) self.verses = [] def process_verse(self, v): chap = v.parentNode.getAttributeNS(EMPTY_NAMESPACE, 'n') verse = v.getAttributeNS(EMPTY_NAMESPACE, 'n') verse_obj = Verse(self.book_number, chap, verse) items = v.xpath(u'w|pe|samekh') for i in items: if i.tagName == u'pe': verse_obj.list.append(Pe()) elif i.tagName == u'samekh': verse_obj.list.append(Samekh()) elif i.tagName == u'w': childs = i.xpath(u'.//text()') str = [c.data for c in childs] word = clean_word("".join(str)) verse_obj.list.append(Word(word)) self.verses.append(verse_obj) reader = MyReader() reader.read() #print reader.parashot def wiki_title(v): #book_data = reader.books_data[par.start.book_number] return 'Tanakh:' + reader.books_data[v.mark.book_number]['full'] + " " + v.mark.chap_and_verse(); def format_verse(verse): p = u'' + verse.chap_and_verse() + u'' for elem in verse.list: if isinstance(elem, Word): word = elem.value p = p + u'[[Hebrew:'+ word + u'|' + word + u']] ' elif isinstance(elem, Samekh): p = p + u'| ' elif isinstance(elem, Pe): p = p + u'|| ' if p[-1] == u' ': p = p[:-1] return p # Write actual paragraph wiki files for i in range(len(reader.verses)): verse = reader.verses[i] book_data = reader.books_data[verse.mark.book_number] filename = wiki_title(verse) #print verse.chap_and_verse() title = book_data['full'] + ' ' + verse.chap_and_verse() p = u"" if i > 0 and verse.mark.book_number == reader.verses[i - 1].mark.book_number: p = p + u'' + format_verse(reader.verses[i - 1]) + u' ' p = p + format_verse(verse) if i < len(reader.verses) - 1 and verse.mark.book_number == reader.verses[i + 1].mark.book_number: p = p + u' ' + format_verse(reader.verses[i + 1]) + u'' if i > 0: prev = u'[[' + wiki_title(reader.verses[i-1]) + u'|Previous]]' else: prev = "" if i < len(reader.verses) - 1: next = u'[[' + wiki_title(reader.verses[i+1]) + u'|Next]]' else: next = "" if prev != "" and next != "": prev_next = prev + ' ' + next elif prev != "": prev_next = prev elif next != "": prev_next = next exegesis_link = 'Exegesis:' + book_data['full'] + ' ' + verse.chap_and_verse() fmt = u""" {prev_next}
{par}
[[{exegesis_link}|Exegesis]] """ wiki = fmt.format(title=title, prev_next=prev_next, par=p, exegesis_link=exegesis_link) file = open('out/'+filename, 'w') file.write(wiki.encode('utf-8')) file.close() book_ranges = [[] for i in books] for p in reader.verses: book_ranges[p.mark.book_number].append(p) for i in range(len(books)): book_data = reader.books_data[i] book_name = book_data['full'] file = open('out/TanakhIndex:'+book_name, 'w') file.write("=Tanakh book: " + book_name + "=") for r in book_ranges[i]: text = book_data['abbr'] + ' ' + r.chap_and_verse() link = wiki_title(r) file.write("\n\n[["+link+"|"+text+"]]") file.close() file = open('out/TanakhIndex', 'w') file.write("=Tanakh books=") for i in range(len(books)): book_data = reader.books_data[i] book_name = book_data['full'] file.write('\n\n[[TanakhIndex:'+book_name+'|'+book_name+']]') file.close()