, LarsDW223 */ // must be run within Dokuwiki if(!defined('DOKU_INC')) die(); if(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); require_once(DOKU_PLUGIN.'syntax.php'); class syntax_plugin_fields extends DokuWiki_Syntax_Plugin { /** * Constructor. Loads helper plugin. */ public function __construct() { $this->helper = $this->loadHelper('fields'); } /** * What kind of syntax are we? */ function getType(){ return 'substition'; } /** * Where to sort in? */ function getSort(){ return 319; // Before image detection, which uses {{...}} and is 320 } /** * Connect pattern to lexer */ function connectTo($mode) { $this->Lexer->addSpecialPattern('{{fields>.+?}}',$mode,'plugin_fields'); } /** * Handle the match */ public function handle($match, $state, $pos, Doku_Handler $handler) { $match = substr($match,9,-2); //strip markup $extinfo = explode('=',$match); $field_name = $extinfo[0]; if (count($extinfo) < 2) { // no value $field_value = ''; } elseif (count($extinfo) == 2) { $field_value = $extinfo[1]; } else { // value may contain equal signs $field_value = implode(array_slice($extinfo,1), '='); } return array($field_name, $field_value); } /** * Create output */ public function render($format, Doku_Renderer $renderer, $data) { global $ID; list($field_name, $field_value) = $data; if ($field_value == '') { // no value -> get the field if ($format == 'xhtml' && isset($renderer->fields) && array_key_exists($field_name, $renderer->fields)) { $renderer->doc .= $renderer->fields[$field_name]; return true; } elseif ($format == 'odt') { $renderer->doc .= $this->helper->ODTDisplayUserField($renderer, $field_name); return true; } } else { // set field if ($format == 'xhtml') { if (!isset($renderer->fields)) { $renderer->fields = array(); } $renderer->fields[$field_name] = htmlentities($field_value); return true; } elseif ($format == 'odt') { $this->helper->ODTSetUserField($renderer, $field_name, $renderer->_xmlEntities($field_value)); return true; } } return false; } function _fieldsODTFilterUserFieldName($name) { // keep only allowed chars in the name return preg_replace('/[^a-zA-Z0-9_.]/', '', $name); } } //Setup VIM: ex: et ts=4 fileencoding=utf-8 :