%PDF- %PDF-
Direktori : /www/varak.net/www.varak.net/texy/modules/ |
Current File : //www/varak.net/www.varak.net/texy/modules/TexyScriptModule.php |
<?php /** * Texy! - web text markup-language * -------------------------------- * * Copyright (c) 2004, 2008 David Grudl (http://davidgrudl.com) * * This source file is subject to the GNU GPL license that is bundled * with this package in the file license.txt. * * For more information please see http://texy.info * * @copyright Copyright (c) 2004, 2008 David Grudl * @license GNU GENERAL PUBLIC LICENSE version 2 or 3 * @link http://texy.info * @package Texy * @version $Id: TexyScriptModule.php 214 2008-07-17 03:50:08Z David Grudl $ */ /** * Scripts module. * * @author David Grudl * @copyright Copyright (c) 2004, 2008 David Grudl * @package Texy */ final class TexyScriptModule extends TexyModule { /** * @var callback|object script elements handler * function myFunc($parser, $cmd, $args, $raw) */ public $handler; /** @var string arguments separator */ public $separator = ','; public function __construct($texy) { $this->texy = $texy; $texy->addHandler('script', array($this, 'solve')); $texy->registerLinePattern( array($this, 'pattern'), '#\{\{([^'.TEXY_MARK.']+)\}\}()#U', 'script' ); } /** * Callback for: {{...}}. * * @param TexyLineParser * @param array regexp matches * @param string pattern name * @return TexyHtml|string|FALSE */ public function pattern($parser, $matches) { list(, $mContent) = $matches; // [1] => ... $cmd = trim($mContent); if ($cmd === '') return FALSE; $args = $raw = NULL; // function(arg, arg, ...) or function: arg, arg if (preg_match('#^([a-z_][a-z0-9_-]*)\s*(?:\(([^()]*)\)|:(.*))$#iu', $cmd, $matches)) { $cmd = $matches[1]; $raw = isset($matches[3]) ? trim($matches[3]) : trim($matches[2]); if ($raw === '') $args = array(); else $args = preg_split('#\s*' . preg_quote($this->separator, '#') . '\s*#u', $raw); } // Texy 1.x way if ($this->handler) { if (is_callable(array($this->handler, $cmd))) { array_unshift($args, $parser); return call_user_func_array(array($this->handler, $cmd), $args); } if (is_callable($this->handler)) return call_user_func_array($this->handler, array($parser, $cmd, $args, $raw)); } // Texy 2 way return $this->texy->invokeAroundHandlers('script', $parser, array($cmd, $args, $raw)); } /** * Finish invocation. * * @param TexyHandlerInvocation handler invocation * @param string command * @param array arguments * @param string arguments in raw format * @return TexyHtml|string|FALSE */ public function solve($invocation, $cmd, $args, $raw) { if ($cmd === 'texy') { if (!$args) return FALSE; switch ($args[0]) { case 'nofollow': $this->texy->linkModule->forceNoFollow = TRUE; break; } return ''; } else { return FALSE; } } }