QueryPath\CSS\DOMTraverser\Util::parseAnB PHP Method

parseAnB() public static method

Invalid rules return array(0, 0). This is per the spec.
public static parseAnB ( $rule )
$rule Some rule in the an+b format.
    public static function parseAnB($rule)
    {
        if ($rule == 'even') {
            return array(2, 0);
        } elseif ($rule == 'odd') {
            return array(2, 1);
        } elseif ($rule == 'n') {
            return array(1, 0);
        } elseif (is_numeric($rule)) {
            return array(0, (int) $rule);
        }
        $regex = '/^\\s*([+\\-]?[0-9]*)n\\s*([+\\-]?)\\s*([0-9]*)\\s*$/';
        $matches = array();
        $res = preg_match($regex, $rule, $matches);
        // If it doesn't parse, return 0, 0.
        if (!$res) {
            return array(0, 0);
        }
        $aVal = isset($matches[1]) ? $matches[1] : 1;
        if ($aVal == '-') {
            $aVal = -1;
        } else {
            $aVal = (int) $aVal;
        }
        $bVal = 0;
        if (isset($matches[3])) {
            $bVal = (int) $matches[3];
            if (isset($matches[2]) && $matches[2] == '-') {
                $bVal *= -1;
            }
        }
        return array($aVal, $bVal);
    }

Usage Example

 public function testParseAnB()
 {
     // even
     $this->assertEquals(array(2, 0), Util::parseAnB('even'));
     // odd
     $this->assertEquals(array(2, 1), Util::parseAnB('odd'));
     // 5
     $this->assertEquals(array(0, 5), Util::parseAnB('5'));
     // +5
     $this->assertEquals(array(0, 5), Util::parseAnB('+5'));
     // n
     $this->assertEquals(array(1, 0), Util::parseAnB('n'));
     // 2n
     $this->assertEquals(array(2, 0), Util::parseAnB('2n'));
     // -234n
     $this->assertEquals(array(-234, 0), Util::parseAnB('-234n'));
     // -2n+1
     $this->assertEquals(array(-2, 1), Util::parseAnB('-2n+1'));
     // -2n + 1
     $this->assertEquals(array(-2, 1), Util::parseAnB(' -2n + 1   '));
     // +2n-1
     $this->assertEquals(array(2, -1), Util::parseAnB('2n-1'));
     $this->assertEquals(array(2, -1), Util::parseAnB('2n   -   1'));
     // -n + 3
     $this->assertEquals(array(-1, 3), Util::parseAnB('-n+3'));
     // Test invalid values
     $this->assertEquals(array(0, 0), Util::parseAnB('obviously + invalid'));
 }
All Usage Examples Of QueryPath\CSS\DOMTraverser\Util::parseAnB