public static function get_directive_data($directive_code) { $directive_name = self::get_directive_name($directive_code); $directive_data = array('directive_name' => $directive_name); if (DirectiveFactory::is_nested_directive($directive_name)) { $directive_data = array_merge($directive_data, self::get_nested_directive_data($directive_code, $directive_name)); } else { $directive_data['directive_parameters'] = self::get_simple_directive_parameters($directive_code); } return $directive_data; }
private function process_nested_directives($output) { $startpos = strpos($output, DirectiveParser::DIRECTIVE_START); while ($startpos > -1) { $endpos = strpos($output, DirectiveParser::DIRECTIVE_END, $startpos); $length = $endpos - $startpos + 3; $raw_directive = substr($output, $startpos, $length); $directive_name = DirectiveParser::get_directive_name($raw_directive); if (DirectiveFactory::is_nested_directive($directive_name)) { $end_tag = DirectiveParser::DIRECTIVE_START . '/' . $directive_name . DirectiveParser::DIRECTIVE_END; $endpos = strpos($output, $end_tag); $length = $endpos - $startpos + strlen($end_tag); $raw_directive = substr($output, $startpos, $length); $replace = $this->process_directive($raw_directive, $output); $endpos = $startpos + strlen($replace); $output = substr_replace($output, $replace, $startpos, $length); } $startpos = strpos($output, DirectiveParser::DIRECTIVE_START, $endpos); // next occurence } return $output; }