summaryrefslogtreecommitdiff
path: root/platform/www/lib/plugins/info/syntax.php
diff options
context:
space:
mode:
Diffstat (limited to 'platform/www/lib/plugins/info/syntax.php')
-rw-r--r--platform/www/lib/plugins/info/syntax.php302
1 files changed, 302 insertions, 0 deletions
diff --git a/platform/www/lib/plugins/info/syntax.php b/platform/www/lib/plugins/info/syntax.php
new file mode 100644
index 0000000..0d1e389
--- /dev/null
+++ b/platform/www/lib/plugins/info/syntax.php
@@ -0,0 +1,302 @@
+<?php
+/**
+ * Info Plugin: Displays information about various DokuWiki internals
+ *
+ * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
+ * @author Andreas Gohr <andi@splitbrain.org>
+ * @author Esther Brunner <wikidesign@gmail.com>
+ */
+class syntax_plugin_info extends DokuWiki_Syntax_Plugin
+{
+
+ /**
+ * What kind of syntax are we?
+ */
+ public function getType()
+ {
+ return 'substition';
+ }
+
+ /**
+ * What about paragraphs?
+ */
+ public function getPType()
+ {
+ return 'block';
+ }
+
+ /**
+ * Where to sort in?
+ */
+ public function getSort()
+ {
+ return 155;
+ }
+
+
+ /**
+ * Connect pattern to lexer
+ */
+ public function connectTo($mode)
+ {
+ $this->Lexer->addSpecialPattern('~~INFO:\w+~~', $mode, 'plugin_info');
+ }
+
+ /**
+ * Handle the match
+ *
+ * @param string $match The text matched by the patterns
+ * @param int $state The lexer state for the match
+ * @param int $pos The character position of the matched text
+ * @param Doku_Handler $handler The Doku_Handler object
+ * @return array Return an array with all data you want to use in render
+ */
+ public function handle($match, $state, $pos, Doku_Handler $handler)
+ {
+ $match = substr($match, 7, -2); //strip ~~INFO: from start and ~~ from end
+ return array(strtolower($match));
+ }
+
+ /**
+ * Create output
+ *
+ * @param string $format string output format being rendered
+ * @param Doku_Renderer $renderer the current renderer object
+ * @param array $data data created by handler()
+ * @return boolean rendered correctly?
+ */
+ public function render($format, Doku_Renderer $renderer, $data)
+ {
+ if ($format == 'xhtml') {
+ /** @var Doku_Renderer_xhtml $renderer */
+ //handle various info stuff
+ switch ($data[0]) {
+ case 'syntaxmodes':
+ $renderer->doc .= $this->renderSyntaxModes();
+ break;
+ case 'syntaxtypes':
+ $renderer->doc .= $this->renderSyntaxTypes();
+ break;
+ case 'syntaxplugins':
+ $this->renderPlugins('syntax', $renderer);
+ break;
+ case 'adminplugins':
+ $this->renderPlugins('admin', $renderer);
+ break;
+ case 'actionplugins':
+ $this->renderPlugins('action', $renderer);
+ break;
+ case 'rendererplugins':
+ $this->renderPlugins('renderer', $renderer);
+ break;
+ case 'helperplugins':
+ $this->renderPlugins('helper', $renderer);
+ break;
+ case 'authplugins':
+ $this->renderPlugins('auth', $renderer);
+ break;
+ case 'remoteplugins':
+ $this->renderPlugins('remote', $renderer);
+ break;
+ case 'helpermethods':
+ $this->renderHelperMethods($renderer);
+ break;
+ case 'datetime':
+ $renderer->doc .= date('r');
+ break;
+ default:
+ $renderer->doc .= "no info about ".htmlspecialchars($data[0]);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ *
+ * @param string $type
+ * @param Doku_Renderer_xhtml $renderer
+ */
+ protected function renderPlugins($type, Doku_Renderer_xhtml $renderer)
+ {
+ global $lang;
+ $renderer->doc .= '<ul>';
+
+ $plugins = plugin_list($type);
+ $plginfo = array();
+
+ // remove subparts
+ foreach ($plugins as $p) {
+ if (!$po = plugin_load($type, $p)) continue;
+ list($name,/* $part */) = explode('_', $p, 2);
+ $plginfo[$name] = $po->getInfo();
+ }
+
+ // list them
+ foreach ($plginfo as $info) {
+ $renderer->doc .= '<li><div class="li">';
+ $renderer->externallink($info['url'], $info['name']);
+ $renderer->doc .= ' ';
+ $renderer->doc .= '<em>'.$info['date'].'</em>';
+ $renderer->doc .= ' ';
+ $renderer->doc .= $lang['by'];
+ $renderer->doc .= ' ';
+ $renderer->emaillink($info['email'], $info['author']);
+ $renderer->doc .= '<br />';
+ $renderer->doc .= strtr(hsc($info['desc']), array("\n"=>"<br />"));
+ $renderer->doc .= '</div></li>';
+ unset($po);
+ }
+
+ $renderer->doc .= '</ul>';
+ }
+
+ /**
+ * list all installed plugins
+ *
+ * uses some of the original renderer methods
+ *
+ * @param Doku_Renderer_xhtml $renderer
+ */
+ protected function renderHelperMethods(Doku_Renderer_xhtml $renderer)
+ {
+ $plugins = plugin_list('helper');
+ foreach ($plugins as $p) {
+ if (!$po = plugin_load('helper', $p)) continue;
+
+ if (!method_exists($po, 'getMethods')) continue;
+ $methods = $po->getMethods();
+ $info = $po->getInfo();
+
+ $hid = $this->addToToc($info['name'], 2, $renderer);
+ $doc = '<h2><a name="'.$hid.'" id="'.$hid.'">'.hsc($info['name']).'</a></h2>';
+ $doc .= '<div class="level2">';
+ $doc .= '<p>'.strtr(hsc($info['desc']), array("\n"=>"<br />")).'</p>';
+ $doc .= '<pre class="code">$'.$p." = plugin_load('helper', '".$p."');</pre>";
+ $doc .= '</div>';
+ foreach ($methods as $method) {
+ $title = '$'.$p.'->'.$method['name'].'()';
+ $hid = $this->addToToc($title, 3, $renderer);
+ $doc .= '<h3><a name="'.$hid.'" id="'.$hid.'">'.hsc($title).'</a></h3>';
+ $doc .= '<div class="level3">';
+ $doc .= '<div class="table"><table class="inline"><tbody>';
+ $doc .= '<tr><th>Description</th><td colspan="2">'.$method['desc'].
+ '</td></tr>';
+ if ($method['params']) {
+ $c = count($method['params']);
+ $doc .= '<tr><th rowspan="'.$c.'">Parameters</th><td>';
+ $params = array();
+ foreach ($method['params'] as $desc => $type) {
+ $params[] = hsc($desc).'</td><td>'.hsc($type);
+ }
+ $doc .= join('</td></tr><tr><td>', $params).'</td></tr>';
+ }
+ if ($method['return']) {
+ $doc .= '<tr><th>Return value</th><td>'.hsc(key($method['return'])).
+ '</td><td>'.hsc(current($method['return'])).'</td></tr>';
+ }
+ $doc .= '</tbody></table></div>';
+ $doc .= '</div>';
+ }
+ unset($po);
+
+ $renderer->doc .= $doc;
+ }
+ }
+
+ /**
+ * lists all known syntax types and their registered modes
+ *
+ * @return string
+ */
+ protected function renderSyntaxTypes()
+ {
+ global $PARSER_MODES;
+ $doc = '';
+
+ $doc .= '<div class="table"><table class="inline"><tbody>';
+ foreach ($PARSER_MODES as $mode => $modes) {
+ $doc .= '<tr>';
+ $doc .= '<td class="leftalign">';
+ $doc .= $mode;
+ $doc .= '</td>';
+ $doc .= '<td class="leftalign">';
+ $doc .= join(', ', $modes);
+ $doc .= '</td>';
+ $doc .= '</tr>';
+ }
+ $doc .= '</tbody></table></div>';
+ return $doc;
+ }
+
+ /**
+ * lists all known syntax modes and their sorting value
+ *
+ * @return string
+ */
+ protected function renderSyntaxModes()
+ {
+ $modes = p_get_parsermodes();
+
+ $compactmodes = array();
+ foreach ($modes as $mode) {
+ $compactmodes[$mode['sort']][] = $mode['mode'];
+ }
+ $doc = '';
+ $doc .= '<div class="table"><table class="inline"><tbody>';
+
+ foreach ($compactmodes as $sort => $modes) {
+ $rowspan = '';
+ if (count($modes) > 1) {
+ $rowspan = ' rowspan="'.count($modes).'"';
+ }
+
+ foreach ($modes as $index => $mode) {
+ $doc .= '<tr>';
+ $doc .= '<td class="leftalign">';
+ $doc .= $mode;
+ $doc .= '</td>';
+
+ if ($index === 0) {
+ $doc .= '<td class="rightalign" '.$rowspan.'>';
+ $doc .= $sort;
+ $doc .= '</td>';
+ }
+ $doc .= '</tr>';
+ }
+ }
+
+ $doc .= '</tbody></table></div>';
+ return $doc;
+ }
+
+ /**
+ * Adds a TOC item
+ *
+ * @param string $text
+ * @param int $level
+ * @param Doku_Renderer_xhtml $renderer
+ * @return string
+ */
+ protected function addToToc($text, $level, Doku_Renderer_xhtml $renderer)
+ {
+ global $conf;
+
+ $hid = '';
+ if (($level >= $conf['toptoclevel']) && ($level <= $conf['maxtoclevel'])) {
+ $hid = $renderer->_headerToLink($text, true);
+ $renderer->toc[] = array(
+ 'hid' => $hid,
+ 'title' => $text,
+ 'type' => 'ul',
+ 'level' => $level - $conf['toptoclevel'] + 1
+ );
+ }
+ return $hid;
+ }
+}
+
+//Setup VIM: ex: et ts=4 :