static function parse($node, $allow = null, $deny = null) { $find = array(); $replace = array(); foreach (self::$find as $n => $rule) { list($code, $expression) = $rule; $allowed = !$allow || $allow && in_array($code, $allow); $denied = $deny && in_array($code, $deny); if ($allowed && !$denied) { $find[] = $expression; $replace[] = self::$replace[$n]; } } $xml = new xml(); foreach ($node->children() as $child) { $xml->append($xml->import($child)); } foreach ($xml->query('//text()') as $text) { $parent = $text->parent(); $bbcode = preg_replace($find, $replace, $text->value()); $bbcode = xml::parse("<?xml version=\"1.0\" encoding=\"utf-8\" ?><bbcode>{$bbcode}</bbcode>"); foreach ($bbcode->query('/bbcode/* | /bbcode/text()') as $child) { $parent->insert($xml->import($child), $text); } $parent->remove($text); } return $xml; }
function load($filename) { $this->xml = xml::load($filename); $query = array(); foreach (self::$languages as $language) { $query[] = "/local//{$language}"; } foreach ($this->xml->query(implode('|', $query)) as $node) { $doc = new xml(); foreach ($this->xml->query('* | text()', $node) as $piece) { $doc->append($doc->import($piece)); } $path = explode(':', str_replace('/', ':', trim($node->path(), '/'))); array_shift($path); $this->local[implode(':', $path)] = xtree::create($doc); } }