diff options
author | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:49 -0400 |
---|---|---|
committer | Roberto C. Sanchez <roberto@connexer.com> | 2014-03-29 10:53:49 -0400 |
commit | 8c8aa6b07e595cfac56838b5964ab3e96051f1b2 (patch) | |
tree | da38e2c1979148dbd3b0c7b87f930746f5ba7f44 /include/swmodule.h | |
parent | 8d3fc864d094eeadc721f8e93436b37a5fab173e (diff) |
Imported Upstream version 1.5.7
Diffstat (limited to 'include/swmodule.h')
-rw-r--r-- | include/swmodule.h | 1107 |
1 files changed, 549 insertions, 558 deletions
diff --git a/include/swmodule.h b/include/swmodule.h index 56fe02b..4efe974 100644 --- a/include/swmodule.h +++ b/include/swmodule.h @@ -1,25 +1,25 @@ /****************************************************************************** - * swmodule.h - code for base class 'module'. Module is the basis for all - * types of modules (e.g. texts, commentaries, maps, lexicons, - * etc.) - * - * $Id: swmodule.h,v 1.46 2002/03/24 21:37:28 scribe Exp $ - * - * Copyright 1998 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. - * - */ +* swmodule.h - code for base class 'module'. Module is the basis for all +* types of modules (e.g. texts, commentaries, maps, lexicons, +* etc.) +* +* $Id: swmodule.h,v 1.69 2003/12/21 10:42:01 scribe Exp $ +* +* Copyright 1998 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. +* +*/ #ifndef SWMODULE_H #define SWMODULE_H @@ -29,564 +29,555 @@ #include <listkey.h> #include <swfilter.h> #include <swconfig.h> +#include <swbuf.h> + #include <swcacher.h> +#include <swsearchable.h> + #include <list> #include <defs.h> #include <multimapwdef.h> -#define FILTERPAD 80 +SWORD_NAMESPACE_START -using namespace std; +#define SWMODULE_OPERATORS \ + operator const char *() { return RenderText(); } \ + operator SWKey &() { return *getKey(); } \ + operator SWKey *() { return getKey(); } \ + SWModule &operator <<(const char *inbuf) { setEntry(inbuf); return *this; } \ + SWModule &operator <<(const SWKey *sourceKey) { linkEntry(sourceKey); return *this; } \ + SWModule &operator -=(int steps) { decrement(steps); return *this; } \ + SWModule &operator +=(int steps) { increment(steps); return *this; } \ + SWModule &operator ++(int) { return *this += 1; } \ + SWModule &operator --(int) { return *this -= 1; } \ + SWModule &operator =(SW_POSITION p) { setPosition(p); return *this; } -typedef list < SWFilter * >FilterList; -typedef map < string, string, less < string > > AttributeValue; -typedef map < string, AttributeValue, less < string > > AttributeList; -typedef map < string, AttributeList, less < string > > AttributeTypeList; +typedef std::list < SWFilter * >FilterList; +typedef std::map < SWBuf, SWBuf, std::less < SWBuf > > AttributeValue; +typedef std::map < SWBuf, AttributeValue, std::less < SWBuf > > AttributeList; +typedef std::map < SWBuf, AttributeList, std::less < SWBuf > > AttributeTypeList; #define SWTextDirection char #define SWTextEncoding char #define SWTextMarkup char enum {DIRECTION_LTR = 0, DIRECTION_RTL, DIRECTION_BIDI}; -enum {FMT_UNKNOWN = 0, FMT_PLAIN, FMT_THML, FMT_GBF, FMT_HTML, FMT_HTMLHREF, FMT_RTF, FMT_OSIS}; +enum {FMT_UNKNOWN = 0, FMT_PLAIN, FMT_THML, FMT_GBF, FMT_HTML, FMT_HTMLHREF, FMT_RTF, FMT_OSIS, FMT_WEBIF}; enum {ENC_UNKNOWN = 0, ENC_LATIN1, ENC_UTF8, ENC_SCSU, ENC_UTF16, ENC_RTF, ENC_HTML}; -/** The class SWModule is the base class for all modules used in Sword. - * It provides functions to look up a text passage, to search in the module, to switch on/off the state of optional things - * like Strong's numbers or footnotes. - * - * SWModule has also functions to write to the data files. This might be useful in future for frontend authors to support - * user-created modules. - */ - -class SWDLLEXPORT SWModule : public SWCacher { +/** + * The class SWModule is the base class for all modules used in Sword. + * It provides functions to look up a text passage, to search in the module, + * to switch on/off the state of optional things like Strong's numbers or footnotes. + * + * SWModule has also functions to write to the data files. + */ + +// TODO: should all SWModule decendents be SWCachers? Only some really +// cache data. But if we don't do this, then we need another mechanism to +// check if we are an SWCacher. Maybe make SWModule extend SWObject (which +// it probably should anyway. But then we need to add all the cheezy +// heirarchy info to all he decendent classes for our SWDYNAMIC_CAST and +// then we can see if we implement SWCacher so we know whether or not add +// to the yet to be developed cachemgr. +// Just leave for now. This lets us always able to call module->flush() +// to manually flush a cache, and doesn't hurt if there is no work done. + +class SWDLLEXPORT SWModule : public SWCacher, public SWSearchable { protected: - ConfigEntMap ownConfig; - ConfigEntMap *config; - mutable AttributeTypeList entryAttributes; - mutable bool procEntAttr; - - char error; - bool skipConsecutiveLinks; - - /** the current key */ - SWKey *key; - - ListKey listkey; - char *modname; - char *moddesc; - char *modtype; - char *modlang; - - char direction; - char markup; - char encoding; - - /** this module's display object */ - SWDisplay *disp; - - static SWDisplay rawdisp; - char *entrybuf; - unsigned long entrybufallocsize; - - /** executed to remove all markup (for searches) */ - FilterList *stripFilters; - - /** executed immediately upon fileread */ - FilterList *rawFilters; - - /** executed to format for display */ - FilterList *renderFilters; - - /** executed to change markup to user prefs */ - FilterList *optionFilters; - - /** executed to decode text for display */ - FilterList *encodingFilters; - - int entrySize; - -public: - /** - * This is the default callback function for searching. - * This function is a placeholder and does nothing. - * You can define your own function for search progress - * evaluation, and pass it over to @ref Search. - */ - static void nullPercent (char percent, void *userData); - /** - * Set this bool to false to terminate the search which is executed by this module (@ref #Search). - * This is useful for threaded applications to terminate the search in another thread. - */ - bool terminateSearch; - /** Initializes data for instance of SWModule - * - * @param imodname Internal name for module; see also @ref Name - * @param imoddesc Name to display to user for module; - * see also @ref Description - * @param idisp Display object to use for displaying - * see also @ref Disp - * @param imodtype Type of Module - * (All modules will be displayed with - * others of same type under their modtype heading) - * see also @ref Type - */ - SWModule (const char *imodname = 0, const char *imoddesc = 0, SWDisplay * idisp = 0, char *imodtype = 0, SWTextEncoding encoding = ENC_UNKNOWN, SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN, const char* modlang = 0); - /** Cleans up instance of SWModule - */ - virtual ~ SWModule (); - /** Gets and clears error status - * - * @return error status - */ - virtual char Error (); - /** - * @return True if this module is encoded in Unicode, otherwise return false. - */ - virtual const bool isUnicode() const {return (encoding == (char)ENC_UTF8 || encoding == (char)ENC_SCSU);} - - // These methods are useful for modules that come from a standard SWORD install (most do). - // SWMgr will call setConfig. The user may use getConfig and getConfigEntry (if they - // are not comfortable with, or don't wish to use stl maps). - virtual const ConfigEntMap &getConfig() const { return *config; } - virtual void setConfig(ConfigEntMap *config); - virtual const char *getConfigEntry(const char *key) const; - - /** - * @return The size of the current entry. - */ - virtual const int getEntrySize() const {return entrySize;} - /** - * Sets a key to this module for position to a - * particular record or set of records - * - * @param ikey key with which to set this module - * @return error status - */ - virtual char SetKey (const SWKey *ikey); - /** - * Sets the key of this module. Similair to @see SetKey(const SWKey*) . - * @param ikey The SWKey which should be used as new key. - * @return Error status - */ - virtual char SetKey (const SWKey &ikey); - /** Gets the current module key - * @return the current key of this module - */ - virtual SWKey & Key () const { - return *key; - } - /** Sets the current key of the module to ikey, and returns - * the keytext - * - * @param ikey new current key for the module - * @return the keytext of the current module key - */ - virtual char Key (const SWKey & ikey) { - return SetKey (ikey); - } - /** Sets/gets module KeyText - * - * @param ikeytext value which to set keytext; - * [0] - only get - * @return pointer to keytext - */ - virtual const char *KeyText (const char *imodtype = 0); - /** Calls this modules display object and passes itself - * - * @return error status - */ - virtual char Display (); - /** Sets/gets display driver - * - * @param idisp value which to set disp; - * [0] - only get - * @return pointer to disp - */ - virtual SWDisplay *Disp (SWDisplay * idisp = 0); - /** Sets/gets module name - * - * @param imodname value which to set modname; - * [0] - only get - * @return pointer to modname - */ - virtual char *Name (const char *imodname = 0); - /** Sets/gets module description - * - * @param imoddesc value which to set moddesc; - * [0] - only get - * @return pointer to moddesc - */ - virtual char *Description (const char *imoddesc = 0); - /** Sets/gets module type - * - * @param imodtype value which to set modtype; - * [0] - only get - * @return pointer to modtype - */ - virtual char *Type (const char *imodtype = 0); - /** Sets/gets module direction - * - * @param newdir value which to set direction; - * [-1] - only get - * @return char direction - */ - virtual char Direction(signed char newdir = -1); - /** Sets/gets module encoding - * - * @param newdir value which to set encoding; - * [-1] - only get - * @return char encoding - */ - virtual char Encoding(signed char enc = -1); - /** Sets/gets module markup - * - * @param newdir value which to set markup; - * [-1] - only get - * @return char markup - */ - virtual char Markup(signed char enc = -1); - /** Sets/gets module language - * - * @param imodlang value which to set modlang; - * [0] - only get - * @return pointer to modlang - */ - virtual char *Lang (const char *imodlang = 0); - - // search methods - - /** Searches a module for a string - * - * @param istr string for which to search - * @param searchType type of search to perform - * <=0 ->regex; 1->phrase; 2->multiword; - * @param flags options flags for search - * @param justCheckIfSupported if set, don't search, - * only tell if this function supports requested search. - * - * @return listkey set to verses that contain istr - */ - virtual ListKey & Search (const char *istr, int searchType = 0, int flags = 0, - SWKey * scope = 0, - bool * justCheckIfSupported = 0, - void (*percent) (char, void *) = &nullPercent, - void *percentUserData = 0); - /** - * - */ - virtual signed char createSearchFramework () { - return 0; - } // special search framework - /** - * - */ - virtual bool hasSearchFramework () { - return false; - } // special search framework - /** Check if the search is optimally supported (e.g. if index files are presnt and working) - * This function checks whether the search framework may work in the best way. - * @return True if the the search is optimally supported, false if it's not working in the best way. - */ - virtual bool isSearchOptimallySupported (const char *istr, int searchType, - int flags, SWKey * scope) { - bool retVal = false; - Search (istr, searchType, flags, scope, &retVal); - return retVal; - } - /** Allocates a key of specific type for module - * The different reimplementatiosn of SWModule (e.g. SWText) support SWKey implementations, which support special. - * This functions returns a SWKey object which works with the current implementation of SWModule. For example for the SWText class it returns a VerseKey object. - * @see VerseKey, ListKey, SWText, SWLD, SWCom - * @return pointer to allocated key - */ - virtual SWKey *CreateKey (); - /** Renders and returns the current module text - * @return the rendered current module text - */ - virtual operator const char *(); - /** This function is reimplemented by the different kinds - * of module objects - * @return the raw module text of the current entry - */ - virtual char *getRawEntry () = 0; - /** Cast operator to cast to a @ref SWKey reference. - * This operator may be used to cast this module to a SWKey - * object. - * @see SWKey*() - */ - virtual operator SWKey & () { - return *key; - } - /** Operator to cast to an SWKey pointer. - * This function may be used to cast this object to an SWKey pointer. - * @code - * //we assume here that SWModule* module is already defined and valid. - * SWKey* currentKey = (SWKey*)module; - * // do something with currentKey (e.g. print out on screen) - * @endcode - */ - virtual operator SWKey *() { - return key; - } - - - // write interface ---------------------------- - /** Is the module writable? :) - * @return yes or no - */ - virtual bool isWritable () { - return false; - } - /** Creates a new module - * @param path The first parameter is path of the new module - * @return error - */ - static signed char createModule (const char *) { - return -1; - } - /** Modify the current module entry text - * - only if module @ref isWritable - * @return *this - */ - virtual SWModule & setentry (const char *inbuf, long len) { - return *this; - } - /** Modify the current module entry text - * - only if module @ref isWritable - * @return *this - */ - virtual SWModule & operator << (const char *) { - return *this; - } - /** Link the current module entry to another module entry - * - only if module @ref isWritable - * @return *this - */ - virtual SWModule & operator << (const SWKey *) { - return *this; - } - /** Delete current module entry - only if module @ref isWritable - * - */ - virtual void deleteEntry () { - } - // end write interface ------------------------ - - /** Decrements module key a number of entries - * - * @param decrement Number of entries to jump backward - * @return *this - */ - virtual SWModule & operator -= (int decrement); - /** Increments module key a number of entries - * - * @param increment Number of entries to jump forward - * @return *this - */ - virtual SWModule & operator += (int increment); - /** Increments module key by 1 entry - * - */ - virtual SWModule & operator++ (int) { - return *this += 1; - } - /** Decrements module key by 1 entry - * - */ - virtual SWModule & operator-- (int) { - return *this -= 1; - } - /** Positions this modules to an entry - * - * @param p position (e.g. TOP, BOTTOM) - * @return *this - */ - virtual SWModule & operator = (SW_POSITION p); - /** Adds a RenderFilter to this module's @see renderfilters queue - * @param newfilter the filter to add - * @return *this - */ - virtual SWModule & AddRenderFilter (SWFilter * newfilter) { - renderFilters->push_back (newfilter); - return *this; - } - /** Removes a RenderFilter from this module's @see renderfilters queue - * @param oldfilter the filter to remove - * @return *this - */ - virtual SWModule & RemoveRenderFilter (SWFilter * oldfilter) { - renderFilters->remove (oldfilter); - return *this; - } - /** Replaces a RenderFilter in this module's @see renderfilters queue - * @param oldfilter the filter to remove - * @param newfilter the filter to add in its place - * @return *this - */ - virtual SWModule & ReplaceRenderFilter (SWFilter * oldfilter, SWFilter * newfilter) { - FilterList::iterator iter; - for (iter = renderFilters->begin(); iter != renderFilters->end(); iter++) - if (*iter == oldfilter) - *iter = newfilter; - return *this; - } - /** RenderFilter a text buffer - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void renderFilter (char *buf, long size, SWKey *key) { - filterBuffer(renderFilters, buf, size, key); - } - /** Adds an EncodingFilter to this module's @see encodingfilters queue - * @param newfilter the filter to add - * @return *this - */ - virtual SWModule & AddEncodingFilter (SWFilter * newfilter) { - encodingFilters->push_back (newfilter); - return *this; - } - /** Removes an EncodingFilter from this module's @see encodingfilters queue - * @param oldfilter the filter to remove - * @return *this - */ - virtual SWModule & RemoveEncodingFilter (SWFilter * oldfilter) { - encodingFilters->remove (oldfilter); - return *this; - } - /** Replaces an EncodingFilter in this module's @see encodingfilters queue - * @param oldfilter the filter to remove - * @param newfilter the filter to add in its place - * @return *this - */ - virtual SWModule & ReplaceEncodingFilter (SWFilter * oldfilter, SWFilter * newfilter) { - FilterList::iterator iter; - for (iter = encodingFilters->begin(); iter != encodingFilters->end(); iter++) - if (*iter == oldfilter) - *iter = newfilter; - return *this; - } - /** encodingFilter a text buffer - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void encodingFilter (char *buf, long size, SWKey *key) { - filterBuffer(encodingFilters, buf, size, key); - } - /** Adds a StripFilter to this module's @ref stripfilters queue - * @param newfilter the filter to add - * @return *this - */ - virtual SWModule & AddStripFilter (SWFilter * newfilter) { - stripFilters->push_back (newfilter); - return *this; - } - /** StripFilter a text buffer - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void stripFilter (char *buf, long size, SWKey *key) { - filterBuffer(stripFilters, buf, size, key); - } - /** Adds a RawFilter to this module's @ref rawfilters queue - * @param newfilter the filter to add - * @return *this - */ - virtual SWModule & AddRawFilter (SWFilter * newfilter) { - rawFilters->push_back (newfilter); - return *this; - } - /** FilterBuffer a text buffer - * @param filters the FilterList of filters to iterate - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void filterBuffer (FilterList *filters, char *buf, long size, SWKey *key) { - FilterList::iterator it; - for (it = filters->begin(); it != filters->end(); it++) { - (*it)->ProcessText(buf, size, key, this); + ConfigEntMap ownConfig; + ConfigEntMap *config; + mutable AttributeTypeList entryAttributes; + mutable bool procEntAttr; + + char error; + bool skipConsecutiveLinks; + + /** the current key */ + SWKey *key; + + ListKey listkey; + char *modname; + char *moddesc; + char *modtype; + char *modlang; + + char direction; + char markup; + char encoding; + + /** this module's display object */ + SWDisplay *disp; + + static SWDisplay rawdisp; + SWBuf entryBuf; + + /** executed to remove all markup (for searches) */ + FilterList *stripFilters; + + /** executed immediately upon fileread */ + FilterList *rawFilters; + + /** executed to format for display */ + FilterList *renderFilters; + + /** executed to change markup to user prefs */ + FilterList *optionFilters; + + /** executed to decode text for display */ + FilterList *encodingFilters; + + int entrySize; + mutable long entryIndex; // internal common storage for index + + public: + /** + * Set this bool to false to terminate the search which is executed by this module (Search()). + * This is useful for threaded applications to terminate the search in another thread. + */ + bool terminateSearch; + /** Initializes data for instance of SWModule + * + * @param imodname Internal name for module; see also Name(). + * @param imoddesc Name to display to user for module; see also Description() + * @param idisp Display object to use for displaying; see also Disp() + * @param imodtype Type of Module (All modules will be displayed with others of same type under their modtype heading); see also Type() + * @param encoding Encoding of the module. + * @param dir Direction of text flow. + * @param markup Markup of the module. + * @param modlang Language of the module. + */ + SWModule(const char *imodname = 0, const char *imoddesc = 0, SWDisplay * idisp = 0, char *imodtype = 0, SWTextEncoding encoding = ENC_UNKNOWN, SWTextDirection dir = DIRECTION_LTR, SWTextMarkup markup = FMT_UNKNOWN, const char* modlang = 0); + /** Cleans up instance of SWModule + */ + virtual ~SWModule(); + /** Gets and clears error status + * + * @return error status + */ + virtual char Error(); + /** + * @return True if this module is encoded in Unicode, otherwise return false. + */ + virtual const bool isUnicode() const { return (encoding == (char)ENC_UTF8 || encoding == (char)ENC_SCSU); } + + // These methods are useful for modules that come from a standard SWORD install (most do). + // SWMgr will call setConfig. The user may use getConfig and getConfigEntry (if they + // are not comfortable with, or don't wish to use stl maps). + virtual const ConfigEntMap &getConfig() const { return *config; } + virtual void setConfig(ConfigEntMap *config); + virtual const char *getConfigEntry(const char *key) const; + + /** + * @return The size of the current entry. + */ + virtual const int getEntrySize() const { return entrySize; } + /** + * Sets a key to this module for position to a + * particular record or set of records + * + * @param ikey key with which to set this module + * @return error status + * @deprecated Use setKey() instead. + */ + char SetKey(const SWKey *ikey) { return setKey(ikey); } + /** + * Sets a key to this module for position to a + * particular record or set of records + * + * @param ikey key with which to set this module + * @return error status + */ + virtual char setKey(const SWKey *ikey); + + + virtual long Index() const { return entryIndex; } + virtual long Index(long iindex) { entryIndex = iindex; return entryIndex; } + + /** + * Sets the key of this module. + * @param ikey The SWKey which should be used as new key. + * @return Error status + * @deprecated Use setKey() instead. + */ + char SetKey(const SWKey &ikey) { return setKey(ikey); } + /** + * Sets the key of this module. + * @param ikey The SWKey which should be used as new key. + * @return Error status + */ + char setKey(const SWKey &ikey) { return SetKey(&ikey); } + + /** Gets the current module key + * @return the current key of this module + */ + SWKey &Key() const { return *getKey(); } + /** Gets the current module key + * @return the current key of this module + */ + SWKey *getKey() const; + + /** Sets the current key of the module to ikey, and returns + * the keytext + * + * @param ikey new current key for the module + * @return the keytext of the current module key + * @deprecated Use setKey() instead. + */ + char Key(const SWKey & ikey) { return setKey(ikey); } + + /** + * Sets/gets module KeyText + * + * @param ikeytext Value which to set keytext; [0]-only get + * @return pointer to keytext + */ + virtual const char *KeyText(const char *ikeytext = 0) { + if (ikeytext) setKey(ikeytext); + return *getKey(); } - } - /** RawFilter a text buffer - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void rawFilter (char *buf, long size, SWKey *key) { - buf[size] = 0; - filterBuffer(rawFilters, buf, size, key); - } - /** Adds an OptionFilter to this module's @ref optionfilters queue - * @param newfilter the filter to add - * @return *this - */ - virtual SWModule & AddOptionFilter (SWFilter * newfilter) { - optionFilters->push_back (newfilter); - return *this; - } - /** OptionFilter a text buffer - * @param buf the buffer to filter - * @param size the allocated size of the buffer - * @param key key location from where this buffer was extracted - * @return *this - */ - virtual void optionFilter (char *buf, long size, SWKey *key) { - filterBuffer(optionFilters, buf, size, key); - } - /** calls all StripFilters on buffer or current text - * - * @param buf buf to massage instead of current module position; - * if buf is NULL, the current text will be used - * @param len max len of buf OR current text -- will be applied anyway - * @return this module's text at specified key location massaged by Strip filters - */ - virtual const char *StripText (char *buf = 0, int len = -1); - /** calls all RenderFilters on buffer or current text - * - * @param buf buffer to Render instead of current module position; - * if buf is NULL, the current text will be used - * @param len max len of buf OR current text -- will be applied anyway - * @return this module's text at specified key location massaged by Render filters - */ - virtual const char *RenderText (char *buf = 0, int len = -1, bool render = true); - /** calls all StripFilters on current text - * - * @param tmpKey key to use to grab text - * @return this module's text at specified key location massaged by Strip filters - */ - virtual const char *StripText (SWKey * tmpKey); - /** calls all RenderFilters on current text - * - * @param tmpKey key to use to grab text - * @return this module's text at specified key location massaged by Render filters - */ - virtual const char *RenderText (SWKey * tmpKey); - - /** - * - * option to specify behaviour when iterating over consecutive entried linked - * to same text - * @param val = true means only include entry once in iteration - */ - virtual void setSkipConsecutiveLinks(bool val) { skipConsecutiveLinks = val; } - virtual bool getSkipConsecutiveLinks() { return skipConsecutiveLinks; } - virtual AttributeTypeList &getEntryAttributes() const { return entryAttributes; } - virtual void processEntryAttributes(bool val) const { procEntAttr = val; } - virtual bool isProcessEntryAttributes() const { return procEntAttr; } -}; + /** Calls this modules display object and passes itself + * + * @return error status + */ + virtual char Display(); + + /** Sets/gets display driver + * + * @param idisp Value which to set disp; [0]-only get + * @return pointer to disp + */ + virtual SWDisplay *Disp(SWDisplay * idisp = 0); + /** Sets/gets module name + * + * @param imodname Value which to set modname; [0]-only get + * @return pointer to modname + */ + virtual char *Name() const; + virtual char *Name(const char *imodname); + /** Sets/gets module description + * + * @param imoddesc Value which to set moddesc; [0]-only get + * @return pointer to moddesc + */ + virtual char *Description() const; + virtual char *Description(const char *imoddesc); + /** Sets/gets module type + * + * @param imodtype Value which to set modtype; [0]-only get + * @return pointer to modtype + */ + virtual char *Type() const; + virtual char *Type(const char *imodtype); + /** Sets/gets module direction + * + * @param newdir Value which to set direction; [-1]-only get + * @return new direction + */ + virtual char Direction(signed char newdir = -1); + /** Sets/gets module encoding + * + * @param enc Value which to set encoding; [-1]-only get + * @return Encoding + */ + virtual char Encoding(signed char enc = -1); + /** Sets/gets module markup + * + * @param markup Vvalue which to set markup; [-1]-only get + * @return Markup + */ + virtual char Markup(signed char markup = -1); + /** Sets/gets module language + * + * @param imodlang Value which to set modlang; [0]-only get + * @return pointer to modlang + */ + virtual char *Lang(const char *imodlang = 0); + + + // search interface + /** Searches a module for a string + * + * @param istr string for which to search + * @param searchType type of search to perform + * >=0 ->regex; -1 ->phrase; -2 ->multiword; + * @param flags options flags for search + * @param scope Key containing the scope. VerseKey or ListKey are useful here. + * @param justCheckIfSupported if set, don't search, + * only tell if this function supports requested search. + * @param percent Callback function to get the current search status in %. + * @param percentUserData User data that is given to the callback function as parameter. + * + * @return listkey set to verses that contain istr + */ + virtual ListKey &search(const char *istr, int searchType = 0, int flags = 0, + SWKey * scope = 0, + bool * justCheckIfSupported = 0, + void (*percent) (char, void *) = &nullPercent, + void *percentUserData = 0); + + // for backward compat-- deprecated + virtual ListKey &Search(const char *istr, int searchType = 0, int flags = 0, + SWKey * scope = 0, + bool * justCheckIfSupported = 0, + void (*percent) (char, void *) = &nullPercent, + void *percentUserData = 0) { + return search(istr, searchType, flags, scope, justCheckIfSupported, percent, percentUserData); + } + + + /** Allocates a key of specific type for module + * The different reimplementatiosn of SWModule (e.g. SWText) support SWKey implementations, which support special. + * This functions returns a SWKey object which works with the current implementation of SWModule. For example for the SWText class it returns a VerseKey object. + * @see VerseKey, ListKey, SWText, SWLD, SWCom + * @return pointer to allocated key + */ + virtual SWKey *CreateKey(); + /** This function is reimplemented by the different kinds + * of module objects + * @return the raw module text of the current entry + */ +#ifndef SWIG + virtual SWBuf &getRawEntryBuf() = 0; +#else + virtual SWBuf &getRawEntryBuf() {}; +#endif + + virtual const char *getRawEntry() { return getRawEntryBuf().c_str(); } + + // write interface ---------------------------- + /** Is the module writable? :) + * @return yes or no + */ + virtual bool isWritable() { return false; } + /** Creates a new module + * @param path The first parameter is path of the new module + * @return error + */ + static signed char createModule(const char *path) { return -1; } + /** Modify the current module entry text - only if module isWritable() + * @return *this + */ + virtual void setEntry(const char *inbuf, long len = -1) { } + /** Link the current module entry to another module entry - only if module isWritable() + */ + virtual void linkEntry(const SWKey *sourceKey) { } + /** Delete current module entry - only if module isWritable() + */ + virtual void deleteEntry() {} + + // end write interface ------------------------ + + /** Decrements module key a number of entries + * + * @param steps Number of entries to jump backward + * @return *this + */ + virtual void decrement(int steps = 1); + /** Increments module key a number of entries + * + * @param steps Number of entries to jump forward + * @return *this + */ + virtual void increment(int steps = 1); + /** Positions this modules to an entry + * + * @param pos position (e.g. TOP, BOTTOM) + * @return *this + */ + virtual void setPosition(SW_POSITION pos); + /** Adds a RenderFilter to this module's renderfilters queue + * @param newfilter the filter to add + * @return *this + */ + virtual SWModule & AddRenderFilter(SWFilter * newfilter) { + renderFilters->push_back (newfilter); + return *this; + } + /** Removes a RenderFilter from this module's renderfilters queue + * @param oldfilter the filter to remove + * @return *this + */ + virtual SWModule & RemoveRenderFilter(SWFilter * oldfilter) { + renderFilters->remove (oldfilter); + return *this; + } + /** Replaces a RenderFilter in this module's renderfilters queue + * @param oldfilter the filter to remove + * @param newfilter the filter to add in its place + * @return *this + */ + virtual SWModule & ReplaceRenderFilter(SWFilter * oldfilter, SWFilter * newfilter) { + FilterList::iterator iter; + for (iter = renderFilters->begin(); iter != renderFilters->end(); iter++) { + if (*iter == oldfilter) + *iter = newfilter; + } + return *this; + } + /** RenderFilter a text buffer + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void renderFilter(SWBuf &buf, SWKey *key) { + filterBuffer(renderFilters, buf, key); + } + /** Adds an EncodingFilter to this module's @see encodingfilters queue + * @param newfilter the filter to add + * @return *this + */ + virtual SWModule & AddEncodingFilter(SWFilter * newfilter) { + encodingFilters->push_back (newfilter); + return *this; + } + /** Removes an EncodingFilter from this module's encodingfilters queue + * @param oldfilter the filter to remove + * @return *this + */ + virtual SWModule & RemoveEncodingFilter(SWFilter * oldfilter) { + encodingFilters->remove (oldfilter); + return *this; + } + /** Replaces an EncodingFilter in this module's encodingfilters queue + * @param oldfilter the filter to remove + * @param newfilter the filter to add in its place + * @return *this + */ + virtual SWModule & ReplaceEncodingFilter(SWFilter * oldfilter, SWFilter * newfilter) { + FilterList::iterator iter; + for (iter = encodingFilters->begin(); iter != encodingFilters->end(); iter++) { + if (*iter == oldfilter) + *iter = newfilter; + } + return *this; + } + /** encodingFilter a text buffer + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void encodingFilter(SWBuf &buf, SWKey *key) { + filterBuffer(encodingFilters, buf, key); + } + /** Adds a StripFilter to this module's stripfilters queue + * @param newfilter the filter to add + * @return *this + */ + virtual SWModule & AddStripFilter(SWFilter * newfilter) { + stripFilters->push_back (newfilter); + return *this; + } + /** StripFilter a text buffer + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void stripFilter(SWBuf &buf, SWKey *key) { + filterBuffer(stripFilters, buf, key); + } + /** Adds a RawFilter to this module's rawfilters queue + * @param newfilter the filter to add + * @return *this + */ + virtual SWModule & AddRawFilter(SWFilter * newfilter) { + rawFilters->push_back (newfilter); + return *this; + } + /** FilterBuffer a text buffer + * @param filters the FilterList of filters to iterate + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void filterBuffer(FilterList *filters, SWBuf &buf, SWKey *key) { + FilterList::iterator it; + for (it = filters->begin(); it != filters->end(); it++) { + (*it)->processText(buf, key, this); + } + } + /** RawFilter a text buffer + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void rawFilter(SWBuf &buf, SWKey *key) { + filterBuffer(rawFilters, buf, key); + } + /** Adds an OptionFilter to this module's optionfilters queue + * @param newfilter the filter to add + * @return *this + */ + virtual SWModule & AddOptionFilter(SWFilter * newfilter) { + optionFilters->push_back(newfilter); + return *this; + } + /** OptionFilter a text buffer + * @param buf the buffer to filter + * @param key key location from where this buffer was extracted + * @return *this + */ + virtual void optionFilter(SWBuf &buf, SWKey *key) { + filterBuffer(optionFilters, buf, key); + } + /** calls all StripFilters on buffer or current text + * + * @param buf buf to massage instead of current module position; + * if buf is NULL, the current text will be used + * @param len max len of buf OR current text -- will be applied anyway + * @return this module's text at specified key location massaged by Strip filters + */ + virtual const char *StripText(const char *buf = 0, int len = -1); + /** calls all RenderFilters on buffer or current text + * + * @param buf buffer to Render instead of current module position; + * if buf is NULL, the current text will be used + * @param len max len of buf OR current text -- will be applied anyway + * @param render Perform the rendering. + * @return this module's text at specified key location massaged by Render filters + */ + virtual const char *RenderText(const char *buf = 0, int len = -1, bool render = true); + /** calls all StripFilters on current text + * + * @param tmpKey key to use to grab text + * @return this module's text at specified key location massaged by Strip filters + */ + virtual const char *StripText(SWKey * tmpKey); + /** calls all RenderFilters on current text + * + * @param tmpKey key to use to grab text + * @return this module's text at specified key location massaged by Render filters + */ + virtual const char *RenderText(SWKey * tmpKey); + /** + * + * option to specify behaviour when iterating over consecutive entried linked + * to same text + * @param val = true means only include entry once in iteration + */ + virtual void setSkipConsecutiveLinks(bool val) { skipConsecutiveLinks = val; } + /** DOCS NEEDED. + */ + virtual bool getSkipConsecutiveLinks() { return skipConsecutiveLinks; } + /** DOCS NEEDED. + */ + virtual AttributeTypeList &getEntryAttributes() const { return entryAttributes; } + /** DOCS NEEDED. + */ + virtual void processEntryAttributes(bool val) const { procEntAttr = val; } + /** DOCS NEEDED. + */ + virtual bool isProcessEntryAttributes() const { return procEntAttr; } + + // OPERATORS ----------------------------------------------------------------- + + SWMODULE_OPERATORS +}; +SWORD_NAMESPACE_END #endif |