1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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 .
23 #pragma warning(push, 1)
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>
57 bool isAccessibilitySupportDesired()
60 if (::rtl::Bootstrap::get( "JFW_PLUGIN_DO_NOT_CHECK_ACCESSIBILITY", sValue
) &&
67 if (RegOpenKeyEx(HKEY_CURRENT_USER
,
68 "Software\\LibreOffice\\Accessibility\\AtToolSupport",
69 0, KEY_READ
, &hKey
) == ERROR_SUCCESS
)
73 unsigned char arData
[16];
74 if( RegQueryValueEx(hKey
, "SupportAssistiveTechnology", NULL
, &dwType
, arData
,
75 & dwLen
)== ERROR_SUCCESS
)
79 if (strcmp((char*) arData
, "true") == 0
80 || strcmp((char*) arData
, "1") == 0)
82 else if (strcmp((char*) arData
, "false") == 0
83 || strcmp((char*) arData
, "0") == 0)
85 #if OSL_DEBUG_LEVEL > 1
90 else if (dwType
== REG_DWORD
)
94 else if (arData
[0] == 0)
96 #if OSL_DEBUG_LEVEL > 1
106 // Java is no longer required for a11y - we use atk directly.
107 retVal
= ::rtl::Bootstrap::get( "JFW_PLUGIN_FORCE_ACCESSIBILITY", sValue
) && sValue
== "1";
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
];
127 *pCurBuf
= EncodingTable
[curChar
];
133 *pCurBuf
= EncodingTable
[curChar
];
137 rtl::ByteSequence
ret(reinterpret_cast<sal_Int8
*>(pBuf
.get()), lenRaw
* 2);
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
])
165 //find the index for the next 4bits
166 for (unsigned char j
= 0; j
< 16; j
++)
168 if (curChar
== decodingTable
[j
])
176 rtl::ByteSequence
ret(reinterpret_cast<sal_Int8
*>(pBuf
.get()), lenBuf
);
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 "
190 OUString libraryFileUrl
;
192 if (!osl::Module::getUrlFromAddress(
193 reinterpret_cast< oslGenericFunction
>(getLibraryLocation
),
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
;
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
)
214 else if (File::E_NOENT
== rc_stat
)
216 ret
= FILE_DOES_NOT_EXIST
;
223 else if (File::E_NOENT
== rc_item
)
225 ret
= FILE_DOES_NOT_EXIST
;
236 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */