[sword-devel] Parsing Verse lists

Troy A. Griffitts scribe at crosswire.org
Wed Jun 6 02:30:30 MST 2007


Ben,

Our verse parser has to parse some crazy reference instances in Bibles, 
commentaries, and the like.  We have data which specifies references in 
formats like: "I Pet IV:7 and following"  You would be horrified if you 
saw how unnormalized verse reference syntax is used in books.  Currently 
the parser does the best it can to derive some kind of Bible reference 
from the text, and assumes the rest of the text as comment.  You can see 
more of the details of what parts of a reference we pay attention to by 
playing with the OSIS reference tool here:

http://crosswire.org/study/examples/parsevs.jsp?vs=Genesis+3%3A5-Foo%3ABar

I sympathize for your need to determine if there is any unrecognized 
text in a verse reference.  Unfortunately, there is no direct facility 
in SWORD to do this for you at the moment.

Regarding autonormalization, this is turned on by default to facilitate 
using a VerseKey programmatically, e.g. key.Verse(key.Verse()+10) // 
jumps ahead 10 verses.  You can turn this off by setting 
AutoNormalize(false) on your VerseKey.  You will then need to check if 
any boundaries have been crossed.  This would be a fairly 
straight-forward addition to VerseKey.  Maybe a property on 
VerseKey::RestrictBoundaries(bool), which, if true, would set error if 
any boundaries were ever exceeded?  Thoughts?

	-Troy.


Ben Morgan wrote:
> Hi,
> 
> I have two questions related to Parsing verselists.
> 
> How do I detect whether the reference passed to
> VerseKey::ParseVerseList is valid?
> If I try the following python code I don't get an error, just the wron result:
>>>> listkey = SW.VerseKey().ParseVerseList("Genesis 3:5-Foo:Bar", "", True)
>>>> print listkey.getRangeText()
> Genesis 3:5-Revelation of John 22:21
> 
> I can't find out how to tell if there was an error. If I try
> listkey.Count(), it equals 1.
> If I try listkey.GetElement(0).Error(), it says there isn't an error.
> Also, listkey.Error() gives 0
> If I parse a verselist from "Genesis 3:5-Revelation of John 22:21", it
> says it equals my listkey.
> 
> This is quite important, as if the user types "Genesis 3:5-Geness 3:6"
> (the second Genesis missing an i), they don't want to get all the text
> to revelation!
> 
> Also, how do I find out when the reference has wrapped (or normalized
> as I think it is called)
> e.g. Matthew 29:47 being turned into Mark 2:2
> For example using the following python code:
>>>> listkey = vk.ParseVerseList("Genesis 5:1-333","",True)
>>>> listkey.getRangeText()
> 'Genesis 5:1-Genesis 18:14'
> 
> I would much rather have the behaviour in JSword (an error saying
> Verse should be between 1 and 32 for Genesis 5) as that is what a user
> would expect to see.
> 
> God Bless,
> Ben
> -------------------------------------------------------------------------------------------
> There is no love sincerer than the love of food.
> George Bernard Shaw (1856-1950)
> 
> _______________________________________________
> 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




More information about the sword-devel mailing list