From 5791fccea8c4c7e1fe6aa74e9bf51970ba7ef9f4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ste=CC=81phane=20Goetz?= Date: Mon, 29 Jun 2015 16:16:39 +0200 Subject: [PATCH] Added internal documentation links --- docs/00_Getting_Started.md | 2 + docs/01_Examples/05_Code_Highlighting.md | 3 + .../CommonMark}/CommonMarkConverter.php | 16 +++-- libs/Format/Base/CommonMark/LinkRenderer.php | 63 +++++++++++++++++++ libs/Format/Base/MarkdownPage.php | 9 ++- .../CommonMark/CommonMarkConverter.php | 20 ++++++ .../{ => CommonMark}/FencedCodeRenderer.php | 2 +- .../{ => CommonMark}/IndentedCodeRenderer.php | 2 +- .../Confluence/CommonMark/LinkRenderer.php | 43 +++++++++++++ libs/Format/Confluence/MarkdownPage.php | 4 +- 10 files changed, 154 insertions(+), 10 deletions(-) rename libs/Format/{Confluence => Base/CommonMark}/CommonMarkConverter.php (58%) create mode 100644 libs/Format/Base/CommonMark/LinkRenderer.php create mode 100644 libs/Format/Confluence/CommonMark/CommonMarkConverter.php rename libs/Format/Confluence/{ => CommonMark}/FencedCodeRenderer.php (97%) rename libs/Format/Confluence/{ => CommonMark}/IndentedCodeRenderer.php (94%) create mode 100644 libs/Format/Confluence/CommonMark/LinkRenderer.php diff --git a/docs/00_Getting_Started.md b/docs/00_Getting_Started.md index 7db6f6e..a5809ac 100644 --- a/docs/00_Getting_Started.md +++ b/docs/00_Getting_Started.md @@ -367,3 +367,5 @@ If you have a global mime map entry for `.less` files set for the server, you wi ## Support If you need help using Daux.io, or have found a bug, please create an issue on the GitHub repo. + +[Code Highlighting examples](!Examples/Code_Highlighting) diff --git a/docs/01_Examples/05_Code_Highlighting.md b/docs/01_Examples/05_Code_Highlighting.md index 5310bb7..dd5bf52 100644 --- a/docs/01_Examples/05_Code_Highlighting.md +++ b/docs/01_Examples/05_Code_Highlighting.md @@ -1,5 +1,8 @@ Highlight.js highlights syntax in code examples on blogs, forums and in fact on any web pages. It's very easy to use because it works automatically: finds blocks of code, detects a language, highlights it. [Learn more.](http://softwaremaniacs.org/soft/highlight/en/) +You can even use [Github Flavored Markdown](!Examples/GitHub_Flavored_Markdown) + + **Python** @requires_authorization diff --git a/libs/Format/Confluence/CommonMarkConverter.php b/libs/Format/Base/CommonMark/CommonMarkConverter.php similarity index 58% rename from libs/Format/Confluence/CommonMarkConverter.php rename to libs/Format/Base/CommonMark/CommonMarkConverter.php index d988022..c907050 100644 --- a/libs/Format/Confluence/CommonMarkConverter.php +++ b/libs/Format/Base/CommonMark/CommonMarkConverter.php @@ -1,4 +1,4 @@ -mergeConfig($config); - //Add code renderer - $environment->addBlockRenderer('FencedCode', new FencedCodeRenderer()); - $environment->addBlockRenderer('IndentedCode', new IndentedCodeRenderer()); + $this->extendEnvironment($environment); $this->docParser = new DocParser($environment); $this->htmlRenderer = new HtmlRenderer($environment); } + + protected function getLinkRenderer(Environment $environment) + { + return new LinkRenderer($environment->getConfig('daux')); + } + + protected function extendEnvironment(Environment $environment) + { + $environment->addInlineRenderer('Link', $this->getLinkRenderer($environment)); + } } diff --git a/libs/Format/Base/CommonMark/LinkRenderer.php b/libs/Format/Base/CommonMark/LinkRenderer.php new file mode 100644 index 0000000..26e75c4 --- /dev/null +++ b/libs/Format/Base/CommonMark/LinkRenderer.php @@ -0,0 +1,63 @@ +daux = $daux; + } + + /** + * @param $url + * @return Entry + * @throws Exception + */ + protected function resolveInternalFile($url) { + + $file = DauxHelper::getFile($this->daux['tree'], $url); + if ($file) { + return $file; + } + + $file = DauxHelper::getFile($this->daux['tree'], $url . '.html'); + if ($file) { + return $file; + } + + throw new Exception("Could not locate file '$url'"); + } + + /** + * @param Link $inline + * @param HtmlRendererInterface $htmlRenderer + * + * @return HtmlElement + */ + public function render(AbstractInline $inline, HtmlRendererInterface $htmlRenderer) + { + $element = parent::render($inline, $htmlRenderer); + + $url = $inline->getUrl(); + if (!empty($url) && $url[0] == '!') { + $file = $this->resolveInternalFile(ltrim($url, "!")); + + $element->setAttribute('href', $this->daux['base_url'] . $file->getUrl()); + } + + return $element; + } +} diff --git a/libs/Format/Base/MarkdownPage.php b/libs/Format/Base/MarkdownPage.php index e844b19..ac189ea 100644 --- a/libs/Format/Base/MarkdownPage.php +++ b/libs/Format/Base/MarkdownPage.php @@ -1,7 +1,7 @@ file = $file; } + public function getFile() + { + return $this->file; + } + public function setParams(Config $params) { $this->params = $params; @@ -33,7 +38,7 @@ abstract class MarkdownPage extends SimplePage protected function getMarkdownConverter() { - return new CommonMarkConverter(); + return new CommonMarkConverter(['daux' => $this->params]); } protected function convertPage($content) diff --git a/libs/Format/Confluence/CommonMark/CommonMarkConverter.php b/libs/Format/Confluence/CommonMark/CommonMarkConverter.php new file mode 100644 index 0000000..7685f55 --- /dev/null +++ b/libs/Format/Confluence/CommonMark/CommonMarkConverter.php @@ -0,0 +1,20 @@ +getConfig('daux')); + } + + protected function extendEnvironment(Environment $environment) + { + parent::extendEnvironment($environment); + + //Add code renderer + $environment->addBlockRenderer('FencedCode', new FencedCodeRenderer()); + $environment->addBlockRenderer('IndentedCode', new IndentedCodeRenderer()); + } +} diff --git a/libs/Format/Confluence/FencedCodeRenderer.php b/libs/Format/Confluence/CommonMark/FencedCodeRenderer.php similarity index 97% rename from libs/Format/Confluence/FencedCodeRenderer.php rename to libs/Format/Confluence/CommonMark/FencedCodeRenderer.php index 3c19e27..5d938d5 100644 --- a/libs/Format/Confluence/FencedCodeRenderer.php +++ b/libs/Format/Confluence/CommonMark/FencedCodeRenderer.php @@ -1,4 +1,4 @@ -getUrl(); + if (empty($url) || $url[0] != '!') { + return $element; + } + + //Internal links + $file = $this->resolveInternalFile(ltrim($url, "!")); + + $link_props = [ + 'ri:content-title' => trim($this->daux['confluence']['prefix']) . " " . $file->getTitle(), + 'ri:space-key' => $this->daux['confluence']['space_id'] + ]; + + $page = strval(new HtmlElement('ri:page', $link_props, '', true)); + $children = $htmlRenderer->renderInlines($inline->getChildren()); + if (strpos($children, "<") !== false) { + $children = '' . $children . ''; + } else { + $children = ''; + } + + return new HtmlElement('ac:link', [], $page . $children); + } +} diff --git a/libs/Format/Confluence/MarkdownPage.php b/libs/Format/Confluence/MarkdownPage.php index 896af37..93bb4a2 100644 --- a/libs/Format/Confluence/MarkdownPage.php +++ b/libs/Format/Confluence/MarkdownPage.php @@ -2,6 +2,7 @@ use DOMDocument; use Todaymade\Daux\DauxHelper; +use Todaymade\Daux\Format\Confluence\CommonMark\CommonMarkConverter; class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage { @@ -9,7 +10,7 @@ class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage protected function getMarkdownConverter() { - return new CommonMarkConverter(); + return new CommonMarkConverter(['daux' => $this->params]); } protected function generatePage() @@ -80,7 +81,6 @@ class MarkdownPage extends \Todaymade\Daux\Format\Base\MarkdownPage private function createImageTag($filename, $attributes) { - $img = " $value) {