<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html; charset=ISO-8859-1"
 http-equiv="Content-Type">
</head>
<body bgcolor="#ffffff" text="#000000">
Dear Weston,<br>
<br>
Ben is correct, this code is pretty ugly.&nbsp; It has been augmented and
attached and patched for the past 20+ years to handle all sorts of
referencing we've encountered.&nbsp; There is a large chunk of duplicated
code which needs to be factored out, and it's just not pretty to look
at.&nbsp; On the bright side, it works quite well.<br>
<br>
It DOES NOT handle osisWork prefix or granularity, though it will parse
the osisRef spec without these.&nbsp; We could really use the addition of
this.<br>
<br>
Please use what you want/can.&nbsp; We try to keep things modular so you can
use independent parts of our code if you need, but this section of code
relies on a few other components in our api:<br>
<br>
LocaleMgr - handles all of our localization<br>
VersificationMgr - handles different versification systems<br>
<br>
and the primary component is VerseKey.<br>
<br>
Primary objects in our API include:<br>
<br>
SWMgr - represents your library of books and the overall engine<br>
SWModule - represents a book<br>
SWKey - represents a stateful position in (and sometimes a limited
domain of) an SWModule<br>
<br>
VerseKey is a specific type of SWKey and knows about Versification
Systems and Bible references.<br>
<br>
So you can do:<br>
<br>
VerseKey vk = "Jn.3.16";<br>
<br>
And it will know how to position a module to the correct place.<br>
<br>
So you can do:<br>
<br>
SWMgr library;<br>
SWModule *kjv = library.getModule("KJV");<br>
kjv-&gt;setKey(vk);<br>
<br>
or simply:<br>
<br>
kjv-&gt;setKey("Jn.3.16");<br>
<br>
then:<br>
<br>
cout &lt;&lt; kjv-&gt;RenderText();<br>
<br>
Anyway, all this to say, a larger picture of how our engine works might
make it easier to lift code, and if you have any inclination to brave
what is our verse reference parser, we'd love to have it support the
components osisWork and granularity. <br>
<br>
One last thing.<br>
<br>
As you proceed, however that might be.&nbsp; I cannot stress enough how
valuable a good set of unit tests is, especially for this part of
code.&nbsp; This problem has so many paths as the solution parses character
by character, that there aren't many (any) people who remember all
paths we're trying to solve.&nbsp; It is a very complicated problem (as
you've seen: roman numerals, f. ff., book names which include numbers
and roman numerals, multiple punctuation marks to determine different
things at different states, ranges, implied ranges (e.g. rom 7),
decisions about ambiguous numbers (Rom.1.1;2), et. al.)<br>
<br>
We started to build an exhaustive set of unit tests for this code a
couple years back and it does not yet cover everything we handle, but
when we find a problem and fix it, we add that problem case to the unit
test so we're getting better.&nbsp; And what it DOES do for me, is when I
'fix' something, I can run the code through the tests to be sure I
haven't changed the parsing logic for a case I forgot about.<br>
<br>
Anyway, I hope this is helpful.<br>
<br>
<br>
Troy<br>
<br>
<br>
PS.&nbsp; I need to add localization of punctuation and numerals to the
parser soon.&nbsp; I will make every effort to get around to finally
factoring out the duplicated code segment.<br>
<br>
<br>
<br>
<br>
On 06/18/2010 12:15 PM, Weston Ruter wrote:
<blockquote
 cite="mid:AANLkTimetuokNI8KRalrZ3Yg6WaT4P86JvS6vO4_FaYZ@mail.gmail.com"
 type="cite">
  <div dir="ltr">Troy, This is great! Where's the source code for the
reference parser?<br>
  <br>
As part of the Open Scriptures osis.py module for representing OSIS
identifier objects (osisID, osisRef, osisWork, etc), the next step is
to have a pluggable/extensible system for converting human-formatted
references into their OSIS equivalents, and also to go in the reverse:
converting any OSIS object into a localized human-friendly
representation. Collaboration between SWORD and Open Scriptures would
obviously be a win. That being said, hopefully I haven't duplicated too
much of what SWORD has already for handling OSIS identifiers.<br>
  <br>
I've got OsisWork, OsisPassage, and OsisID classes assembled so far: <a
 moz-do-not-send="true" href="http://github.com/openscriptures/api">http://github.com/openscriptures/api</a><br>
See tests for how the objects can be used: <a moz-do-not-send="true"
 href="http://github.com/openscriptures/api/blob/a73bdd7d267b70a9e1303a3205c4241f52d3a83e/osis.py#L763">http://github.com/openscriptures/api/blob/a73bdd7d267b70a9e1303a3205c4241f52d3a83e/osis.py#L763</a><br>
  <br>
