1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir #ifndef _SV_MNEMONIC_HXX 29*cdf0e10cSrcweir #define _SV_MNEMONIC_HXX 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <vcl/dllapi.h> 32*cdf0e10cSrcweir #include <tools/string.hxx> 33*cdf0e10cSrcweir #include <com/sun/star/uno/Reference.h> 34*cdf0e10cSrcweir #include <com/sun/star/i18n/XCharacterClassification.hpp> 35*cdf0e10cSrcweir 36*cdf0e10cSrcweir // --------------------- 37*cdf0e10cSrcweir // - ImplMnemonicTypes - 38*cdf0e10cSrcweir // --------------------- 39*cdf0e10cSrcweir 40*cdf0e10cSrcweir // Mnemonic Chars, which we want support 41*cdf0e10cSrcweir // Latin 0-9 42*cdf0e10cSrcweir #define MNEMONIC_RANGE_1_START 0x30 43*cdf0e10cSrcweir #define MNEMONIC_RANGE_1_END 0x39 44*cdf0e10cSrcweir // Latin A-Z 45*cdf0e10cSrcweir #define MNEMONIC_RANGE_2_START 0x41 46*cdf0e10cSrcweir #define MNEMONIC_RANGE_2_END 0x5A 47*cdf0e10cSrcweir // Cyrillic 48*cdf0e10cSrcweir #define MNEMONIC_RANGE_3_START 0x0410 49*cdf0e10cSrcweir #define MNEMONIC_RANGE_3_END 0x042F 50*cdf0e10cSrcweir // Greek 51*cdf0e10cSrcweir #define MNEMONIC_RANGE_4_START 0x0391 52*cdf0e10cSrcweir #define MNEMONIC_RANGE_4_END 0x03AB 53*cdf0e10cSrcweir #define MNEMONIC_RANGES 4 54*cdf0e10cSrcweir #define MAX_MNEMONICS ((MNEMONIC_RANGE_1_END-MNEMONIC_RANGE_1_START+1)+\ 55*cdf0e10cSrcweir (MNEMONIC_RANGE_2_END-MNEMONIC_RANGE_2_START+1)+\ 56*cdf0e10cSrcweir (MNEMONIC_RANGE_3_END-MNEMONIC_RANGE_3_START+1)+\ 57*cdf0e10cSrcweir (MNEMONIC_RANGE_4_END-MNEMONIC_RANGE_4_START+1)) 58*cdf0e10cSrcweir 59*cdf0e10cSrcweir #define MNEMONIC_CHAR ((sal_Unicode)'~') 60*cdf0e10cSrcweir #define MNEMONIC_INDEX_NOTFOUND ((sal_uInt16)0xFFFF) 61*cdf0e10cSrcweir 62*cdf0e10cSrcweir // ------------------------- 63*cdf0e10cSrcweir // - MnemonicGenerator - 64*cdf0e10cSrcweir // ------------------------- 65*cdf0e10cSrcweir 66*cdf0e10cSrcweir class VCL_DLLPUBLIC MnemonicGenerator 67*cdf0e10cSrcweir { 68*cdf0e10cSrcweir private: 69*cdf0e10cSrcweir // 0 == Mnemonic; >0 == count of characters 70*cdf0e10cSrcweir sal_uInt8 maMnemonics[MAX_MNEMONICS]; 71*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification > mxCharClass; 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir protected: 74*cdf0e10cSrcweir SAL_DLLPRIVATE sal_uInt16 ImplGetMnemonicIndex( sal_Unicode c ); 75*cdf0e10cSrcweir SAL_DLLPRIVATE sal_Unicode ImplFindMnemonic( const XubString& rKey ); 76*cdf0e10cSrcweir 77*cdf0e10cSrcweir public: 78*cdf0e10cSrcweir MnemonicGenerator(); 79*cdf0e10cSrcweir 80*cdf0e10cSrcweir void RegisterMnemonic( const XubString& rKey ); 81*cdf0e10cSrcweir sal_Bool CreateMnemonic( XubString& rKey ); 82*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::i18n::XCharacterClassification > GetCharClass(); 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir // returns a string where all '~'-characters and CJK mnemonics of the form (~A) are completely removed 85*cdf0e10cSrcweir static String EraseAllMnemonicChars( const String& rStr ); 86*cdf0e10cSrcweir }; 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir #endif // _SV_MNEMONIC_HXX 89