Prado\Web\UI\TTemplate::parseAttribute PHP Метод

parseAttribute() защищенный Метод

Parses a single attribute.
protected parseAttribute ( $value ) : array
Результат array attribute initialization
    protected function parseAttribute($value)
    {
        if (($n = preg_match_all('/<%[#=].*?%>/msS', $value, $matches, PREG_OFFSET_CAPTURE)) > 0) {
            $isDataBind = false;
            $textStart = 0;
            $expr = '';
            for ($i = 0; $i < $n; ++$i) {
                $match = $matches[0][$i];
                $token = $match[0];
                $offset = $match[1];
                $length = strlen($token);
                if ($token[2] === '#') {
                    $isDataBind = true;
                }
                if ($offset > $textStart) {
                    $expr .= ".'" . strtr(substr($value, $textStart, $offset - $textStart), array("'" => "\\'", "\\" => "\\\\")) . "'";
                }
                $expr .= '.(' . substr($token, 3, $length - 5) . ')';
                $textStart = $offset + $length;
            }
            $length = strlen($value);
            if ($length > $textStart) {
                $expr .= ".'" . strtr(substr($value, $textStart, $length - $textStart), array("'" => "\\'", "\\" => "\\\\")) . "'";
            }
            if ($isDataBind) {
                return array(self::CONFIG_DATABIND, ltrim($expr, '.'));
            } else {
                return array(self::CONFIG_EXPRESSION, ltrim($expr, '.'));
            }
        } else {
            if (preg_match('/\\s*(<%~.*?%>|<%\\$.*?%>|<%\\[.*?\\]%>|<%\\/.*?%>)\\s*/msS', $value, $matches) && $matches[0] === $value) {
                $value = $matches[1];
                if ($value[2] === '~') {
                    return array(self::CONFIG_ASSET, trim(substr($value, 3, strlen($value) - 5)));
                } elseif ($value[2] === '[') {
                    return array(self::CONFIG_LOCALIZATION, trim(substr($value, 3, strlen($value) - 6)));
                } elseif ($value[2] === '$') {
                    return array(self::CONFIG_PARAMETER, trim(substr($value, 3, strlen($value) - 5)));
                } elseif ($value[2] === '/') {
                    $literal = trim(substr($value, 3, strlen($value) - 5));
                    return array(self::CONFIG_EXPRESSION, "rtrim(dirname(\$this->getApplication()->getRequest()->getApplicationUrl()), '/').'/{$literal}'");
                }
            } else {
                return $value;
            }
        }
    }