File indexing completed on 2024-05-12 16:35:54
0001 #!/usr/bin/env python 0002 0003 import sys, os, re 0004 0005 functions = """ 0006 MDETERM 0007 MINVERSE 0008 MMULT 0009 MUNIT 0010 SUMPRODUCT 0011 SUMX2MY2 0012 SUMX2PY2 0013 SUMXMY2 0014 TRANSPOSE 0015 BITAND 0016 BITLSHIFT 0017 BITOR 0018 BITRSHIFT 0019 BITXOR 0020 FINDB 0021 LEFTB 0022 LENB 0023 MIDB 0024 REPLACEB 0025 RIGHTB 0026 SEARCHB 0027 COMPLEX 0028 IMABS 0029 IMAGINARY 0030 IMARGUMENT 0031 IMCONJUGATE 0032 IMCOS 0033 IMCOT 0034 IMCSC 0035 IMCSCH 0036 IMDIV 0037 IMEXP 0038 IMLN 0039 IMLOG10 0040 IMLOG2 0041 IMPOWER 0042 IMPRODUCT 0043 IMREAL 0044 IMSIN 0045 IMSEC 0046 IMSECH 0047 IMSQRT 0048 IMSUB 0049 IMSUM 0050 IMTAN 0051 DAVERAGE 0052 DCOUNT 0053 DCOUNTA 0054 DGET 0055 DMAX 0056 DMIN 0057 DPRODUCT 0058 DSTDEV 0059 DSTDEVP 0060 DSUM 0061 DVAR 0062 DVARP 0063 DATE 0064 DATEDIF 0065 DATEVALUE 0066 DAY 0067 DAYS 0068 DAYS360 0069 EDATE 0070 EOMONTH 0071 HOUR 0072 ISOWEEKNUM 0073 MINUTE 0074 MONTH 0075 NETWORKDAYS 0076 NOW 0077 SECOND 0078 TIME 0079 TIMEVALUE 0080 TODAY 0081 WEEKDAY 0082 WEEKNUM 0083 WORKDAY 0084 YEAR 0085 YEARFRAC 0086 External 0087 DDE 0088 HYPERLINK 0089 ACCRINT 0090 ACCRINTM 0091 AMORDEGRC 0092 AMORLINC 0093 COUPDAYBS 0094 COUPDAYS 0095 COUPDAYSNC 0096 COUPNCD 0097 COUPNUM 0098 COUPPCD 0099 CUMIPMT 0100 CUMPRINC 0101 DB 0102 DDB 0103 DISC 0104 DOLLARDE 0105 DOLLARFR 0106 DURATION 0107 EFFECT 0108 FV 0109 FVSCHEDULE 0110 INTRATE 0111 IPMT 0112 IRR 0113 ISPMT 0114 MDURATION 0115 MIRR 0116 NOMINAL 0117 NPER 0118 NPV 0119 ODDFPRICE 0120 ODDFYIELD 0121 ODDLPRICE 0122 ODDLYIELD 0123 PDURATION 0124 PMT 0125 PPMT 0126 PRICE 0127 PRICEDISC 0128 PRICEMAT 0129 PV 0130 RATE 0131 RECEIVED 0132 RRI 0133 SLN 0134 SYD 0135 TBILLEQ 0136 TBILLPRICE 0137 TBILLYIELD 0138 VDB 0139 XIRR 0140 XNPV 0141 YIELD 0142 YIELDDISC 0143 YIELDMAT 0144 AREAS 0145 CELL 0146 COLUMN 0147 COLUMNS 0148 COUNT 0149 COUNTA 0150 COUNTBLANK 0151 COUNTIF 0152 COUNTIFS 0153 ERROR.TYPE 0154 FORMULA 0155 INFO 0156 ISBLANK 0157 ISERR 0158 ISERROR 0159 ISEVEN 0160 ISFORMULA 0161 ISLOGICAL 0162 ISNA 0163 ISNONTEXT 0164 ISNUMBER 0165 ISODD 0166 ISREF 0167 ISTEXT 0168 N 0169 NA 0170 NUMBERVALUE 0171 ROW 0172 ROWS 0173 SHEET 0174 SHEETS 0175 TYPE 0176 VALUE 0177 ADDRESS 0178 CHOOSE 0179 GETPIVOTDATA 0180 HLOOKUP 0181 INDEX 0182 INDIRECT 0183 LOOKUP 0184 MATCH 0185 MULTIPLE.OPERATIONS 0186 OFFSET 0187 VLOOKUP 0188 AND 0189 FALSE 0190 IF 0191 IFERROR 0192 IFNA 0193 NOT 0194 OR 0195 TRUE 0196 XOR 0197 ABS 0198 ACOS 0199 ACOSH 0200 ACOT 0201 ACOTH 0202 ASIN 0203 ASINH 0204 ATAN 0205 ATAN2 0206 ATANH 0207 BESSELI 0208 BESSELJ 0209 BESSELK 0210 BESSELY 0211 COMBIN 0212 COMBINA 0213 CONVERT 0214 COS 0215 COSH 0216 COT 0217 COTH 0218 CSC 0219 CSCH 0220 DEGREES 0221 DELTA 0222 ERF 0223 ERFC 0224 EUROCONVERT 0225 EVEN 0226 EXP 0227 FACT 0228 FACTDOUBLE 0229 GAMMA 0230 GAMMALN 0231 GCD 0232 GESTEP 0233 LCM 0234 LN 0235 LOG 0236 LOG10 0237 MOD 0238 MULTINOMIAL 0239 ODD 0240 PI 0241 POWER 0242 PRODUCT 0243 QUOTIENT 0244 RADIANS 0245 RAND 0246 RANDBETWEEN 0247 SEC 0248 SERIESSUM 0249 SIGN 0250 SIN 0251 SINH 0252 SECH 0253 SQRT 0254 SQRTPI 0255 SUBTOTAL 0256 SUM 0257 SUMIF 0258 SUMIFS 0259 SUMSQ 0260 TAN 0261 TANH 0262 CEILING 0263 INT 0264 FLOOR 0265 MROUND 0266 ROUND 0267 ROUNDDOWN 0268 ROUNDUP 0269 TRUNC 0270 AVEDEV 0271 AVERAGE 0272 AVERAGEA 0273 AVERAGEIF 0274 AVERAGEIFS 0275 B 0276 BETADIST 0277 BETAINV 0278 BINOMDIST 0279 LEGACY.CHIDIST 0280 CHISQDIST 0281 LEGACY.CHIINV 0282 CHISQINV 0283 LEGACY.CHITEST 0284 CONFIDENCE 0285 CORREL 0286 COVAR 0287 CRITBINOM 0288 DEVSQ 0289 EXPONDIST 0290 FDIST 0291 LEGACY.FDIST 0292 FINV 0293 LEGACY.FINV 0294 FISHER 0295 FISHERINV 0296 FORECAST 0297 FREQUENCY 0298 FTEST 0299 GAMMADIST 0300 GAMMAINV 0301 GAUSS 0302 GEOMEAN 0303 GROWTH 0304 HARMEAN 0305 HYPGEOMDIST 0306 INTERCEPT 0307 KURT 0308 LARGE 0309 LINEST 0310 LOGEST 0311 LOGINV 0312 LOGNORMDIST 0313 MAX 0314 MAXA 0315 MEDIAN 0316 MIN 0317 MINA 0318 MODE 0319 NEGBINOMDIST 0320 NORMDIST 0321 NORMINV 0322 LEGACY.NORMSDIST 0323 LEGACY.NORMSINV 0324 PEARSON 0325 PERCENTILE 0326 PERCENTRANK 0327 PERMUT 0328 PERMUTATIONA 0329 PHI 0330 POISSON 0331 PROB 0332 QUARTILE 0333 RANK 0334 RSQ 0335 SKEW 0336 SKEWP 0337 SLOPE 0338 SMALL 0339 STANDARDIZE 0340 STDEV 0341 STDEVA 0342 STDEVP 0343 STDEVPA 0344 STEYX 0345 TDIST 0346 TINV 0347 TREND 0348 TRIMMEAN 0349 TTEST 0350 VAR 0351 VARA 0352 VARP 0353 VARPA 0354 WEIBULL 0355 ZTEST 0356 ARABIC 0357 BASE 0358 BIN2DEC 0359 BIN2HEX 0360 BIN2OCT 0361 DEC2BIN 0362 DEC2HEX 0363 DEC2OCT 0364 DECIMAL 0365 HEX2BIN 0366 HEX2DEC 0367 HEX2OCT 0368 OCT2BIN 0369 OCT2DEC 0370 OCT2HEX 0371 ROMAN 0372 ASC 0373 CHAR 0374 CLEAN 0375 CODE 0376 CONCATENATE 0377 DOLLAR 0378 EXACT 0379 FIND 0380 FIXED 0381 JIS 0382 LEFT 0383 LEN 0384 LOWER 0385 MID 0386 PROPER 0387 REPLACE 0388 REPT 0389 RIGHT 0390 SEARCH 0391 SUBSTITUTE 0392 T 0393 TEXT 0394 TRIM 0395 """ 0396 0397 def functionName(name): 0398 #return name.strip().lower() 0399 return name.strip().replace('.','').replace('_','').lower() 0400 0401 functions1 = [ functionName(line) for line in [ k for k in [ i.strip() for i in functions.split("\n") ] if len(k)>0 ] ] 0402 0403 functions2 = [] 0404 path = os.path.join(os.path.split(sys.argv[0])[0],"../functions") 0405 for n in [ f for f in os.listdir(path) if f.endswith(".cpp") ]: 0406 f = open(os.path.join(path,n), 'r') 0407 for t in [t.strip() for t in f.read().split("\n") ]: 0408 m = re.search('(?!//|/\*).*new\s+Function\s*\(\s*\"(.+)\"', t) 0409 if m: 0410 functions2.append( functionName(m.group(1)) ) 0411 else: 0412 m = re.search('(?!//|/\*).*\-\>\s*setAlternateName\s*\(\s*\"(.+)\"', t) 0413 if m: 0414 functions2.append( functionName(m.group(1)) ) 0415 0416 diff = list(set(functions1).difference(set(functions2))) 0417 diff.sort() 0418 print "%s missing OpenFormula functions (%s available):\n%s" % (len(diff), len(functions2), " ".join(diff))