vanderlee/Comprehend

View on GitHub
src/Directive/Space.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Vanderlee\Comprehend\Directive;

use Vanderlee\Comprehend\Core\ArgumentsTrait;
use Vanderlee\Comprehend\Core\Context;
use Vanderlee\Comprehend\Parser\Parser;

/**
 * Description of LexemeDirective.
 *
 * @author Martijn
 */
class Space extends Parser
{
    use ArgumentsTrait;

    /**
     * @var null|Parser
     */
    private $spacer;

    /**
     * @var null|Parser
     */
    private $parser;

    /**
     * Set (or disable) a spacer for the parser.
     *
     * @param Parser|string|int|bool|null $spacer
     * @param Parser|string|int $parser
     */
    public function __construct($spacer, $parser)
    {
        $this->spacer = $spacer === null
            ? null
            : self::getArgument($spacer);
        $this->parser = self::getArgument($parser);
    }

    protected function parse(&$input, $offset, Context $context)
    {
        $context->pushSpacer($this->spacer);
        $match = $this->parser->parse($input, $offset, $context);
        $context->popSpacer();

        return $match;
    }

    public function __toString()
    {
        return (string)$this->parser;
    }
}