[sword-devel] Python and swig

Ben Morgan benpmorgan at gmail.com
Mon Jan 29 16:27:27 MST 2007


Hi,

For a start, using help isn't all that useful. Output for help of Versekey
is contained in attached help.txt. Using dir will usually be just as much
use. If I want to know how something works, I look at the c++ source code
(which is quite an opaque mess, I think :) If you have doxygen generated,
look at that. That may help a bit. A few of the methods are renamed, I
think. ie SWModule.search becomes SWModule.doSearch

Also, I do not know that there is any way to check whether a module contains
a certain book (though it probably doesn't if you go through a whole chapter
and it is empty)

To get all book names and chapter counts in old and new testaments:
__________________
#!/usr/bin/python2.5
import Sword
vk=Sword.VerseKey()

def GetBooks():
    for i in range(2):
        for j in range(vk.bookCount(i+1)):
            print vk.bookName(i+1, j+1),
            print "has %d chapters" % vk.chapterCount(i+1, j+1)

def GetChapters(i, j):
    bookname=vk.bookName(i, j)
    for k in range(vk.chapterCount(i, j)):
        print "%s %d has %d verses" %  (bookname, k+1, \
            vk.verseCount(i,j,k+1))

print GetBooks()
print GetChapters(1, 3) #old testament, 3rd book = Leviticus
print GetChapters(2, 3) #new testament, 3rd book = Luke
__________________

An updated version of your script with my comments added on certain points:
__________________
#!/usr/bin/python2.5
import Sword
import sys
#mgr=Sword.SWMgr()
#mgr.getModule('KJV')
vk=Sword.VerseKey()
error=0
cnt=1
while 1:
   print "cnt=%d" % cnt
   # use the following instead of a count as when the counter gets to
Matthew,
   # it automatically increments the testament and sets vk.Book() to 1
   # ie
   # >>> vk=Sword.VerseKey()
   # >>> vk.Book(1)
   # '\x00'
   # >>> vk.Testament()
   # '\x01'
   # >>> vk.Book(40)
   # '\x01'
   # >>> vk.Book()
   # '\x01'
   # >>> vk.Testament()
   # '\x02'
   # So we do this below:
   test=vk.Book(ord(vk.Book())+1) #use ord to change char -> int
   cnt+=1
   error=ord(vk.Error()) #with error, do error=ord(vk.Error()), this will
output a number instead of a char
   if(error):break
   name=vk.getBookName()
   abr=vk.getBookAbbrev()
#    count=vk.bookCount()
   print "%s -> %s " %(abr,name)
   print "error=",error
   print vk.Index()
   #print vk.UpperBound().Index() #This is only for keys with bounds set
   #print vk.LowerBound().Index() #ditto
__________________

If you would like any other help, just ask.

God Bless,
Ben
-------------------------------------------------------------------------------------------
He has made everything beautiful in its time. Also, he has put eternity into
mans heart, yet so that he cannot find out what God has done from the
beginning to the end.
Ecclesiastes 3:11 (ESV)

