mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-14 01:22:33 +00:00
89f92ec00b
* New dictionary installers on ftp.lyx.org. Arabic is now also supported. * Added support for FTP downloads to the installer. * Independent registry settings for all Aspell directories. * Better backwards compatibility with older Aspell installations. * Improved multi-user installation of Aspell on Windows 2000/XP. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/branches/BRANCH_1_4_X@15683 a592a061-630c-0410-9148-cb99ea01b6c8
249 lines
7.6 KiB
Diff
249 lines
7.6 KiB
Diff
diff -riwBu -Xex aspell-setter-sep06\common\config.cpp aspell-setter-sep06-modified\common\config.cpp
|
|
--- aspell-setter-sep06\common\config.cpp Mon Dec 12 17:41:06 2005
|
|
+++ aspell-setter-sep06-modified\common\config.cpp Sun Oct 22 13:03:46 2006
|
|
@@ -78,6 +78,10 @@
|
|
|
|
namespace aspell {
|
|
|
|
+#ifdef WIN32PORT
|
|
+ String GetWindowsDir(String registry_name, String default_directory);
|
|
+#endif
|
|
+
|
|
const char * const keyinfo_type_name[4] = {
|
|
N_("string"), N_("integer"), N_("boolean"), N_("list")
|
|
};
|
|
@@ -642,20 +646,19 @@
|
|
|
|
} else if (strcmp(i, "home-dir") == 0) {
|
|
|
|
- //get the personal folder (e.g. "c:\My Documents")
|
|
- char * dir = new char[MAX_PATH];
|
|
- LPITEMIDLIST items = 0;
|
|
- HRESULT hand = SHGetSpecialFolderLocation(0, CSIDL_PERSONAL, &items);
|
|
- if ((NOERROR == hand) && items) {
|
|
- if (SHGetPathFromIDList(items, dir)) {
|
|
- for (char *ptr = dir; *ptr; ++ptr)
|
|
- if ('\\' == *ptr)
|
|
- *ptr = '/';
|
|
- final_str = dir;
|
|
- }
|
|
- CoTaskMemFree(items);
|
|
- }
|
|
- delete [] dir;
|
|
+ final_str = GetWindowsDir("Base Path", "");
|
|
+
|
|
+ } else if (strcmp(i, "dict-dir") == 0) {
|
|
+
|
|
+ final_str = GetWindowsDir("Dictionary Path", "Dictionaries");
|
|
+
|
|
+ } else if (strcmp(i, "data-dir") == 0) {
|
|
+
|
|
+ final_str = GetWindowsDir("Data Path", "Data");
|
|
+
|
|
+ } else if (strcmp(i, "personal-dir") == 0) {
|
|
+
|
|
+ final_str = GetWindowsDir("Personal Path", "Personal");
|
|
|
|
}
|
|
#endif
|
|
@@ -1394,20 +1397,6 @@
|
|
return no_err;
|
|
}
|
|
|
|
-#if defined(WIN32_USE_PERSONAL_DIR)
|
|
-# define HOME_DIR "!home-dir"
|
|
-# define PERSONAL "<lang>.pws"
|
|
-# define REPL "<lang>.prepl"
|
|
-#elif defined(ENABLE_WIN32_RELOCATABLE)
|
|
-# define HOME_DIR "<prefix>"
|
|
-# define PERSONAL "<lang>.pws"
|
|
-# define REPL "<lang>.prepl"
|
|
-#else
|
|
-# define HOME_DIR "<$HOME|./>"
|
|
-# define PERSONAL ".aspell.<lang>.pws"
|
|
-# define REPL ".aspell.<lang>.prepl"
|
|
-#endif
|
|
-
|
|
static const KeyInfo config_keys[] = {
|
|
// the description should be under 50 chars
|
|
{"actual-dict-dir", KeyInfoString, "<dict-dir^master>", 0}
|
|
@@ -1484,7 +1473,7 @@
|
|
, {"per-conf-path", KeyInfoString, "<home-dir/per-conf>", 0}
|
|
, {"personal", KeyInfoString, PERSONAL,
|
|
N_("personal dictionary file name")}
|
|
- , {"personal-path", KeyInfoString, "<home-dir/personal>", 0}
|
|
+ , {"personal-path", KeyInfoString, PERSONAL_DIR, 0}
|
|
, {"prefix", KeyInfoString, PREFIX,
|
|
N_("prefix directory")}
|
|
, {"repl", KeyInfoString, REPL,
|
|
@@ -1525,10 +1514,8 @@
|
|
, {"warn", KeyInfoBool, "true",
|
|
N_("enable warnings")}
|
|
#ifdef WIN32PORT
|
|
- , {"dict-subdir", KeyInfoString, "dicts",
|
|
- N_("sub directory for dictionaries")}
|
|
- , {"data-subdir", KeyInfoString, "data",
|
|
- N_("sub directory for other data")}
|
|
+ , {"personal-dir", KeyInfoString, PERSONAL_DIR,
|
|
+ N_("directory for personal dictionaries")}
|
|
#endif
|
|
|
|
//
|
|
@@ -1587,5 +1574,88 @@
|
|
config_impl_keys_begin,
|
|
config_impl_keys_end);
|
|
}
|
|
+
|
|
+#ifdef WIN32PORT
|
|
+
|
|
+ String ReadRegString(HKEY hive, String key, String name)
|
|
+ {
|
|
+
|
|
+ // Reads a string from the Windows registry (used to get paths)
|
|
+
|
|
+ HKEY hKey;
|
|
+ unsigned long lType;
|
|
+ DWORD dwSize;
|
|
+ unsigned char* szValue = NULL;
|
|
+
|
|
+ if (::RegOpenKeyEx(hive, key.c_str(), 0, KEY_READ, &hKey) == ERROR_SUCCESS)
|
|
+ {
|
|
+ if(::RegQueryValueEx(hKey, name.c_str(), NULL, &lType, NULL, &dwSize) == ERROR_SUCCESS)
|
|
+ {
|
|
+ szValue = new unsigned char[dwSize + 1];
|
|
+ ::RegQueryValueEx(hKey, name.c_str(), NULL, &lType, szValue, &dwSize);
|
|
+ String RegistryReturn((char*)szValue);
|
|
+ delete[] szValue;
|
|
+ return RegistryReturn;
|
|
+ } else {
|
|
+ return "";
|
|
+ }
|
|
+ } else {
|
|
+ return "";
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ HKEY GetRegHive()
|
|
+ {
|
|
+
|
|
+ // Check whether Aspell is installed for the current user or for all users
|
|
+
|
|
+ String value;
|
|
+
|
|
+ if (ReadRegString(HKEY_CURRENT_USER, "Software\\Aspell", "Base Path").empty())
|
|
+ {
|
|
+ return HKEY_LOCAL_MACHINE;
|
|
+ } else {
|
|
+ return HKEY_CURRENT_USER;
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ String GetWindowsDir(String registry_name, String default_dir)
|
|
+ {
|
|
+
|
|
+ String final_dir;
|
|
+
|
|
+ // Get directory from registry
|
|
+ HKEY hive;
|
|
+ hive = GetRegHive();
|
|
+ final_dir = ReadRegString(hive, "Software\\Aspell", registry_name);
|
|
+
|
|
+ // Default location in "Documents and Settings"
|
|
+ if (final_dir.empty()) {
|
|
+
|
|
+ char * dir = new char[MAX_PATH];
|
|
+ LPITEMIDLIST items = 0;
|
|
+ HRESULT hand = SHGetSpecialFolderLocation(0, CSIDL_APPDATA, &items);
|
|
+
|
|
+ if ((NOERROR == hand) && items) {
|
|
+ if (SHGetPathFromIDList(items, dir)) {
|
|
+ for (char *ptr = dir; *ptr; ++ptr)
|
|
+ if ('\\' == *ptr)
|
|
+ *ptr = '/';
|
|
+ final_dir = dir;
|
|
+ final_dir.append("/Aspell/");
|
|
+ final_dir.append(default_dir.c_str());
|
|
+ }
|
|
+ CoTaskMemFree(items);
|
|
+ }
|
|
+
|
|
+ }
|
|
+
|
|
+ return final_dir;
|
|
+
|
|
+ }
|
|
+
|
|
+#endif
|
|
|
|
}
|
|
diff -riwBu -Xex aspell-setter-sep06\common\vector.hpp aspell-setter-sep06-modified\common\vector.hpp
|
|
--- aspell-setter-sep06\common\vector.hpp Thu Oct 13 08:42:54 2005
|
|
+++ aspell-setter-sep06-modified\common\vector.hpp Sun Sep 17 18:50:45 2006
|
|
@@ -50,10 +50,10 @@
|
|
T * data_end() {return &*this->end();}
|
|
|
|
T * pbegin() {return &*this->begin();}
|
|
- T * pend() {return &*this->end();}
|
|
+ T * pend() {return &this->back()+1;}
|
|
|
|
const T * pbegin() const {return &*this->begin();}
|
|
- const T * pend() const {return &*this->end();}
|
|
+ const T * pend() const {return &this->back()+1;}
|
|
|
|
template <typename U>
|
|
U * datap() {
|
|
diff -riwBu -Xex aspell-setter-sep06\win32\dirs.h aspell-setter-sep06-modified\win32\dirs.h
|
|
--- aspell-setter-sep06\win32\dirs.h Thu Oct 13 12:29:34 2005
|
|
+++ aspell-setter-sep06-modified\win32\dirs.h Sun Oct 22 12:55:10 2006
|
|
@@ -1,16 +1,27 @@
|
|
#ifndef dirs_h
|
|
#define dirs_h
|
|
|
|
-#ifdef WIN32_USE_EXECUTABLE_DIR
|
|
-# define DATA_DIR "<prefix/data-subdir>"
|
|
-# define CONF_DIR "<prefix>"
|
|
-# define DICT_DIR "<prefix/dict-subdir>"
|
|
+# define DATA_DIR "!data-dir"
|
|
+# define DICT_DIR "!dict-dir"
|
|
+# define PERSONAL_DIR "!personal-dir"
|
|
+
|
|
+#if defined(WIN32_USE_EXECUTABLE_DIR)
|
|
+# define HOME_DIR "<prefix>"
|
|
+# define PERSONAL "<personal-dir>/<lang>.pws"
|
|
+# define REPL "<personal-dir>/<lang>.prepl"
|
|
# define PREFIX "!prefix"
|
|
+#elif defined(WIN32_USE_PERSONAL_DIR)
|
|
+# define HOME_DIR "!home-dir"
|
|
+# define PERSONAL "<personal-dir>/<lang>.pws"
|
|
+# define REPL "<personal-dir>/<lang>.prepl"
|
|
+# define PREFIX "<home-dir>"
|
|
#else
|
|
-# define DATA_DIR "aspell-win32/data"
|
|
-# define CONF_DIR "aspell-win32"
|
|
-# define DICT_DIR "dicts"
|
|
-# define PREFIX "aspell-win32"
|
|
+# define HOME_DIR "<$HOME|./>"
|
|
+# define PERSONAL "<personal-dir>/.aspell.<lang>.pws"
|
|
+# define REPL "<personal-dir>/.aspell.<lang>.prepl"
|
|
+# define PREFIX "<home-dir>"
|
|
#endif
|
|
+
|
|
+#define CONF_DIR HOME_DIR
|
|
|
|
#endif
|
|
diff -riwBu -Xex aspell-setter-sep06\win32\settings.h aspell-setter-sep06-modified\win32\settings.h
|
|
--- aspell-setter-sep06\win32\settings.h Wed Sep 06 09:51:16 2006
|
|
+++ aspell-setter-sep06-modified\win32\settings.h Sun Sep 17 17:55:23 2006
|
|
@@ -9,9 +9,6 @@
|
|
/* Defined if curses like POSIX Functions should be used */
|
|
#undef CURSES_ONLY
|
|
|
|
-/* Defined if win32 relocation should be used */
|
|
-#define ENABLE_WIN32_RELOCATABLE 1
|
|
-
|
|
/* Define to 1 if you have the <dlfcn.h> header file. */
|
|
#undef HAVE_DLFCN_H
|
|
|