protected function prepareIssue($xpath, SimpleXMLElement $node, array $pattern)
{
$issue = array('message' => $pattern['message'], 'inspector' => get_class($this));
if ($node->xpath('./attribute:startLine/scalar:int/text()')) {
$issue['start'] = (int) current($node->xpath('./attribute:startLine/scalar:int/text()'));
$issue['end'] = (int) current($node->xpath('./attribute:endLine/scalar:int/text()'));
} else {
$issue['start'] = (int) $node->xpath('preceding::attribute:startLine[1]/scalar:int/text()')[0];
$issue['end'] = (int) $node->xpath('preceding::attribute:endLine[1]/scalar:int/text()')[0];
}
$issue['line'] = $issue['start'] == $issue['end'] ? $issue['start'] : $issue['start'] . '-' . $issue['end'];
if ($issue['start'] == $issue['end']) {
$issue['source'] = array(trim($this->contentArray[$issue['start'] - 1]));
} else {
$issue['source'] = array_slice($this->contentArray, $issue['start'], $issue['end'] - $issue['start']);
$issue['source'] = array_map('trim', $issue['source']);
}
$numParents = array_filter(explode('//', $xpath));
if (count($numParents) > 1) {
$path = str_repeat('../', count($numParents) + 1);
$issue['parent_start'] = (int) current($node->xpath("{$path}/attribute:startLine/scalar:int/text()"));
$issue['parent_end'] = (int) current($node->xpath("{$path}/attribute:endLine/scalar:int/text()"));
}
if (isset($issue['parent_start']) && isset($issue['parent_end']) && $issue['parent_start'] != $issue['start'] && $issue['parent_end'] != $issue['end']) {
$issue['source'] = array_merge(array(trim($this->contentArray[$issue['parent_start'] - 1]), '...'), $issue['source'], array('...', trim($this->contentArray[$issue['parent_end'] - 1])));
}
return $issue;
}