Make WordPress Core

Changeset 407 in tests for wp-testlib/getopt.php


Ignore:
Timestamp:
08/04/2011 08:38:26 PM (15 years ago)
Author:
ryan
Message:

Pinking shears

File:
1 edited

Legend:

Unmodified
Added
Removed
  • wp-testlib/getopt.php

    r288 r407  
    22/**
    33 * getopt relacement / extenstion
    4  * 
     4 *
    55 *  prior to PHP 5.3 getopt is not supported on the windows plattform
    66 *  and it does not support long options on other plattforms as well.
    7  * 
    8  *  this file offers a _getopt() function as a replacement. via the 
     7 *
     8 *  this file offers a _getopt() function as a replacement. via the
    99 *  php.net manual page for getop().
    10  * 
     10 *
    1111 *  original author is 可愛柚爸 / uberlinuxguy at tulg dot org
    12  * 
     12 *
    1313 *  the function has been taken from that website, and refactored
    1414 *  into a helper class to increase the protability
     
    1717 *
    1818 *  CHANGELOG:
    19  * 
     19 *
    2020 *   - refactored the functions into a class (better portability)
    2121 *   - reformatted the code (copy & paste issues)
    22  *   - removed eval calls (commented)   
     22 *   - removed eval calls (commented)
    2323 *   - smarter quoting
    2424 *   - indentation on tab and cleanup of whitespaces
    2525 *   - deprecated string access ({}) fixed with [].
    26  * 
     26 *
    2727 *  TODO:
    28  *   (empty) 
    29  * 
    30  * 
     28 *   (empty)
     29 *
     30 *
    3131 *  @link http://www.ntu.beautifulworldco.com/weblog/?p=526
    3232 *  @link http://www.php.net/getopt
     
    3535/**
    3636 * getoptParser
    37  * 
     37 *
    3838 * getopt() compatible argv parsing.
    39  * 
     39 *
    4040 * @see getoptParser::getopt()
    4141 * @see getoptParser::split_para()
     
    4343class getoptParser {
    4444        /**
    45          * getopt()       
    46          * 
     45         * getopt()
     46         *
    4747         * Usage: _getopt ( [$flag,] $short_option [, $long_option] );
    48          * 
    49          * Note that another function split_para() is required, which can be 
     48         *
     49         * Note that another function split_para() is required, which can be
    5050         * found in the same page.
    51          * 
    52          * _getopt() fully simulates getopt() which is described at 
    53          * (@see http://us.php.net/manual/en/function.getopt.php} , including long 
    54          * options for PHP version under 5.3.0. (Prior to 5.3.0, long options was 
     51         *
     52         * _getopt() fully simulates getopt() which is described at
     53         * (@see http://us.php.net/manual/en/function.getopt.php} , including long
     54         * options for PHP version under 5.3.0. (Prior to 5.3.0, long options was
    5555         * only available on few systems)
    56          * 
    57          * Besides legacy usage of getopt(), I also added a new option to manipulate 
    58          * your own argument lists instead of those from command lines. This new 
     56         *
     57         * Besides legacy usage of getopt(), I also added a new option to manipulate
     58         * your own argument lists instead of those from command lines. This new
    5959         * option can be a string or an array such as
    60          * 
     60         *
    6161         *  $flag = "-f value_f -ab --required 9 --optional=PK --option -v test -k";
    62          * 
     62         *
    6363         *  or
    64          * 
     64         *
    6565         *  $flag = array ( "-f", "value_f", "-ab", "--required", "9", "--optional=PK", "--option" );
    66          * 
     66         *
    6767         *  So there are four ways to work with _getopt(),
    68          * 
     68         *
    6969         *  1. _getopt ( $short_option );
    7070         *      it's a legacy usage, same as getopt ( $short_option ).
    71          *     
     71         *
    7272         *  2. _getopt ( $short_option, $long_option );
    7373         *      it's a legacy usage, same as getopt ( $short_option, $long_option ).
    74          *     
     74         *
    7575         *  3. _getopt ( $flag, $short_option );
    7676         *      use your own argument lists instead of command line arguments.
    77          *     
     77         *
    7878         *  4. _getopt ( $flag, $short_option, $long_option );
    79          *      use your own argument lists instead of command line arguments. 
    80          * 
     79         *      use your own argument lists instead of command line arguments.
     80         *
    8181         * @version 1.3
    8282         * @date 2009/05/30 (taken from the website 2010-01-11)
    8383         * @author 可愛柚爸 / uberlinuxguy at tulg dot org
    8484         * @see http://www.ntu.beautifulworldco.com/weblog/?p=526
    85          * 
     85         *
    8686         * @params mixed
    8787         * @return array
    8888         */
    8989        static function getopt() {
    90        
     90
    9191                if ( func_num_args() == 1 ) {
    9292                        $flag =  $flag_array = $GLOBALS['argv'];
     
    110110                        exit ( "wrong options\n" );
    111111                }
    112        
     112
    113113                $short_option         = trim($short_option);
    114114                $short_no_value       = array();
     
    119119                $long_optional_value  = array();
    120120                $options              = array();
    121        
     121
    122122                for ( $i = 0; $i < strlen ( $short_option ); ) {
    123123                        if ( $short_option[$i] != ':' ) {
     
    142142                        }
    143143                }
    144        
     144
    145145                foreach ( $long_option as $a ) {
    146146                        if ( substr( $a, -2 ) == '::' ) {
     
    152152                        }
    153153                }
    154        
     154
    155155                if ( is_array ( $flag ) ) {
    156156                        $flag_array = $flag;
     
    159159                        $flag_array = self::_split_para($flag);
    160160                }
    161        
     161
    162162                for ( $i = 0; $i < count($flag_array); ) {
    163        
     163
    164164                        if ( !$flag_array[$i] || ( '-' == $flag_array[$i] ) ) {
    165165                                $i++;
     
    169169                                continue;
    170170                        }
    171        
     171
    172172                        if ( substr($flag_array[$i], 0, 2) == '--' ) {
    173173                                if (strpos($flag_array[$i], '=') != false) {
     
    187187                                                        $i++;
    188188                                                } else {
    189                                                         $options[$key][] = FALSE;                                               
     189                                                        $options[$key][] = FALSE;
    190190                                                }
    191191                                        } elseif ( in_array(substr( $flag_array[$i], 2 ), $long_no_value ) ) {
     
    193193                                        }
    194194                                        $i++;
    195                                         continue;                               
     195                                        continue;
    196196                                }
    197197                        } elseif ( $flag_array[$i][0] == '-' && $flag_array[$i][1] != '-' ) {
     
    207207                                                                $i++;
    208208                                                        } else {
    209                                                                 $options[$flag_array[$i][$j]][] = FALSE;                                                               
    210                                                         }                                                       
     209                                                                $options[$flag_array[$i][$j]][] = FALSE;
     210                                                        }
    211211                                                } else {
    212212                                                        $options[$flag_array[$i][$j]][] = substr ( $flag_array[$i], $j + 1 );
    213213                                                }
    214214                                                $plus_i = 0;
    215                                                 $i++;                                                   
     215                                                $i++;
    216216                                                break;
    217217                                        } elseif ( in_array($flag_array[$i][$j], $short_no_value ) ) {
     
    229229                        $i++;
    230230                } // for
    231        
     231
    232232                // reduce options array depth if possible
    233233                foreach ( $options as $key => $value ) {
     
    235235                                $options[$key] = $value[0];
    236236                }
    237        
     237
    238238                return $options;
    239        
     239
    240240        }
    241241
    242242        /**
    243243         * split parameters
    244          * 
     244         *
    245245         * static helper function
    246          * 
     246         *
    247247         * @version 1.0
    248248         * @date    2008/08/19
    249249         * @see     http://www.ntu.beautifulworldco.com/weblog/?p=526
    250          * 
     250         *
    251251         * This function is to parse parameters and split them into smaller pieces.
    252252         * preg_split() does similar thing but in our function, besides "space", we
     
    254254         * and \ (backslash) into consideration because things in a pair of " or '
    255255         * should be grouped together.
    256          * 
     256         *
    257257         * As an example, this parameter list
    258          * 
     258         *
    259259         * -f "test 2" -ab --required "t\"est 1" --optional="te'st 3" --option -v 'test 4'
    260          * 
     260         *
    261261         * will be splited into
    262          * 
     262         *
    263263         * -f; test 2; -ab; --required; t"est 1; --optional=te'st 3; --option; -v; test 4
    264          * 
     264         *
    265265         * see the code below:
    266          * 
    267          * <code> 
    268          *      $pattern = "-f \"test 2\" -ab --required \"t\\\"est 1\" --optional=\"te'st 3\" --option -v 'test 4'"; 
     266         *
     267         * <code>
     268         *      $pattern = "-f \"test 2\" -ab --required \"t\\\"est 1\" --optional=\"te'st 3\" --option -v 'test 4'";
    269269         *      $result = getoptParser::split_para($pattern);
    270270         *      echo "ORIGINAL PATTERN: $pattern\n\n";
    271271         *      var_dump($result);
    272272         * </code>
    273          * 
     273         *
    274274         * @param string $pattern
    275275         * @return array
     
    370370
    371371                return $result;
    372         }       
     372        }
    373373}
    374374?>
Note: See TracChangeset for help on using the changeset viewer.