X-Git-Url: https://git.m6w6.name/?a=blobdiff_plain;f=mdref%2FEntry.php;h=589cf412eb72b4093d485261cba99d9d33ac64e2;hb=687f5fcb8de9250739a01d5855faa868f593fb73;hp=587cd1e8a33122b3f44e69b78b884a912b1c9208;hpb=6478b415c59070f70ed860f3a592377eef9783b1;p=mdref%2Fmdref diff --git a/mdref/Entry.php b/mdref/Entry.php index 587cd1e..589cf41 100644 --- a/mdref/Entry.php +++ b/mdref/Entry.php @@ -11,31 +11,31 @@ class Entry implements \IteratorAggregate { * @var string */ private $name; - + /** * Split name * @var array */ private $list; - + /** * The containing repository * @var \mdref\Repo */ private $repo; - + /** * The file path, if the refentry exists - * @var type + * @var type */ private $path; - + /** * The file instance of this entry * @var \mdref\File */ private $file; - + /** * @param string $name the compound name of the ref entry, e.g. "pq/Connection/exec" * @param \mdref\Repo $repo the containing repository @@ -46,7 +46,7 @@ class Entry implements \IteratorAggregate { $this->list = explode("/", $name); $this->path = $repo->hasEntry($name); } - + /** * Get the compound name, e.g. "pq/Connection/exec" * @return string @@ -54,7 +54,7 @@ class Entry implements \IteratorAggregate { public function getName() { return $this->name; } - + /** * Get the containing repository * @return \mdref\Repo @@ -62,7 +62,7 @@ class Entry implements \IteratorAggregate { public function getRepo() { return $this->repo; } - + /** * Get the file path, if any * @return string @@ -70,7 +70,7 @@ class Entry implements \IteratorAggregate { public function getPath() { return $this->path; } - + /** * Get the file instance of this entry * @return \mdref\File @@ -81,49 +81,71 @@ class Entry implements \IteratorAggregate { } return $this->file; } - + + /** + * Get edit URL + * @return string + */ + public function getEditUrl() { + return $this->repo->getEditUrl($this->name); + } + /** * Read the title of the ref entry file * @return string */ public function getTitle() { if ($this->isFile()) { - return $this->getFile()->readTitle(); + return trim($this->getFile()->readTitle()); } if ($this->isRoot()) { - return $this->repo->getRootEntry()->getTitle(); + return trim($this->repo->getRootEntry()->getTitle()); } return $this->name; } - + /** - * Read the description of the ref entry file + * Read the first line of the description of the ref entry file * @return string */ public function getDescription() { if ($this->isFile()) { - return $this->getFile()->readDescription(); + return trim($this->getFile()->readDescription()); } if ($this->isRoot()) { - return $this->repo->getRootEntry()->getDescription(); + return trim($this->repo->getRootEntry()->getDescription()); } return $this; } - + + /** + * Read the full description of the ref entry file + * @return string + */ + public function getFullDescription() { + if ($this->isFile()) { + return trim($this->getFile()->readFullDescription()); + } + if ($this->isRoot()) { + return trim($this->repo->getRootEntry()->getFullDescription()); + } + return $this; + } + /** * Read the intriductory section of the refentry file * @return string */ public function getIntro() { if ($this->isFile()) { - return $this->getFile()->readIntro(); + return trim($this->getFile()->readIntro()); } if ($this->isRoot()) { - return $this->repo->getRootEntry()->getIntro(); + return trim($this->repo->getRootEntry()->getIntro()); } return ""; } - + /** * Check if the refentry exists * @return bool @@ -131,7 +153,7 @@ class Entry implements \IteratorAggregate { public function isFile() { return strlen($this->path) > 0; } - + /** * Check if this is the first entry of the reference tree * @return bool @@ -139,17 +161,21 @@ class Entry implements \IteratorAggregate { public function isRoot() { return count($this->list) === 1; } - + /** * Get the parent ref entry * @return \mdref\Entry */ public function getParent() { - if ("." !== ($dirn = dirname($this->name))) { + switch ($dirn = dirname($this->name)) { + case ".": + case "/": + break; + default: return $this->repo->getEntry($dirn); } } - + /** * Get the list of parents up-down * @return array @@ -161,7 +187,7 @@ class Entry implements \IteratorAggregate { } return $parents; } - + /** * Guess whether this ref entry is about a function or method * @return bool @@ -170,7 +196,7 @@ class Entry implements \IteratorAggregate { $base = end($this->list); return $base{0} === "_" || ctype_lower($base{0}); } - + /** * Guess whether this ref entry is about a namespace, interface or class * @return bool @@ -179,7 +205,23 @@ class Entry implements \IteratorAggregate { $base = end($this->list); return ctype_upper($base{0}); } - + + public function getEntryName() { + return end($this->list); + } + + public function getNsName() { + if ($this->isRoot()) { + return $this->getName(); + } elseif ($this->isFunction()) { + $parts = explode("/", trim($this->getName(), "/")); + $self = array_pop($parts); + return implode("\\", $parts) . "::" . $self; + } else { + return strtr($this->getName(), "/", "\\"); + } + } + /** * Display name * @return string @@ -191,11 +233,11 @@ class Entry implements \IteratorAggregate { return $myself; } $parent = end($parts); - + switch ($myself{0}) { case ":": return "★" . substr($myself, 1); - + default: if (!ctype_lower($myself{0}) || ctype_lower($parent{0})) { return $myself; @@ -204,7 +246,7 @@ class Entry implements \IteratorAggregate { return $parent . "::" . $myself; } } - + /** * Get the base name of this ref entry * @return string @@ -212,30 +254,33 @@ class Entry implements \IteratorAggregate { public function getBasename() { return dirname($this->path) . "/" . basename($this->path, ".md"); } - + /** * Guess whether there are any child nodes * @param string $glob * @return boolean */ - function hasIterator($glob = null) { + function hasIterator($glob = null, $loose = false) { if (strlen($glob)) { - return glob($this->getBasename() . "/$glob"); + return glob($this->getBasename() . "/$glob") || + ($loose && glob($this->getBasename() . "/*/$glob")); } elseif ($this->isRoot()) { return true; - } else { + } elseif ($this->getBasename() !== "/") { return is_dir($this->getBasename()); + } else { + return false; } } - + /** * Guess whether there are namespace/interface/class child nodes * @return bool */ function hasNsClasses() { - return $this->hasIterator("/[A-Z]*.md"); + return $this->hasIterator("/[A-Z]*.md", true); } - + /** * Guess whether there are function/method child nodes * @return bool @@ -243,12 +288,16 @@ class Entry implements \IteratorAggregate { function hasFunctions() { return $this->hasIterator("/[a-z_]*.md"); } - + /** * Implements \IteratorAggregate * @return \mdref\Tree child nodes */ function getIterator() { - return new Tree($this->getBasename(), $this->repo, $this->isRoot()); + return new Tree($this->getBasename(), $this->repo); + } + + function getStructure() { + return new Structure($this); } }