--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/includes/wikiengine/Parse/Mediawiki/Interwiki.php Wed Jun 13 16:07:17 2007 -0400
@@ -0,0 +1,138 @@
+<?php
+
+/**
+*
+* Parses for interwiki links.
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+* @license LGPL
+*
+* @version $Id: Interwiki.php,v 1.4 2005/02/23 17:38:29 pmjones Exp $
+*
+*/
+
+/**
+*
+* Parses for interwiki links.
+*
+* This class implements a Text_Wiki_Parse to find source text marked as
+* an Interwiki link. See the regex for a detailed explanation of the
+* text matching procedure; e.g., "InterWikiName:PageName".
+*
+* @category Text
+*
+* @package Text_Wiki
+*
+* @author Paul M. Jones <pmjones@php.net>
+*
+*/
+
+class Text_Wiki_Parse_Interwiki extends Text_Wiki_Parse {
+
+ // double-colons wont trip up now
+ var $regex = '([A-Za-z0-9_]+):((?!:)[A-Za-z0-9_\/=&~#.:;-]+)';
+
+
+ /**
+ *
+ * Parser. We override the standard parser so we can
+ * find both described interwiki links and standalone links.
+ *
+ * @access public
+ *
+ * @return void
+ *
+ */
+
+ function parse()
+ {
+ // described interwiki links
+ $tmp_regex = '/\[' . $this->regex . ' (.+?)\]/';
+ $this->wiki->source = preg_replace_callback(
+ $tmp_regex,
+ array(&$this, 'processDescr'),
+ $this->wiki->source
+ );
+
+ // standalone interwiki links
+ $tmp_regex = '/' . $this->regex . '/';
+ $this->wiki->source = preg_replace_callback(
+ $tmp_regex,
+ array(&$this, 'process'),
+ $this->wiki->source
+ );
+
+ }
+
+
+ /**
+ *
+ * Generates a replacement for the matched standalone interwiki text.
+ * Token options are:
+ *
+ * 'site' => The key name for the Text_Wiki interwiki array map,
+ * usually the name of the interwiki site.
+ *
+ * 'page' => The page on the target interwiki to link to.
+ *
+ * 'text' => The text to display as the link.
+ *
+ * @access public
+ *
+ * @param array &$matches The array of matches from parse().
+ *
+ * @return A delimited token to be used as a placeholder in
+ * the source text, plus any text priot to the match.
+ *
+ */
+
+ function process(&$matches)
+ {
+ $options = array(
+ 'site' => $matches[1],
+ 'page' => $matches[2],
+ 'text' => $matches[0]
+ );
+
+ return $this->wiki->addToken($this->rule, $options);
+ }
+
+
+ /**
+ *
+ * Generates a replacement for described interwiki links. Token
+ * options are:
+ *
+ * 'site' => The key name for the Text_Wiki interwiki array map,
+ * usually the name of the interwiki site.
+ *
+ * 'page' => The page on the target interwiki to link to.
+ *
+ * 'text' => The text to display as the link.
+ *
+ * @access public
+ *
+ * @param array &$matches The array of matches from parse().
+ *
+ * @return A delimited token to be used as a placeholder in
+ * the source text, plus any text priot to the match.
+ *
+ */
+
+ function processDescr(&$matches)
+ {
+ $options = array(
+ 'site' => $matches[1],
+ 'page' => $matches[2],
+ 'text' => $matches[3]
+ );
+
+ return $this->wiki->addToken($this->rule, $options);
+ }
+}
+?>
\ No newline at end of file