/********* * * This file is part of BibleTime's source code, http://www.bibletime.info/. * * Copyright 1999-2006 by the BibleTime developers. * The BibleTime source code is licensed under the GNU General Public License version 2.0. * **********/ #ifndef CSWORDBACKEND_H #define CSWORDBACKEND_H //BibleTime includes #include "cswordmoduleinfo.h" //#include "centrydisplay.h" //Qt includes #include #include #include #include //Sword includes #include #include #include #include #include #include using namespace sword; namespace Rendering { class CEntryDisplay; class CChapterDisplay; class CBookDisplay; } /** The backend layer main class. * This is the implementation of CBackend for Sword. It's additionally derived from SWMgr * to provide functions of Sword. * * @short The backend implementation of Sword * @author The BibleTime team * @version $Id: cswordbackend.h,v 1.58 2007/03/14 21:32:47 joachim Exp $ */ class CSwordBackend : public sword::SWMgr { public: /** Filter options. Filter options to * control the text display of modules. Uses int and not bool because not all * options have just two toggle values. */ struct FilterOptions { int footnotes; /**< 0 for disabled, 1 for enabled */ int strongNumbers; /**< 0 for disabled, 1 for enabled */ int headings; /**< 0 for disabled, 1 for enabled */ int morphTags; /**< 0 for disabled, 1 for enabled */ int lemmas; /**< 0 for disabled, 1 for enabled */ int hebrewPoints; /**< 0 for disabled, 1 for enabled */ int hebrewCantillation; /**< 0 for disabled, 1 for enabled */ int greekAccents; /**< 0 for disabled, 1 for enabled */ int textualVariants; /**< Number n to enabled the n-th variant */ int redLetterWords; /**< 0 for disabled, 1 for enabled */ int scriptureReferences; /**< 0 for disabled, 1 for enabled */ int morphSegmentation; /**< 0 for disabled, 1 for enabled */ }; /** Control the display of a text. */ struct DisplayOptions { int lineBreaks; int verseNumbers; }; /** The error codes which may be returned by the @ref Load() call. */ enum LoadError { // the values exist to cast from the char return of SWMgr::Load NoSwordConfig = -1, NoError = 0, NoModules = 1 }; /** * The constructor of the Sword backend. * It creates the SWModule objects using SWMgr's methods, it adds the necessary * filters for the module format. */ CSwordBackend(); /** * The constructor of the Sword backend. * @param path The path which is used to load modules * @param augmentHome True if the $HOME/.sword/ modules should be augmented with the other modules */ CSwordBackend( const TQString& path, const bool augmentHome = true ); /** * The destrctor of this backend. This function shuts the modules down using @ref shutdownModules. */ virtual ~CSwordBackend(); /** * This function returns the list of available modules managed by this backend. * You have to call initModules() first; * * @return The list of modules managed by this backend */ inline virtual ListCSwordModuleInfo& moduleList(); /** * Initializes the Sword modules. * * @return True if the initializiation was succesful, otherwise return false. */ virtual const CSwordBackend::LoadError initModules(); /** * This function deinitializes the modules and deletes them. * * @return True if it was succesful, otherwise return false */ virtual const bool shutdownModules(); /** * Sets the given options enabled or disabled depending on the second parameter. * * @param type This is the type this function should set enabled or disabled * @param enable If this is true the option will be enabled, otherwise it will be disabled. */ void setOption( const CSwordModuleInfo::FilterTypes type, const int state ); void setFilterOptions( const CSwordBackend::FilterOptions options ); void setDisplayOptions( const CSwordBackend::DisplayOptions options ); /** * Returns true if the given option is enabled. * * @return Returns true if the options given as aparameter is switched on at this time, otherwise return false. */ virtual const bool isOptionEnabled( const CSwordModuleInfo::FilterTypes type); /** * Sets the language for the international booknames of Sword. * @param langName The abbreviation string which should be used for the Sword backend */ const TQString booknameLanguage( const TQString& langName = TQString::null ); /** * This function searches for a module with the specified description * @param description The description of the desired module * @return pointer to the desired module; null if no module has the specified description */ virtual CSwordModuleInfo* const findModuleByDescription(const TQString& description); /** * This function searches for a module with the specified description * @param description The description of the desired module * @return pointer to the desired module; null if no module has the specified description */ const TQString findModuleNameByDescription(const TQString& description); /** * This function searches for a module with the specified name * @param name The name of the desired module * @return Pointer to the desired module; null if no module has the specified name */ CSwordModuleInfo* const findModuleByName(const TQString& name); /** * This function searches for a module with the specified sword module as module() object! * @param swmodule to a Sword module * @return pointer to the desired module; null if no module has the specified name */ CSwordModuleInfo* const findSwordModuleByPointer(const sword::SWModule* const swmodule); /** * This function searches for a module which is the same as the passed module. * @param module The module which should be used for searching the new one. May be child of a different backend. * @return Pointer to the desired module; null if no module has the specified name */ CSwordModuleInfo* const findModuleByPointer(const CSwordModuleInfo* const module); /** * @return Our global config object which contains the configs of all modules merged together. */ inline sword::SWConfig* const getConfig() const; /** * Tries to find the config object for the module. The second paramter will be the found config. * @return True if the config was found, false if not. If false is returned the moduleConfig object is in undefined/unknwon state. */ const bool moduleConfig(const TQString& module, sword::SWConfig& moduleConfig ); /** * Returns the text used for the option given as parameter. * @param The paramter enum * @return The name of the option given by the parameter */ static const TQString optionName( const CSwordModuleInfo::FilterTypes option ); /** * Returns the text used for the option given as parameter. */ static const TQString configOptionName( const CSwordModuleInfo::FilterTypes option ); /** * Returns the translated name of the option given as parameter. * @param The translated option name */ static const TQString translatedOptionName(const CSwordModuleInfo::FilterTypes option ); /** * Returns the version of the Sword library. * @return The version used by this backend */ inline virtual const sword::SWVersion Version(); /** * Reload all Sword modules. */ void reloadModules(); /** Sword prefix list. * @return A list of all known Sword prefix dirs */ const TQStringList swordDirList(); protected: /** * Adds a render filter to the module. * @param module Add a render filter to this module! */ virtual void AddRenderFilters(sword::SWModule *module, sword::ConfigEntMap §ion); /** * Initializes the filters provided by BibleTime. */ virtual void filterInit(); private: // Filters struct Filters { sword::SWFilter *gbf; sword::SWFilter *plain; sword::SWFilter *thml; sword::SWFilter *osis; } m_filters; struct Displays { Rendering::CChapterDisplay* chapter; Rendering::CEntryDisplay* entry; Rendering::CBookDisplay* book; } m_displays; ListCSwordModuleInfo m_moduleList; TQMap m_moduleDescriptionMap; }; /**Returns The list of modules managed by this backend*/ inline ListCSwordModuleInfo& CSwordBackend::moduleList() { return m_moduleList; } /** Returns our local config object to store the cipher keys etc. locally for each user. The values of the config are merged with the global config. */ inline sword::SWConfig* const CSwordBackend::getConfig() const { return config; } /** Returns the version of the Sword library. */ inline const sword::SWVersion CSwordBackend::Version() { return sword::SWVersion::currentVersion; } #endif