#!/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' '
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' '
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"""