private function followLinks(array $references, $flags = 0)
{
$result = array();
foreach ($references as $key => $reference) {
// Not a link
if (!$this->isLinkReference($reference)) {
$result[] = $reference;
if ($flags & self::STOP_ON_FIRST) {
return $result;
}
continue;
}
$referencedPath = substr($reference, 1);
// Get all the file system paths that this link points to
// and append them to the result
foreach ($this->searchReferences($referencedPath, $flags) as $referencedReferences) {
// Follow links recursively
$referencedReferences = $this->followLinks($referencedReferences);
// Append all resulting target paths to the result
foreach ($referencedReferences as $referencedReference) {
$result[] = $referencedReference;
if ($flags & self::STOP_ON_FIRST) {
return $result;
}
}
}
}
return $result;
}