[Rapier-commits] r175 - in trunk: debian src

This list send mail when a change occurs on the subversion repository rapier-commits at garage.maemo.org
Mon Jan 14 18:12:31 EET 2008


Author: pamadio
Date: 2008-01-14 18:12:29 +0200 (Mon, 14 Jan 2008)
New Revision: 175

Added:
   trunk/src/prepare-sqlite.py
Modified:
   trunk/debian/changelog
   trunk/debian/control
   trunk/src/rapier
   trunk/src/swordutils.py
Log:
starting to play with strong number

Modified: trunk/debian/changelog
===================================================================
--- trunk/debian/changelog	2008-01-12 10:39:36 UTC (rev 174)
+++ trunk/debian/changelog	2008-01-14 16:12:29 UTC (rev 175)
@@ -1,6 +1,7 @@
-rapier (1.0.3-1) unstable; urgency=low
+rapier (1.0.3-1test) unstable; urgency=low
 
-  *  Changing the package section to user/other 
+  * Changing the package section to user/other.
+  * Strong Number support. 
 
  -- Pierre Amadio <melmoth at localhost>  Sat, 12 Jan 2008 11:33:38 +0100
 

Modified: trunk/debian/control
===================================================================
--- trunk/debian/control	2008-01-12 10:39:36 UTC (rev 174)
+++ trunk/debian/control	2008-01-14 16:12:29 UTC (rev 175)
@@ -6,7 +6,7 @@
 Standards-Version: 3.6.1
 
 Package: rapier
-Architecture: all
-Depends: ${shlibs:Depends}, ${misc:Depends}, python-sword, python2.5-runtime
+Architecture: all 
+Depends: ${shlibs:Depends}, ${misc:Depends}, python-sword, python2.5-runtime, libsqlite3-0
 Description: A sword based Bible reader for maemo.
  A sword based Bible reader for maemo.

Added: trunk/src/prepare-sqlite.py
===================================================================
--- trunk/src/prepare-sqlite.py	                        (rev 0)
+++ trunk/src/prepare-sqlite.py	2008-01-14 16:12:29 UTC (rev 175)
@@ -0,0 +1,124 @@
+#!/usr/bin/python2.5
+import Sword
+import os
+import re
+import sqlite3
+import sys
+
+database_file="/home/user/MyDocs/strong.db"
+data_path="/home/user/sword"
+
+def create_tables(db):
+    c = db.cursor()
+    print "creating tables"
+    snt="create table Words (word text primary key)"
+    c.execute(snt)
+    snt="create table Words_Per_Verse (word text,verse text)"
+    c.execute(snt)
+    snt="create index word_per_verse_idx on  Words_Per_Verse (word)"
+    c.execute(snt)
+    snt="create index word_idx on Words (word)"
+    c.execute(snt)
+
+
+
+def is_word_in_db(db,word):
+    c = db.cursor()
+    c.execute("select count(*) from Words where word=?",(word,))
+    return  c.fetchone()[0]
+
+def is_word_per_verse_in_db(db,word,key):
+    c=db.cursor()
+    c.execute("select count(*) from Words_Per_Verse where word=? and verse=?",\
+            (word,key,))
+    return  c.fetchone()[0]
+
+def getAllBooks():
+    """
+    Return an array:
+    [{'testament': 1, 'bookCount': 1, 'name': 'Genesis', 'abbr': 'Gen'},
+    {'testament': 1, 'bookCount': 2, 'name': 'Exodus', 'abbr': 'Exod'},
+    """
+    vk=Sword.VerseKey()
+    out=[]
+    for i in range(2):
+        vk.Testament(i+1)
+        for j in range(vk.bookCount(i+1)):
+            vk.Book(j+1)
+            tmp={}
+            tmp['name']=vk.bookName(i+1,j+1)
+            tmp['abbr']=vk.getBookAbbrev()
+            tmp['testament']=i+1
+            tmp['bookCount']=j+1
+            out.append(tmp)
+    return out
+        
+def parse_words(verseTxt):
+    reg=re.compile("<(\w+)>")
+    out=[]
+    for i in reg.findall(verseTxt):
+        if i not in out:
+            out.append(i)
+    return out
+    
+        
+        
+
+if os.path.exists(database_file):
+    print "Removing old db:%s",database_file
+    os.remove(database_file)
+    db=sqlite3.connect(database_file)
+    create_tables(db)
+
+
+#db=sqlite3.connect(database_file)
+
+
+#print "plop",is_word_in_db(db,"plop")
+#print "kikoo",is_word_in_db(db,"kikoo")
+
+
+markup=Sword.MarkupFilterMgr(Sword.FMT_PLAIN)
+markup.thisown=False
+mgr=Sword.SWMgr(markup)
+mgr.prefixPath = data_path
+mgr.configPath = "%s/mods.d" % data_path
+mgr.augmentModules(data_path)
+mod=mgr.getModule('KJV')
+
+for curbook in getAllBooks():
+    print "_________________"
+    print curbook
+    vk=Sword.VerseKey()
+    nbr_chapter=vk.chapterCount(curbook['testament'],curbook['bookCount'])
+    for chapter_idx in range(nbr_chapter):
+        chapter=chapter_idx+1
+        print "chapter %s"%chapter
+        nbr_verses=vk.verseCount(curbook['testament'],\
+                                 curbook['bookCount'],\
+                                 chapter)
+        for verse_idx in range(nbr_verses):
+            verse=verse_idx+1
+            key="%s %d:%d"%(curbook['abbr'],chapter,verse)
+            print key
+            tmpvk=Sword.VerseKey(key)
+            mod.setKey(tmpvk)
+            mgr.setGlobalOption("Strong's Numbers","On")
+            verseTxt=mod.RenderText()
+            #print verseTxt
+            words=parse_words(verseTxt)
+            #print words
+            c = db.cursor()
+            for cur_word in words:
+                if not is_word_in_db(db,cur_word):
+                    #print "adding word %s in db"%cur_word
+                    c.execute("insert into Words (word) values (?)"\
+                              ,(cur_word,))
+                if not is_word_per_verse_in_db(db,cur_word,key):
+                    #print "adding association (%s,%s)"%(cur_word,verse)
+                    c.execute("insert into Words_Per_Verse (word,verse) values (?,?)"\
+                              ,(cur_word,key))
+                db.commit()
+            print "\n"
+
+db.commit()


