diff -r 902822492a68 -r fe660c52c48f includes/wikiengine/Parse/Default/Image.php --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/includes/wikiengine/Parse/Default/Image.php Wed Jun 13 16:07:17 2007 -0400 @@ -0,0 +1,136 @@ + +* +* @license LGPL +* +* @version $Id: Image.php,v 1.5 2005/09/12 11:34:44 toggg Exp $ +* +*/ + +/** +* +* Parses for image placement. +* +* @category Text +* +* @package Text_Wiki +* +* @author Paul M. Jones +* +*/ + +class Text_Wiki_Parse_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 Text_Wiki_Parse_Image(&$obj) + { + $default = $this->conf; + parent::Text_Wiki_Parse($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']) .'#'); + } + + /** + * + * 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); + } +} +?>