diff -r f0431eb8161e -r 98c052fc3337 includes/wikiengine/Parse/Default/Url.php --- a/includes/wikiengine/Parse/Default/Url.php Sun Jun 21 00:16:21 2009 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,281 +0,0 @@ - -* -* @license LGPL -* -* @version $Id: Url.php,v 1.3 2005/02/23 17:38:29 pmjones Exp $ -* -*/ - -/** -* -* Parse for URLS in the source text. -* -* Various URL markings are supported: inline (the URL by itself), -* numbered or footnote reference (where the URL is enclosed in square -* brackets), and named reference (where the URL is enclosed in square -* brackets and has a name included inside the brackets). E.g.: -* -* inline -- http://example.com -* numbered -- [http://example.com] -* described -- [http://example.com Example Description] -* -* When rendering a URL token, this will convert URLs pointing to a .gif, -* .jpg, or .png image into an inline tag (for the 'xhtml' -* format). -* -* Token options are: -* -* 'type' => ['inline'|'footnote'|'descr'] the type of URL -* -* 'href' => the URL link href portion -* -* 'text' => the displayed text of the URL link -* -* @category Text -* -* @package Text_Wiki -* -* @author Paul M. Jones -* -*/ - -class Text_Wiki_Parse_Url extends Text_Wiki_Parse { - - - /** - * - * Keeps a running count of numbered-reference URLs. - * - * @access public - * - * @var int - * - */ - - var $footnoteCount = 0; - - - /** - * - * URL schemes recognized by this rule. - * - * @access public - * - * @var array - * - */ - - var $conf = array( - 'schemes' => array( - 'http://', - 'https://', - 'ftp://', - 'gopher://', - 'news://', - 'mailto:' - ) - ); - - - /** - * - * Constructor. - * - * We override the constructor so we can comment the regex nicely. - * - * @access public - * - */ - - function Text_Wiki_Parse_Url(&$obj) - { - parent::Text_Wiki_Parse($obj); - - // convert the list of recognized schemes to a regex-safe string, - // where the pattern delim is a slash - $tmp = array(); - $list = $this->getConf('schemes', array()); - foreach ($list as $val) { - $tmp[] = preg_quote($val, '/'); - } - $schemes = implode('|', $tmp); - - // build the regex - $this->regex = - "($schemes)" . // allowed schemes - "(" . // start pattern - "[^ \\/".'"'."\'{$this->wiki->delim}]*\\/" . // no spaces, backslashes, slashes, double-quotes, single quotes, or delimiters; - ")*" . // end pattern - "[^ \\t\\n\\/".'"'."\'{$this->wiki->delim}]*" . - "[A-Za-z0-9\\/?=&~_]"; - } - - - /** - * - * Find three different kinds of URLs in the source text. - * - * @access public - * - */ - - function parse() - { - // ------------------------------------------------------------- - // - // Described-reference (named) URLs. - // - - // the regular expression for this kind of URL - $tmp_regex = '/\[(' . $this->regex . ') ([^\]]+)\]/'; - - // use a custom callback processing method to generate - // the replacement text for matches. - $this->wiki->source = preg_replace_callback( - $tmp_regex, - array(&$this, 'processDescr'), - $this->wiki->source - ); - - - // ------------------------------------------------------------- - // - // Numbered-reference (footnote-style) URLs. - // - - // the regular expression for this kind of URL - $tmp_regex = '/\[(' . $this->regex . ')\]/U'; - - // use a custom callback processing method to generate - // the replacement text for matches. - $this->wiki->source = preg_replace_callback( - $tmp_regex, - array(&$this, 'processFootnote'), - $this->wiki->source - ); - - - // ------------------------------------------------------------- - // - // Normal inline URLs. - // - - // the regular expression for this kind of URL - - $tmp_regex = '/(^|[^A-Za-z])(' . $this->regex . ')(.*?)/'; - - // use the standard callback for inline URLs - $this->wiki->source = preg_replace_callback( - $tmp_regex, - array(&$this, 'process'), - $this->wiki->source - ); - } - - - /** - * - * Process inline URLs. - * - * @param array &$matches - * - * @param array $matches An array of matches from the parse() method - * as generated by preg_replace_callback. $matches[0] is the full - * matched string, $matches[1] is the first matched pattern, - * $matches[2] is the second matched pattern, and so on. - * - * @return string The processed text replacement. - * - */ - - function process(&$matches) - { - // set options - $options = array( - 'type' => 'inline', - 'href' => $matches[2], - 'text' => $matches[2] - ); - - // tokenize - return $matches[1] . $this->wiki->addToken($this->rule, $options) . $matches[5]; - } - - - /** - * - * Process numbered (footnote) URLs. - * - * Token options are: - * @param array &$matches - * - * @param array $matches An array of matches from the parse() method - * as generated by preg_replace_callback. $matches[0] is the full - * matched string, $matches[1] is the first matched pattern, - * $matches[2] is the second matched pattern, and so on. - * - * @return string The processed text replacement. - * - */ - - function processFootnote(&$matches) - { - // keep a running count for footnotes - $this->footnoteCount++; - - // set options - $options = array( - 'type' => 'footnote', - 'href' => $matches[1], - 'text' => $this->footnoteCount - ); - - // tokenize - return $this->wiki->addToken($this->rule, $options); - } - - - /** - * - * Process described-reference (named-reference) URLs. - * - * Token options are: - * 'type' => ['inline'|'footnote'|'descr'] the type of URL - * 'href' => the URL link href portion - * 'text' => the displayed text of the URL link - * - * @param array &$matches - * - * @param array $matches An array of matches from the parse() method - * as generated by preg_replace_callback. $matches[0] is the full - * matched string, $matches[1] is the first matched pattern, - * $matches[2] is the second matched pattern, and so on. - * - * @return string The processed text replacement. - * - */ - - function processDescr(&$matches) - { - // set options - $options = array( - 'type' => 'descr', - 'href' => $matches[1], - 'text' => $matches[4] - ); - - // tokenize - return $this->wiki->addToken($this->rule, $options); - } -} -?> \ No newline at end of file