* * @license LGPL * * @version $Id$ * */ /** * * Parses for image placement. * * @category Text * * @package Text_Wiki * * @author Paul M. Jones * */ class Text_Wiki_Parse_Default_Image extends Text_Wiki_Parse { /** * URL schemes recognized by this rule. * * @access public * @var array */ var $conf = array( "schemes" => "http|https|ftp|gopher|news", "host_regexp" => '(?:[^.\s/"\'<\\\#delim#\ca-\cz]+\.)*[a-z](?:[-a-z0-9]*[a-z0-9])?\.?', "path_regexp" => '(?:/[^\s"<\\\#delim#\ca-\cz]*)?' ); /** * * The regular expression used to find source text matching this * rule. * * @access public * * @var string * */ var $regex = '/(\[\[image\s+)(.+?)(\]\])/i'; /** * The regular expressions used to check ecternal urls * * @access public * @var string * @see parse() */ var $url = ""; /** * Constructor. * We override the constructor to build up the url regex from config * * @param object &$obj the base conversion handler * @return The parser object * @access public */ function __construct(&$obj) { $default = $this->conf; parent::__construct($obj); // convert the list of recognized schemes to a regex OR, $schemes = $this->getConf("schemes", $default["schemes"]); $this->url = str_replace( "#delim#", $this->wiki->delim, "#(?:" . (is_array($schemes) ? implode("|", $schemes) : $schemes) . ")://" . $this->getConf("host_regexp", $default["host_regexp"]) . $this->getConf("path_regexp", $default["path_regexp"]) ."#"); } /** * Constructor. * We override the constructor to build up the url regex from config * * @param object &$obj the base conversion handler * @return The parser object * @access public */ function Text_Wiki_Parse_Default_Image(&$obj) { self::__construct($obj); } /** * * Generates a token entry for the matched text. Token options are: * * 'src' => The image source, typically a relative path name. * * 'opts' => Any macro options following the source. * * @access public * * @param array &$matches The array of matches from parse(). * * @return A delimited token number to be used as a placeholder in * the source text. * */ function process(&$matches) { $pos = strpos($matches[2], " "); if ($pos === false) { $options = array( "src" => $matches[2], "attr" => array()); } else { // everything after the space is attribute arguments $options = array( "src" => substr($matches[2], 0, $pos), "attr" => $this->getAttrs(substr($matches[2], $pos+1)) ); // check the scheme case of external link if (array_key_exists("link", $options["attr"])) { // external url ? if (($pos = strpos($options["attr"]["link"], "://")) !== false) { if (!preg_match($this->url, $options["attr"]["link"])) { return $matches[0]; } } elseif (in_array("Wikilink", $this->wiki->disable)) { return $matches[0]; // Wikilink disabled } } } return $this->wiki->addToken($this->rule, $options); } }