Lexer->addEntryPattern('<[P|p][O|o][T|t]\b *[^>]*>(?=.*?<\/[P|p][O|o][T|t]>)', $mode, 'plugin_pot'); } public function postConnect() { $this->Lexer->addExitPattern('<\/[P|p][O|o][T|t]>', 'plugin_pot'); } private $cargo = array(); //set class property to set var https://forum.dokuwiki.org/d/14219-persistent-tag-attributes-solved /** * Handle the match */ public function handle($match, $state, $pos, Doku_Handler $handler) { global $ID; // pot helper $pothelper = plugin_load('helper', 'pot'); switch ($state) { case DOKU_LEXER_ENTER : $try = $match; // lets try, and do some changes inside the unmatched input $try = preg_replace('/(\)/', '$1 $2 | type=text $3', $try);// if we have "" we ad a | type=text $try = preg_replace('/~\s*([a-zA-Z0-9]+)\s*|\|/', '|defaultsettings=$1|', $try); // replace a '@value' to '|defaultsettings=value|' $try = preg_replace('/!/', '|float=right|', $try);// replace a '!' to '|float=right|' $try = preg_replace('/#\s*([a-zA-Z0-9]+)(\s*|\|)/', '|potid=$1_'.uniqid().'|', $try); // replace a '#value' to '|potid=value_stamp|' $try = preg_replace('/@\s*([a-zA-Z0-9]+)(\s*|\|)/', '|potid=$1|', $try); // replace a '@value' to '|potid=value|' preg_match('/\<[P|p][O|o][T|t]\b\s*(.*?)\s*?\>/', $try, $potset); // get the info $potsettings = $potset[1]; //print("
".print_r($potsettings, true)."
"); include 'source/format.php'; // the long staff is written in an other file break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : $potid = $this->cargo['pot']; if (trim($this->cargo[$potid]['settings']['type']) == 'text') { include 'source/text.php'; } else { include 'source/calculate.php'; } break; case DOKU_LEXER_EXIT : break; case DOKU_LEXER_SPECIAL : break; } $mycargo = $this->cargo; //fetch global var return array($state, $pot, $mycargo); } /** * Create output */ public function render($mode, Doku_Renderer $renderer, $data) { if ($mode !== 'xhtml') { return false; } global $INFO; $renderer->info['cache'] = false; list($state, $pot, $mycargo) = $data; switch ($state) { case DOKU_LEXER_ENTER : $potid = $mycargo['pot']; $float = $mycargo[$potid]['settings']['float']; $display = $mycargo[$potid]['settings']['display']; $result = $mycargo[$potid]['output']['result']; if ($result <0) { $color = $mycargo[$potid]['settings']['color-']; } else { $color = $mycargo[$potid]['settings']['color+']; } $renderer->doc .= ""; break; case DOKU_LEXER_MATCHED : break; case DOKU_LEXER_UNMATCHED : $potid = $mycargo['pot']; $width = $mycargo[$potid]['settings']['width']; $decimals = $mycargo[$potid]['settings']['decimals']; $sepdec = $mycargo[$potid]['settings']['sepdec']; $sepmil = $mycargo[$potid]['settings']['sepmil']; $display = ''; $formulaset = $mycargo[$potid]['settings']['formula']; $formula = $mycargo[$potid]['output']['formula']; $result = $mycargo[$potid]['output']['result']; $wherecurrency = strpos($mycargo[$potid]['settings']['currency'],'_'); $currency = preg_replace('/_/','',$mycargo[$potid]['settings']['currency']); $type = $mycargo[$potid]['output']['type']; if ($type == 'formula') { $result = number_format($result,$decimals,$sepdec,$sepmil); } else { $result = $result; } $error = $mycargo[$potid]['output']['error']; $formula = $mycargo[$potid]['output']['formula']; //print("
".print_r($mycargo, true)."
"); if ($wherecurrency == 0) { $renderer->doc .= "".$currency." "; } if ($formulaset == 'true') { $renderer->doc .= $formula." = "; $renderer->doc .= ""; $renderer->doc .= $result; $renderer->doc .= ""; } else { $renderer->doc .= ""; $renderer->doc .= $result; $renderer->doc .= ""; } if ($wherecurrency != 0) { $renderer->doc .= " ".$currency.""; } if (isset($error)) { $renderer->doc .= "  $error $formula"; } break; case DOKU_LEXER_EXIT : $renderer->doc .= "
"; break; case DOKU_LEXER_SPECIAL : break; } return true; } }