dtd_regex = $dtd_regex; $this->_compileRegex(); } /** * Compiles the PCRE regex from a DTD regex ($dtd_regex to $_pcre_regex) */ function _compileRegex() { $raw = str_replace(' ', '', $this->dtd_regex); if ($raw{0} != '(') { $raw = "($raw)"; } $reg = str_replace(',', ',?', $raw); $reg = preg_replace('/([#a-zA-Z0-9_.-]+)/', '(,?\\0)', $reg); $this->_pcre_regex = $reg; } function validateChildren($tokens_of_children, $config, &$context) { $list_of_children = ''; $nesting = 0; // depth into the nest foreach ($tokens_of_children as $token) { if (!empty($token->is_whitespace)) continue; $is_child = ($nesting == 0); // direct if ($token->type == 'start') { $nesting++; } elseif ($token->type == 'end') { $nesting--; } if ($is_child) { $list_of_children .= $token->name . ','; } } $list_of_children = rtrim($list_of_children, ','); $okay = preg_match( '/^'.$this->_pcre_regex.'$/', $list_of_children ); return (bool) $okay; } } ?>