--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Mediawiki/Image.php Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,136 @@
+<?php
+
+/**
+*
+* Parses for image placement.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+* @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 <pmjones@php.net>
+*
+*/
+
+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);
+ }
+}
+?>