<div dir="ltr">As to checking for (consecutive) linked verses, you can do something like this (horrible, but should work in theory - I haven&#39;t tested it):<br><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">// keep the key we were at</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">SWKey* k = module.getKey().clone();</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">// move forward without skipping over links</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">module.setSkipConsecutiveLinks(false);</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">module.increment();</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">SWKey* k_2 = module.getKey().clone();</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">// now go back and try again skipping over links</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">module.setKey(k)</span><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">module.setSkipConsecutiveLinks(true);</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">module.increment();</span><br style="font-family: courier new,monospace;"><br style="font-family: courier new,monospace;"><span style="font-family: courier new,monospace;">// If k != module.getKey(), we skipped over some links</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">boolean linked = !(module.getKey().equals(k2));</span><br><br>I don&#39;t believe you can easily check for non-consecutive verses being linked - not that it makes all that much sense.<br clear="all">
God Bless,<br>Ben<br>-------------------------------------------------------------------------------------------<br>The Lord is not slow to fulfill his promise as some count slowness,<br>but is patient toward you, not wishing that any should perish,<br>
but that all should reach repentance.<br>2 Peter 3:9 (ESV)<br>
<br><br><div class="gmail_quote">On Fri, Sep 5, 2008 at 8:14 AM, Troy A. Griffitts <span dir="ltr">&lt;<a href="mailto:scribe@crosswire.org">scribe@crosswire.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
Right, it seems like we might need a bool SWModule::isLinked(const SWKey<br>
&amp;) which tells you if the current location is linked to the provided<br>
location. &nbsp;Something which compares &#39;inodes&#39; in versetext and @link<br>
values in others, etc...<br>
<br>
That&#39;s doable from the engine point of view, but I&#39;m not sure will solve<br>
your problem.<br>
<br>
Like you mention, you&#39;re looking for a way to get the entire set of<br>
entries that link to a data slot. &nbsp;Something like:<br>
<br>
find / -samefile xyz -print<br>
<br>
I guess you could use the newly proposed method above to iterate all<br>
entries and check if any are the &#39;samefile&#39; as one you are interested<br>
in. &nbsp;But like the filesystem, we don&#39;t store a set of all directory<br>
entries that happen to point to the same inode. &nbsp;And if you&#39;re looking<br>
for backward compatability, we can&#39;t change the format (not that I would<br>
want to change the format for this anyway).<br>
<br>
With the the logic osis2mod is using (for any verses outside of KJV,<br>
read text from closest previous valid KJV entry, append new verse text<br>
and rewrite the entry) it sounds these exception KJV-reversifications<br>
should probably do the ugly: `find / -samefile xyz -print` logic to<br>
check if the entry they are about to rewrite is linked to by anyone<br>
else. &nbsp;It sucks, but it is all I can think of that would solve this<br>
problem. &nbsp;And pragmatically, you probably only have to: do { module--; }<br>
while (!module.Error() &amp;&amp; module.getRawEntryBuf() ==<br>
aboutToBeRewrittenEntryBuf);<br>
<br>
Hope I haven&#39;t pass the buck for no good reason.<br>
<font color="#888888"><br>
 &nbsp; &nbsp; &nbsp; &nbsp;-Troy.<br>
