diff options
author | Teus Benschop <teusjannette@gmail.com> | 2018-11-10 21:10:09 +0700 |
---|---|---|
committer | Teus Benschop <teusjannette@gmail.com> | 2018-11-10 21:10:09 +0700 |
commit | 2a58bdf9b682f462b63be719fc441a679f7d52f3 (patch) | |
tree | 4b8fce727ab045eef1a846659bb90f18719477e6 /src/modules/texts | |
parent | 018216c25c73b221df0810e6c909623abd46c321 (diff) | |
parent | 70090da73f95ee90e15650d853744526b5f47e68 (diff) |
Record sword (1.8.1+dfsg-7) in archive suite sid
Diffstat (limited to 'src/modules/texts')
-rw-r--r-- | src/modules/texts/Makefile.am | 1 | ||||
-rw-r--r-- | src/modules/texts/rawtext4/Makefile | 10 | ||||
-rw-r--r-- | src/modules/texts/rawtext4/rawtext4.cpp | 5 | ||||
-rw-r--r-- | src/modules/texts/ztext4/Makefile | 5 | ||||
-rw-r--r-- | src/modules/texts/ztext4/Makefile.am | 2 | ||||
-rw-r--r-- | src/modules/texts/ztext4/ztext4.cpp | 223 |
6 files changed, 239 insertions, 7 deletions
diff --git a/src/modules/texts/Makefile.am b/src/modules/texts/Makefile.am index f5d81b4..2da70fe 100644 --- a/src/modules/texts/Makefile.am +++ b/src/modules/texts/Makefile.am @@ -5,3 +5,4 @@ libsword_la_SOURCES += $(textsdir)/swtext.cpp include ../src/modules/texts/rawtext/Makefile.am include ../src/modules/texts/rawtext4/Makefile.am include ../src/modules/texts/ztext/Makefile.am +include ../src/modules/texts/ztext4/Makefile.am diff --git a/src/modules/texts/rawtext4/Makefile b/src/modules/texts/rawtext4/Makefile index a08e07e..35d6648 100644 --- a/src/modules/texts/rawtext4/Makefile +++ b/src/modules/texts/rawtext4/Makefile @@ -1,5 +1,5 @@ -
-root := ../../../..
-
-all:
- make -C ${root}
+ +root := ../../../.. + +all: + make -C ${root} diff --git a/src/modules/texts/rawtext4/rawtext4.cpp b/src/modules/texts/rawtext4/rawtext4.cpp index 5980801..caae680 100644 --- a/src/modules/texts/rawtext4/rawtext4.cpp +++ b/src/modules/texts/rawtext4/rawtext4.cpp @@ -3,7 +3,7 @@ * rawtext4.cpp - code for class 'RawText4'- a module that reads raw text * files: ot and nt using indexs ??.bks ??.cps ??.vss * - * $Id: rawtext4.cpp 2980 2013-09-14 21:51:47Z scribe $ + * $Id: rawtext4.cpp 3456 2017-04-24 09:26:34Z scribe $ * * Copyright 2007-2013 CrossWire Bible Society (http://www.crosswire.org) * CrossWire Bible Society @@ -75,7 +75,7 @@ SWBuf &RawText4::getRawEntryBuf() const { VerseKey &key = getVerseKey(); findOffset(key.getTestament(), key.getTestamentIndex(), &start, &size); - entrySize = size; // support getEntrySize call + entrySize = (int)size; // support getEntrySize call entryBuf = ""; readText(key.getTestament(), start, size, entryBuf); @@ -164,6 +164,7 @@ bool RawText4::isLinked(const SWKey *k1, const SWKey *k2) const { findOffset(vk1->getTestament(), vk1->getTestamentIndex(), &start1, &size1); findOffset(vk2->getTestament(), vk2->getTestamentIndex(), &start2, &size2); + if (!size1 || !size2) return false; return start1 == start2; } diff --git a/src/modules/texts/ztext4/Makefile b/src/modules/texts/ztext4/Makefile new file mode 100644 index 0000000..35d6648 --- /dev/null +++ b/src/modules/texts/ztext4/Makefile @@ -0,0 +1,5 @@ + +root := ../../../.. + +all: + make -C ${root} diff --git a/src/modules/texts/ztext4/Makefile.am b/src/modules/texts/ztext4/Makefile.am new file mode 100644 index 0000000..ae7e544 --- /dev/null +++ b/src/modules/texts/ztext4/Makefile.am @@ -0,0 +1,2 @@ +ztext4dir = $(top_srcdir)/src/modules/texts/ztext4 +libsword_la_SOURCES += $(ztext4dir)/ztext4.cpp diff --git a/src/modules/texts/ztext4/ztext4.cpp b/src/modules/texts/ztext4/ztext4.cpp new file mode 100644 index 0000000..79665c9 --- /dev/null +++ b/src/modules/texts/ztext4/ztext4.cpp @@ -0,0 +1,223 @@ +/****************************************************************************** + * + * ztext4.cpp - code for class 'zText4'- a module that reads compressed + * text files + * + * $Id: ztext4.cpp 3439 2016-10-23 08:32:02Z scribe $ + * + * Copyright 1996-2014 CrossWire Bible Society (http://www.crosswire.org) + * CrossWire Bible Society + * P. O. Box 2528 + * Tempe, AZ 85280-2528 + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation version 2. + * + * This program is distributed in the hope that it will be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * General Public License for more details. + * + */ + +#include <ctype.h> +#include <stdio.h> +#include <fcntl.h> +#include <sysdata.h> +#include <versekey.h> +#include <filemgr.h> + +#include <ztext4.h> + +SWORD_NAMESPACE_START + +/****************************************************************************** + * zText4 Constructor - Initializes data for instance of zText4 + * + * ENT: ipath - path to data files + * iname - Internal name for module + * idesc - Name to display to user for module + * iblockType - verse, chapter, book, etc. of index chunks + * icomp - Compressor object + * idisp - Display object to use for displaying + */ + +zText4::zText4(const char *ipath, const char *iname, const char *idesc, int iblockType, SWCompress *icomp, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char *ilang, const char *versification) + : zVerse4(ipath, FileMgr::RDWR, iblockType, icomp), SWText(iname, idesc, idisp, enc, dir, mark, ilang, versification) { + blockType = iblockType; + lastWriteKey = 0; +} + + +/****************************************************************************** + * zText4 Destructor - Cleans up instance of zText4 + */ + +zText4::~zText4() +{ + flushCache(); + + if (lastWriteKey) + delete lastWriteKey; + +} + + +bool zText4::isWritable() const { return ((idxfp[0]->getFd() > 0) && ((idxfp[0]->mode & FileMgr::RDWR) == FileMgr::RDWR)); } + + +/****************************************************************************** + * zText4::getRawEntry - Returns the current verse buffer + * + * RET: buffer with verse + */ + +SWBuf &zText4::getRawEntryBuf() const { + long start = 0; + unsigned long size = 0; + unsigned long buffnum = 0; + VerseKey &key = getVerseKey(); + + findOffset(key.getTestament(), key.getTestamentIndex(), &start, &size, &buffnum); + entrySize = (int)size; // support getEntrySize call + + entryBuf = ""; + + zReadText(key.getTestament(), start, size, buffnum, entryBuf); + rawFilter(entryBuf, &key); + +// if (!isUnicode()) + prepText(entryBuf); + + return entryBuf; +} + + +bool zText4::sameBlock(VerseKey *k1, VerseKey *k2) { + if (k1->getTestament() != k2->getTestament()) + return false; + + switch (blockType) { + case VERSEBLOCKS: + if (k1->getVerse() != k2->getVerse()) + return false; + case CHAPTERBLOCKS: + if (k1->getChapter() != k2->getChapter()) + return false; + case BOOKBLOCKS: + if (k1->getBook() != k2->getBook()) + return false; + } + return true; +} + + +void zText4::setEntry(const char *inbuf, long len) { + VerseKey &key = getVerseKey(); + + // see if we've jumped across blocks since last write + if (lastWriteKey) { + if (!sameBlock(lastWriteKey, &key)) { + flushCache(); + } + delete lastWriteKey; + } + + doSetText(key.getTestament(), key.getTestamentIndex(), inbuf, len); + + lastWriteKey = (VerseKey *)key.clone(); // must delete +} + + +void zText4::linkEntry(const SWKey *inkey) { + VerseKey &destkey = getVerseKey(); + const VerseKey *srckey = &getVerseKey(inkey); + doLinkEntry(destkey.getTestament(), destkey.getTestamentIndex(), srckey->getTestamentIndex()); +} + + +/****************************************************************************** + * zFiles::deleteEntry - deletes this entry + * + */ + +void zText4::deleteEntry() { + + VerseKey &key = getVerseKey(); + + doSetText(key.getTestament(), key.getTestamentIndex(), ""); +} + + +/****************************************************************************** + * zText4::increment - Increments module key a number of entries + * + * ENT: increment - Number of entries to jump forward + * + */ + +void zText4::increment(int steps) { + long start; + unsigned long size; + unsigned long buffnum; + VerseKey *tmpkey = &getVerseKey(); + + findOffset(tmpkey->getTestament(), tmpkey->getTestamentIndex(), &start, &size, &buffnum); + + SWKey lastgood = *tmpkey; + while (steps) { + long laststart = start; + unsigned long lastsize = size; + SWKey lasttry = *tmpkey; + (steps > 0) ? ++(*key) : --(*key); + tmpkey = &getVerseKey(); + + if ((error = key->popError())) { + *key = lastgood; + break; + } + long index = tmpkey->getTestamentIndex(); + findOffset(tmpkey->getTestament(), index, &start, &size, &buffnum); + + if ( + ( + ((laststart != start) || (lastsize != size)) // we're a different entry +// && (start > 0) + && (size) // and we actually have a size + ) + || !skipConsecutiveLinks + ) { // or we don't want to skip consecutive links + steps += (steps < 0) ? 1 : -1; + lastgood = *tmpkey; + } + } + error = (error) ? KEYERR_OUTOFBOUNDS : 0; +} + + +bool zText4::isLinked(const SWKey *k1, const SWKey *k2) const { + long start1, start2; + unsigned long size1, size2; + unsigned long buffnum1, buffnum2; + VerseKey *vk1 = &getVerseKey(k1); + VerseKey *vk2 = &getVerseKey(k2); + if (vk1->getTestament() != vk2->getTestament()) return false; + + findOffset(vk1->getTestament(), vk1->getTestamentIndex(), &start1, &size1, &buffnum1); + findOffset(vk2->getTestament(), vk2->getTestamentIndex(), &start2, &size2, &buffnum2); + return start1 == start2 && buffnum1 == buffnum2; +} + +bool zText4::hasEntry(const SWKey *k) const { + long start; + unsigned long size; + unsigned long buffnum; + VerseKey *vk = &getVerseKey(k); + + findOffset(vk->getTestament(), vk->getTestamentIndex(), &start, &size, &buffnum); + return size; +} + + +SWORD_NAMESPACE_END |