On 1/30/07, Pierre Amadio <pierre.amadio at libertysurf.fr> wrote:
>
> Hi there.
>
> On Sun, Jan 28, 2007 at 07:18:31PM +1100, Ben Morgan wrote:
> >
> > If you have any specific questions on how to do something, just email
> me.
>
> I m copying the list as well as the answer may be interesting to have on
> the archive of the list.
>
> I do not understand how to get a list of book that one can use in a
> given module.
>
> Using the following code, i have a sort of list of existing bible book:
>
> __________________
> #!/usr/bin/python2.5
> import Sword
> import sys
> #mgr=Sword.SWMgr()
> #mgr.getModule('KJV')
> vk=Sword.VerseKey()
> error=0
> cnt=0
> while 1:
>     print "cnt=%d" % cnt
>     test=vk.Book(cnt)
>     cnt+=1
>     error=vk.Error()
>     name=vk.getBookName()
>     abr=vk.getBookAbbrev()
> #    count=vk.bookCount()
>     print "%s -> %s " %(abr,name)
>     print "error=",error
>     print vk.Index()
>     print vk.UpperBound().Index()
>     print vk.LowerBound().Index()
> __________________
>
> However, as my verse key does not know wich module i m interested in, i
> cannot be sure all the book will be available for a given module (i
> think tere are some translation that are not complete).
>
> Plus, I do not see any new testament book (except for revelation).
>
> I cannot understand how to detect i reach the end of the books.
>
> Bear in mind that, as my python version does not seem to implement
> help(), i guess what is available in the modules and object i have
> with dir().
>
> Before trying to understand every things related to text rendering, i
> would be happy knowing how to:
>
> -get a list of books in a module
> -get a list of chapter in a book
> -get a list of verses in a chapter
>
> I hope the 3 mechanism are similar :)
>
> Best regards
>
>
> _______________________________________________
> sword-devel mailing list: sword-devel at crosswire.org
> http://www.crosswire.org/mailman/listinfo/sword-devel
> Instructions to unsubscribe/change your settings at above page
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.crosswire.org/pipermail/sword-devel/attachments/20070130/7996c892/attachment.html 
-------------- next part --------------
Help on class VerseKey in module Sword:

class VerseKey(SWKey)
 |  Method resolution order:
 |      VerseKey
 |      SWKey
 |      SWObject
 |      __builtin__.object
 |
 |  Methods defined here:
 |
 |  AutoNormalize(*args)
 |
 |  Book(*args)
 |
 |  Chapter(*args)
 |
 |  ClearBounds(*args)
 |
 |  Headings(*args)
 |
 |  Index(*args)
 |
 |  LowerBound(*args)
 |
 |  NewIndex(*args)
 |
 |  Normalize(*args)
 |
 |  ParseVerseList(*args)
 |
 |  Testament(*args)
 |
 |  UpperBound(*args)
 |
 |  Verse(*args)
 |
 |  __del__ lambda self
 |
 |  __getattr__ lambda self, name
 |
 |  __init__(self, *args)
 |
 |  __repr__ = _swig_repr(self)
 |
 |  __setattr__ lambda self, name, value
 |
 |  bookCount(*args)
 |
 |  bookName(*args)
 |
 |  chapterCount(*args)
 |
 |  clone(*args)
 |
 |  compare(*args)
 |
 |  copyFrom(*args)
 |
 |  decrement(*args)
 |
 |  getBookAbbrev(*args)
 |
 |  getBookName(*args)
 |
 |  getLocale(*args)
 |
 |  getOSISRef(*args)
 |
 |  getRangeText(*args)
 |
 |  getShortText(*args)
 |
 |  getText(*args)
 |
 |  increment(*args)
 |
 |  isTraversable(*args)
 |
 |  setPosition(*args)
 |
 |  setText(*args)
 |
 |  verseCount(*args)
 |
 |  ----------------------------------------------------------------------
 |  Static methods defined here:
 |
 |  castTo = VerseKey_castTo(...)
 |
 |  convertToOSIS = VerseKey_convertToOSIS(...)
 |
 |  getOSISBookNum = VerseKey_getOSISBookNum(...)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  __swig_destroy__ = <built-in function delete_VerseKey>
 |
 |
 |  __swig_getmethods__ = {'castTo': <function <lambda> at 0x00BD8DB0>, 'c...
 |
 |  __swig_setmethods__ = {}
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from SWKey:
 |
 |  Error(*args)
 |
 |  Persist(*args)
 |
 |  Traversable(*args)
 |
 |  equals(*args)
 |
 |  isBoundSet(*args)
 |
 |  ----------------------------------------------------------------------
 |  Methods inherited from SWObject:
 |
 |  getClass(*args)
 |
 |  ----------------------------------------------------------------------
 |  Data descriptors inherited from SWObject:
 |
 |  __dict__
 |      dictionary for instance variables (if defined)
 |
 |  __weakref__
 |      list of weak references to the object (if defined)



More information about the sword-devel mailing list