protected function match_tags($tags)
{
$res = false;
foreach ($tags as $tag => $match) {
if (!is_array($match)) {
$match = array('match' => $match, 'operator' => 'or', 'compare' => 'total', 'case_sensitive' => false);
} else {
if (is_int($tag)) {
$tag = $match['tag'];
}
if (!isset($match['match'])) {
$match['match'] = true;
}
if (!isset($match['operator'])) {
$match['operator'] = 'or';
}
if (!isset($match['compare'])) {
$match['compare'] = 'total';
}
if (!isset($match['case_sensitive'])) {
$match['case_sensitive'] = false;
}
}
if ($match['operator'] === 'and' && !$res) {
return false;
} elseif (!($res && $match['operator'] === 'or')) {
if ($match['compare'] === 'total') {
$a = $this->tag;
} elseif ($match['compare'] === 'namespace') {
$a = $this->getNamespace();
} elseif ($match['compare'] === 'name') {
$a = $this->getTag();
}
if ($match['case_sensitive']) {
$res = ($a === $tag) === $match['match'];
} else {
$res = (strcasecmp($a, $tag) === 0) === $match['match'];
}
}
}
return $res;
}