Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
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/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
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 .
18 : */
19 :
20 :
21 : #include "addinhelpid.hxx"
22 : #include "sc.hrc"
23 :
24 : // ============================================================================
25 :
26 : // A struct containing the built-in function name and the built-in help ID.
27 : struct ScUnoAddInHelpId
28 : {
29 : const sal_Char* pFuncName;
30 : const sal_Char* sHelpId;
31 : };
32 :
33 :
34 : // ----------------------------------------------------------------------------
35 :
36 : // Help IDs for Analysis AddIn. MUST BE SORTED for binary search.
37 : const ScUnoAddInHelpId pAnalysisHelpIds[] =
38 : {
39 : { "getAccrint" , HID_AAI_FUNC_ACCRINT },
40 : { "getAccrintm" , HID_AAI_FUNC_ACCRINTM },
41 : { "getAmordegrc" , HID_AAI_FUNC_AMORDEGRC },
42 : { "getAmorlinc" , HID_AAI_FUNC_AMORLINC },
43 : { "getBesseli" , HID_AAI_FUNC_BESSELI },
44 : { "getBesselj" , HID_AAI_FUNC_BESSELJ },
45 : { "getBesselk" , HID_AAI_FUNC_BESSELK },
46 : { "getBessely" , HID_AAI_FUNC_BESSELY },
47 : { "getBin2Dec" , HID_AAI_FUNC_BIN2DEC },
48 : { "getBin2Hex" , HID_AAI_FUNC_BIN2HEX },
49 : { "getBin2Oct" , HID_AAI_FUNC_BIN2OCT },
50 : { "getComplex" , HID_AAI_FUNC_COMPLEX },
51 : { "getConvert" , HID_AAI_FUNC_CONVERT },
52 : { "getCoupdaybs" , HID_AAI_FUNC_COUPDAYBS },
53 : { "getCoupdays" , HID_AAI_FUNC_COUPDAYS },
54 : { "getCoupdaysnc" , HID_AAI_FUNC_COUPDAYSNC },
55 : { "getCoupncd" , HID_AAI_FUNC_COUPNCD },
56 : { "getCoupnum" , HID_AAI_FUNC_COUPNUM },
57 : { "getCouppcd" , HID_AAI_FUNC_COUPPCD },
58 : { "getCumipmt" , HID_AAI_FUNC_CUMIPMT },
59 : { "getCumprinc" , HID_AAI_FUNC_CUMPRINC },
60 : { "getDec2Bin" , HID_AAI_FUNC_DEC2BIN },
61 : { "getDec2Hex" , HID_AAI_FUNC_DEC2HEX },
62 : { "getDec2Oct" , HID_AAI_FUNC_DEC2OCT },
63 : { "getDelta" , HID_AAI_FUNC_DELTA },
64 : { "getDisc" , HID_AAI_FUNC_DISC },
65 : { "getDollarde" , HID_AAI_FUNC_DOLLARDE },
66 : { "getDollarfr" , HID_AAI_FUNC_DOLLARFR },
67 : { "getDuration" , HID_AAI_FUNC_DURATION },
68 : { "getEdate" , HID_AAI_FUNC_EDATE },
69 : { "getEffect" , HID_AAI_FUNC_EFFECT },
70 : { "getEomonth" , HID_AAI_FUNC_EOMONTH },
71 : { "getErf" , HID_AAI_FUNC_ERF },
72 : { "getErfc" , HID_AAI_FUNC_ERFC },
73 : { "getFactdouble" , HID_AAI_FUNC_FACTDOUBLE },
74 : { "getFvschedule" , HID_AAI_FUNC_FVSCHEDULE },
75 : { "getGcd" , HID_AAI_FUNC_GCD },
76 : { "getGestep" , HID_AAI_FUNC_GESTEP },
77 : { "getHex2Bin" , HID_AAI_FUNC_HEX2BIN },
78 : { "getHex2Dec" , HID_AAI_FUNC_HEX2DEC },
79 : { "getHex2Oct" , HID_AAI_FUNC_HEX2OCT },
80 : { "getImabs" , HID_AAI_FUNC_IMABS },
81 : { "getImaginary" , HID_AAI_FUNC_IMAGINARY },
82 : { "getImargument" , HID_AAI_FUNC_IMARGUMENT },
83 : { "getImconjugate" , HID_AAI_FUNC_IMCONJUGATE },
84 : { "getImcos" , HID_AAI_FUNC_IMCOS },
85 : { "getImcosh" , HID_AAI_FUNC_IMCOSH },
86 : { "getImcot" , HID_AAI_FUNC_IMCOT },
87 : { "getImcsc" , HID_AAI_FUNC_IMCSC },
88 : { "getImcsch" , HID_AAI_FUNC_IMCSCH },
89 : { "getImdiv" , HID_AAI_FUNC_IMDIV },
90 : { "getImexp" , HID_AAI_FUNC_IMEXP },
91 : { "getImln" , HID_AAI_FUNC_IMLN },
92 : { "getImlog10" , HID_AAI_FUNC_IMLOG10 },
93 : { "getImlog2" , HID_AAI_FUNC_IMLOG2 },
94 : { "getImpower" , HID_AAI_FUNC_IMPOWER },
95 : { "getImproduct" , HID_AAI_FUNC_IMPRODUCT },
96 : { "getImreal" , HID_AAI_FUNC_IMREAL },
97 : { "getImsec" , HID_AAI_FUNC_IMSEC },
98 : { "getImsech" , HID_AAI_FUNC_IMSECH },
99 : { "getImsin" , HID_AAI_FUNC_IMSIN },
100 : { "getImsinh" , HID_AAI_FUNC_IMSINH },
101 : { "getImsqrt" , HID_AAI_FUNC_IMSQRT },
102 : { "getImsub" , HID_AAI_FUNC_IMSUB },
103 : { "getImsum" , HID_AAI_FUNC_IMSUM },
104 : { "getImtan" , HID_AAI_FUNC_IMTAN },
105 : { "getIntrate" , HID_AAI_FUNC_INTRATE },
106 : { "getIseven" , HID_AAI_FUNC_ISEVEN },
107 : { "getIsodd" , HID_AAI_FUNC_ISODD },
108 : { "getLcm" , HID_AAI_FUNC_LCM },
109 : { "getMduration" , HID_AAI_FUNC_MDURATION },
110 : { "getMround" , HID_AAI_FUNC_MROUND },
111 : { "getMultinomial" , HID_AAI_FUNC_MULTINOMIAL },
112 : { "getNetworkdays" , HID_AAI_FUNC_NETWORKDAYS },
113 : { "getNominal" , HID_AAI_FUNC_NOMINAL },
114 : { "getOct2Bin" , HID_AAI_FUNC_OCT2BIN },
115 : { "getOct2Dec" , HID_AAI_FUNC_OCT2DEZ },
116 : { "getOct2Hex" , HID_AAI_FUNC_OCT2HEX },
117 : { "getOddfprice" , HID_AAI_FUNC_ODDFPRICE },
118 : { "getOddfyield" , HID_AAI_FUNC_ODDFYIELD },
119 : { "getOddlprice" , HID_AAI_FUNC_ODDLPRICE },
120 : { "getOddlyield" , HID_AAI_FUNC_ODDLYIELD },
121 : { "getPrice" , HID_AAI_FUNC_PRICE },
122 : { "getPricedisc" , HID_AAI_FUNC_PRICEDISC },
123 : { "getPricemat" , HID_AAI_FUNC_PRICEMAT },
124 : { "getQuotient" , HID_AAI_FUNC_QUOTIENT },
125 : { "getRandbetween" , HID_AAI_FUNC_RANDBETWEEN },
126 : { "getReceived" , HID_AAI_FUNC_RECEIVED },
127 : { "getSeriessum" , HID_AAI_FUNC_SERIESSUM },
128 : { "getSqrtpi" , HID_AAI_FUNC_SQRTPI },
129 : { "getTbilleq" , HID_AAI_FUNC_TBILLEQ },
130 : { "getTbillprice" , HID_AAI_FUNC_TBILLPRICE },
131 : { "getTbillyield" , HID_AAI_FUNC_TBILLYIELD },
132 : { "getWeeknum" , HID_AAI_FUNC_WEEKNUM },
133 : { "getWorkday" , HID_AAI_FUNC_WORKDAY },
134 : { "getXirr" , HID_AAI_FUNC_XIRR },
135 : { "getXnpv" , HID_AAI_FUNC_XNPV },
136 : { "getYearfrac" , HID_AAI_FUNC_YEARFRAC },
137 : { "getYield" , HID_AAI_FUNC_YIELD },
138 : { "getYielddisc" , HID_AAI_FUNC_YIELDDISC },
139 : { "getYieldmat" , HID_AAI_FUNC_YIELDMAT }
140 : };
141 :
142 :
143 : // ----------------------------------------------------------------------------
144 :
145 : // Help IDs for DateFunc AddIn. MUST BE SORTED for binary search.
146 : const ScUnoAddInHelpId pDateFuncHelpIds[] =
147 : {
148 : { "getDaysInMonth" , HID_DAI_FUNC_DAYSINMONTH },
149 : { "getDaysInYear" , HID_DAI_FUNC_DAYSINYEAR },
150 : { "getDiffMonths" , HID_DAI_FUNC_DIFFMONTHS },
151 : { "getDiffWeeks" , HID_DAI_FUNC_DIFFWEEKS },
152 : { "getDiffYears" , HID_DAI_FUNC_DIFFYEARS },
153 : { "getRot13" , HID_DAI_FUNC_ROT13 },
154 : { "getWeeksInYear" , HID_DAI_FUNC_WEEKSINYEAR }
155 : };
156 :
157 :
158 : // ============================================================================
159 :
160 :
161 6 : ScUnoAddInHelpIdGenerator::ScUnoAddInHelpIdGenerator( const ::rtl::OUString& rServiceName )
162 : {
163 6 : SetServiceName( rServiceName );
164 6 : }
165 :
166 6 : void ScUnoAddInHelpIdGenerator::SetServiceName( const ::rtl::OUString& rServiceName )
167 : {
168 6 : pCurrHelpIds = NULL;
169 6 : sal_uInt32 nSize = 0;
170 :
171 6 : if ( rServiceName == "com.sun.star.sheet.addin.Analysis" )
172 : {
173 3 : pCurrHelpIds = pAnalysisHelpIds;
174 3 : nSize = sizeof( pAnalysisHelpIds );
175 : }
176 3 : else if ( rServiceName == "com.sun.star.sheet.addin.DateFunctions" )
177 : {
178 3 : pCurrHelpIds = pDateFuncHelpIds;
179 3 : nSize = sizeof( pDateFuncHelpIds );
180 : }
181 :
182 6 : nArrayCount = nSize / sizeof( ScUnoAddInHelpId );
183 6 : }
184 :
185 327 : rtl::OString ScUnoAddInHelpIdGenerator::GetHelpId( const ::rtl::OUString& rFuncName ) const
186 : {
187 327 : if( !pCurrHelpIds || !nArrayCount )
188 0 : return rtl::OString();
189 :
190 327 : const ScUnoAddInHelpId* pFirst = pCurrHelpIds;
191 327 : const ScUnoAddInHelpId* pLast = pCurrHelpIds + nArrayCount - 1;
192 :
193 2151 : while( pFirst <= pLast )
194 : {
195 1821 : const ScUnoAddInHelpId* pMiddle = pFirst + (pLast - pFirst) / 2;
196 1821 : sal_Int32 nResult = rFuncName.compareToAscii( pMiddle->pFuncName );
197 1821 : if( !nResult )
198 324 : return pMiddle->sHelpId;
199 1497 : else if( nResult < 0 )
200 684 : pLast = pMiddle - 1;
201 : else
202 813 : pFirst = pMiddle + 1;
203 : }
204 :
205 3 : return rtl::OString();
206 : }
207 :
208 :
209 : // ============================================================================
210 :
211 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|