<div>Hi,</div>
<div>&nbsp;</div>
<div>Some answers below...<br><br></div>
<div class="gmail_quote">On Tue, Jun 3, 2008 at 4:45 PM, Simon J Mackenzie &lt;<a href="mailto:smackoz@fastmail.fm" target="_blank">smackoz@fastmail.fm</a>&gt; wrote:<br>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr">
<p style="MARGIN-BOTTOM: 0.5cm">I have been attempting to familiarise myself with flatapi.cpp/h for a small in house project but have come up with a few questions about the Sword API, particularly flatapi.cpp/h.</p>
<p style="MARGIN-BOTTOM: 0.5cm">1) The function listkey_getVerselistIterator in flatapi currently accepts two parameters but I fail to see the difference / dissimilarity between the two parameters &quot;char * list&quot; and &quot;char * key&quot;? Could someone please point me in the right direction? Thank you. </p>
</div></blockquote>
<div>The list is the actual text you want parsed. The key is some form of context. Thus a list of &quot;6:1-12&quot; and a key of &quot;John 3:16&quot; will give John 6:1-12. </div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr">
<p style="MARGIN-BOTTOM: 0.5cm"><span></span><br><br>2) Is there any reason why the function listkey_getVerselistIterator in flatapi.h does not accept a boolean flag for normalising a bible reference such as &quot;John 6:1,12-16&quot;?<br>
The current call to listkey_getVerselistIterator produces a &quot;verses&quot; array containing [John 6:1, John 6:12] and not [John 6:1, John 6:12, John 6:13, John 6:14, John 6:15, John 6:16] as would be expected.</p></div>
</blockquote>
<div>Currently the flatapi does not allow proper parsing of biblical references. Even with your proposed change, it will not allow you to get at what you want.</div>
<div>The listkey that is returned in the&nbsp;contains keys.</div>
<div>Each key is either a single verse (such as John 6:1)</div>
<div>or a contiguous range of verses (such as John 6:12-16)</div>
<div>&nbsp;</div>
<div>Thus under python you can do:&nbsp;</div>
<div>&gt;&gt;&gt; lk=vk.ParseVerseList(&quot;John 6:1,12-16&quot;, &quot;&quot;, True)<br>&gt;&gt;&gt; lk.getElement(0).getRangeText()<br>&#39;John 6:1&#39;<br>&gt;&gt;&gt; lk.getElement(1).getRangeText()<br>&#39;John 6:12-John 6:16&#39;</div>

<div>&nbsp;</div>
<div>However, the flatapi implementation uses getText, not getRangeText, so it doesn&#39;t return the ranges. Updating it to do this should result in it working. Note that the boolean flag you are wanting added controls whether the ranges appear, or just the first verse in each range.</div>

<div>&nbsp;</div>
<div>However, I don&#39;t believe the flatapi bindings&nbsp; are used at all, and are not likely to be updated. They implement a very small portion of the bindings. I&#39;m not sure exactly what you are trying to do, but trying to do it using one of the three methods below is likely to work much better:</div>

<div>a) Python with the swig bindings - this is the approach BPBible uses.</div>
<div>b) using c++ - like almost all Sword clients do</div>
<div>c) using java, with either JSword (like BibleDesktop) or the corba bindings (as the web interface does (I believe))</div>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">
<div dir="ltr">
<p style="MARGIN-BOTTOM: 0.5cm"><span id=""></span><br>If there is no limiting factors I propose an update to flatapi.cpp and flatapi.h as set out below.</p>
<p>=== flatapi.h ===========================================<br><i><b>// Existing &nbsp; //</b></i> SWHANDLE SWDLLEXPORT listkey_getVerselistIterator(const char * list, const char * key)<br><i><u><b>// Proposed //</b></u></i><u> SWHANDLE SWDLLEXPORT listkey_getVerselistIterator(const char * list, const char * key</u><u><b>, bool expandRange</b></u><u>);</u><br>
=== flatapi.h ===========================================<br><br>=== flatapi.cpp =========================================<br><i><b>// Existing &nbsp; //</b></i> SWHANDLE listkey_getVerselistIterator(const char * list, const char * key)<br>
<i><u><b>// Proposed //</b></u></i><u> SWHANDLE listkey_getVerselistIterator(const char * list, const char * key</u><u><b>, bool expandRange = false</b></u><u>) { </u><i><u><b>// set to false by default to retain existing function call behaviour.</b></u></i><br>
&nbsp;&nbsp;&nbsp; VerseKey versekey;<br>&nbsp;&nbsp;&nbsp; static ListKey verses;<br><br>&nbsp;&nbsp;&nbsp; versekey.setText(key);<br>&nbsp;&nbsp;&nbsp; verses.ClearList();<br><i><b>// Existing &nbsp; //</b></i> verses = versekey.ParseVerseList(list, versekey);<br><i><u><b>// Proposed //</b></u></i><u> verses = versekey.ParseVerseList(list, versekey</u><u><b>, expandRange</b></u><u>);</u><br>
&nbsp;&nbsp;&nbsp; return (SWHANDLE)&amp;verses;<br>}<br>=== flatapi.cpp =========================================</p>
<p><br><br></p>
<p>As I am new to this group if there is a more appropriate procedure for presenting my proposal and having it incorporated in the Sword project please let me know.</p>
<p>Any comments would be appreciated.</p>
<p>Regards<br><font color="#888888">Simon</font></p></div><br>_______________________________________________<br>sword-devel mailing list: <a href="mailto:sword-devel@crosswire.org" target="_blank">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></blockquote></div>
<br><br clear="all"><br>-- <br>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)