/var/www/hkosl.com/nick/codeigniter/application/vendor/phpunit/phpunit/src/Util/Getopt.php


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
<?php
/*
 * This file is part of PHPUnit.
 *
 * (c) Sebastian Bergmann <sebastian@phpunit.de>
 *
 * For the full copyright and license information, please view the LICENSE
 * file that was distributed with this source code.
 */

/**
 * Command-line options parsing class.
 */
class PHPUnit_Util_Getopt
{
    public static function 
getopt(array $args$short_options$long_options null)
    {
        if (empty(
$args)) {
            return [[], []];
        }

        
$opts     = [];
        
$non_opts = [];

        if (
$long_options) {
            
sort($long_options);
        }

        if (isset(
$args[0][0]) && $args[0][0] != '-') {
            
array_shift($args);
        }

        
reset($args);

        
$args array_map('trim'$args);

        while (
false !== $arg current($args)) {
            
$i key($args);
            
next($args);
            if (
$arg == '') {
                continue;
            }

            if (
$arg == '--') {
                
$non_opts array_merge($non_optsarray_slice($args$i 1));

                break;
            }

            if (
$arg[0] != '-' || (strlen($arg) > && $arg[1] == '-' && !$long_options)) {
                
$non_opts[] = $args[$i];

                continue;
            } elseif (
strlen($arg) > && $arg[1] == '-') {
                
self::parseLongOption(
                    
substr($arg2),
                    
$long_options,
                    
$opts,
                    
$args
                
);
            } else {
                
self::parseShortOption(
                    
substr($arg1),
                    
$short_options,
                    
$opts,
                    
$args
                
);
            }
        }

        return [
$opts$non_opts];
    }

    protected static function 
parseShortOption($arg$short_options, &$opts, &$args)
    {
        
$argLen strlen($arg);

        for (
$i 0$i $argLen$i++) {
            
$opt     $arg[$i];
            
$opt_arg null;

            if ((
$spec strstr($short_options$opt)) === false || $arg[$i] == ':') {
                throw new 
PHPUnit_Framework_Exception(
                    
"unrecognized option -- $opt"
                
);
            }

            if (
strlen($spec) > && $spec[1] == ':') {
                if (
$i $argLen) {
                    
$opts[] = [$optsubstr($arg$i 1)];

                    break;
                }
                if (!(
strlen($spec) > && $spec[2] == ':')) {
                    if (
false === $opt_arg current($args)) {
                        throw new 
PHPUnit_Framework_Exception(
                            
"option requires an argument -- $opt"
                        
);
                    }
                    
next($args);
                }
            }

            
$opts[] = [$opt$opt_arg];
        }
    }

    protected static function 
parseLongOption($arg$long_options, &$opts, &$args)
    {
        
$count   count($long_options);
        
$list    explode('='$arg);
        
$opt     $list[0];
        
$opt_arg null;

        if (
count($list) > 1) {
            
$opt_arg $list[1];
        }

        
$opt_len strlen($opt);

        for (
$i 0$i $count$i++) {
            
$long_opt  $long_options[$i];
            
$opt_start substr($long_opt0$opt_len);

            if (
$opt_start != $opt) {
                continue;
            }

            
$opt_rest substr($long_opt$opt_len);

            if (
$opt_rest != '' && $opt[0] != '=' && $i $count &&
                
$opt == substr($long_options[$i 1], 0$opt_len)) {
                throw new 
PHPUnit_Framework_Exception(
                    
"option --$opt is ambiguous"
                
);
            }

            if (
substr($long_opt, -1) == '=') {
                if (
substr($long_opt, -2) != '==') {
                    if (!
strlen($opt_arg)) {
                        if (
false === $opt_arg current($args)) {
                            throw new 
PHPUnit_Framework_Exception(
                                
"option --$opt requires an argument"
                            
);
                        }
                        
next($args);
                    }
                }
            } elseif (
$opt_arg) {
                throw new 
PHPUnit_Framework_Exception(
                    
"option --$opt doesn't allow an argument"
                
);
            }

            
$full_option '--' preg_replace('/={1,2}$/'''$long_opt);
            
$opts[]      = [$full_option$opt_arg];

            return;
        }

        throw new 
PHPUnit_Framework_Exception("unrecognized option --$opt");
    }
}