aboutsummaryrefslogtreecommitdiffstats
path: root/src/modules/lexdict
diff options
context:
space:
mode:
Diffstat (limited to 'src/modules/lexdict')
-rw-r--r--src/modules/lexdict/rawld/rawld.cpp173
-rw-r--r--src/modules/lexdict/rawld4/rawld4.cpp172
-rw-r--r--src/modules/lexdict/swld.cpp76
-rw-r--r--src/modules/lexdict/zld/zld.cpp172
4 files changed, 593 insertions, 0 deletions
diff --git a/src/modules/lexdict/rawld/rawld.cpp b/src/modules/lexdict/rawld/rawld.cpp
new file mode 100644
index 0000000..058679a
--- /dev/null
+++ b/src/modules/lexdict/rawld/rawld.cpp
@@ -0,0 +1,173 @@
+/******************************************************************************
+ * rawld.cpp - code for class 'RawLD'- a module that reads raw lexicon and
+ * dictionary files: *.dat *.idx
+ */
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#ifndef __GNUC__
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <string.h>
+#include <utilfuns.h>
+#include <rawstr.h>
+#include <rawld.h>
+
+
+ /******************************************************************************
+ * RawLD Constructor - Initializes data for instance of RawLD
+ *
+ * ENT: ipath - path and filename of files (no extension)
+ * iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+RawLD::RawLD(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang) : RawStr(ipath), SWLD(iname, idesc, idisp, enc, dir, mark, ilang)
+{
+}
+
+
+/******************************************************************************
+ * RawLD Destructor - Cleans up instance of RawLD
+ */
+
+RawLD::~RawLD()
+{
+}
+
+
+/******************************************************************************
+ * RawLD::strongsPad - Pads a key if it is 100% digits to 5 places
+ *
+ * ENT: buf - buffer to check and pad
+ */
+
+void RawLD::strongsPad(char *buf)
+{
+ const char *check;
+ int size = 0;
+ int len = strlen(buf);
+ if ((len < 5) && (len > 0)) {
+ for (check = buf; *check; check++) {
+ if (!isdigit(*check))
+ break;
+ else size++;
+ }
+
+ if ((size == len) && size)
+ sprintf(buf, "%.5d", atoi(buf));
+ }
+}
+
+
+/******************************************************************************
+ * RawLD::getEntry - Looks up entry from data file. 'Snaps' to closest
+ * entry and sets 'entrybuf'.
+ *
+ * ENT: away - number of entries offset from key (default = 0)
+ *
+ * RET: error status
+ */
+
+char RawLD::getEntry(long away)
+{
+ long start = 0;
+ unsigned short size = 0;
+ char *idxbuf = 0;
+ char retval = 0;
+
+ char *buf = new char [ strlen(*key) + 6 ];
+ strcpy(buf, *key);
+
+ strongsPad(buf);
+
+ if (!(retval = findoffset(buf, &start, &size, away))) {
+ readtext(start, &size, &idxbuf, &entrybuf);
+ entrySize = size; // support getEntrySize call
+ if (!key->Persist()) // If we have our own key
+ *key = idxbuf; // reset it to entry index buffer
+
+ stdstr(&entkeytxt, idxbuf); // set entry key text that module 'snapped' to.
+ delete [] idxbuf;
+ }
+ else {
+ if (entrybuf)
+ delete [] entrybuf;
+ entrybuf = new char [ 5 ];
+ *entrybuf = 0;
+ }
+
+ delete [] buf;
+ return retval;
+}
+
+
+/******************************************************************************
+ * RawLD::getRawEntry - Returns the correct entry when char * cast
+ * is requested
+ *
+ * RET: string buffer with entry
+ */
+
+char *RawLD::getRawEntry() {
+
+ char ret = getEntry();
+ if (!ret) {
+ if (!isUnicode())
+ preptext(entrybuf);
+ }
+ else error = ret;
+
+ return entrybuf;
+}
+
+
+/******************************************************************************
+ * RawLD::increment - Increments module key a number of entries
+ *
+ * ENT: increment - Number of entries to jump forward
+ *
+ * RET: *this
+ */
+
+void RawLD::increment(int steps) {
+ char tmperror;
+
+ if (key->Traversable()) {
+ *key += steps;
+ error = key->Error();
+ steps = 0;
+ }
+
+ tmperror = (getEntry(steps)) ? KEYERR_OUTOFBOUNDS : 0;
+ error = (error)?error:tmperror;
+ *key = entkeytxt;
+}
+
+
+void RawLD::setEntry(const char *inbuf, long len) {
+ settext(*key, inbuf, len);
+}
+
+
+void RawLD::linkEntry(const SWKey *inkey) {
+ linkentry(*key, *inkey);
+}
+
+
+/******************************************************************************
+ * RawFiles::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void RawLD::deleteEntry() {
+ settext(*key, "");
+}
diff --git a/src/modules/lexdict/rawld4/rawld4.cpp b/src/modules/lexdict/rawld4/rawld4.cpp
new file mode 100644
index 0000000..1bdf22f
--- /dev/null
+++ b/src/modules/lexdict/rawld4/rawld4.cpp
@@ -0,0 +1,172 @@
+/******************************************************************************
+ * rawld.cpp - code for class 'RawLD'- a module that reads raw lexicon and
+ * dictionary files: *.dat *.idx
+ */
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#ifndef __GNUC__
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <string.h>
+#include <utilfuns.h>
+#include <rawstr4.h>
+#include <rawld4.h>
+
+
+ /******************************************************************************
+ * RawLD Constructor - Initializes data for instance of RawLD
+ *
+ * ENT: ipath - path and filename of files (no extension)
+ * iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+RawLD4::RawLD4(const char *ipath, const char *iname, const char *idesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang) : RawStr4(ipath), SWLD(iname, idesc, idisp, enc, dir, mark, ilang)
+{
+}
+
+
+/******************************************************************************
+ * RawLD Destructor - Cleans up instance of RawLD
+ */
+
+RawLD4::~RawLD4()
+{
+}
+
+
+/******************************************************************************
+ * RawLD4::strongsPad - Pads a key if it is 100% digits to 5 places
+ *
+ * ENT: buf - buffer to check and pad
+ */
+
+void RawLD4::strongsPad(char *buf)
+{
+ const char *check;
+ long size = 0;
+ int len = strlen(buf);
+ if ((len < 5) && (len > 0)) {
+ for (check = buf; *check; check++) {
+ if (!isdigit(*check))
+ break;
+ else size++;
+ }
+
+ if ((size == len) && size)
+ sprintf(buf, "%.5d", atoi(buf));
+ }
+}
+
+
+/******************************************************************************
+ * RawLD4::getEntry - Looks up entry from data file. 'Snaps' to closest
+ * entry and sets 'entrybuf'.
+ *
+ * ENT: away - number of entries offset from key (default = 0)
+ *
+ * RET: error status
+ */
+
+char RawLD4::getEntry(long away)
+{
+ long start = 0;
+ unsigned long size = 0;
+ char *idxbuf = 0;
+ char retval = 0;
+
+ char *buf = new char [ strlen(*key) + 6 ];
+ strcpy(buf, *key);
+
+ strongsPad(buf);
+
+ *entrybuf = 0;
+ if (!(retval = findoffset(buf, &start, &size, away))) {
+ readtext(start, &size, &idxbuf, &entrybuf);
+ entrySize = size; // support getEntrySize call
+ if (!key->Persist()) // If we have our own key
+ *key = idxbuf; // reset it to entry index buffer
+
+ stdstr(&entkeytxt, idxbuf); // set entry key text that module 'snapped' to.
+ delete [] idxbuf;
+ }
+ else {
+ entrybuf = new char [ 5 ];
+ *entrybuf = 0;
+ }
+
+ delete [] buf;
+ return retval;
+}
+
+
+/******************************************************************************
+ * RawLD4::getRawEntry - Returns the correct entry when char * cast
+ * is requested
+ *
+ * RET: string buffer with entry
+ */
+
+char *RawLD4::getRawEntry() {
+
+ char ret = getEntry();
+ if (!ret) {
+ if (!isUnicode())
+ preptext(entrybuf);
+ }
+ else error = ret;
+
+ return entrybuf;
+}
+
+
+/******************************************************************************
+ * RawLD4::increment - Increments module key a number of entries
+ *
+ * ENT: increment - Number of entries to jump forward
+ *
+ * RET: *this
+ */
+
+void RawLD4::increment(int steps) {
+ char tmperror;
+
+ if (key->Traversable()) {
+ *key += steps;
+ error = key->Error();
+ steps = 0;
+ }
+
+ tmperror = (getEntry(steps)) ? KEYERR_OUTOFBOUNDS : 0;
+ error = (error)?error:tmperror;
+ *key = entkeytxt;
+}
+
+
+void RawLD4::setEntry(const char *inbuf, long len) {
+ setText(*key, inbuf, len);
+}
+
+
+void RawLD4::linkEntry(const SWKey *inkey) {
+ linkentry(*key, *inkey);
+}
+
+
+/******************************************************************************
+ * RawFiles::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void RawLD4::deleteEntry() {
+ setText(*key, "");
+}
diff --git a/src/modules/lexdict/swld.cpp b/src/modules/lexdict/swld.cpp
new file mode 100644
index 0000000..d28a5b8
--- /dev/null
+++ b/src/modules/lexdict/swld.cpp
@@ -0,0 +1,76 @@
+/******************************************************************************
+ * swld.cpp - code for base class 'SWLD'. SWLD is the basis for all
+ * types of Lexicon and Dictionary modules (hence the 'LD').
+ */
+
+#include <swld.h>
+
+
+/******************************************************************************
+ * SWLD Constructor - Initializes data for instance of SWLD
+ *
+ * ENT: imodname - Internal name for module
+ * imoddesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+SWLD::SWLD(const char *imodname, const char *imoddesc, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang) : SWModule(imodname, imoddesc, idisp, "Lexicons / Dictionaries", enc, dir, mark, ilang)
+{
+ delete key;
+ key = CreateKey();
+ entkeytxt = new char [1];
+ *entkeytxt = 0;
+}
+
+
+/******************************************************************************
+ * SWLD Destructor - Cleans up instance of SWLD
+ */
+
+SWLD::~SWLD()
+{
+ if (entkeytxt)
+ delete [] entkeytxt;
+}
+
+
+/******************************************************************************
+ * SWLD::KeyText - Sets/gets module KeyText, getting from saved text if key is
+ * persistent
+ *
+ * ENT: ikeytext - value which to set keytext
+ * [0] - only get
+ *
+ * RET: pointer to keytext
+ */
+
+const char *SWLD::KeyText(const char *ikeytext)
+{
+ if (key->Persist() && !ikeytext) {
+ getRawEntry(); // force module key to snap to entry
+ return entkeytxt;
+ }
+ else return SWModule::KeyText(ikeytext);
+}
+
+
+/******************************************************************************
+ * SWLD::setPosition(SW_POSITION) - Positions this key if applicable
+ */
+
+void SWLD::setPosition(SW_POSITION p) {
+ if (!key->Traversable()) {
+ switch (p) {
+ case POS_TOP:
+ *key = "";
+ break;
+ case POS_BOTTOM:
+ *key = "zzzzzzzzz";
+ break;
+ }
+ }
+ else *key = p;
+ getRawEntry();
+}
+
+
diff --git a/src/modules/lexdict/zld/zld.cpp b/src/modules/lexdict/zld/zld.cpp
new file mode 100644
index 0000000..047effa
--- /dev/null
+++ b/src/modules/lexdict/zld/zld.cpp
@@ -0,0 +1,172 @@
+/******************************************************************************
+ * rawld.cpp - code for class 'RawLD'- a module that reads raw lexicon and
+ * dictionary files: *.dat *.idx
+ */
+
+
+#include <ctype.h>
+#include <stdio.h>
+#include <fcntl.h>
+
+#ifndef __GNUC__
+#include <io.h>
+#else
+#include <unistd.h>
+#endif
+
+#include <string.h>
+#include <utilfuns.h>
+#include <zstr.h>
+#include <zld.h>
+
+
+ /******************************************************************************
+ * RawLD Constructor - Initializes data for instance of RawLD
+ *
+ * ENT: ipath - path and filename of files (no extension)
+ * iname - Internal name for module
+ * idesc - Name to display to user for module
+ * idisp - Display object to use for displaying
+ */
+
+zLD::zLD(const char *ipath, const char *iname, const char *idesc, long blockCount, SWCompress *icomp, SWDisplay *idisp, SWTextEncoding enc, SWTextDirection dir, SWTextMarkup mark, const char* ilang) : zStr(ipath, -1, blockCount, icomp), SWLD(iname, idesc, idisp, enc, dir, mark, ilang) {
+
+}
+
+
+/******************************************************************************
+ * RawLD Destructor - Cleans up instance of RawLD
+ */
+
+zLD::~zLD() {
+
+}
+
+
+/******************************************************************************
+ * zLD::strongsPad - Pads a key if it is 100% digits to 5 places
+ *
+ * ENT: buf - buffer to check and pad
+ */
+
+void zLD::strongsPad(char *buf) {
+ const char *check;
+ long size = 0;
+ int len = strlen(buf);
+ if ((len < 5) && (len > 0)) {
+ for (check = buf; *check; check++) {
+ if (!isdigit(*check))
+ break;
+ else size++;
+ }
+
+ if ((size == len) && size)
+ sprintf(buf, "%.5d", atoi(buf));
+ }
+}
+
+
+/******************************************************************************
+ * zLD::getEntry - Looks up entry from data file. 'Snaps' to closest
+ * entry and sets 'entrybuf'.
+ *
+ * ENT: away - number of entries offset from key (default = 0)
+ *
+ * RET: error status
+ */
+
+char zLD::getEntry(long away) {
+ char *idxbuf = 0;
+ char *ebuf = 0;
+ char retval = 0;
+ long index;
+ unsigned long size;
+ char *buf = new char [ strlen(*key) + 6 ];
+ strcpy(buf, *key);
+
+ strongsPad(buf);
+
+ *entrybuf = 0;
+ if (!(retval = findKeyIndex(buf, &index, away))) {
+ getText(index, &idxbuf, &ebuf);
+ size = strlen(ebuf) + 1;
+ entrybuf = new char [ size * FILTERPAD ];
+ strcpy(entrybuf, ebuf);
+
+ entrySize = size; // support getEntrySize call
+ if (!key->Persist()) // If we have our own key
+ *key = idxbuf; // reset it to entry index buffer
+
+ stdstr(&entkeytxt, idxbuf); // set entry key text that module 'snapped' to.
+ free(idxbuf);
+ free(ebuf);
+ }
+ else {
+ entrybuf = new char [ 5 ];
+ entrybuf[0] = 0;
+ entrybuf[1] = 0;
+ }
+
+ delete [] buf;
+ return retval;
+}
+
+
+/******************************************************************************
+ * zLD::getRawEntry - Returns the correct entry when char * cast
+ * is requested
+ *
+ * RET: string buffer with entry
+ */
+
+char *zLD::getRawEntry() {
+ if (!getEntry() && !isUnicode()) {
+ prepText(entrybuf);
+ }
+
+ return entrybuf;
+}
+
+
+/******************************************************************************
+ * zLD::increment - Increments module key a number of entries
+ *
+ * ENT: increment - Number of entries to jump forward
+ *
+ * RET: *this
+ */
+
+void zLD::increment(int steps) {
+ char tmperror;
+
+ if (key->Traversable()) {
+ *key += steps;
+ error = key->Error();
+ steps = 0;
+ }
+
+ tmperror = (getEntry(steps)) ? KEYERR_OUTOFBOUNDS : 0;
+ error = (error)?error:tmperror;
+ *key = entkeytxt;
+}
+
+
+void zLD::setEntry(const char *inbuf, long len) {
+ setText(*key, inbuf, len);
+}
+
+
+void zLD::linkEntry(const SWKey *inkey) {
+ zStr::linkEntry(*key, *inkey);
+}
+
+
+/******************************************************************************
+ * RawFiles::deleteEntry - deletes this entry
+ *
+ * RET: *this
+ */
+
+void zLD::deleteEntry() {
+ setText(*key, "");
+}