Weston<br>
  <br>
  <br>
  <div class="gmail_quote">On Fri, Jun 18, 2010 at 11:58 AM, Troy A.
Griffitts <span dir="ltr">&lt;<a moz-do-not-send="true"
 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;">Regarding
what we accept currently, you can try experimenting with:<br>
    <br>
    <a moz-do-not-send="true"
 href="http://crosswire.org/study/examples/parsevs.jsp" target="_blank">http://crosswire.org/study/examples/parsevs.jsp</a><br>
    <br>
    <br>
We do have the ability to provide alternate versification schemes which<br>
include other books (e.g., apoc.), or completely different book names<br>
like a versification of Josephus or DSS, but this tool defaults to the<br>
Protestant KJV v11n.<br>
    <font color="#888888"><br>
Troy<br>
    </font>
    <div class="im"><br>
    </div>
  </blockquote>
  <div><br>
  <br>
  <div class="gmail_quote"><span
 style="font-size: large; font-weight: bold;">Forwarded conversation</span><br>
Subject: <b class="gmail_sendername">[sword-devel] Non-Anglophone
Bible references</b><br>
------------------------<br>
  <br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">David Haslam</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:d.haslam@ukonline.co.uk">d.haslam@ukonline.co.uk</a>&gt;</span><br>
Date: Thu, Jun 17, 2010 at 1:58 PM<br>
To: <a moz-do-not-send="true" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  </font><br>
  </span><br>
  <br>
Tim Bulkeley has written a short item on this topic here.<br>
  <br>
  <a moz-do-not-send="true"
 href="http://bigbible.org/sansblogue/bible/non-anglophone-bible-references/%0ANon-Anglophone"
 target="_blank">http://bigbible.org/sansblogue/bible/non-anglophone-bible-references/<br>
Non-Anglophone</a> Bible references<br>
  <br>
The topic arises out of his frustration at having to perform a massive<br>
search and replace task to submit an article to a certain European<br>
theological journal.<br>
  <br>
As many CrossWire developers are Anglophone, this may prompt some
further<br>
thoughts that could benefit all our projects.<br>
  <br>
David<br>
  <font color="#888888"><br>
  <br>
--<br>
View this message in context: <a moz-do-not-send="true"
 href="http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2259480.html"
 target="_blank">http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2259480.html</a><br>
Sent from the SWORD Dev mailing list archive at Nabble.com.<br>
  <br>
_______________________________________________<br>
sword-devel mailing list: <a moz-do-not-send="true"
 href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  <a moz-do-not-send="true"
 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>
  </font><br>
----------<br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">David Instone-Brewer</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:Technical@tyndale.cam.ac.uk">Technical@tyndale.cam.ac.uk</a>&gt;</span><br>
Date: Fri, Jun 18, 2010 at 2:42 AM<br>
To: <a moz-do-not-send="true" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  </font><br>
  </span><br>
Tim has over-simplified the situation.<br>
Other systems include different ways of abbreviating the books.<br>
In the following, "Am" is an abbreviation which does not include the
end of the word,<br>
while Jas (ie James) does include the end of the word, so it shouldn't
have a dot after it,<br>
which results in different systems:<br>
  <br>
Am.7 &nbsp; and Jas 1<br>
Am.7 &nbsp; and Jas.1<br>
Am. 7 &nbsp; and Jas 1<br>
Am. 7 &nbsp; and Jas. 1<br>
  <br>
Also, in numbering, the Dead Sea Scrolls have re-popularised the use of
dots instead of colons, ie<br>
  <br>
Am 7.1-3, 4-5<br>
  <br>
And we haven't dealt with variations in listing other chapters<br>
  <br>
Am 7.1-3; 8.1-2<br>
Am 7:1-3. 8:1-2<br>
etc<br>
  <br>
And then we have the problem of references which span a chapter:<br>
  <br>
Am 7.1--8.2 &nbsp; [or use an 'en' dash]<br>
Am 7.1-8.2<br>
Am 7.1 - 8.2<br>
etc<br>
  <br>
There are so many 'standards' that it is best simply to pick the one
which works best for you and stick to it.<br>
  <br>
I'd suggest the following is the best compromise between humans and
people.<br>
  <br>
Amo 7.1-2; 8.1-2--9.2: Thus says the Lord....<br>
Jos Ant 1.2.15: On this day...<br>
1QS 3.1<br>
4Q496 2.6.1<br>
4Qp.Is.a 1.1<br>
b.San 15.a-b &nbsp;[this means folio 15, sides a and b]<br>
  <br>