Property changes on: trunk/src/prepare-sqlite.py
___________________________________________________________________
Name: svn:executable
   + *

Modified: trunk/src/rapier
===================================================================
--- trunk/src/rapier	2008-01-12 10:39:36 UTC (rev 174)
+++ trunk/src/rapier	2008-01-14 16:12:29 UTC (rev 175)
@@ -31,8 +31,8 @@
 from gnome import gnomevfs
 import swordutils
 import os
-
-
+import sqlite3
+import string
 """
 Does not work as expected...should change this.
 
@@ -114,6 +114,7 @@
         self.waitForSearchFlag=False
         self.waitForRemoteModulesFlag=False
         self.waitForModuleManagementFlag=False
+        self.showStrongNumbers=False
         """ coordinate of the mouse last time there was a click.  """
         self.y={'old':0,'new':0}
         """indice=verse number, value=verse text"""
@@ -333,16 +334,26 @@
         self.mainWindow.toolbar.insert(self.mainWindow.verse_tb_item,2)
 
         #Ok button
-        self.mainWindow.display_b_item=gtk.ToolItem()
-        self.mainWindow.display_b=gtk.Button("Display")
-        self.mainWindow.display_b_item.add(self.mainWindow.display_b)
-        self.mainWindow.display_b.connect("clicked",self.display_b_clicked)
+        #self.mainWindow.display_b_item=gtk.ToolItem()
+        #self.mainWindow.display_b=gtk.Button("Display")
+        #self.mainWindow.display_b_item.add(self.mainWindow.display_b)
+        #self.mainWindow.display_b.connect("clicked",self.display_b_clicked)
         #self.mainWindow.toolbar.insert(self.mainWindow.display_b_item,3)
 
+        #Strong Number checkbox.
+        self.mainWindow.strong_number_item=gtk.ToolItem()
+        self.mainWindow.strong_number_check_b=gtk.CheckButton(\
+            label="Strong Number",use_underline=False)
+        self.mainWindow.strong_number_check_b.connect("clicked",\
+            self.strong_number_check_b_clicked)
+        self.mainWindow.strong_number_item.add(\
+            self.mainWindow.strong_number_check_b)
+        self.mainWindow.toolbar.insert(\
+            self.mainWindow.strong_number_item,3)
 
 
-        
 
+
         self.mainWindow.back_b_item=gtk.ToolItem()
         self.mainWindow.back_b=gtk.Button()
         self.mainWindow.back_b_item.add(self.mainWindow.back_b)
@@ -1242,7 +1253,11 @@
           vk=Sword.VerseKey(key)
           mod.setKey(vk)
           #verseTxt=mod.RenderText()
-          mgr.setGlobalOption("Cross-references","Off") 
+          mgr.setGlobalOption("Cross-references","Off")
+          if self.showStrongNumbers:
+              mgr.setGlobalOption("Strong's Numbers","On")
+          else:
+              mgr.setGlobalOption("Strong's Numbers","Off")
           verseTxt=mod.RenderText()
           self.textArray.append(verseTxt)
        self.refreshTextDisplay()
@@ -1307,6 +1322,16 @@
         self.mainWindow.set_title(moduleName)
         self.refresh_textArray()
 
+        if swordutils.has_strong_number(self.mgr,moduleName):
+            self.mainWindow.strong_number_item.show()
+        else:
+            self.showStrongNumbers=False
+            self.mainWindow.strong_number_check_b.set_active(False)
+            self.mainWindow.strong_number_item.hide()
+
+
+
+
     def book_combo_changed(self,widget):
         self.selected_book=self.get_combo_active_text(widget)
         self.fillChapters()
@@ -1347,7 +1372,8 @@
             return
         
         filterSnt=self.searchEntry.get_text()
-        args={'filter':filterSnt,'module':self.selected_module}
+        args={'filter':filterSnt,'module':self.selected_module,\
+              'useStrongNumber':self.showStrongNumbers}
         self.searchProgressbar.show()
         self.waitForSearchFlag=True
         self.putJob(aJob(self.jobCounter,"search_string",args))
@@ -1363,6 +1389,10 @@
         if self.selected_chapter<self.maxChapter:
             self.mainWindow.chapter_tb_combo.set_active(self.selected_chapter)
 
+    def strong_number_check_b_clicked(self,widget):
+        self.showStrongNumbers= widget.get_active()
+        self.refresh_textArray()
+
     def set_display_to_ref(self,ref):
         info=self.get_info_from_refs(ref)
 
@@ -1567,17 +1597,28 @@
        
     def search_string(self,args):
         out=[]
+
+        useStrong=args['useStrongNumber']
         markup=Sword.MarkupFilterMgr(Sword.FMT_PLAIN)
         markup.thisown=False
         mgr=swordutils.get_manager(markup)
         mod=mgr.getModule(args['module'])
-        res=mod.doSearch(args['filter'],-4)
-        for n in range(res.Count()):
-            vk=res.GetElement(n)
-            out.append(vk.getShortText())
-        return out
+        if not useStrong:
+            res=mod.doSearch(args['filter'],-4)
+            for n in range(res.Count()):
+                vk=res.GetElement(n)
+                out.append(vk.getShortText())
+            return out
+        else:
+            print "Let s implement strong number search"
+            db=sqlite3.connect("/home/user/MyDocs/strong.db")
+            c=db.cursor()
+            for row in \
+                c.execute("select verse from  Words_Per_Verse where word=?",\
+                      (string.upper(args['filter']),)):
+                out.append(row[0])
+            return out
 
-
     def remote_modules_list(self,args):
         data_path = args['data_path']
         tmp=swordutils.InstallMgr(dataPath=data_path,

Modified: trunk/src/swordutils.py
===================================================================
--- trunk/src/swordutils.py	2008-01-12 10:39:36 UTC (rev 174)
+++ trunk/src/swordutils.py	2008-01-14 16:12:29 UTC (rev 175)
@@ -90,6 +90,15 @@
     a=mgr.getModule(modName)
     return a.isSearchOptimallySupported('plop',-4,1,Sword.VerseKey())
 
+def has_strong_number(mgr,modName):
+    mod=mgr.getModule(modName)
+    if mod.getConfigEntry("Feature")=="StrongsNumbers":
+        return True
+    else:
+        return False
+    
+        
+
 class InstallMgr:
     """
     The sword swing binding does not seems to make InstallMgr



More information about the Rapier-commits mailing list