Greg Hellings wrote:
On Tue, Apr 28, 2009 at 7:50 AM, DM Smith <dmsm...@crosswire.org> wrote:
On Apr 28, 2009, at 8:40 AM, Barry Drake wrote:

Hi there ......

I've just discovered that mod2osis doesn't currently handle linked verses
in bible texts.  It outputs the entire linked block for every verse that it
is linked from.
There is a new method for the module: isLinked(VerseKey *v1, VerseKey* v2)

This is helpful.  So can I do something like this:

VerseKey* endRange = myKey.clone();
while(myModule.isLinked(myKey, endRange)) {
    endRange.increment();
}
// Necessary, because we stepped one beyond the linking range
endRange.decrement();
SWBuf osisIDValue = myKey.equals(endRange) : myKey.getOSISRef() ?
SWBuf(myKey.getOSISRef()) + SWBuf(".") + SWBuf(endRange.getOSISRef());

to determine the key range?

Looks good. I think it needs some error checking as in (I don't know if this is correct.):
   // have to increment in case you don't get in the loop body
   endRange.increment();
// check error so that if you are on the last verse in the versification, you don't loop forever.
   while (!endRange.Error() && myModule.isLinked(myKey, endRange)) {
          endRange.increment();
   }
   // If you hit the last verse you don't need to decrement
   if (!endRange.Error()) {
       endRange.decrement();
   }
   // test to see that you have a range.
   if (myKey != endRange) {
      ... then I have a range ...
   }


This has some theoretical drawbacks:
1) A verse in the range might not have an entry in the module. I think this is unlikely. <div annotateType="xxx" annotateRef="Matt.1.1-Matt.1.5 Matt.2.10-Matt.2.11">...</div> 2) One could have non-adjacent references to be linked. I think this is unlikely. <div annotateType="xxx" annotateRef="Matt.1.1-Matt.1.5 Matt.2.10-Matt.2.11">...</div>
<div annotateType="xxx" annotateRef="Matt.1.6-Matt.2.9">...</div>

I don't know how to solve the second one. The first can use module.hasEntry(vk);
  And is a "." the proper value to use when
linking two osisIDs together into a range?

For an annotateRef, use '-' e.g. annotateRef="Matt.1.1-Matt.1.5". For an osisID, you need each osisID separated by space, e.g. osisID="Matt.1.1 Matt.1.2 Matt.1.3 Matt.1.4 Matt.1.5"
--Greg


By passing the current and the next verse keys, one can determine the osisID
to use.

In Him,
       DM

_______________________________________________
sword-devel mailing list: sword-devel@crosswire.org
http://www.crosswire.org/mailman/listinfo/sword-devel
Instructions to unsubscribe/change your settings at above page

Reply via email to