Add metadata support, fixes #210

Cette révision appartient à :
Stéphane Goetz
2015-11-11 00:09:47 +01:00
Parent 295aee5f77
révision 93330e86db
3 fichiers modifiés avec 133 ajouts et 9 suppressions

Voir le fichier

@ -2,21 +2,18 @@
class Content extends Entry
{
/**
* @var string
*/
/** @var string */
protected $content;
/**
* @var Content
*/
/** @var Content */
protected $previous;
/**
* @var Content
*/
/** @var Content */
protected $next;
/** @var array */
protected $attributes;
/**
* @return string
*/
@ -26,6 +23,10 @@ class Content extends Entry
$this->content = file_get_contents($this->getPath());
}
if ($this->attributes === null) {
$this->parseAttributes();
}
return $this->content;
}
@ -74,6 +75,68 @@ class Content extends Entry
return $this->name == 'index' || $this->name == '_index';
}
public function getTitle()
{
if ($title = $this->getAttribute('title')) {
return $title;
}
return parent::getTitle();
}
protected function parseAttributes()
{
// We set an empty array first to
// avoid a loop when "parseAttributes"
// is called in "getContent"
$this->attributes = [];
$content = $this->getContent();
$sections = preg_split('/\s+-{3,}\s+/', $content, 2);
// Only do it if we have two sections
if (count($sections) != 2) {
return;
}
// Parse the different attributes
$lines = preg_split('/\n/', $sections[0]);
foreach ($lines as $line) {
$parts = preg_split('/:/', $line, 2);
if (count($parts) !== 2) continue;
$key = strtolower(trim($parts[0]));
$value = trim($parts[1]);
$this->attributes[$key] = $value;
}
// Only remove the content if we have at least one attribute
if (count($this->attributes) > 0) {
$this->setContent($sections[1]);
}
}
public function setAttributes(array $attributes)
{
$this->attributes = $attributes;
}
public function getAttribute($key = null)
{
if ($this->attributes === null) {
$this->parseAttributes();
}
if (is_null($key)) {
return $this->attributes;
}
if (!array_key_exists($key, $this->attributes)) {
return null;
}
return $this->attributes[$key];
}
public function dump()
{
$dump = parent::dump();