includes/wikiengine/Parse/Mediawiki/Image.php
changeset 1 fe660c52c48f
--- /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);
+    }
+}
+?>