fix baseline build (old cairo) - 'cairo_rectangle_int_t' does not name a type
[LibreOffice.git] / jvmfwk / source / fwkutil.cxx
blobfcb622f2728ae4a878969efc2fb0dcddb863b110
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
21 #if defined WNT
22 #if defined _MSC_VER
23 #pragma warning(push, 1)
24 #endif
25 #include <windows.h>
26 #if defined _MSC_VER
27 #pragma warning(pop)
28 #endif
29 #endif
31 #include <string>
32 #include <string.h>
33 #include "osl/mutex.hxx"
34 #include "osl/module.hxx"
35 #include "osl/thread.hxx"
36 #include "rtl/ustring.hxx"
37 #include "rtl/ustrbuf.hxx"
38 #include "rtl/bootstrap.hxx"
39 #include "osl/file.hxx"
40 #include "osl/process.h"
41 #include "rtl/instance.hxx"
42 #include "rtl/uri.hxx"
43 #include "osl/getglobalmutex.hxx"
44 #include "com/sun/star/lang/IllegalArgumentException.hpp"
45 #include "cppuhelper/bootstrap.hxx"
47 #include "framework.hxx"
48 #include "fwkutil.hxx"
49 #include <boost/scoped_array.hpp>
51 using namespace osl;
54 namespace jfw
57 bool isAccessibilitySupportDesired()
59 OUString sValue;
60 if (::rtl::Bootstrap::get( "JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY", sValue) &&
61 sValue == "1" )
62 return false;
64 bool retVal = false;
65 #ifdef WNT
66 HKEY hKey = 0;
67 if (RegOpenKeyEx(HKEY_CURRENT_USER,
68 "Software\\LibreOffice\\Accessibility\\AtToolSupport",
69 0, KEY_READ, &hKey) == ERROR_SUCCESS)
71 DWORD dwType = 0;
72 DWORD dwLen = 16;
73 unsigned char arData[16];
74 if( RegQueryValueEx(hKey, "SupportAssistiveTechnology", NULL, &dwType, arData,
75 & dwLen)== ERROR_SUCCESS)
77 if (dwType == REG_SZ)
79 if (strcmp((char*) arData, "true") == 0
80 || strcmp((char*) arData, "1") == 0)
81 retVal = true;
82 else if (strcmp((char*) arData, "false") == 0
83 || strcmp((char*) arData, "0") == 0)
84 retVal = false;
85 #if OSL_DEBUG_LEVEL > 1
86 else
87 OSL_ASSERT(0);
88 #endif
90 else if (dwType == REG_DWORD)
92 if (arData[0] == 1)
93 retVal = true;
94 else if (arData[0] == 0)
95 retVal = false;
96 #if OSL_DEBUG_LEVEL > 1
97 else
98 OSL_ASSERT(0);
99 #endif
103 RegCloseKey(hKey);
105 #elif defined UNX
106 // Java is no longer required for a11y - we use atk directly.
107 retVal = ::rtl::Bootstrap::get( "JFW_PLUGIN_FORCE_ACCESSIBILITY", sValue) && sValue == "1";
108 #endif
110 return retVal;
113 rtl::ByteSequence encodeBase16(const rtl::ByteSequence& rawData)
115 static const char EncodingTable[] =
116 {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
117 sal_Int32 lenRaw = rawData.getLength();
118 boost::scoped_array<char> pBuf(new char[lenRaw * 2]);
119 const sal_Int8* arRaw = rawData.getConstArray();
121 char* pCurBuf = pBuf.get();
122 for (int i = 0; i < lenRaw; i++)
124 unsigned char curChar = arRaw[i];
125 curChar >>= 4;
127 *pCurBuf = EncodingTable[curChar];
128 pCurBuf++;
130 curChar = arRaw[i];
131 curChar &= 0x0F;
133 *pCurBuf = EncodingTable[curChar];
134 pCurBuf++;
137 rtl::ByteSequence ret(reinterpret_cast<sal_Int8*>(pBuf.get()), lenRaw * 2);
138 return ret;
141 rtl::ByteSequence decodeBase16(const rtl::ByteSequence& data)
143 static const char decodingTable[] =
144 {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
145 sal_Int32 lenData = data.getLength();
146 sal_Int32 lenBuf = lenData / 2; //always divisable by two
147 boost::scoped_array<unsigned char> pBuf(new unsigned char[lenBuf]);
148 const sal_Int8* pData = data.getConstArray();
149 for (sal_Int32 i = 0; i < lenBuf; i++)
151 sal_Int8 curChar = *pData++;
152 //find the index of the first 4bits
153 // TODO What happens if text is not valid Hex characters?
154 unsigned char nibble = 0;
155 for (unsigned char j = 0; j < 16; j++)
157 if (curChar == decodingTable[j])
159 nibble = j;
160 break;
163 nibble <<= 4;
164 curChar = *pData++;
165 //find the index for the next 4bits
166 for (unsigned char j = 0; j < 16; j++)
168 if (curChar == decodingTable[j])
170 nibble |= j;
171 break;
174 pBuf[i] = nibble;
176 rtl::ByteSequence ret(reinterpret_cast<sal_Int8*>(pBuf.get()), lenBuf );
177 return ret;
180 OUString getDirFromFile(const OUString& usFilePath)
182 sal_Int32 index= usFilePath.lastIndexOf('/');
183 return OUString(usFilePath.getStr(), index);
186 OUString getLibraryLocation()
188 OString sExcMsg("[Java framework] Error in function getLibraryLocation "
189 "(fwkutil.cxx).");
190 OUString libraryFileUrl;
192 if (!osl::Module::getUrlFromAddress(
193 reinterpret_cast< oslGenericFunction >(getLibraryLocation),
194 libraryFileUrl))
195 throw FrameworkException(JFW_E_ERROR, sExcMsg);
197 return getDirFromFile(libraryFileUrl);
200 jfw::FileStatus checkFileURL(const OUString & sURL)
202 jfw::FileStatus ret = jfw::FILE_OK;
203 DirectoryItem item;
204 File::RC rc_item = DirectoryItem::get(sURL, item);
205 if (File::E_None == rc_item)
207 osl::FileStatus status(osl_FileStatus_Mask_Validate);
209 File::RC rc_stat = item.getFileStatus(status);
210 if (File::E_None == rc_stat)
212 ret = FILE_OK;
214 else if (File::E_NOENT == rc_stat)
216 ret = FILE_DOES_NOT_EXIST;
218 else
220 ret = FILE_INVALID;
223 else if (File::E_NOENT == rc_item)
225 ret = FILE_DOES_NOT_EXIST;
227 else
229 ret = FILE_INVALID;
231 return ret;
236 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */