diff options
author | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
---|---|---|
committer | danglassey <danglassey> | 2002-08-14 09:57:17 +0000 |
commit | daa67ff1f728c07f2a116ee9a9f4505479ca6808 (patch) | |
tree | c224a537d30480002ae0560cc9104b543b4d1b5e /utilities/imp2vs.cpp | |
parent | 6d6973e035aac5ec1676efccd5b8ada70c40b639 (diff) | |
download | sword-sf-cvs-daa67ff1f728c07f2a116ee9a9f4505479ca6808.tar.gz |
Initial import from crosswire CVS for syncingimport-1.1.1
Diffstat (limited to 'utilities/imp2vs.cpp')
-rw-r--r-- | utilities/imp2vs.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/utilities/imp2vs.cpp b/utilities/imp2vs.cpp new file mode 100644 index 0000000..698d0a2 --- /dev/null +++ b/utilities/imp2vs.cpp @@ -0,0 +1,198 @@ +#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 <iostream> +#include <string> +#include <rawtext.h> + +#ifndef O_BINARY +#define O_BINARY 0 +#endif + +int readline(FILE* infile, char* linebuffer) { + signed char c; + char* lbPtr = linebuffer; + while ((c = fgetc(infile)) != EOF) { + *lbPtr++ = c; + if (c == 10) { + *lbPtr = 0; + return (strlen(linebuffer)); + } + } + return 0; +} + +int main(int argc, char **argv) { + + const char * helptext ="imp2vs 1.0 Bible/Commentary module creation tool for the SWORD Project\n usage:\n %s <filename> [output dir] \n"; + + signed long i = 0; + char* keybuffer = new char[2048]; + char* entbuffer = new char[1048576]; + char* linebuffer = new char[1048576]; + char modname[16]; + + if (argc > 2) { + strcpy (modname, argv[2]); + } + else if (argc > 1) { + strcpy (modname, "./"); + } + else { + fprintf(stderr, helptext, argv[0]); + exit(-1); + } + + FILE *infile; + infile = fopen(argv[1], "r"); + + SWText* mod; + RawText::createModule(modname); + RawText modRaw(modname); + mod = &modRaw; + + VerseKey* vkey = new VerseKey; + vkey->Headings(1); + vkey->AutoNormalize(0); + vkey->Persist(1); + + while (readline(infile, linebuffer)) { + if (!strncmp(linebuffer, "$$$", 3)) { + if (strlen(keybuffer) && strlen(entbuffer)) { + std::cout << keybuffer << std::endl; + *vkey = keybuffer; + mod->SetKey(*vkey); + if (!vkey->Chapter()) { + // bad hack: 0:0 is Book intro; (chapter):0 is Chapter intro; 0:2 is Module intro; 0:1 is Testament intro + int backstep = vkey->Verse(); + vkey->Verse(0); + *mod -= backstep; + + mod->setEntry(entbuffer, strlen(entbuffer)); + } + else { + ListKey listkey = vkey->ParseVerseList(keybuffer, "Gen1:1", true); + int i; + bool havefirst = false; + VerseKey firstverse; + for (i = 0; i < listkey.Count(); i++) { + VerseKey *element = SWDYNAMIC_CAST(VerseKey, listkey.GetElement(i)); + if (element) { + mod->Key(element->LowerBound()); + VerseKey finalkey = element->UpperBound(); + std::cout << (const char*)mod->Key() << "-" << (const char*)finalkey << std::endl; + if (!havefirst) { + havefirst = true; + firstverse = mod->Key(); + + mod->setEntry(entbuffer, strlen(entbuffer)); + std::cout << "f" << (const char*)firstverse << std::endl; + (mod->Key())++; + } + while (mod->Key() <= finalkey) { + std::cout << (const char*)mod->Key() << std::endl; + *(SWModule*)mod << &firstverse; + (mod->Key())++; + } + } + else { + if (havefirst) { + mod->Key(*listkey.GetElement(i)); + *(SWModule*)mod << &firstverse; + std::cout << (const char*)mod->Key() << std::endl; + } + else { + mod->Key(*listkey.GetElement(i)); + havefirst = true; + firstverse = mod->Key(); + + mod->setEntry(entbuffer, strlen(entbuffer)); + std::cout << "f" << (const char*)firstverse << std::endl; + } + } + } + } + } + linebuffer[strlen(linebuffer) - 1] = 0; + strcpy (keybuffer, linebuffer + 3); + *entbuffer = 0; + } + else { + strcat (entbuffer, linebuffer); + } + } + + //handle final entry + if (strlen(keybuffer) && strlen(entbuffer)) { + std::cout << keybuffer << std::endl; + *vkey = keybuffer; + mod->SetKey(*vkey); + if (!vkey->Chapter()) { + // bad hack: 0:0 is Book intro; (chapter):0 is Chapter intro; 0:2 is Module intro; 0:1 is Testament intro + int backstep = vkey->Verse(); + vkey->Verse(0); + *mod -= backstep; + + mod->setEntry(entbuffer, strlen(entbuffer)); + } + else { + ListKey listkey = vkey->ParseVerseList(keybuffer, "Gen1:1", true); + int i; + bool havefirst = false; + VerseKey firstverse; + for (i = 0; i < listkey.Count(); i++) { + VerseKey *element = SWDYNAMIC_CAST(VerseKey, listkey.GetElement(i)); + if (element) { + mod->Key(element->LowerBound()); + VerseKey finalkey = element->UpperBound(); + std::cout << (const char*)mod->Key() << "-" << (const char*)finalkey << std::endl; + if (!havefirst) { + havefirst = true; + firstverse = mod->Key(); + + ((SWModule*)mod)->setEntry(entbuffer, strlen(entbuffer)); + std::cout << "f" << (const char*)firstverse << std::endl; + (mod->Key())++; + } + while (mod->Key() <= finalkey) { + std::cout << (const char*)mod->Key() << std::endl; + *(SWModule*)mod << &firstverse; + (mod->Key())++; + } + } + else { + if (havefirst) { + mod->Key(*listkey.GetElement(i)); + *mod << &firstverse; + std::cout << (const char*)mod->Key() << std::endl; + } + else { + mod->Key(*listkey.GetElement(i)); + havefirst = true; + firstverse = mod->Key(); + + mod->setEntry(entbuffer, strlen(entbuffer)); + std::cout << "f" << (const char*)firstverse << std::endl; + } + } + } + } + } + + //DEBUG printTree(root, treeKey); + + delete entbuffer; + delete linebuffer; + delete keybuffer; + + return 0; +} |