</font><div><div></div><div class="Wj3C7c"><br>
DM Smith wrote:<br>
&gt; Greg Hellings wrote:<br>
&gt;&gt; DM,<br>
&gt;&gt;<br>
&gt;&gt; On Thu, Sep 4, 2008 at 1:05 PM, DM Smith &lt;<a href="mailto:dmsmith555@yahoo.com">dmsmith555@yahoo.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m trying to solve an osis2mod linking bug that was exposed by several<br>
&gt;&gt;&gt; beta modules.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Here is the scenario:<br>
&gt;&gt;&gt; &lt;verse osisID=&quot;XXX.1.29 XXX.1.30 XXX.1.31&quot;&gt;Text for the last three<br>
&gt;&gt;&gt; verses of XXX, chapter 1 in the KJV versification&lt;/verse&gt;<br>
&gt;&gt;&gt; &lt;verse osisID=&quot;XXX.1.32 XXX.1.33&quot;&gt;Text for additional verses in the XXX,<br>
&gt;&gt;&gt; chapter 1 in the non-KJV versification&lt;/verse&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 1) osis2mod links 1.30 and 1.31 by writing out the start and offset of<br>
&gt;&gt;&gt; the data for 1.29. That means that 1.29 has to be written first. In the<br>
&gt;&gt;&gt; index file the result is that all three entries have the same start and<br>
&gt;&gt;&gt; offset. So far so good, if there weren&#39;t a bug that writes the links<br>
&gt;&gt;&gt; first and then the data, resulting in start/offset of 0/0 for the links.<br>
&gt;&gt;&gt; But I&#39;ve already figured out how to fix that bug.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 2) Now a non-KJV verse is found and osis2mod appends it to the last<br>
&gt;&gt;&gt; verse of the chapter according to the KJV versification. So the entry<br>
&gt;&gt;&gt; for XXX.1.31 is found, the raw text is gotten and it is appended and<br>
&gt;&gt;&gt; this augmented text is written to the data file, at the end of the file.<br>
&gt;&gt;&gt; Finally the index entry for XXX.1.31 is updated.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; The problem is that 1.29 and 1.30 are not updated, they still point to<br>
&gt;&gt;&gt; the &quot;1.29-1.31&quot; text and now 1.31 points to the &quot;1.29-1.33&quot; text.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; 3) The other problem is with 1.33, it is noticed that it is out of<br>
&gt;&gt;&gt; bounds and is changed to 1.31 and then it is linked to 1.32, which does<br>
&gt;&gt;&gt; not exist and thus 1.31 is re-written to 0/0.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I&#39;m looking for a way to solve these problems. Here is what I am<br>
&gt;&gt;&gt; thinking and I&#39;d like feedback or a better way.<br>
&gt;&gt;&gt; For 1) I have postponed the writing of the links until the verse is<br>
&gt;&gt;&gt; written. I could either wait until the next verse is ready to be<br>
&gt;&gt;&gt; written, or later. I&#39;ve decided to wait until the very end and do the<br>
&gt;&gt;&gt; linking then. This might help solve 2 and 3.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; For 2) I&#39;m thinking that the verse to append is the last verse in the<br>
&gt;&gt;&gt; chapter with content. By postponing linking until later, it will append<br>
&gt;&gt;&gt; to 1.29. Then the linking will propagate the final start/offset values<br>
&gt;&gt;&gt; for 1.29. The problem I have with this is that this is somewhat disk<br>
&gt;&gt;&gt; intensive. I start with the last verse in the chapter and get the raw<br>
&gt;&gt;&gt; text for it. If there is none, I then decrement and refetch until I find<br>
&gt;&gt;&gt; it. I looked for a way to know if a verse were part of a linked set and<br>
&gt;&gt;&gt; what the members of that set were, but I didn&#39;t see any in the SWORD<br>
&gt;&gt;&gt; engine. Am I missing it?<br>
&gt;&gt;&gt;<br>
&gt;&gt; When I ran into this bug in dabbling with a SWORD front-end, I was<br>
&gt;&gt; told that the only way to test for whether it is part of a set is to<br>
&gt;&gt; compare the text of verse x with verse x-1. &nbsp;I don&#39;t know that the<br>
&gt;&gt; feature we both sought has been added. &nbsp;If it has, I haven not heard<br>
&gt;&gt; word of it.<br>
&gt;&gt;<br>
&gt; Ouch, that is expensive. It should not be necessary to dig down to the<br>
&gt; text and then do a string comparison. Comparing the start/offset<br>
&gt; (block/start/offset for compressed) is sufficient. I don&#39;t see how to<br>
&gt; get this info. It would be nice to have the ability, in the engine, to<br>
&gt; compare two keys to see if they refer to the same text.<br>
&gt;<br>
&gt;&gt; Alternatively -- aren&#39;t we supposed to be moving to the VerseTreeKey?<br>
&gt;&gt; Shouldn&#39;t a new module in the Beta stage be using that? &nbsp;It seems like<br>
&gt;&gt; that would completely do away with the problem. &nbsp;Updating osis2mod to<br>
&gt;&gt; use that, either as the default or as an option for a module like this<br>
&gt;&gt; might eliminate the issue?<br>
&gt;&gt;<br>
&gt; I think ultimately that osis2mod will need to be updated to handle other<br>
&gt; versifications. The VerseKey module type is significantly faster than a<br>
&gt; VerseTreeKey module will ever be.<br>
&gt;<br>
&gt; My goal in modifying osis2mod is that it will create 1.5.9 compatible<br>
&gt; modules.<br>
&gt;<br>
&gt; Later, I intend to make modifications that will require <a href="http://1.5.12." target="_blank">1.5.12.</a><br>
&gt; (Specifically, an extension of preverse content that we&#39;ve discussed<br>
&gt; here that will have a preverse div and not just a preverse title.) At<br>
&gt; that time, it would also be appropriate to handle VerseTreeKey as an option.<br>
&gt;&gt;<br>
&gt;&gt;&gt; For 3) this is fairly simple, one should not link verses that are not in<br>
&gt;&gt;&gt; the KJV versification.<br>
&gt;&gt;&gt;<br>
&gt;&gt; That seems like a very stringent restriction. &nbsp;If linking is supported<br>
&gt;&gt; for the KJV system, why should it not be allowed for other systems?<br>
&gt;&gt; It seems like linking should be fixed in a way to allow everyone to do<br>
&gt;&gt; it.<br>
&gt; It&#39;s not a stringent restriction for the current osis2mod which only<br>
&gt; works for KJV versifications. Later, when osis2mod is upgraded then that<br>
&gt; restriction will need to be removed.<br>
&gt;<br>
&gt; In Him,<br>
&gt; &nbsp; &nbsp; DM<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
&gt; <a href="http://www.crosswire.org/mailman/listinfo/sword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br>
&gt; Instructions to unsubscribe/change your settings at above page<br>
<br>
<br>
_______________________________________________<br>
sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
<a href="http://www.crosswire.org/mailman/listinfo/sword-devel" target="_blank">http://www.crosswire.org/mailman/listinfo/sword-devel</a><br>
Instructions to unsubscribe/change your settings at above page<br>
</div></div></blockquote></div><br></div>