/** * Build a hierarchical menu * * @param object $content \MarkdownExtended\API\ContentInterface * @param object $formatter \MarkdownExtended\API\OutputFormatInterface * * @return string */ public function getToc(ContentInterface $md_content, OutputFormatInterface $formatter, array $attributes = null) { $cfg_toc_max_level = $this->getConfigOrDefault('toc_max_level'); $cfg_toc_title = $this->getConfigOrDefault('toc_title'); $cfg_toc_title_level = $this->getConfigOrDefault('toc_title_level'); $cfg_toc_id = $this->getConfigOrDefault('toc_id'); $cfg_toc_class = $this->getConfigOrDefault('toc_class'); $cfg_toc_item_title = $this->getConfigOrDefault('toc_item_title'); $menu = $md_content->getMenu(); $content = $list_content = ''; $max_level = isset($attributes['max_level']) ? $attributes['max_level'] : $cfg_toc_max_level; if (!empty($menu) && count($menu) > 1) { $depth = 0; $current_level = null; foreach ($menu as $item_id => $menu_item) { $_item_id = Helper::getSafeIdString($item_id); if (isset($max_level) && $menu_item['level'] > $max_level) { continue; } $diff = $menu_item['level'] - (is_null($current_level) ? $menu_item['level'] : $current_level); if ($diff > 0) { $list_content .= str_repeat('<ul><li>', $diff); } elseif ($diff < 0) { $list_content .= str_repeat('</li></ul></li>', -$diff); $list_content .= '<li>'; } else { if (!is_null($current_level)) { $list_content .= '</li>'; } $list_content .= '<li>'; } $depth += $diff; $list_content .= $formatter->buildTag('link', $menu_item['text'], array('href' => '#' . $_item_id, 'title' => isset($attributes['toc_item_title']) ? $attributes['toc_item_title'] : $cfg_toc_item_title)); $current_level = $menu_item['level']; } if ($depth != 0) { $list_content .= str_repeat('</ul></li>', $depth); } $content .= $formatter->buildTag('title', $cfg_toc_title, array('level' => isset($attributes['toc_title_level']) ? $attributes['toc_title_level'] : $cfg_toc_title_level, 'id' => isset($attributes['toc_id']) ? $attributes['toc_id'] : $cfg_toc_id, 'no-addon' => true)); $content .= $formatter->buildTag('unordered_list', $list_content, array('class' => isset($attributes['class']) ? $attributes['class'] : $cfg_toc_class)); } return $content; }
private function _hardDebugContent(ContentInterface $content) { echo Helper::debug($content->getBody(), 'content body'); echo Helper::debug($content->getNotes(), 'content notes', false); echo Helper::debug($content->getMetadata(), 'content metadata', false); }