no type decls, yet
[mdref/mdref] / mdref / Reference.php
index 153004fdafc83dd75ea4e072fcad0c1afcc298a8..3e40cfff7705d52c016018fedca332e47185562f 100644 (file)
@@ -11,7 +11,7 @@ class Reference implements \IteratorAggregate {
         * @var array
         */
        private $repos = array();
-       
+
        /**
         * @param array $refs list of mdref repository paths
         */
@@ -21,7 +21,7 @@ class Reference implements \IteratorAggregate {
                        $this->repos[$repo->getName()] = $repo;
                }
        }
-       
+
        /**
         * Lookup the repo containing a ref entry
         * @param string $entry requested reference entry, e.g. "pq/Connection/exec"
@@ -30,12 +30,13 @@ class Reference implements \IteratorAggregate {
         */
        public function getRepoForEntry($entry, &$canonical = null) {
                foreach ($this->repos as $repo) {
+                       /** @var $repo Repo */
                        if ($repo->hasEntry($entry, $canonical)) {
                                return $repo;
                        }
                }
        }
-       
+
        /**
         * Implements \IteratorAggregate
         * @return \ArrayIterator repository list
@@ -43,5 +44,40 @@ class Reference implements \IteratorAggregate {
        public function getIterator() {
                return new \ArrayIterator($this->repos);
        }
-       
+
+       public function formatAnchor($anchor) {
+               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");
+       }
+
+       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");
+       }
 }