PHP Classes

File: classes/sys/cmd/sys-cmd-arguments-parser.php

Recommend this page to a friend!
  Classes of Gonzalo Chumillas   PHP Query   classes/sys/cmd/sys-cmd-arguments-parser.php   Download  
File: classes/sys/cmd/sys-cmd-arguments-parser.php
Role: Class source
Content type: text/plain
Description: Class source
Class: PHP Query
Parse and access XML documents as arrays
Author: By
Last change:
Date: 9 years ago
Size: 2,580 bytes
 

Contents

Class file image Download
<?php
/**
 * This file contains the SysCmdArgumentsParser class.
 *
 * PHP Version 5.3
 *
 * @category System
 * @package SysCmd
 * @author Gonzalo Chumillas <gonzalo@soloproyectos.com>
 * @license https://raw.github.com/soloproyectos/core/master/LICENSE BSD 2-Clause License
 * @link https://github.com/soloproyectos/core
 */
namespace com\soloproyectos\common\sys\cmd;
use
com\soloproyectos\common\sys\cmd\SysCmdArgument;
use
com\soloproyectos\common\text\parser\exception\TextParserException;
use
com\soloproyectos\common\text\parser\TextParser;

/**
 * Class SysCmdArgumentsParser.
 *
 * This class parses a list of arguments.
 *
 * @category System
 * @package SysCmd
 * @author Gonzalo Chumillas <gonzalo@soloproyectos.com>
 * @license https://raw.github.com/soloproyectos/core/master/LICENSE BSD 2-Clause License
 * @link https://github.com/soloproyectos/core
 */
class SysCmdArgumentsParser extends TextParser
{
   
/**
     * Describes an unquoted text.
     * This regular pattern describes an unquoted text.
     */
   
const UNQUOTED_TEXT = "[^\s\$\|#&\?\*\>\<\\\\]+";
   
   
/**
     * Is the next thing a text?
     *
     * @return false|array of a single string
     */
   
protected function text()
    {
       
$value = "";
       
        if ((!list(
$value) = $this->match(SysCmdArgumentsParser::UNQUOTED_TEXT))
            && (!list(
$value) = $this->str())
        ) {
            return
false;
        }
       
        return array(
$value);
    }
   
   
/**
     * Is the next thing an argument?
     *
     * @return false|SysCmdArgument
     */
   
protected function argument()
    {
       
$name = "";
       
$value = "";
       
        if (
$this->eq("-")) {
            if (!list(
$name) = $this->is("text")) {
                throw new
TextParserException("Invalid flag", $this);
            }
           
            list(
$value) = $this->is("text");
        } elseif (!list(
$value) = $this->is("text")) {
            return
false;
        }
       
       
$arg = new SysCmdArgument();
       
$arg->setName($name);
       
$arg->setValue($value);
        return
$arg;
    }
   
   
/**
     * Parses the arguments.
     *
     * @return false|array of SysCmdArgument objects
     */
   
protected function evaluate()
    {
       
$args = array();
       
        if (!
$arg = $this->is("argument")) {
            return
false;
        }
       
       
array_push($args, $arg);
        while (
$arg = $this->is("argument")) {
           
array_push($args, $arg);
        }
       
        return
$args;
    }
}