From 227289575a3bca600e9dc7722f0f31344a2eac80 Mon Sep 17 00:00:00 2001 From: martimiz Date: Wed, 22 May 2013 21:35:03 +0200 Subject: [PATCH] MEDIUM: remove metadata from the current page --- code/DocumentationParser.php | 2 +- code/DocumentationService.php | 2 +- code/models/DocumentationPage.php | 34 ++++++++++++++++++++++--------- docs/en/Configuration-Options.md | 7 +------ 4 files changed, 27 insertions(+), 18 deletions(-) diff --git a/code/DocumentationParser.php b/code/DocumentationParser.php index fe5374c..61bbe54 100755 --- a/code/DocumentationParser.php +++ b/code/DocumentationParser.php @@ -44,7 +44,7 @@ class DocumentationParser { public static function parse(DocumentationPage $page, $baselink = null) { if(!$page || (!$page instanceof DocumentationPage)) return false; - $md = $page->getMarkdown(); + $md = $page->getMarkdown(true); // Pre-processing $md = self::rewrite_image_links($md, $page); diff --git a/code/DocumentationService.php b/code/DocumentationService.php index 38c1b9b..4b3747f 100755 --- a/code/DocumentationService.php +++ b/code/DocumentationService.php @@ -178,7 +178,7 @@ class DocumentationService { * @param bool $allow */ public static function enable_meta_comments($allow = true) { - self::$meta_comments_enabled = ($allow)? true: false; + self::$meta_comments_enabled = (bool) $allow; } /** diff --git a/code/models/DocumentationPage.php b/code/models/DocumentationPage.php index 02b488e..35917d4 100755 --- a/code/models/DocumentationPage.php +++ b/code/models/DocumentationPage.php @@ -255,7 +255,7 @@ class DocumentationPage extends ViewableData { * * @return string */ - function getMarkdown() { + function getMarkdown($removeMetaData = false) { try { $path = $this->getPath(true); @@ -264,7 +264,7 @@ class DocumentationPage extends ViewableData { if(empty($ext) || DocumentationService::is_valid_extension($ext)) { if ($md = file_get_contents($path)) { - if ($this->title != 'Index') $this->getMetadataFromComments($md); + if ($this->title != 'Index') $this->getMetadataFromComments($md, $removeMetaData); } return $md; } @@ -287,25 +287,39 @@ class DocumentationPage extends ViewableData { } /** - * get metadata from the first html comments block in the page + * get metadata from the first html block in the page, then remove the + * block on request * * @param DocumentationPage $md + * @param bool $remove */ - public function getMetadataFromComments($md = '') { + public function getMetadataFromComments(&$md, $removeMetaData = false) { if($md && DocumentationService::meta_comments_enabled()) { - //$pattern = '/^/Uis'; - $pattern = "/^(.+)\n(\r)*\n/Uis"; - $matches = preg_match($pattern, $md, $block); + + // get the text up to the first whiteline + $extPattern = "/^(.+)\n(\r)*\n/Uis"; + $matches = preg_match($extPattern, $md, $block); if($matches && $block[1]) { - $pattern = '/(?[A-Za-z][A-Za-z0-9_-]+)[\t]*:[\t]*(?[^:\n\r\/]+)/x'; - $matches = preg_match_all($pattern, $block[1], $meta); + $metaDataFound = false; + + // find the key/value pairs + $intPattern = '/(?[A-Za-z][A-Za-z0-9_-]+)[\t]*:[\t]*(?[^:\n\r\/]+)/x'; + $matches = preg_match_all($intPattern, $block[1], $meta); + foreach($meta['key'] as $index => $key) { if(isset($meta['value'][$index])) { + + // check if a property exists for this key if (property_exists(get_class(), $key)) { $this->setMetaData($key, $meta['value'][$index]); + $metaDataFound = true; } } - } + } + // optionally remove the metadata block (only on the page that is displayed) + if ($metaDataFound && $removeMetaData) { + $md = preg_replace($extPattern, '', $md); + } } } } diff --git a/docs/en/Configuration-Options.md b/docs/en/Configuration-Options.md index c3581f4..0c62420 100755 --- a/docs/en/Configuration-Options.md +++ b/docs/en/Configuration-Options.md @@ -63,12 +63,7 @@ Custom metadata can be added to the head of the MarkDown file like this: Make sure to add an empty line to separate the metadata from the content of -the file. To make the metadata invisible on the page, you can use a comment tag: - - +the file. You now need to explicitly enable the use of metadata by adding the following to your _config.php: