proc = new Elgg_Ecml_Processor(new Elgg_Ecml_Tokenizer()); elgg_register_plugin_hook_handler('view', 'output/text', 'ecml_process_view'); parent::setUp(); } function testProcess() { $text = '[footnote]I\'m a footnote.[/footnote]Hello [tag bar="bar"], this [tag do="g].'; elgg_register_plugin_hook_handler('prepare:tokens', 'ecml', array($this, 'ecmlFootnote')); elgg_register_plugin_hook_handler('render:tag', 'ecml', array($this, 'ecmlTag1')); $output = $this->proc->process($text, array('foo' => 'bar')); $expected = 'Hello a:3:{s:3:"foo";s:3:"bar";s:7:"keyword";s:3:"tag";s:10:"attributes";a:1:{s:3:"bar";s:3:"bar";}}, this [tag do="g].I\'m a footnote.'; $this->assertEqual($output, $expected); } function testViewSystem() { $text = '[footnote]I\'m a footnote.[/footnote]Hello [br clear=all], this [br inv="alid].'; elgg_register_plugin_hook_handler('prepare:tokens', 'ecml', array($this, 'ecmlFootnote')); elgg_register_plugin_hook_handler('render:br', 'ecml', array($this, 'ecmlBr')); // @todo figure out what to do about views that mangle the ECML :/ $output = elgg_view('output/text', array('value' => $text)); $expected = 'Hello
, this
.I'm a footnote.'; $this->assertEqual($output, $expected); } /** * @param string $hook * @param string $type * @param string $value * @param array $params * @return string */ function ecmlTag1($hook, $type, $value, $params) { return serialize($params); } /** * @param string $hook * @param string $type * @param string $value * @param array $params * @return string */ function ecmlBr($hook, $type, $value, $params) { return '
'; } /** * Example ECML plugin that works on full token set * * @param string $hook * @param string $type * @param Elgg_Ecml_Token[] $value * @param array $params * @return array */ function ecmlFootnote($hook, $type, $value, $params) { $output = array(); $foot = array(); $inElement = false; foreach ($value as $i => $token) { /* @var Elgg_Ecml_Token $token */ if ($inElement) { if ($token->keyword === '/footnote') { $inElement = false; } else { array_push($foot, $token); } } else { if ($token->keyword === 'footnote') { $inElement = true; } else { array_push($output, $token); } } } array_splice($output, count($output), 0, $foot); return $output; } }