[Xfce4-commits] <wiki:master> Add the dl plugin.
Nick Schermer
noreply at xfce.org
Tue Jan 3 20:02:02 CET 2012
Updating branch refs/heads/master
to a82faa6e504ce80bcd99d499503b2311b178c7e5 (commit)
from 4423fae2c7f227c1b5b19486d95e30751265b133 (commit)
commit a82faa6e504ce80bcd99d499503b2311b178c7e5
Author: Nick Schermer <nick at xfce.org>
Date: Tue Jan 3 19:59:07 2012 +0100
Add the dl plugin.
lib/plugins/dl/style.css | 8 ++
lib/plugins/dl/syntax.php | 158 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 166 insertions(+), 0 deletions(-)
diff --git a/lib/plugins/dl/style.css b/lib/plugins/dl/style.css
new file mode 100644
index 0000000..083fa50
--- /dev/null
+++ b/lib/plugins/dl/style.css
@@ -0,0 +1,8 @@
+div.dokuwiki dt {
+ font-weight: bold;
+}
+div.dokuwiki dd {
+ margin-left: 20px;
+ margin-top: 0.5em;
+ margin-bottom: 1em;
+}
diff --git a/lib/plugins/dl/syntax.php b/lib/plugins/dl/syntax.php
new file mode 100644
index 0000000..1d5d979
--- /dev/null
+++ b/lib/plugins/dl/syntax.php
@@ -0,0 +1,158 @@
+ <?php
+ if(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../../').'/');
+ if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/');
+ require_once(DOKU_PLUGIN.'syntax.php');
+
+ /** Declare Definition List.
+
+ Declares a HTML - Definition-List
+
+ Indentation: First either no indentation, or any number of spaces.
+ Title: Line starts with (optional) spaces and a question mark
+ Definition: Line starts with (opt.) spaces and an exclamation mark
+ End: Multiple lines are allowed, so an empty line declares the end
+ Subdefinitions: Indent more
+
+ Syntax:
+ ? Definition Title
+ Multiple lines are possible
+ ! Definition Description
+ ? Definition Title1
+ ? Definition Title2
+ ! Definition Description1
+ ! Definition Description2
+ ! Definition Description3
+ ? Subdefinition
+ ! Description
+ ! Back
+ ? Again deeper
+
+ License: LGPL
+ */
+ class syntax_plugin_dl extends DokuWiki_Syntax_Plugin {
+
+ function getInfo() {
+ return array('author' => 'Marc Wäckerlin',
+ 'email' => 'marc [at] waeckerlin [dot-org]',
+ 'name' => 'Definition List Plugin',
+ 'desc' => 'HTML Definition List',
+ 'url' => 'http://marc.waeckerlin.org');
+ }
+
+ function getType() {
+ return 'container';
+ }
+
+ function getAllowedTypes() {
+ return array('container','substition','protected','disabled','formatting','paragraphs');
+ }
+
+ function getPType() {
+ return 'block';
+ }
+
+ function getSort() {
+ return 10;
+ }
+
+ function connectTo($mode) {
+ $this->Lexer->addEntryPattern('^ *\!', $mode, 'plugin_dl');
+ $this->Lexer->addEntryPattern('^ *\?[^\n]*', $mode, 'plugin_dl');
+ }
+
+ function postConnect() {
+ $this->Lexer->addPattern('\n *\!', 'plugin_dl');
+ $this->Lexer->addPattern('^ *\!', 'plugin_dl');
+ $this->Lexer->addPattern('\n *\?[^\n]*', 'plugin_dl');
+ $this->Lexer->addPattern('^ *\?[^\n]*', 'plugin_dl');
+ $this->Lexer->addExitPattern('\n$', 'plugin_dl');
+ }
+
+ function handle($match, $state, $pos, &$handler){
+ if (($state==DOKU_LEXER_MATCHED ||
+ $state==DOKU_LEXER_ENTER)
+ && ereg('\?', $match)) {
+ $title =
+ htmlspecialchars(ereg_replace("\n* *\?(.*)", '\1', $match));
+ $match = ereg_replace("(\n* *\?).*", '\1', $match);
+ } else {
+ $title = '';
+ }
+ return array($match, $state, $title);
+ }
+
+ function render($format, &$renderer, $data) {
+ static $close = '';
+ static $level = 0;
+ static $last_neesting = 0;
+ static $indent = array();
+ static $dlstart = "\n<dl>";
+ static $dlend = "\n</dl>";
+ static $dtstart = "\n<dt>";
+ static $dtend = "</dt>";
+ static $ddstart = "\n<dd>";
+ static $ddend = "</dd>";
+ list($match, $state, $title) = $data;
+ while ($match[0]=="\n") $match=substr($match, 1);
+ $neesting = strlen($match);
+ if ($state==DOKU_LEXER_MATCHED) {
+ if ($last_neesting<$neesting) {
+ $renderer->doc .= $close.$ddstart.$dlstart;
+ $close = '';
+ $indent[++$level] = $neesting;
+ } else if ($last_neesting>$neesting) {
+ $renderer->doc .= $close.$dlend.($level?$ddend:'');
+ $close = '';
+ while ($level && $indent[--$level]>$neesting)
+ $renderer->doc .= $dlend.($level?$ddend:'');
+ }
+ $last_neesting = $neesting;
+ }
+ switch ($state) {
+ case DOKU_LEXER_ENTER: {
+ $last_neesting = $neesting;
+ if ($level>0) $renderer->doc .= $close;
+ for (; $level>0; --$level)
+ $renderer->doc .= $dlend.($level!=1?$ddend:'');
+ $renderer->doc .= $dlstart;
+ if (ereg('\?', $match)) {
+ $renderer->doc .= $dtstart;
+ $close = $dtend;
+ if ($title!='')
+ $renderer->doc .= '<a name="'.$title.'"></a>'.$title;
+ } else if (ereg('!', $match)) {
+ $renderer->doc .= $ddstart;
+ $close = $ddend;
+ } else return false;
+ $indent[++$level] = $neesting;
+ } return true;
+ case DOKU_LEXER_EXIT: {
+ $renderer->doc .= $close;
+ for (; $level>0; --$level)
+ $renderer->doc .= $dlend.($level!=1?$ddend:'');
+ $renderer->doc .= "\n";
+ } return true;
+ case DOKU_LEXER_MATCHED: {
+ if (ereg('\?', $match)) {
+ $renderer->doc .= $close;
+ $renderer->doc .= $dtstart;
+ $close = $dtend;
+ if ($title!='')
+ $renderer->doc .= '<a class="target" name="'
+ .$title.'"></a>'.$title;
+ } else if (ereg('!', $match)) {
+
+ $renderer->doc .= $close;
+ $renderer->doc .= $ddstart;
+ $close = $ddend;
+ } else return false;
+ } return true;
+ case DOKU_LEXER_UNMATCHED: {
+ $renderer->doc .= htmlspecialchars($match);
+ } return true;
+ }
+ return false;
+ }
+ }
+ ?>
+
More information about the Xfce4-commits
mailing list