1pub const FTAB_LEN: usize = 485;
2
3pub const FTAB: [&str; FTAB_LEN] = [
4 "COUNT",
5 "IF",
6 "ISNA",
7 "ISERROR",
8 "SUM",
9 "AVERAGE",
10 "MIN",
11 "MAX",
12 "ROW",
13 "COLUMN",
14 "NA",
15 "NPV",
16 "STDEV",
17 "DOLLAR",
18 "FIXED",
19 "SIN",
20 "COS",
21 "TAN",
22 "ATAN",
23 "PI",
24 "SQRT",
25 "EXP",
26 "LN",
27 "LOG10",
28 "ABS",
29 "INT",
30 "SIGN",
31 "ROUND",
32 "LOOKUP",
33 "INDEX",
34 "REPT",
35 "MID",
36 "LEN",
37 "VALUE",
38 "TRUE",
39 "FALSE",
40 "AND",
41 "OR",
42 "NOT",
43 "MOD",
44 "DCOUNT",
45 "DSUM",
46 "DAVERAGE",
47 "DMIN",
48 "DMAX",
49 "DSTDEV",
50 "VAR",
51 "DVAR",
52 "TEXT",
53 "LINEST",
54 "TREND",
55 "LOGEST",
56 "GROWTH",
57 "GOTO",
58 "HALT",
59 "RETURN",
60 "PV",
61 "FV",
62 "NPER",
63 "PMT",
64 "RATE",
65 "MIRR",
66 "IRR",
67 "RAND",
68 "MATCH",
69 "DATE",
70 "TIME",
71 "DAY",
72 "MONTH",
73 "YEAR",
74 "WEEKDAY",
75 "HOUR",
76 "MINUTE",
77 "SECOND",
78 "NOW",
79 "AREAS",
80 "ROWS",
81 "COLUMNS",
82 "OFFSET",
83 "ABSREF",
84 "RELREF",
85 "ARGUMENT",
86 "SEARCH",
87 "TRANSPOSE",
88 "ERROR",
89 "STEP",
90 "TYPE",
91 "ECHO",
92 "SET.NAME",
93 "CALLER",
94 "DEREF",
95 "WINDOWS",
96 "SERIES",
97 "DOCUMENTS",
98 "ACTIVE.CELL",
99 "SELECTION",
100 "RESULT",
101 "ATAN2",
102 "ASIN",
103 "ACOS",
104 "CHOOSE",
105 "HLOOKUP",
106 "VLOOKUP",
107 "LINKS",
108 "INPUT",
109 "ISREF",
110 "GET.FORMULA",
111 "GET.NAME",
112 "SET.VALUE",
113 "LOG",
114 "EXEC",
115 "CHAR",
116 "LOWER",
117 "UPPER",
118 "PROPER",
119 "LEFT",
120 "RIGHT",
121 "EXACT",
122 "TRIM",
123 "REPLACE",
124 "SUBSTITUTE",
125 "CODE",
126 "NAMES",
127 "DIRECTORY",
128 "FIND",
129 "CELL",
130 "ISERR",
131 "ISTEXT",
132 "ISNUMBER",
133 "ISBLANK",
134 "T",
135 "N",
136 "FOPEN",
137 "FCLOSE",
138 "FSIZE",
139 "FREADLN",
140 "FREAD",
141 "FWRITELN",
142 "FWRITE",
143 "FPOS",
144 "DATEVALUE",
145 "TIMEVALUE",
146 "SLN",
147 "SYD",
148 "DDB",
149 "GET.DEF",
150 "REFTEXT",
151 "TEXTREF",
152 "INDIRECT",
153 "REGISTER",
154 "CALL",
155 "ADD.BAR",
156 "ADD.MENU",
157 "ADD.COMMAND",
158 "ENABLE.COMMAND",
159 "CHECK.COMMAND",
160 "RENAME.COMMAND",
161 "SHOW.BAR",
162 "DELETE.MENU",
163 "DELETE.COMMAND",
164 "GET.CHART.ITEM",
165 "DIALOG.BOX",
166 "CLEAN",
167 "MDETERM",
168 "MINVERSE",
169 "MMULT",
170 "FILES",
171 "IPMT",
172 "PPMT",
173 "COUNTA",
174 "CANCEL.KEY",
175 "FOR",
176 "WHILE",
177 "BREAK",
178 "NEXT",
179 "INITIATE",
180 "REQUEST",
181 "POKE",
182 "EXECUTE",
183 "TERMINATE",
184 "RESTART",
185 "HELP",
186 "GET.BAR",
187 "PRODUCT",
188 "FACT",
189 "GET.CELL",
190 "GET.WORKSPACE",
191 "GET.WINDOW",
192 "GET.DOCUMENT",
193 "DPRODUCT",
194 "ISNONTEXT",
195 "GET.NOTE",
196 "NOTE",
197 "STDEVP",
198 "VARP",
199 "DSTDEVP",
200 "DVARP",
201 "TRUNC",
202 "ISLOGICAL",
203 "DCOUNTA",
204 "DELETE.BAR",
205 "UNREGISTER",
206 "",
207 "",
208 "USDOLLAR",
209 "FINDB",
210 "SEARCHB",
211 "REPLACEB",
212 "LEFTB",
213 "RIGHTB",
214 "MIDB",
215 "LENB",
216 "ROUNDUP",
217 "ROUNDDOWN",
218 "ASC",
219 "DBCS",
220 "RANK",
221 "",
222 "",
223 "ADDRESS",
224 "DAYS360",
225 "TODAY",
226 "VDB",
227 "ELSE",
228 "ELSE.IF",
229 "END.IF",
230 "FOR.CELL",
231 "MEDIAN",
232 "SUMPRODUCT",
233 "SINH",
234 "COSH",
235 "TANH",
236 "ASINH",
237 "ACOSH",
238 "ATANH",
239 "DGET",
240 "CREATE.OBJECT",
241 "VOLATILE",
242 "LAST.ERROR",
243 "CUSTOM.UNDO",
244 "CUSTOM.REPEAT",
245 "FORMULA.CONVERT",
246 "GET.LINK.INFO",
247 "TEXT.BOX",
248 "INFO",
249 "GROUP",
250 "GET.OBJECT",
251 "DB",
252 "PAUSE",
253 "",
254 "",
255 "RESUME",
256 "FREQUENCY",
257 "ADD.TOOLBAR",
258 "DELETE.TOOLBAR",
259 "User",
260 "RESET.TOOLBAR",
261 "EVALUATE",
262 "GET.TOOLBAR",
263 "GET.TOOL",
264 "SPELLING.CHECK",
265 "ERROR.TYPE",
266 "APP.TITLE",
267 "WINDOW.TITLE",
268 "SAVE.TOOLBAR",
269 "ENABLE.TOOL",
270 "PRESS.TOOL",
271 "REGISTER.ID",
272 "GET.WORKBOOK",
273 "AVEDEV",
274 "BETADIST",
275 "GAMMALN",
276 "BETAINV",
277 "BINOMDIST",
278 "CHIDIST",
279 "CHIINV",
280 "COMBIN",
281 "CONFIDENCE",
282 "CRITBINOM",
283 "EVEN",
284 "EXPONDIST",
285 "FDIST",
286 "FINV",
287 "FISHER",
288 "FISHERINV",
289 "FLOOR",
290 "GAMMADIST",
291 "GAMMAINV",
292 "CEILING",
293 "HYPGEOMDIST",
294 "LOGNORMDIST",
295 "LOGINV",
296 "NEGBINOMDIST",
297 "NORMDIST",
298 "NORMSDIST",
299 "NORMINV",
300 "NORMSINV",
301 "STANDARDIZE",
302 "ODD",
303 "PERMUT",
304 "POISSON",
305 "TDIST",
306 "WEIBULL",
307 "SUMXMY2",
308 "SUMX2MY2",
309 "SUMX2PY2",
310 "CHITEST",
311 "CORREL",
312 "COVAR",
313 "FORECAST",
314 "FTEST",
315 "INTERCEPT",
316 "PEARSON",
317 "RSQ",
318 "STEYX",
319 "SLOPE",
320 "TTEST",
321 "PROB",
322 "DEVSQ",
323 "GEOMEAN",
324 "HARMEAN",
325 "SUMSQ",
326 "KURT",
327 "SKEW",
328 "ZTEST",
329 "LARGE",
330 "SMALL",
331 "QUARTILE",
332 "PERCENTILE",
333 "PERCENTRANK",
334 "MODE",
335 "TRIMMEAN",
336 "TINV",
337 "",
338 "MOVIE.COMMAND",
339 "GET.MOVIE",
340 "CONCATENATE",
341 "POWER",
342 "PIVOT.ADD.DATA",
343 "GET.PIVOT.TABLE",
344 "GET.PIVOT.FIELD",
345 "GET.PIVOT.ITEM",
346 "RADIANS",
347 "DEGREES",
348 "SUBTOTAL",
349 "SUMIF",
350 "COUNTIF",
351 "COUNTBLANK",
352 "SCENARIO.GET",
353 "OPTIONS.LISTS.GET",
354 "ISPMT",
355 "DATEDIF",
356 "DATESTRING",
357 "NUMBERSTRING",
358 "ROMAN",
359 "OPEN.DIALOG",
360 "SAVE.DIALOG",
361 "VIEW.GET",
362 "GETPIVOTDATA",
363 "HYPERLINK",
364 "PHONETIC",
365 "AVERAGEA",
366 "MAXA",
367 "MINA",
368 "STDEVPA",
369 "VARPA",
370 "STDEVA",
371 "VARA",
372 "BAHTTEXT",
373 "THAIDAYOFWEEK",
374 "THAIDIGIT",
375 "THAIMONTHOFYEAR",
376 "THAINUMSOUND",
377 "THAINUMSTRING",
378 "THAISTRINGLENGTH",
379 "ISTHAIDIGIT",
380 "ROUNDBAHTDOWN",
381 "ROUNDBAHTUP",
382 "THAIYEAR",
383 "RTD",
384 "CUBEVALUE",
385 "CUBEMEMBER",
386 "CUBEMEMBERPROPERTY",
387 "CUBERANKEDMEMBER",
388 "HEX2BIN",
389 "HEX2DEC",
390 "HEX2OCT",
391 "DEC2BIN",
392 "DEC2HEX",
393 "DEC2OCT",
394 "OCT2BIN",
395 "OCT2HEX",
396 "OCT2DEC",
397 "BIN2DEC",
398 "BIN2OCT",
399 "BIN2HEX",
400 "IMSUB",
401 "IMDIV",
402 "IMPOWER",
403 "IMABS",
404 "IMSQRT",
405 "IMLN",
406 "IMLOG2",
407 "IMLOG10",
408 "IMSIN",
409 "IMCOS",
410 "IMEXP",
411 "IMARGUMENT",
412 "IMCONJUGATE",
413 "IMAGINARY",
414 "IMREAL",
415 "COMPLEX",
416 "IMSUM",
417 "IMPRODUCT",
418 "SERIESSUM",
419 "FACTDOUBLE",
420 "SQRTPI",
421 "QUOTIENT",
422 "DELTA",
423 "GESTEP",
424 "ISEVEN",
425 "ISODD",
426 "MROUND",
427 "ERF",
428 "ERFC",
429 "BESSELJ",
430 "BESSELK",
431 "BESSELY",
432 "BESSELI",
433 "XIRR",
434 "XNPV",
435 "PRICEMAT",
436 "YIELDMAT",
437 "INTRATE",
438 "RECEIVED",
439 "DISC",
440 "PRICEDISC",
441 "YIELDDISC",
442 "TBILLEQ",
443 "TBILLPRICE",
444 "TBILLYIELD",
445 "PRICE",
446 "YIELD",
447 "DOLLARDE",
448 "DOLLARFR",
449 "NOMINAL",
450 "EFFECT",
451 "CUMPRINC",
452 "CUMIPMT",
453 "EDATE",
454 "EOMONTH",
455 "YEARFRAC",
456 "COUPDAYBS",
457 "COUPDAYS",
458 "COUPDAYSNC",
459 "COUPNCD",
460 "COUPNUM",
461 "COUPPCD",
462 "DURATION",
463 "MDURATION",
464 "ODDLPRICE",
465 "ODDLYIELD",
466 "ODDFPRICE",
467 "ODDFYIELD",
468 "RANDBETWEEN",
469 "WEEKNUM",
470 "AMORDEGRC",
471 "AMORLINC",
472 "CONVERT",
473 "ACCRINT",
474 "ACCRINTM",
475 "WORKDAY",
476 "NETWORKDAYS",
477 "GCD",
478 "MULTINOMIAL",
479 "LCM",
480 "FVSCHEDULE",
481 "CUBEKPIMEMBER",
482 "CUBESET",
483 "CUBESETCOUNT",
484 "IFERROR",
485 "COUNTIFS",
486 "SUMIFS",
487 "AVERAGEIF",
488 "AVERAGEIFS",
489];
490
491pub const FTAB_ARGC: [u8; FTAB_LEN] = [
492 255, 3, 1, 1, 255, 255, 255, 255, 1, 1, 0, 254, 255, 2, 3, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
493 1, 1, 2, 3, 4, 2, 3, 1, 1, 0, 0, 255, 255, 1, 2, 3, 3, 3, 3, 3, 3, 255, 3, 2, 4, 4, 4, 4,
494 1, 1, 1, 5, 5, 5, 5, 6, 3, 2, 0, 3, 3, 3, 1, 1, 1, 2, 1, 1, 1, 0, 1, 1, 1, 5, 2, 2, 3, 3,
495 1, 2, 0, 1, 1, 2, 0, 1, 2, 2, 2, 0, 0, 1, 2, 1, 1, 255, 4, 4, 2, 7, 1, 1, 2, 2, 2, 4, 1,
496 1, 1, 1, 2, 2, 2, 1, 4, 4, 1, 3, 1, 3, 2, 1, 1, 1, 1, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1,
497 3, 4, 5, 3, 2, 2, 2, 255, 255, 1, 4, 5, 5, 5, 5, 1, 3, 4, 3, 1, 1, 1, 1, 1, 2, 6, 6, 255,
498 2, 4, 1, 0, 0, 2, 2, 3, 2, 1, 1, 1, 4, 255, 1, 2, 1, 2, 2, 3, 1, 3, 4, 255, 255, 3, 3, 2,
499 1, 3, 1, 1, 0, 0, 2, 3, 3, 4, 2, 2, 3, 3, 2, 2, 1, 1, 3, 0, 0, 5, 3, 0, 7, 0, 1, 0, 3,
500 255, 255, 1, 1, 1, 1, 1, 1, 3, 11, 1, 0, 2, 3, 5, 4, 4, 1, 0, 5, 5, 1, 0, 0, 1, 2, 2, 1,
501 255, 1, 1, 2, 3, 3, 1, 1, 1, 2, 3, 3, 3, 2, 255, 5, 1, 5, 4, 2, 2, 2, 3, 3, 1, 3, 3, 3, 1,
502 1, 2, 4, 3, 2, 4, 3, 3, 3, 4, 1, 3, 1, 3, 1, 2, 3, 3, 4, 2, 2, 2, 2, 2, 2, 3, 2, 2, 2, 2,
503 2, 2, 4, 4, 255, 255, 255, 255, 255, 255, 3, 2, 2, 2, 2, 3, 255, 2, 2, 4, 4, 3, 255, 2, 9,
504 2, 3, 4, 1, 1, 255, 3, 2, 1, 2, 1, 4, 3, 1, 2, 2, 4, 5, 2, 128, 2, 1, 255, 255, 255, 255,
505 255, 255, 255, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 255, 255, 3, 3, 4, 2, 1, 2, 2, 2, 2, 2, 2,
506 1, 1, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 255, 255, 4, 1, 1, 2, 2, 2, 1,
507 1, 2, 2, 1, 2, 2, 2, 2, 3, 3, 6, 6, 5, 5, 5, 5, 5, 3, 3, 3, 7, 7, 2, 2, 2, 2, 6, 6, 2, 2,
508 3, 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 8, 8, 2, 2, 7, 7, 8, 8, 5, 3, 3, 255, 255, 255, 2, 4, 5,
509 1, 2, 128, 129, 3, 129,
510];
511
512pub fn function_name(iftab: u16) -> Option<&'static str> {
513 FTAB.get(usize::from(iftab))
514 .copied()
515 .filter(|name| !name.is_empty())
516}
517
518pub fn function_argc(iftab: u16) -> Option<u8> {
519 FTAB_ARGC.get(usize::from(iftab)).copied()
520}
521
522#[cfg(test)]
523mod tests {
524 use super::*;
525
526 #[test]
527 fn table_has_expected_shape() {
528 assert_eq!(FTAB.len(), FTAB_LEN);
529 assert_eq!(FTAB_ARGC.len(), FTAB_LEN);
530 }
531
532 #[test]
533 fn table_has_key_function_entries() {
534 assert_eq!(function_name(0), Some("COUNT"));
535 assert_eq!(function_name(1), Some("IF"));
536 assert_eq!(function_name(4), Some("SUM"));
537 assert_eq!(function_name(79), Some("ABSREF"));
538 assert_eq!(function_argc(4), Some(255));
539 assert_eq!(function_argc(1), Some(3));
540 }
541}