summaryrefslogtreecommitdiff
path: root/utilities/vpl2mod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'utilities/vpl2mod.cpp')
-rw-r--r--utilities/vpl2mod.cpp263
1 files changed, 0 insertions, 263 deletions
diff --git a/utilities/vpl2mod.cpp b/utilities/vpl2mod.cpp
deleted file mode 100644
index 0b65a87..0000000
--- a/utilities/vpl2mod.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-#include <ctype.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <stdlib.h>
-
-#ifndef __GNUC__
-#include <io.h>
-#else
-#include <unistd.h>
-#endif
-
-#include <swmgr.h>
-#include <rawtext.h>
-#include <iostream>
-#include <string>
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-#ifndef NO_SWORD_NAMESPACE
-using sword::SWMgr;
-using sword::RawText;
-using sword::VerseKey;
-using sword::SW_POSITION;
-#endif
-
-using std::string;
-
-char readline(int fd, char **buf) {
- char ch;
- if (*buf)
- delete [] *buf;
- *buf = 0;
- int len;
-
-
- long index = lseek(fd, 0, SEEK_CUR);
- // clean up any preceding white space
- while ((len = read(fd, &ch, 1)) == 1) {
- if ((ch != 13) && (ch != ' ') && (ch != '\t'))
- break;
- else index++;
- }
-
-
- while (ch != 10) {
- if ((len = read(fd, &ch, 1)) != 1)
- break;
- }
-
- int size = (lseek(fd, 0, SEEK_CUR) - index) - 1;
-
- *buf = new char [ size + 1 ];
-
- if (size > 0) {
- lseek(fd, index, SEEK_SET);
- read(fd, *buf, size);
- read(fd, &ch, 1); //pop terminating char
- (*buf)[size] = 0;
-
- // clean up any trailing junk on buf
- for (char *it = *buf+(strlen(*buf)-1); it > *buf; it--) {
- if ((*it != 10) && (*it != 13) && (*it != ' ') && (*it != '\t'))
- break;
- else *it = 0;
- }
- }
- else **buf = 0;
- return !len;
-}
-
-
-char *parseVReg(char *buf) {
- char stage = 0;
-
- while (*buf) {
- switch (stage) {
- case 0:
- if (isalpha(*buf))
- stage++;
- break;
- case 1:
- if (isdigit(*buf))
- stage++;
- break;
- case 2:
- if (*buf == ':')
- stage++;
- break;
- case 3:
- if (isdigit(*buf))
- stage++;
- break;
- case 4:
- if (*buf == ' ') {
- *buf = 0;
- return ++buf;
- }
- break;
- }
- buf++;
- }
- return (stage == 4) ? buf : 0; // if we got to stage 4 return after key buf, else return 0;
-}
-
-
-bool isKJVRef(const char *buf) {
- VerseKey vk, test;
- vk.AutoNormalize(0);
- vk.Headings(1); // turn on mod/testmnt/book/chap headings
- vk.Persist(1);
- // lets do some tests on the verse --------------
- vk = buf;
- test = buf;
-
- if (vk.Testament() && vk.Book() && vk.Chapter() && vk.Verse()) { // if we're not a heading
-// std::cerr << (const char*)vk << " == " << (const char*)test << std::endl;
- return (vk == test);
- }
- else return true; // no check if we're a heading... Probably bad.
-}
-
-
-void fixText(char *text) {
- char *to = text;
- while(*text) {
- *to++ = *text++;
- *to++ = *text++;
- if (!*text)
- break;
- if (*text != ' ')
- std::cerr << "problem\n";
- else text++;
- }
- *to = 0;
-}
-
-int main(int argc, char **argv) {
-
- // Let's test our command line arguments
- if (argc < 2) {
-// fprintf(stderr, "usage: %s <vpl_file> </path/to/mod> [0|1 - file includes prepended verse references]\n", argv[0]);
- fprintf(stderr, "usage: %s <source_vpl_file> </path/to/output/mod/> [0|1 - prepended verse refs] [0|1 - NT only]\n\n", argv[0]);
- fprintf(stderr, "\tWith no verse refs, source file must contain exactly 31102 lines.\n");
- fprintf(stderr, "\tThis is KJV verse count plus headings for MODULE,\n");
- fprintf(stderr, "\tTESTAMENT, BOOK, CHAPTER. An example snippet follows:\n\n");
- fprintf(stderr, "\t\tMODULE HEADER\n");
- fprintf(stderr, "\t\tOLD TESTAMENT HEADER\n");
- fprintf(stderr, "\t\tGENESIS HEADER\n");
- fprintf(stderr, "\t\tCHAPTER 1 HEADER\n");
- fprintf(stderr, "\t\tIn the beginning...\n\n");
- fprintf(stderr, "\t... implying there must also be a CHAPTER2 HEADER,\n");
- fprintf(stderr, "\tEXODUS HEADER, NEW TESTAMENT HEADER, etc. If there is no text for\n");
- fprintf(stderr, "\tthe header, a blank line must, at least, hold place.\n\n");
- fprintf(stderr, "\tWith verse refs, source file must simply contain any number of lines,\n");
- fprintf(stderr, "\tthat begin with the verse reference for which it is an entry. e.g.:\n\n");
- fprintf(stderr, "\t\tgen 1:0 CHAPTER 1 HEADER\n");
- fprintf(stderr, "\t\tgen 1:1 In the beginning...\n\n");
- exit(-1);
- }
-
- // Let's see if we can open our input file
- int fd = open(argv[1], O_RDONLY|O_BINARY);
- if (fd < 0) {
- fprintf(stderr, "error: %s: couldn't open input file: %s \n", argv[0], argv[1]);
- exit(-2);
- }
-
- // Try to initialize a default set of datafiles and indicies at our
- // datapath location passed to us from the user.
- if (RawText::createModule(argv[2])) {
- fprintf(stderr, "error: %s: couldn't create module at path: %s \n", argv[0], argv[2]);
- exit(-3);
- }
-
- // not used yet, but for future support of a vpl file with each line
- // prepended with verse reference, eg. "Gen 1:1 In the beginning..."
- bool vref = false;
- if (argc > 3)
- vref = (argv[3][0] == '0') ? false : true;
-
- // if 'nt' is the 4th arg, our vpl file only has the NT
- bool ntonly = false;
- if (argc > 4)
- ntonly = (argv[4][0] == '0') ? false : true;
-
- // Do some initialization stuff
- char *buffer = 0;
- RawText mod(argv[2]); // open our datapath with our RawText driver.
- VerseKey vk;
- vk.AutoNormalize(0);
- vk.Headings(1); // turn on mod/testmnt/book/chap headings
- vk.Persist(1);
-
- mod.setKey(vk);
-
- // Loop through module from TOP to BOTTOM and set next line from
- // input file as text for this entry in the module
- mod = TOP;
- if (ntonly) vk = "Matthew 1:1";
-
- int successive = 0; //part of hack below
- while ((!mod.Error()) && (!readline(fd, &buffer))) {
- if (*buffer == '|') // comments, ignore line
- continue;
- if (vref) {
- const char *verseText = parseVReg(buffer);
- if (!verseText) { // if we didn't find a valid verse ref
- std::cerr << "No valid verse ref found on line: " << buffer << "\n";
- exit(-4);
- }
-
- vk = buffer;
- if (vk.Error()) {
- std::cerr << "Error parsing key: " << buffer << "\n";
- exit(-5);
- }
- string orig = mod.getRawEntry();
-
- if (!isKJVRef(buffer)) {
- VerseKey origVK = vk;
- /* This block is functioning improperly -- problem with AutoNormalize???
- do {
- vk--;
- }
- while (!vk.Error() && !isKJVRef(vk)); */
- //hack to replace above:
- successive++;
- vk -= successive;
- orig = mod.getRawEntry();
-
- std::cerr << "Not a valid KJV ref: " << origVK << "\n";
- std::cerr << "appending to ref: " << vk << "\n";
- orig += " [ (";
- orig += origVK;
- orig += ") ";
- orig += verseText;
- orig += " ] ";
- verseText = orig.c_str();
- }
- else {
- successive = 0;
- }
-
- if (orig.length() > 1)
- std::cerr << "Warning, overwriting verse: " << vk << std::endl;
-
- // ------------- End verse tests -----------------
- mod << verseText; // save text to module at current position
- }
- else {
- fixText(buffer);
- mod << buffer; // save text to module at current position
- mod++; // increment module position
- }
- }
-
- // clear up our buffer that readline might have allocated
- if (buffer)
- delete [] buffer;
-}