From f2ff874c2e25a036b95f55e3ab3cbb9b322988f4 Mon Sep 17 00:00:00 2001 From: Gregwar Date: Tue, 13 May 2014 14:41:59 +0200 Subject: [PATCH] Adding redirection-title:: directive --- Directives/RedirectionTitle.php | 32 ++++++++++++++++ Document.php | 9 +++-- HTML/Nodes/TocNode.php | 10 ++++- Kernel.php | 3 +- Nodes/RedirectionNode.php | 65 +++++++++++++++++++++++++++++++++ Nodes/TitleNode.php | 11 ++++++ tests/BuilderTests.php | 12 ++++++ tests/builder/input/another.rst | 7 ++++ 8 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 Directives/RedirectionTitle.php create mode 100644 Nodes/RedirectionNode.php diff --git a/Directives/RedirectionTitle.php b/Directives/RedirectionTitle.php new file mode 100644 index 0000000..0b80f37 --- /dev/null +++ b/Directives/RedirectionTitle.php @@ -0,0 +1,32 @@ +getDocument(); + + if ($node) { + if ($node instanceof TitleNode) { + $node->setTarget($data); + } + $document->addNode($node); + } + } +} diff --git a/Document.php b/Document.php index d5af968..5f5e5fb 100644 --- a/Document.php +++ b/Document.php @@ -93,7 +93,8 @@ public function getTocs() * array( * array('Main title', array( * array('Sub title', array()), - * array('Sub title 2', array() + * array('Sub title 2', array(), + * array(array('Redirection', 'target'), array(), * ) * ) */ @@ -105,11 +106,13 @@ public function getTitles() foreach ($this->nodes as $node) { if ($node instanceof TitleNode) { $level = $node->getLevel(); - $text = $node->getValue() . ''; + $text = (string)$node->getValue(); + $redirection = $node->getTarget(); + $value = $redirection ? array($text, $redirection) : $text; if (isset($levels[$level-1])) { $parent = &$levels[$level-1]; - $element = array($text, array()); + $element = array($value, array()); $parent[] = $element; $levels[$level] = &$parent[count($parent)-1][1]; } diff --git a/HTML/Nodes/TocNode.php b/HTML/Nodes/TocNode.php index 226256c..3686a90 100644 --- a/HTML/Nodes/TocNode.php +++ b/HTML/Nodes/TocNode.php @@ -17,7 +17,15 @@ protected function renderLevel($url, $titles, $level = 1, $path = array()) $path[$level-1] = $k+1; list($title, $childs) = $entry; $token = 'title.'.implode('.', $path); - $html .= '
  • '.$title.'
  • '; + $target = $url.'#'.$token; + + if (is_array($title)) { + list($title, $target) = $title; + $info = $this->environment->resolve('doc', $target); + $target = $this->environment->relativeUrl($info['url']); + } + + $html .= '
  • '.$title.'
  • '; if ($childs) { $html .= '