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))