mirror of
https://github.com/Ponce/slackbuilds
synced 2024-11-29 13:00:32 +01:00
df5b7aedb9
Signed-off-by: Robby Workman <rworkman@slackbuilds.org>
589 lines
17 KiB
Diff
589 lines
17 KiB
Diff
# Author: Damyan Ivanov <dmn@debian.org>
|
|
# Description: add support to multiple dictionary directories
|
|
# stolen from upstream multidir branch
|
|
|
|
--- a/configure.in
|
|
+++ b/configure.in
|
|
@@ -26,10 +26,13 @@ AC_ARG_ENABLE(light-version,
|
|
echo "Light version will be compiled..."
|
|
AC_DEFINE([USE_LIGHT],[],[enable light version])],)
|
|
|
|
-AC_ARG_ENABLE(dictionary-dir,
|
|
-[ --enable-dictionary-dir search for dictionaries only in /usr/local/share/bgoffice dir],[
|
|
- echo "Dictionary lookup enabled..."
|
|
- AC_DEFINE([USE_USER_LOCAL],[],[dictionary lookup])],)
|
|
+AC_ARG_ENABLE(dictionary-dirs,
|
|
+[ --enable-dictionary-dirs=DIRS List default dictiopnary directories (Use colon to delimit entries. Default is /usr/local/share/bgoffice)],
|
|
+[
|
|
+ test -z "$enableval" && echo "--enable-dictionary-dirs requires an argument" && exit 1
|
|
+ AC_DEFINE_UNQUOTED([DICT_DIRS],["$enableval"],[default dictionary directories])
|
|
+ echo "Default dictionary directories set to $enableval"
|
|
+],)
|
|
|
|
AC_ARG_ENABLE(trayicon,
|
|
[ --disable-trayicon disable trayicon support],[
|
|
--- a/src/defaults.h
|
|
+++ b/src/defaults.h
|
|
@@ -24,6 +24,7 @@
|
|
|
|
#include "config.h"
|
|
|
|
+#define DICT_DIR_DELIMITER ':'
|
|
|
|
#ifdef DATA_DIR_CONFIG
|
|
static const char FILES_DIR[] = DATA_DIR_CONFIG;
|
|
@@ -32,8 +33,8 @@ static const char FILES_DIR[] = "/usr/lo
|
|
#endif
|
|
|
|
|
|
-#ifdef USE_USER_LOCAL
|
|
-static const char DICT_DIR[] = "/usr/local/share/bgoffice/";
|
|
+#ifdef DICT_DIRS
|
|
+static const char DICT_DIR[] = DICT_DIRS;
|
|
#else
|
|
static const char DICT_DIR[] = DATA_DIR_CONFIG;
|
|
#endif
|
|
--- a/src/dictgui.cpp
|
|
+++ b/src/dictgui.cpp
|
|
@@ -38,7 +38,7 @@
|
|
extern Properties *cfg;
|
|
extern bool lang;
|
|
|
|
-DictGui::DictGui(int argc, char **argv, const char *dir)
|
|
+DictGui::DictGui(int argc, char **argv, const vector<string> dirs)
|
|
#ifndef ENABLE_LIGHT_VERSION
|
|
: spacer(" "),
|
|
add_to_history(true),
|
|
@@ -48,7 +48,8 @@ DictGui::DictGui(int argc, char **argv,
|
|
#endif
|
|
|
|
{
|
|
- dataDir = dir;
|
|
+ dataDirs = dirs;
|
|
+
|
|
use_tray = cfg->getBool("UseTray", true);
|
|
use_tray_close = cfg->getBool("UseTrayClose", false);
|
|
tray_hide_os = cfg->getBool("TrayHideOnStart", false);
|
|
@@ -66,7 +67,7 @@ DictGui::DictGui(int argc, char **argv,
|
|
|
|
splash->set_step(0.2);
|
|
#endif
|
|
- dict = new TranslatorManager((char*) dataDir);
|
|
+ dict = new TranslatorManager(dataDirs);
|
|
if (!dict->init()) {
|
|
#ifndef ENABLE_LIGHT_VERSION
|
|
delete splash;
|
|
--- a/src/dictgui.h
|
|
+++ b/src/dictgui.h
|
|
@@ -38,7 +38,7 @@ class DictGui : public GbgofficeTools
|
|
{
|
|
|
|
public:
|
|
- DictGui(int argc, char **argv, const char *dir);
|
|
+ DictGui(int argc, char **argv, const vector<string> dirs);
|
|
virtual ~DictGui();
|
|
|
|
void run();
|
|
@@ -58,7 +58,7 @@ public:
|
|
|
|
protected:
|
|
// our data directory
|
|
- const char *dataDir;
|
|
+ vector<string> dataDirs;
|
|
|
|
// number of words in list (treeview widget)
|
|
// this will not be taken from cfg, for faster access
|
|
--- a/src/main.cpp
|
|
+++ b/src/main.cpp
|
|
@@ -27,16 +27,80 @@
|
|
#include <cstring>
|
|
#include <getopt.h>
|
|
#include <gtkmm/main.h>
|
|
+
|
|
using namespace std;
|
|
|
|
extern char *optarg;
|
|
Properties *cfg;
|
|
bool lang = false;
|
|
+vector<string> defaultDictDirs;
|
|
+vector<string> userDictDirs;
|
|
+vector<string> dictDirs;
|
|
+
|
|
+vector<string> splitString(const string path, char delimiter)
|
|
+{
|
|
+ vector<string> result;
|
|
+ string str = path;
|
|
+ size_t p;
|
|
+
|
|
+ if (str.length()) {
|
|
+ do {
|
|
+ p = str.find(delimiter);
|
|
+ if (p != str.npos) {
|
|
+ if (p != 0) {
|
|
+ result.push_back(str.substr(0, p));
|
|
+ }
|
|
+ str = str.substr(p + 1);
|
|
+ } else {
|
|
+ if (str.length()) {
|
|
+ result.push_back(str);
|
|
+ }
|
|
+ break;
|
|
+ }
|
|
+ } while (p != str.npos);
|
|
+ }
|
|
+
|
|
+ return result;
|
|
+}
|
|
+
|
|
+void prepareDictDirs()
|
|
+{
|
|
+ userDictDirs = splitString(cfg->getString("DataDir", ""), DICT_DIR_DELIMITER);
|
|
+// std::cout << (cfg->getString("DataDir", DICT_DIR)) << std::endl;
|
|
+ defaultDictDirs = splitString( DICT_DIR, DICT_DIR_DELIMITER );
|
|
|
|
+ // start with directories from user configuration
|
|
+
|
|
+ if(userDictDirs.size() == 0) {
|
|
+ dictDirs = defaultDictDirs;
|
|
+ } else {
|
|
+ dictDirs = userDictDirs;
|
|
+ }
|
|
+
|
|
+/*
|
|
+ // then add non-duplicating default directories
|
|
+ defaultDictDirs = splitString( DICT_DIR, DICT_DIR_DELIMITER );
|
|
+
|
|
+ for( size_t i = 0; i < defaultDictDirs.size(); i++) {
|
|
+ string candidate = defaultDictDirs[i];
|
|
+ bool found = false;
|
|
+
|
|
+ for( size_t j = 0; j < dictDirs.size(); j++ ) {
|
|
+ if( candidate == dictDirs[j] ) {
|
|
+ found = true;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if( !found ) {
|
|
+ dictDirs.push_back(candidate);
|
|
+ }
|
|
+ } */
|
|
+}
|
|
|
|
int main(int argc, char **argv)
|
|
{
|
|
- char *env, *path, *dataDir;
|
|
+ char *env, *path;
|
|
int ch;
|
|
|
|
|
|
@@ -55,13 +119,8 @@ int main(int argc, char **argv)
|
|
* with some modifications
|
|
*/
|
|
cfg = new Properties(getenv("HOME"), CONF_FILENAME);
|
|
- path = cfg->getString("DataDir", DICT_DIR);
|
|
- dataDir = new char[strlen(path) + 2];
|
|
- strcpy(dataDir, path);
|
|
- if ((dataDir[0] != '\0') && (dataDir[strlen(dataDir) - 1] != '/')) {
|
|
- strcat(dataDir, "/");
|
|
- }
|
|
-
|
|
+ prepareDictDirs();
|
|
+
|
|
|
|
/* parsing command line options */
|
|
while ((ch = getopt_long(argc, argv, "dhl:v", longopts, NULL)) != -1) {
|
|
@@ -71,7 +130,7 @@ int main(int argc, char **argv)
|
|
return 0;
|
|
|
|
case 'd':
|
|
- cout << dataDir << endl;
|
|
+ cout << dictDirs[0] << endl;
|
|
return 0;
|
|
|
|
case 'l':
|
|
@@ -125,7 +184,7 @@ int main(int argc, char **argv)
|
|
Gtk::Main kit(argc, argv);
|
|
|
|
// gui init
|
|
- DictGui maindict(argc, argv, dataDir);
|
|
+ DictGui maindict(argc, argv, dictDirs);
|
|
|
|
#if !defined(ENABLE_LIGHT_VERSION) && !defined(DISABLE_TRAY)
|
|
if (use_tray) {
|
|
@@ -140,3 +199,4 @@ int main(int argc, char **argv)
|
|
return 0;
|
|
}
|
|
|
|
+// vi: set tabstop=8 noexpandtab softtabstop=8 shiftwidth=8 :
|
|
--- a/src/properties.cpp
|
|
+++ b/src/properties.cpp
|
|
@@ -23,6 +23,10 @@
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
+#ifdef DEBUG
|
|
+#include <iostream>
|
|
+#endif
|
|
+
|
|
#include "properties.h"
|
|
|
|
|
|
@@ -39,21 +43,41 @@ const int Properties::MAX_LINE_LEN = 10
|
|
const int Properties::MAX_KEY_LEN = 128;
|
|
|
|
|
|
-Properties::Properties(const char *path, const char *file, const char *suffix) {
|
|
+Properties::Properties(const char *file_path, const char *file, const char *suffix) {
|
|
+ char *p;
|
|
+
|
|
// Allocate memory
|
|
buf = new char[MAX_LINE_LEN];
|
|
sbuf = new char[MAX_LINE_LEN];
|
|
key = new char[MAX_KEY_LEN];
|
|
- fileName = new char[strlen(path) + strlen(file) + 2];
|
|
- backupFileName = new char[strlen(path) + strlen(file) + strlen(suffix) + 2];
|
|
+
|
|
+
|
|
+ fileName = new char[strlen(file_path) + strlen(file) + 2];
|
|
+ backupFileName = new char[strlen(file_path) + strlen(file) + strlen(suffix) + 2];
|
|
// Copy file names in local variables
|
|
- strcpy(fileName, path);
|
|
- if ((path[0] != '\0') && (path[strlen(path) - 1] != '/')) {
|
|
+ strcpy(fileName, file_path);
|
|
+ if (strlen(file)) {
|
|
strcat(fileName, "/");
|
|
+ strcat(fileName, file);
|
|
}
|
|
- strcat(fileName, file);
|
|
strcpy(backupFileName, fileName);
|
|
strcat(backupFileName, suffix);
|
|
+
|
|
+ // Find directory name
|
|
+#ifdef DEBUG
|
|
+ std::cerr << "Properties:: parsing fileName '"<< fileName <<"'\n";
|
|
+#endif
|
|
+ p = strrchr( fileName, '/' );
|
|
+ if (p) {
|
|
+ directory = new char[ p - fileName + 2 ];
|
|
+ strncpy( directory, fileName, p-fileName + 1); // include the slash
|
|
+ directory[p-fileName+1] = '\0'; // terminate
|
|
+ } else {
|
|
+ directory = "./";
|
|
+ }
|
|
+#ifdef DEBUG
|
|
+ std::cerr << "Properties:: directory is '"<<directory<<"'\n";
|
|
+#endif
|
|
}
|
|
|
|
|
|
@@ -63,6 +87,7 @@ Properties::~Properties() {
|
|
delete [] key;
|
|
delete [] fileName;
|
|
delete [] backupFileName;
|
|
+ delete [] directory;
|
|
}
|
|
|
|
|
|
@@ -186,3 +211,5 @@ bool Properties::setInt(const char *prop
|
|
bool Properties::setBool(const char *property, const bool value) {
|
|
return setString(property, (value ? "true" : "false"));
|
|
}
|
|
+
|
|
+// vi: set noexpandtab softtabstop=0 tabstop=8 shiftwidth=8 :
|
|
--- a/src/properties.h
|
|
+++ b/src/properties.h
|
|
@@ -30,7 +30,7 @@
|
|
class Properties {
|
|
|
|
public:
|
|
- Properties(const char *path, const char *file, const char *suffix = "~");
|
|
+ Properties(const char *file_path, const char *file = "", const char *suffix = "~");
|
|
~Properties();
|
|
char *getString(const char *property, const char *defaultValue = "");
|
|
int getInt(const char *property, const int defaultValue = 0);
|
|
@@ -39,6 +39,7 @@ public:
|
|
bool setString(const char *property, const char *value);
|
|
bool setInt(const char *property, const int value);
|
|
bool setBool(const char *property, const bool value);
|
|
+ char *getDirectory() { return directory; };
|
|
|
|
private:
|
|
static const int MAX_LINE_LEN;
|
|
@@ -48,7 +49,10 @@ private:
|
|
char *key;
|
|
char *fileName;
|
|
char *backupFileName;
|
|
+ char *directory;
|
|
|
|
};
|
|
|
|
#endif
|
|
+
|
|
+// vi: set noexpandtab softtabstop=0 tabstop=8 shiftwidth=8 :
|
|
--- a/src/translator.cpp
|
|
+++ b/src/translator.cpp
|
|
@@ -23,6 +23,10 @@
|
|
#include <string.h>
|
|
#include <ctype.h>
|
|
|
|
+#ifdef DEBUG
|
|
+#include <iostream.h>
|
|
+#endif
|
|
+
|
|
#include "database.h"
|
|
#include "translator.h"
|
|
|
|
@@ -111,9 +115,15 @@ Translator::~Translator() {
|
|
bool Translator::init(const int type, const char *fileName, const long fixedLastWordPointer) {
|
|
// Check input data
|
|
if ((type != EN_BG) && (type != BG_EN)) {
|
|
+#ifdef DEBUG
|
|
+ std::cerr << "Translator::init: failure 1\n";
|
|
+#endif
|
|
return false;
|
|
}
|
|
if ((dictionaryType != DUAL) && (type != dictionaryType)) {
|
|
+#ifdef DEBUG
|
|
+ std::cerr << "Translator::init: failure 2\n";
|
|
+#endif
|
|
return false;
|
|
}
|
|
// Init database
|
|
@@ -121,9 +131,19 @@ bool Translator::init(const int type, co
|
|
if (type == EN_BG) {
|
|
dictEnBg = new Database();
|
|
ret = dictEnBg->init(fileName, fixedLastWordPointer);
|
|
+#ifdef DEBUG
|
|
+ if( !ret ) {
|
|
+ std::cerr << "Translator::init: failure 3 " << fileName << "\n";
|
|
+ }
|
|
+#endif
|
|
} else {
|
|
dictBgEn = new Database();
|
|
ret = dictBgEn->init(fileName, fixedLastWordPointer);
|
|
+#ifdef DEBUG
|
|
+ if( !ret ) {
|
|
+ std::cerr << "Translator::init: failure 4 " << fileName << "\n";
|
|
+ }
|
|
+#endif
|
|
}
|
|
// Set current dictionary
|
|
// If it is dual, en-bg is set as default
|
|
@@ -669,3 +689,5 @@ char *Translator::extractText(const char
|
|
dataBuffer[j] = '\0';
|
|
return dataBuffer;
|
|
}
|
|
+
|
|
+// vi: set noexpandtab softtabstop=0 tabstop=8 shiftwidth=8 :
|
|
--- a/src/translator_manager.cpp
|
|
+++ b/src/translator_manager.cpp
|
|
@@ -46,8 +46,8 @@ using namespace std;
|
|
*/
|
|
|
|
|
|
-TranslatorManager::TranslatorManager(char *pDataDir) {
|
|
- dataDir = pDataDir;
|
|
+TranslatorManager::TranslatorManager(const vector<string> dirs) {
|
|
+ dataDirs = dirs;
|
|
}
|
|
|
|
|
|
@@ -63,17 +63,17 @@ bool TranslatorManager::init(const bool
|
|
char *lang = getenv("LANG");
|
|
bool isBG = (!ignoreLANG) && (lang != NULL) && (lang[0] == 'b') && (lang[1] == 'g');
|
|
// Load Dictionaries
|
|
- vector<string> dict = findFiles(dataDir, ".dict");
|
|
+ vector<string> dict = findFiles(dataDirs, ".dict");
|
|
if (dict.size() == 0) {
|
|
- cerr << "TranslatorManager::init - There is no dictionary files in directory: " << dataDir << "\n";
|
|
+ cerr << "TranslatorManager::init - There are no dictionary files. Run with -d to see where are the dictionary directories\n" << std::endl;
|
|
return false;
|
|
}
|
|
for (unsigned int i = 0; i < dict.size(); i++) {
|
|
- Properties *prop = new Properties(dataDir, dict[i].c_str());
|
|
+ Properties *prop = new Properties(dict[i].c_str());
|
|
struct Dictionary d;
|
|
- d.file = dict[i];
|
|
+ d.fileName = dict[i];
|
|
d.version = string(prop->getString("version"));
|
|
- d.icon = string(dataDir) + prop->getString("icon");
|
|
+ d.icon = string(prop->getDirectory()) + prop->getString("icon");
|
|
d.name = string(prop->getString(isBG ? "name.bg" : "name"));
|
|
dictionaries.push_back(d);
|
|
string type = string(prop->getString("type"));
|
|
@@ -81,14 +81,26 @@ bool TranslatorManager::init(const bool
|
|
bool isDataOk = true;
|
|
if (type.compare("dual") == 0) {
|
|
tr = new Translator(tr->DUAL);
|
|
- isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(dataDir) + prop->getString("data.en")).c_str());
|
|
- isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(dataDir) + prop->getString("data.bg")).c_str());
|
|
+ isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(prop->getDirectory()) + prop->getString("data.en")).c_str());
|
|
+#ifdef DEBUG
|
|
+ cerr << 1 << isDataOk << "\n";
|
|
+#endif
|
|
+ isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(prop->getDirectory()) + prop->getString("data.bg")).c_str());
|
|
+#ifdef DEBUG
|
|
+ cerr << 2 << isDataOk << "\n";
|
|
+#endif
|
|
} else if (type.compare("en") == 0) {
|
|
tr = new Translator(tr->EN_BG);
|
|
- isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(dataDir) + prop->getString("data")).c_str());
|
|
+ isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(prop->getDirectory()) + prop->getString("data")).c_str());
|
|
+#ifdef DEBUG
|
|
+ cerr << 3 << isDataOk << prop->getDirectory() << "+" << prop->getString("data") << "\n";
|
|
+#endif
|
|
} else if (type.compare("bg") == 0) {
|
|
tr = new Translator(tr->BG_EN);
|
|
- isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(dataDir) + prop->getString("data")).c_str());
|
|
+ isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(prop->getDirectory()) + prop->getString("data")).c_str());
|
|
+#ifdef DEBUG
|
|
+ cerr << 4 << isDataOk << "\n";
|
|
+#endif
|
|
} else {
|
|
cerr << "TranslatorManager::init - Wrong description file: " << dict[i] << "\n";
|
|
return false;
|
|
@@ -104,11 +116,11 @@ bool TranslatorManager::init(const bool
|
|
currentTranslator = translators[0];
|
|
|
|
// Load TestDictionaries
|
|
- vector<string> test = findFiles(dataDir, ".test");
|
|
+ vector<string> test = findFiles(dataDirs, ".test");
|
|
for (unsigned int i = 0; i < test.size(); i++) {
|
|
- Properties *prop = new Properties(dataDir, test[i].c_str());
|
|
+ Properties *prop = new Properties(test[i].c_str());
|
|
struct TestDictionary td;
|
|
- td.file = test[i];
|
|
+ td.fileName = test[i];
|
|
td.name = string(prop->getString(isBG ? "name.bg" : "name"));
|
|
testDictionaries.push_back(td);
|
|
delete prop;
|
|
@@ -152,22 +164,22 @@ TestDictionary TranslatorManager::getTes
|
|
|
|
|
|
Translator *TranslatorManager::getTestDictionaryObject(const int index, const int level) {
|
|
- Properties *prop = new Properties(dataDir, testDictionaries[index].file.c_str());
|
|
+ Properties *prop = new Properties(testDictionaries[index].fileName.c_str());
|
|
string type = string(prop->getString("type"));
|
|
Translator *tr;
|
|
bool isDataOk = true;
|
|
if (type.compare("en") == 0) {
|
|
tr = new Translator(tr->EN_BG);
|
|
- isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(dataDir) + prop->getString("data")).c_str());
|
|
+ isDataOk = isDataOk && tr->init(tr->EN_BG, string(string(prop->getDirectory()) + prop->getString("data")).c_str());
|
|
} else if (type.compare("bg") == 0) {
|
|
tr = new Translator(tr->BG_EN);
|
|
- isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(dataDir) + prop->getString("data")).c_str());
|
|
+ isDataOk = isDataOk && tr->init(tr->BG_EN, string(string(prop->getDirectory()) + prop->getString("data")).c_str());
|
|
} else {
|
|
- cerr << "TranslatorManager::getTestDictionaryObject - Wrong description file: " << testDictionaries[index].file << "\n";
|
|
+ cerr << "TranslatorManager::getTestDictionaryObject - Wrong description file: " << testDictionaries[index].fileName << "\n";
|
|
return false;
|
|
}
|
|
if (!isDataOk) {
|
|
- cerr << "TranslatorManager::getTestDictionaryObject - Problem initialazing dictionary: " << testDictionaries[index].file << "\n";
|
|
+ cerr << "TranslatorManager::getTestDictionaryObject - Problem initialazing dictionary: " << testDictionaries[index].fileName << "\n";
|
|
return false;
|
|
}
|
|
char c[16];
|
|
@@ -309,30 +321,37 @@ void TranslatorManager::setAdvancedSearc
|
|
}
|
|
}
|
|
|
|
-
|
|
-vector<string> TranslatorManager::findFiles(const char *dir, const char *extension) {
|
|
+vector<string> TranslatorManager::findFiles(const vector<string> dirs, const char *extension) {
|
|
int l = strlen(extension);
|
|
vector<string> result;
|
|
DIR *d;
|
|
struct dirent *e;
|
|
+ size_t i;
|
|
+ const char *i_dir;
|
|
|
|
- if ((d = opendir(dir)) == NULL) {
|
|
- cerr << "TranslatorManager::findFiles - Unable to open directory: " << dir << "\n";
|
|
- return result;
|
|
- }
|
|
+ for (i = 0; i < dirs.size(); i++) {
|
|
+ i_dir = dirs[i].c_str();
|
|
|
|
- while ((e = readdir(d)) != NULL) {
|
|
- string fn(e->d_name);
|
|
- size_t p = fn.rfind(extension);
|
|
- if ((p != string::npos) && (p == fn.size() - l)) {
|
|
- result.push_back(fn);
|
|
+ if ((d = opendir(i_dir)) == NULL) {
|
|
+ cerr << "TranslatorManager::findFiles - Unable to open directory: " << i_dir << "\n";
|
|
+ continue;
|
|
}
|
|
- }
|
|
|
|
- if (closedir(d) != 0) {
|
|
- cerr << "TranslatorManager::findFiles - Unable to close directory: " << dir << "\n";
|
|
+ while ((e = readdir(d)) != NULL) {
|
|
+ string fn(e->d_name);
|
|
+ size_t p = fn.rfind(extension);
|
|
+ if ((p != string::npos) && (p == fn.size() - l)) {
|
|
+ result.push_back(string(i_dir) + '/' + string(fn));
|
|
+ }
|
|
+ }
|
|
+
|
|
+ if (closedir(d) != 0) {
|
|
+ cerr << "TranslatorManager::findFiles - Unable to close directory: " << i_dir << "\n";
|
|
+ }
|
|
}
|
|
|
|
sort(result.begin(), result.end());
|
|
return result;
|
|
}
|
|
+
|
|
+// vi: set noexpandtab softtabstop=0 tabstop=8 shiftwidth=8 :
|
|
--- a/src/translator_manager.h
|
|
+++ b/src/translator_manager.h
|
|
@@ -36,14 +36,14 @@ using namespace std;
|
|
|
|
|
|
struct Dictionary {
|
|
- string file;
|
|
+ string fileName;
|
|
string name;
|
|
string icon;
|
|
string version;
|
|
};
|
|
|
|
struct TestDictionary {
|
|
- string file;
|
|
+ string fileName;
|
|
string name;
|
|
};
|
|
|
|
@@ -51,7 +51,7 @@ struct TestDictionary {
|
|
class TranslatorManager {
|
|
|
|
public:
|
|
- TranslatorManager(char *pDataDir);
|
|
+ TranslatorManager(const vector<string> dataDirs);
|
|
~TranslatorManager();
|
|
bool init(const bool ignoreLANG = false);
|
|
|
|
@@ -92,7 +92,7 @@ public:
|
|
|
|
|
|
private:
|
|
- char *dataDir;
|
|
+ vector<string> dataDirs;
|
|
|
|
vector<Dictionary> dictionaries;
|
|
vector<TestDictionary> testDictionaries;
|
|
@@ -101,8 +101,10 @@ private:
|
|
Translator *currentTranslator;
|
|
int currentDict;
|
|
|
|
- vector<string> findFiles(const char *dir, const char *extension);
|
|
+ vector<string> findFiles(const vector<string> dirs, const char *extension);
|
|
|
|
};
|
|
|
|
#endif
|
|
+
|
|
+// vi: set noexpandtab softtabstop=0 tabstop=8 shiftwidth=8 :
|