Completed
Push — master ( 414e56...4f6d4a )
by Adrien
09:01
created

Xlfn   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 153
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 133
dl 0
loc 153
rs 10
c 1
b 0
f 0
wmc 2

2 Methods

Rating   Name   Duplication   Size   Complexity  
A addXlfn() 0 3 1
A addXlfnStripEquals() 0 3 1
1
<?php
2
3
namespace PhpOffice\PhpSpreadsheet\Writer\Xlsx;
4
5
class Xlfn
6
{
7
    const XLFNREGEXP = '/(?<!_xlfn[.])\\b('
8
            // functions added with Excel 2010
9
        . 'beta[.]dist'
10
        . '|beta[.]inv'
11
        . '|binom[.]dist'
12
        . '|binom[.]inv'
13
        . '|chisq[.]dist'
14
        . '|chisq[.]dist[.]rt'
15
        . '|chisq[.]inv'
16
        . '|chisq[.]inv[.]rt'
17
        . '|chisq[.]test'
18
        . '|confidence[.]norm'
19
        . '|confidence[.]t'
20
        . '|covariance[.]p'
21
        . '|covariance[.]s'
22
        . '|erf[.]precise'
23
        . '|erfc[.]precise'
24
        . '|expon[.]dist'
25
        . '|f[.]dist'
26
        . '|f[.]dist[.]rt'
27
        . '|f[.]inv'
28
        . '|f[.]inv[.]rt'
29
        . '|f[.]test'
30
        . '|gamma[.]dist'
31
        . '|gamma[.]inv'
32
        . '|gammaln[.]precise'
33
        . '|lognorm[.]dist'
34
        . '|lognorm[.]inv'
35
        . '|mode[.]mult'
36
        . '|mode[.]sngl'
37
        . '|negbinom[.]dist'
38
        . '|networkdays[.]intl'
39
        . '|norm[.]dist'
40
        . '|norm[.]inv'
41
        . '|norm[.]s[.]dist'
42
        . '|norm[.]s[.]inv'
43
        . '|percentile[.]exc'
44
        . '|percentile[.]inc'
45
        . '|percentrank[.]exc'
46
        . '|percentrank[.]inc'
47
        . '|poisson[.]dist'
48
        . '|quartile[.]exc'
49
        . '|quartile[.]inc'
50
        . '|rank[.]avg'
51
        . '|rank[.]eq'
52
        . '|stdev[.]p'
53
        . '|stdev[.]s'
54
        . '|t[.]dist'
55
        . '|t[.]dist[.]2t'
56
        . '|t[.]dist[.]rt'
57
        . '|t[.]inv'
58
        . '|t[.]inv[.]2t'
59
        . '|t[.]test'
60
        . '|var[.]p'
61
        . '|var[.]s'
62
        . '|weibull[.]dist'
63
        . '|z[.]test'
64
        // functions added with Excel 2013
65
        . '|acot'
66
        . '|acoth'
67
        . '|arabic'
68
        . '|averageifs'
69
        . '|binom[.]dist[.]range'
70
        . '|bitand'
71
        . '|bitlshift'
72
        . '|bitor'
73
        . '|bitrshift'
74
        . '|bitxor'
75
        . '|ceiling[.]math'
76
        . '|combina'
77
        . '|cot'
78
        . '|coth'
79
        . '|csc'
80
        . '|csch'
81
        . '|days'
82
        . '|dbcs'
83
        . '|decimal'
84
        . '|encodeurl'
85
        . '|filterxml'
86
        . '|floor[.]math'
87
        . '|formulatext'
88
        . '|gamma'
89
        . '|gauss'
90
        . '|ifna'
91
        . '|imcosh'
92
        . '|imcot'
93
        . '|imcsc'
94
        . '|imcsch'
95
        . '|imsec'
96
        . '|imsech'
97
        . '|imsinh'
98
        . '|imtan'
99
        . '|isformula'
100
        . '|iso[.]ceiling'
101
        . '|isoweeknum'
102
        . '|munit'
103
        . '|numbervalue'
104
        . '|pduration'
105
        . '|permutationa'
106
        . '|phi'
107
        . '|rri'
108
        . '|sec'
109
        . '|sech'
110
        . '|sheet'
111
        . '|sheets'
112
        . '|skew[.]p'
113
        . '|unichar'
114
        . '|unicode'
115
        . '|webservice'
116
        . '|xor'
117
        // functions added with Excel 2016
118
        . '|forecast[.]et2'
119
        . '|forecast[.]ets[.]confint'
120
        . '|forecast[.]ets[.]seasonality'
121
        . '|forecast[.]ets[.]stat'
122
        . '|forecast[.]linear'
123
        . '|switch'
124
        // functions added with Excel 2019
125
        . '|concat'
126
        . '|countifs'
127
        . '|ifs'
128
        . '|maxifs'
129
        . '|minifs'
130
        . '|sumifs'
131
        . '|textjoin'
132
        // functions added with Excel 365
133
        . '|filter'
134
        . '|randarray'
135
        . '|sequence'
136
        . '|sort'
137
        . '|sortby'
138
        . '|unique'
139
        . '|xlookup'
140
        . '|xmatch'
141
        . ')(?=\\s*[(])/i';
142
143
    /**
144
     * Prefix function name in string with _xlfn. where required.
145
     */
146
    public static function addXlfn(string $funcstring): string
147
    {
148
        return preg_replace(self::XLFNREGEXP, '_xlfn.$1', $funcstring);
149
    }
150
151
    /**
152
     * Prefix function name in string with _xlfn. where required.
153
     * Leading character, expected to be equals sign, is stripped.
154
     */
155
    public static function addXlfnStripEquals(string $funcstring): string
156
    {
157
        return self::addXlfn(substr($funcstring, 1));
158
    }
159
}
160