This uses:<br>
- no dots but a space after the abbreviation of the title of the work<br>
- preceding dot instead of superscript (the "a" at the end of "4Qp.Is"
is normally superscript)<br>
- normal numbers where possible (ie no Roman numerals but occasionally
you need lower case letters)<br>
- no italics ("Ant" is normally in italic, as a non-Biblical book title)<br>
- 3-letter Bible book abbreviation (preferably the same as that used by
BibleWorks and others)<br>
- dots dividing between verses, chapters, books and any other levels of
division.<br>
- single hyphen for spans of verses<br>
- double hyphen for spans of chapters<br>
- semi-colon for separate references<br>
- colon used to separate a reference from the content<br>
  <br>
  <br>
David IB<br>
----------<br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">David Haslam</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:d.haslam@ukonline.co.uk">d.haslam@ukonline.co.uk</a>&gt;</span><br>
Date: Fri, Jun 18, 2010 at 6:37 AM<br>
To: <a moz-do-not-send="true" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  </font><br>
  </span><br>
  <br>
I was somewhat amused by the sentence that reads, "I'd suggest the
following<br>
Notwithstanding, should spans of verse be punctuated by a hyphen or by
the<br>
ndash character?<br>
  <br>
cf. I came across a tip for MS-Word yesterday which claimed that the
ndash<br>
is the proper standard for numerical ranges.<br>
  <br>
Methinks such a change would be abhorrent to a lot of Bible software!<br>
  <br>
David<br>
  <font color="#888888">--<br>
View this message in context: <a moz-do-not-send="true"
 href="http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2260214.html"
 target="_blank">http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2260214.html</a><br>
  </font><br>
----------<br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">Greg Hellings</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:greg.hellings@gmail.com">greg.hellings@gmail.com</a>&gt;</span><br>
Date: Fri, Jun 18, 2010 at 6:49 AM<br>
To: SWORD Developers' Collaboration Forum &lt;<a moz-do-not-send="true"
 href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>&gt;<br>
  </font><br>
  </span><br>
Personally I have a hyphen key I can push. &nbsp;I don't have an ndash key<br>
I can push. &nbsp;I vote for hyphens!<br>
  <br>
----------<br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">David Haslam</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:d.haslam@ukonline.co.uk">d.haslam@ukonline.co.uk</a>&gt;</span><br>
Date: Fri, Jun 18, 2010 at 7:03 AM<br>
To: <a moz-do-not-send="true" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  </font><br>
  </span><br>
  <br>
Perhaps more to the point for CrossWire developers, should we create a
new<br>
wiki page to address this subject?<br>
  <br>
Within David IB's examples, which of these are not valid references in<br>
relation to our software?<br>
  <br>
Assuming we could [eventually] make use of any of these referenced
biblical<br>
texts within the SWORD API, i.e. even those for the Dead Sea Scrolls,
etc.<br>
  <br>
David<br>
  <font color="#888888">--<br>
View this message in context: <a moz-do-not-send="true"
 href="http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2260248.html"
 target="_blank">http://sword-dev.350566.n4.nabble.com/Non-Anglophone-Bible-references-tp2259480p2260248.html</a><br>
  </font><br>
----------<br>
  <span class="undefined"><font color="#000000">From: <b
 class="undefined">Troy A. Griffitts</b> <span dir="ltr">&lt;<a
 moz-do-not-send="true" href="mailto:scribe@crosswire.org">scribe@crosswire.org</a>&gt;</span><br>
Date: Fri, Jun 18, 2010 at 11:58 AM<br>
To: <a moz-do-not-send="true" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a><br>
  </font><br>
  </span><br>
Regarding what we accept currently, you can try experimenting with:<br>
  <br>
  <a moz-do-not-send="true"
 href="http://crosswire.org/study/examples/parsevs.jsp" target="_blank">http://crosswire.org/study/examples/parsevs.jsp</a><br>
  <br>
  <br>
We do have the ability to provide alternate versification schemes which<br>
include other books (e.g., apoc.), or completely different book names<br>
like a versification of Josephus or DSS, but this tool defaults to the<br>
Protestant KJV v11n.<br>
  <font color="#888888"><br>
Troy<br>
  </font><br>
  </div>
  <br>
&nbsp;
  <br>
  </div>
  </div>
  </div>
  <pre wrap="">
<fieldset class="mimeAttachmentHeader"></fieldset>
_______________________________________________
sword-devel mailing list: <a class="moz-txt-link-abbreviated" href="mailto:sword-devel@crosswire.org">sword-devel@crosswire.org</a>
<a class="moz-txt-link-freetext" href="http://www.crosswire.org/mailman/listinfo/sword-devel">http://www.crosswire.org/mailman/listinfo/sword-devel</a>
Instructions to unsubscribe/change your settings at above page</pre>
</blockquote>
<br>
</body>
</html>