X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=mdref%2FReference.php;h=4197de1afa015c8aa6d14beefd81af125018ec69;hb=8de7b39a79ff94a9fdefd792ea1f65c41400f654;hp=3e40cfff7705d52c016018fedca332e47185562f;hpb=d942f60dc24887e48991d599281834a752dd4c0a;p=mdref%2Fmdref diff --git a/mdref/Reference.php b/mdref/Reference.php index 3e40cff..4197de1 100644 --- a/mdref/Reference.php +++ b/mdref/Reference.php @@ -2,82 +2,96 @@ namespace mdref; +use ArrayIterator; +use Iterator; +use IteratorAggregate; +use function is_numeric; +use function preg_replace; + /** * The complete available reference */ -class Reference implements \IteratorAggregate { +class Reference implements IteratorAggregate { /** * List of mdref repositories - * @var array + * @var Repo[] */ private $repos = array(); + /** + * @var Formatter + */ + private $fmt; + /** * @param array $refs list of mdref repository paths */ - public function __construct(array $refs) { + public function __construct(array $refs, Formatter $fmt = null) { foreach ($refs as $path) { $repo = new Repo($path); $this->repos[$repo->getName()] = $repo; } + $this->fmt = $fmt ?: new Formatter; + } + + /** + * Get the formatter. + * @return Formatter + */ + public function getFormatter() : Formatter { + return $this->fmt; } /** * Lookup the repo containing a ref entry * @param string $entry requested reference entry, e.g. "pq/Connection/exec" - * @param type $canonical + * @param string $canonical * @return \mdref\Repo|NULL */ - public function getRepoForEntry($entry, &$canonical = null) { + public function getRepoForEntry(string $entry, string &$canonical = null) : ?Repo { foreach ($this->repos as $repo) { /** @var $repo Repo */ if ($repo->hasEntry($entry, $canonical)) { return $repo; } } + return null; } /** - * Implements \IteratorAggregate - * @return \ArrayIterator repository list + * Implements IteratorAggregate + * @return ArrayIterator repository list */ - public function getIterator() { - return new \ArrayIterator($this->repos); + public function getIterator() : Iterator { + return new ArrayIterator($this->repos); } - public function formatAnchor($anchor) { + /** + * @param string $anchor + * @return string + */ + public function formatAnchor(string $anchor, string $location = null) : string { if (is_numeric($anchor)) { return "L$anchor"; } return preg_replace("/[^[:alnum:]\.:_]/", ".", $anchor); } - public function formatString($string) { - if (extension_loaded("discount")) { - $md = \MarkdownDocument::createFromString($string); - $md->compile(\MarkdownDocument::AUTOLINK); - return $md->getHtml(); - } - if (extension_loaded("cmark")) { - $node = \CommonMark\Parse($string); - return \CommonMark\Render\HTML($node); - } - throw new \Exception("No Markdown implementation found"); + /** + * @param string $string + * @return string + * @throws \Exception, Exception + */ + public function formatString(string $string, string $location = null) : string { + return $this->fmt->formatString($string, $location); } - public function formatFile($file) { - if (extension_loaded("discount")) { - $fd = fopen($file, "r"); - $md = \MarkdownDocument::createFromStream($fd); - $md->compile(\MarkdownDocument::AUTOLINK | \MarkdownDocument::TOC); - $html = $md->getHtml(); - fclose($fd); - return $html; - } - if (extension_loaded("cmark")) { - $node = \CommonMark\Parse(file_get_contents($file)); - return \CommonMark\Render\HTML($node); - } - throw new \Exception("No Markdown implementation found"); + /** + * @param string $file + * @return string + * @throws \Exception, Exception + */ + public function formatFile(string $file, string $location = null) : string { + return $this->fmt->formatFile($file, $location); } }