summaryrefslogtreecommitdiff
path: root/setup_native/source/win32/customactions/thesaurus/thesaurus.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'setup_native/source/win32/customactions/thesaurus/thesaurus.cxx')
-rw-r--r--setup_native/source/win32/customactions/thesaurus/thesaurus.cxx214
1 files changed, 0 insertions, 214 deletions
diff --git a/setup_native/source/win32/customactions/thesaurus/thesaurus.cxx b/setup_native/source/win32/customactions/thesaurus/thesaurus.cxx
deleted file mode 100644
index 07bd605cb..000000000
--- a/setup_native/source/win32/customactions/thesaurus/thesaurus.cxx
+++ /dev/null
@@ -1,214 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * The Contents of this file are made available subject to
- * the terms of GNU Lesser General Public License Version 3.
- *
- *
- * GNU Lesser General Public License Version 3
- * =============================================
- * Copyright 2005 by Sun Microsystems, Inc.
- * 901 San Antonio Road, Palo Alto, CA 94303, USA
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License version 2.1, as published by the Free Software Foundation.
- *
- * This library 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- *
- ************************************************************************/
-
-
-
-#define WIN32_LEAN_AND_MEAN
-#define _WIN32_WINNT 0x0500
-#undef WINVER
-#define WINVER 0x0500
-
-#include <windows.h>
-#include <msiquery.h>
-#include <malloc.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <systools/win32/uwinapi.h>
-#include <io.h>
-#include <iostream>
-#include <fstream>
-#include <string>
-#include <map>
-#include <vector>
-#include <stdlib.h>
-#include <string.h>
-using namespace std;
-namespace
-{
-
- string GetMsiProperty(MSIHANDLE handle, const string& sProperty)
- {
- string result;
- TCHAR szDummy[1] = TEXT("");
- DWORD nChars = 0;
-
- if (MsiGetProperty(handle, sProperty.c_str(), szDummy, &nChars) == ERROR_MORE_DATA)
- {
- DWORD nBytes = ++nChars * sizeof(TCHAR);
- LPTSTR buffer = reinterpret_cast<LPTSTR>(_alloca(nBytes));
- ZeroMemory( buffer, nBytes );
- MsiGetProperty(handle, sProperty.c_str(), buffer, &nChars);
- result = buffer;
- }
- return result;
- }
-
- inline bool IsSetMsiProperty(MSIHANDLE handle, const string& sProperty)
- {
- return (GetMsiProperty(handle, sProperty).length() > 0);
- }
-
- inline void UnsetMsiProperty(MSIHANDLE handle, const string& sProperty)
- {
- MsiSetProperty(handle, sProperty.c_str(), NULL);
- }
-
- inline void SetMsiProperty(MSIHANDLE handle, const string& sProperty, const string&)
- {
- MsiSetProperty(handle, sProperty.c_str(), TEXT("1"));
- }
-
- static const int MAXLINE = 1024*64;
-
-
- void generateIndex(const char *inputFile, const char *outputFile)
- {
-
- ifstream in(inputFile);
- char inputBuffer[MAXLINE];
- map<string, size_t> entries;
- map<string,size_t>::iterator ret(entries.begin());
-
- int line(1);
- in.getline(inputBuffer, MAXLINE);
- const string encoding(inputBuffer);
- size_t currentOffset(encoding.size()+1);
- while (true)
- {
- // Extract the next word, but not the entry count
- in.getline(inputBuffer, MAXLINE, '|');
-
- if (in.eof()) break;
-
- string word(inputBuffer);
- ret = entries.insert(ret, pair<string, size_t>(word, currentOffset));
- currentOffset += word.size() + 1;
- // Next is the entry count
- in.getline(inputBuffer, MAXLINE);
- if (!in.good())
- {
- return;
-
- }
- currentOffset += strlen(inputBuffer)+1;
- int entryCount(strtol(inputBuffer, NULL, 10));
- for (int i(0); i < entryCount; ++i)
- {
- in.getline(inputBuffer, MAXLINE);
- currentOffset += strlen(inputBuffer)+1;
- ++line;
- }
- }
-
- // Use binary mode to prevent any translation of LF to CRLF on Windows
- ofstream outputStream(outputFile, ios_base::binary| ios_base::trunc|ios_base::out);
- if (!outputStream.is_open())
- {
- //cerr << "Unable to open output file " << outputFile << endl;
- return;
- }
-
- cerr << "Doing it now" << outputFile << endl;
- outputStream << encoding << '\n' << entries.size() << '\n';
-
- for (map<string, size_t>::const_iterator ii(entries.begin());
- ii != entries.end();
- ++ii
- )
- {
- outputStream << ii->first << '|' << ii->second << '\n';
- }
- outputStream.close();
- }
-
- void generateIndex(const string &datFile)
- {
- string idxFile(datFile.substr(0, datFile.size()-3)+"idx");
- generateIndex(datFile.c_str(), idxFile.c_str());
- }
- void createIndexesForThesaurusFiles(const string & sOfficeInstallPath)
- {
- vector<string> thesaurusPaths;
-
- string sExtensionsPath = sOfficeInstallPath + "\\share\\extensions\\";
-
- string dictionariesWildcard = sExtensionsPath + "dict-*";
-
- struct _finddatai64_t dictFind;
- long h = _findfirsti64(dictionariesWildcard.c_str(),&dictFind);
- if (h > 0)
- {
- do
- {
- if (dictFind.attrib & _A_SUBDIR)
- {
- struct _finddatai64_t datFind;
- // Find any .dat files in the subdirectory
- string dictPath = sExtensionsPath + dictFind.name + "\\";
- string datWildCard = dictPath + "*.dat";
- long h2 = _findfirsti64(datWildCard.c_str(), &datFind);
- if (h2 > 0)
- {
- do
- {
- thesaurusPaths.push_back(dictPath + datFind.name);
-
- } while (_findnexti64(h2,&datFind) == 0);
- }
- }
-
- } while (_findnexti64(h,&dictFind) == 0);
- }
- for (vector<string>::const_iterator ii(thesaurusPaths.begin());
- ii != thesaurusPaths.end();
- ++ii
- )
- {
- generateIndex(*ii);
- }
- }
-
-} // namespace
-
-
-// Creates the thesaurus .idx files for all installed .dat
-// thesaurus files
-extern "C" UINT __stdcall CreateIndexes( MSIHANDLE handle )
-{
-
- string sOfficeInstallPath = GetMsiProperty(handle, TEXT("INSTALLLOCATION"));
- createIndexesForThesaurusFiles(sOfficeInstallPath);
- return ERROR_SUCCESS;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */