mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Intermediate step to get bbcode working again
git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/branches/2.1.0@41617 467b73ca-7a2a-4603-9d3b-597d59a354a9
This commit is contained in:
parent
0631d4e78d
commit
d7f2aba95a
@ -1,10 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once 'HTML/BBCodeParser.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Dummy class that filters need to extend from.
|
|
||||||
*/
|
|
||||||
class HTML_BBCodeParser_Filter extends HTML_BBCodeParser
|
|
||||||
{
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,71 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Basic.php,v 1.6 2007/07/02 16:54:25 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HTML_BBCodeParser_Filter_Basic extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array( 'b' => array( 'htmlopen' => 'strong',
|
|
||||||
'htmlclose' => 'strong',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'i' => array( 'htmlopen' => 'em',
|
|
||||||
'htmlclose' => 'em',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'u' => array( 'htmlopen' => 'span style="text-decoration:underline;"',
|
|
||||||
'htmlclose' => 'span',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
's' => array( 'htmlopen' => 'del',
|
|
||||||
'htmlclose' => 'del',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'sub' => array( 'htmlopen' => 'sub',
|
|
||||||
'htmlclose' => 'sub',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'sup' => array( 'htmlopen' => 'sup',
|
|
||||||
'htmlclose' => 'sup',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array())
|
|
||||||
);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
@ -1,85 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Email.php,v 1.5 2007/07/02 16:54:25 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HTML_BBCodeParser_Filter_Email extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array( 'email' => array( 'htmlopen' => 'a',
|
|
||||||
'htmlclose' => 'a',
|
|
||||||
'allowed' => 'none^img',
|
|
||||||
'attributes'=> array('email' =>'href=%2$smailto:%1$s%2$s')
|
|
||||||
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Executes statements before the actual array building starts
|
|
||||||
*
|
|
||||||
* This method should be overwritten in a filter if you want to do
|
|
||||||
* something before the parsing process starts. This can be useful to
|
|
||||||
* allow certain short alternative tags which then can be converted into
|
|
||||||
* proper tags with preg_replace() calls.
|
|
||||||
* The main class walks through all the filters and and calls this
|
|
||||||
* method if it exists. The filters should modify their private $_text
|
|
||||||
* variable.
|
|
||||||
*
|
|
||||||
* @return none
|
|
||||||
* @access private
|
|
||||||
* @see $_text
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
function _preparse()
|
|
||||||
{
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser','_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
$oe = $options['open_esc'];
|
|
||||||
$ce = $options['close_esc'];
|
|
||||||
$pattern = array( "!(^|\s)([-a-z0-9_.]+@[-a-z0-9.]+\.[a-z]{2,4})!i",
|
|
||||||
"!".$oe."email(".$ce."|\s.*".$ce.")(.*)".$oe."/email".$ce."!Ui");
|
|
||||||
$replace = array( "\\1".$o."email=\\2".$c."\\2".$o."/email".$c,
|
|
||||||
$o."email=\\2\\1\\2".$o."/email".$c);
|
|
||||||
$this->_preparsed = preg_replace($pattern, $replace, $this->_text);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
@ -1,97 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Extended.php,v 1.3 2007/07/02 16:54:25 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class HTML_BBCodeParser_Filter_Extended extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array(
|
|
||||||
'color' => array( 'htmlopen' => 'span',
|
|
||||||
'htmlclose' => 'span',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array('color' =>'style=%2$scolor:%1$s%2$s')),
|
|
||||||
'size' => array( 'htmlopen' => 'span',
|
|
||||||
'htmlclose' => 'span',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array('size' =>'style=%2$sfont-size:%1$spt%2$s')),
|
|
||||||
'font' => array( 'htmlopen' => 'span',
|
|
||||||
'htmlclose' => 'span',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array('font' =>'style=%2$sfont-family:%1$s%2$s')),
|
|
||||||
'align' => array( 'htmlopen' => 'div',
|
|
||||||
'htmlclose' => 'div',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array('align' =>'style=%2$stext-align:%1$s%2$s')),
|
|
||||||
'quote' => array('htmlopen' => 'q',
|
|
||||||
'htmlclose' => 'q',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array('quote' =>'cite=%2$s%1$s%2$s')),
|
|
||||||
'code' => array('htmlopen' => 'pre',
|
|
||||||
'htmlclose' => 'pre',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h1' => array('htmlopen' => 'h1',
|
|
||||||
'htmlclose' => 'h1',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h2' => array('htmlopen' => 'h2',
|
|
||||||
'htmlclose' => 'h2',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h3' => array('htmlopen' => 'h3',
|
|
||||||
'htmlclose' => 'h3',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h4' => array('htmlopen' => 'h4',
|
|
||||||
'htmlclose' => 'h4',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h5' => array('htmlopen' => 'h5',
|
|
||||||
'htmlclose' => 'h5',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array()),
|
|
||||||
'h6' => array('htmlopen' => 'h6',
|
|
||||||
'htmlclose' => 'h6',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'attributes'=> array())
|
|
||||||
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
?>
|
|
@ -1,79 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Images.php,v 1.8 2007/07/02 17:44:47 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
class HTML_BBCodeParser_Filter_Images extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array(
|
|
||||||
'img' => array(
|
|
||||||
'htmlopen' => 'img',
|
|
||||||
'htmlclose' => '',
|
|
||||||
'allowed' => 'none',
|
|
||||||
'attributes'=> array(
|
|
||||||
'img' => 'src=%2$s%1$s%2$s',
|
|
||||||
'w' => 'width=%2$s%1$d%2$s',
|
|
||||||
'h' => 'height=%2$s%1$d%2$s',
|
|
||||||
'alt' => 'alt=%2$s%1$s%2$s',
|
|
||||||
)
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Executes statements before the actual array building starts
|
|
||||||
*
|
|
||||||
* This method should be overwritten in a filter if you want to do
|
|
||||||
* something before the parsing process starts. This can be useful to
|
|
||||||
* allow certain short alternative tags which then can be converted into
|
|
||||||
* proper tags with preg_replace() calls.
|
|
||||||
* The main class walks through all the filters and and calls this
|
|
||||||
* method if it exists. The filters should modify their private $_text
|
|
||||||
* variable.
|
|
||||||
*
|
|
||||||
* @return none
|
|
||||||
* @access private
|
|
||||||
* @see $_text
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
function _preparse()
|
|
||||||
{
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser','_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
$oe = $options['open_esc'];
|
|
||||||
$ce = $options['close_esc'];
|
|
||||||
$this->_preparsed = preg_replace(
|
|
||||||
"!".$oe."img(\s?.*)".$ce."(.*)".$oe."/img".$ce."!Ui",
|
|
||||||
$o."img=\"\$2\"\$1".$c.$o."/img".$c,
|
|
||||||
$this->_text);
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,200 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Links.php,v 1.12 2007/07/02 18:26:17 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class HTML_BBCodeParser_Filter_Links extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* List of allowed schemes
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_allowedSchemes = array('http', 'https', 'ftp');
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Default scheme
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var string
|
|
||||||
*/
|
|
||||||
var $_defaultScheme = 'http';
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array(
|
|
||||||
'url' => array(
|
|
||||||
'htmlopen' => 'a',
|
|
||||||
'htmlclose' => 'a',
|
|
||||||
'allowed' => 'none^img',
|
|
||||||
'attributes'=> array('url' => 'href=%2$s%1$s%2$s')
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Executes statements before the actual array building starts
|
|
||||||
*
|
|
||||||
* This method should be overwritten in a filter if you want to do
|
|
||||||
* something before the parsing process starts. This can be useful to
|
|
||||||
* allow certain short alternative tags which then can be converted into
|
|
||||||
* proper tags with preg_replace() calls.
|
|
||||||
* The main class walks through all the filters and and calls this
|
|
||||||
* method if it exists. The filters should modify their private $_text
|
|
||||||
* variable.
|
|
||||||
*
|
|
||||||
* @return none
|
|
||||||
* @access private
|
|
||||||
* @see $_text
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
* @author Seth Price <seth@pricepages.org>
|
|
||||||
*/
|
|
||||||
function _preparse()
|
|
||||||
{
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser', '_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
$oe = $options['open_esc'];
|
|
||||||
$ce = $options['close_esc'];
|
|
||||||
|
|
||||||
$schemes = implode('|', $this->_allowedSchemes);
|
|
||||||
|
|
||||||
$pattern = array( "/(?<![\"'=".$ce."\/])(".$oe."[^".$ce."]*".$ce.")?(((".$schemes."):\/\/|www)[@-a-z0-9.]+\.[a-z]{2,4}[^\s()\[\]]*)/i",
|
|
||||||
"!".$oe."url(".$ce."|\s.*".$ce.")(.*)".$oe."/url".$ce."!iU",
|
|
||||||
"!".$oe."url=((([a-z]*:(//)?)|www)[@-a-z0-9.]+)([^\s\[\]]*)".$ce."(.*)".$oe."/url".$ce."!i");
|
|
||||||
|
|
||||||
$pp = preg_replace_callback($pattern[0], array($this, 'smarterPPLinkExpand'), $this->_text);
|
|
||||||
$pp = preg_replace($pattern[1], $o."url=\$2\$1\$2".$o."/url".$c, $pp);
|
|
||||||
$this->_preparsed = preg_replace_callback($pattern[2], array($this, 'smarterPPLink'), $pp);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Intelligently expand a URL into a link
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
* @access private
|
|
||||||
* @author Seth Price <seth@pricepages.org>
|
|
||||||
* @author Lorenzo Alberton <l.alberton@quipo.it>
|
|
||||||
*/
|
|
||||||
function smarterPPLinkExpand($matches)
|
|
||||||
{
|
|
||||||
//echo '<hr><pre>';var_dump($matches);echo '</pre><hr>';
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser','_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
|
|
||||||
//If we have an intro tag that is [url], then skip this match
|
|
||||||
if ($matches[1] == $o.'url'.$c) {
|
|
||||||
return $matches[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
$punctuation = '.,;:'; // Links can't end with these chars
|
|
||||||
$trailing = '';
|
|
||||||
// Knock off ending punctuation
|
|
||||||
$last = substr($matches[2], -1);
|
|
||||||
while (strpos($punctuation, $last) !== false) {
|
|
||||||
// Last character is punctuation - remove it from the url
|
|
||||||
$trailing = $last.$trailing;
|
|
||||||
$matches[2] = substr($matches[2], 0, -1);
|
|
||||||
$last = substr($matches[2], -1);
|
|
||||||
}
|
|
||||||
|
|
||||||
$off = strpos($matches[2], ':');
|
|
||||||
|
|
||||||
//Is a ":" (therefore a scheme) defined?
|
|
||||||
if ($off === false) {
|
|
||||||
/*
|
|
||||||
* Create a link with the default scheme of http. Notice that the
|
|
||||||
* text that is viewable to the user is unchanged, but the link
|
|
||||||
* itself contains the "http://".
|
|
||||||
*/
|
|
||||||
return $matches[1].$o.'url='.$this->_defaultScheme.'://'.$matches[2].$c.$matches[2].$o.'/url'.$c.$trailing;
|
|
||||||
}
|
|
||||||
|
|
||||||
$scheme = substr($matches[2], 0, $off);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* If protocol is in the approved list than allow it. Note that this
|
|
||||||
* check isn't really needed, but the created link will just be deleted
|
|
||||||
* later in smarterPPLink() if we create it now and it isn't on the
|
|
||||||
* scheme list.
|
|
||||||
*/
|
|
||||||
if (in_array($scheme, $this->_allowedSchemes)) {
|
|
||||||
return $matches[1].$o.'url'.$c.$matches[2].$o.'/url'.$c.$trailing;
|
|
||||||
}
|
|
||||||
|
|
||||||
return $matches[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Finish preparsing URL to clean it up
|
|
||||||
*
|
|
||||||
* @return string
|
|
||||||
* @access private
|
|
||||||
* @author Seth Price <seth@pricepages.org>
|
|
||||||
*/
|
|
||||||
function smarterPPLink($matches)
|
|
||||||
{
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser','_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
|
|
||||||
$urlServ = $matches[1];
|
|
||||||
$path = $matches[5];
|
|
||||||
|
|
||||||
$off = strpos($urlServ, ':');
|
|
||||||
|
|
||||||
if ($off === false) {
|
|
||||||
//Default to http
|
|
||||||
$urlServ = $this->_defaultScheme.'://'.$urlServ;
|
|
||||||
$off = strpos($urlServ, ':');
|
|
||||||
}
|
|
||||||
|
|
||||||
//Add trailing slash if missing (to create a valid URL)
|
|
||||||
if (!$path) {
|
|
||||||
$path = '/';
|
|
||||||
}
|
|
||||||
|
|
||||||
$protocol = substr($urlServ, 0, $off);
|
|
||||||
|
|
||||||
if (in_array($protocol, $this->_allowedSchemes)) {
|
|
||||||
//If protocol is in the approved list than allow it
|
|
||||||
return $o.'url='.$urlServ.$path.$c.$matches[6].$o.'/url'.$c;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Else remove url tag
|
|
||||||
return $matches[6];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,108 +0,0 @@
|
|||||||
<?php
|
|
||||||
/* vim: set expandtab tabstop=4 shiftwidth=4: */
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | PHP Version 4 |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Copyright (c) 1997-2003 The PHP Group |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | This source file is subject to version 2.02 of the PHP license, |
|
|
||||||
// | that is bundled with this package in the file LICENSE, and is |
|
|
||||||
// | available at through the world-wide-web at |
|
|
||||||
// | http://www.php.net/license/2_02.txt. |
|
|
||||||
// | If you did not receive a copy of the PHP license and are unable to |
|
|
||||||
// | obtain it through the world-wide-web, please send a note to |
|
|
||||||
// | license@php.net so we can mail you a copy immediately. |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
// | Author: Stijn de Reede <sjr@gmx.co.uk> |
|
|
||||||
// +----------------------------------------------------------------------+
|
|
||||||
//
|
|
||||||
// $Id: Lists.php,v 1.5 2007/07/02 16:54:25 cweiske Exp $
|
|
||||||
//
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @package HTML_BBCodeParser
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>
|
|
||||||
*/
|
|
||||||
|
|
||||||
require_once 'HTML/BBCodeParser/Filter.php';
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
class HTML_BBCodeParser_Filter_Lists extends HTML_BBCodeParser_Filter
|
|
||||||
{
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An array of tags parsed by the engine
|
|
||||||
*
|
|
||||||
* @access private
|
|
||||||
* @var array
|
|
||||||
*/
|
|
||||||
var $_definedTags = array( 'list' => array( 'htmlopen' => 'ol',
|
|
||||||
'htmlclose' => 'ol',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'child' => 'none^li',
|
|
||||||
'attributes'=> array('list' => 'style=%2$slist-style-type:%1$s;%2$s')
|
|
||||||
),
|
|
||||||
'ulist' => array( 'htmlopen' => 'ul',
|
|
||||||
'htmlclose' => 'ul',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'child' => 'none^li',
|
|
||||||
'attributes'=> array('list' => 'style=%2$slist-style-type:%1$s;%2$s')
|
|
||||||
),
|
|
||||||
'li' => array( 'htmlopen' => 'li',
|
|
||||||
'htmlclose' => 'li',
|
|
||||||
'allowed' => 'all',
|
|
||||||
'parent' => 'none^ulist,list',
|
|
||||||
'attributes'=> array()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Executes statements before the actual array building starts
|
|
||||||
*
|
|
||||||
* This method should be overwritten in a filter if you want to do
|
|
||||||
* something before the parsing process starts. This can be useful to
|
|
||||||
* allow certain short alternative tags which then can be converted into
|
|
||||||
* proper tags with preg_replace() calls.
|
|
||||||
* The main class walks through all the filters and and calls this
|
|
||||||
* method if it exists. The filters should modify their private $_text
|
|
||||||
* variable.
|
|
||||||
*
|
|
||||||
* @return none
|
|
||||||
* @access private
|
|
||||||
* @see $_text
|
|
||||||
* @author Stijn de Reede <sjr@gmx.co.uk>, Seth Price <seth@pricepages.org>
|
|
||||||
*/
|
|
||||||
function _preparse()
|
|
||||||
{
|
|
||||||
$options = HTML_BBCodeParser::getStaticProperty('HTML_BBCodeParser','_options');
|
|
||||||
$o = $options['open'];
|
|
||||||
$c = $options['close'];
|
|
||||||
$oe = $options['open_esc'];
|
|
||||||
$ce = $options['close_esc'];
|
|
||||||
|
|
||||||
$pattern = array( "!".$oe."\*".$ce."!",
|
|
||||||
"!".$oe."(u?)list=(?-i:A)(\s*[^".$ce."]*)".$ce."!i",
|
|
||||||
"!".$oe."(u?)list=(?-i:a)(\s*[^".$ce."]*)".$ce."!i",
|
|
||||||
"!".$oe."(u?)list=(?-i:I)(\s*[^".$ce."]*)".$ce."!i",
|
|
||||||
"!".$oe."(u?)list=(?-i:i)(\s*[^".$ce."]*)".$ce."!i",
|
|
||||||
"!".$oe."(u?)list=(?-i:1)(\s*[^".$ce."]*)".$ce."!i",
|
|
||||||
"!".$oe."(u?)list([^".$ce."]*)".$ce."!i");
|
|
||||||
|
|
||||||
$replace = array( $o."li".$c,
|
|
||||||
$o."\$1list=upper-alpha\$2".$c,
|
|
||||||
$o."\$1list=lower-alpha\$2".$c,
|
|
||||||
$o."\$1list=upper-roman\$2".$c,
|
|
||||||
$o."\$1list=lower-roman\$2".$c,
|
|
||||||
$o."\$1list=decimal\$2".$c,
|
|
||||||
$o."\$1list\$2".$c );
|
|
||||||
|
|
||||||
$this->_preparsed = preg_replace($pattern, $replace, $this->_text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
?>
|
|
@ -1,36 +0,0 @@
|
|||||||
<?php
|
|
||||||
if (!defined('PHPUnit_MAIN_METHOD')) {
|
|
||||||
define('PHPUnit_MAIN_METHOD', 'AllTests::main');
|
|
||||||
chdir(dirname(__FILE__) . '/../');
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!defined('PHPUnit_INSIDE_OWN_TESTSUITE')) {
|
|
||||||
define('PHPUnit_INSIDE_OWN_TESTSUITE', TRUE);
|
|
||||||
}
|
|
||||||
require_once 'PHPUnit/Framework/TestSuite.php';
|
|
||||||
require_once 'PHPUnit/TextUI/TestRunner.php';
|
|
||||||
|
|
||||||
|
|
||||||
require_once 'HTML_BBCodeParserTest.php';
|
|
||||||
|
|
||||||
|
|
||||||
class AllTests
|
|
||||||
{
|
|
||||||
public static function main()
|
|
||||||
{
|
|
||||||
|
|
||||||
PHPUnit_TextUI_TestRunner::run(self::suite());
|
|
||||||
}
|
|
||||||
|
|
||||||
public static function suite()
|
|
||||||
{
|
|
||||||
$suite = new PHPUnit_Framework_TestSuite('HTML_BBCodeParserTest');
|
|
||||||
|
|
||||||
return $suite;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PHPUnit_MAIN_METHOD == 'AllTests::main') {
|
|
||||||
AllTests::main();
|
|
||||||
}
|
|
||||||
?>
|
|
@ -1,244 +0,0 @@
|
|||||||
<?php
|
|
||||||
require_once 'PHPUnit.php';
|
|
||||||
require_once 'HTML/BBCodeParser.php';
|
|
||||||
|
|
||||||
class HTML_BBCodeParserTest extends PHPUnit_Framework_TestCase
|
|
||||||
{
|
|
||||||
function testFilters()
|
|
||||||
{
|
|
||||||
$bbc = new HTML_BBCodeParser(array('filters' => ''));
|
|
||||||
$bbc->addFilter('Basic');
|
|
||||||
$this->basicBBCode($bbc, 'qparse');
|
|
||||||
$bbc->removeFilter('Basic');
|
|
||||||
$this->assertEquals('[b]txt[/b]', $bbc->qparse('[b]txt[/b]'), 'Basic filters have been removed.');
|
|
||||||
$bbc->addFilters('Basic,Email');
|
|
||||||
$this->basicBBCode($bbc, 'qparse');
|
|
||||||
$this->emailBBCode($bbc, 'qparse');
|
|
||||||
}
|
|
||||||
|
|
||||||
function testQparse()
|
|
||||||
{
|
|
||||||
$bbc = new HTML_BBCodeParser(array('filters' => 'Basic,Email,Extended,Images,Links,Lists'));
|
|
||||||
$this->basicBBCode($bbc, 'qparse');
|
|
||||||
$this->listBBCode($bbc, 'qparse');
|
|
||||||
$this->linkBBCode($bbc, 'qparse');
|
|
||||||
$this->extBBCode($bbc, 'qparse');
|
|
||||||
$this->imgBBCode($bbc, 'qparse');
|
|
||||||
$this->emailBBCode($bbc, 'qparse');
|
|
||||||
}
|
|
||||||
|
|
||||||
function emailBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals('<a href="mailto:guest@anonymous.org">guest@anonymous.org</a>', $bbc->$funcNam('guest@anonymous.org'));
|
|
||||||
$this->assertEquals('<a href="mailto:guest@anonymous.org">mail me</a>', $bbc->$funcNam('[email=guest@anonymous.org]mail me[/email]'));
|
|
||||||
$this->assertEquals('<a href="mailto:guest@anonymous.org">guest@anonymous.org</a>', $bbc->$funcNam('[email]guest@anonymous.org[/email]'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function imgBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals('<img src="/images/Enthalpy Wheel.png" width="100" height="99" alt="Enthalpy Wheel" />', $bbc->$funcNam('[img w=100 h=99 alt=Enthalpy Wheel]/images/Enthalpy Wheel.png[/img]'));
|
|
||||||
$this->assertEquals('<img src="img.jpg" />', $bbc->$funcNam('[img]img.jpg[/img]'));
|
|
||||||
$this->assertEquals('<img src="http://www.server.org/image.jpg" width="100" height="200" />', $bbc->$funcNam('[img w=100 h=200]http://www.server.org/image.jpg[/img]'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function basicBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals('<strong>txt</strong>', $bbc->$funcNam('[b]txt[/b]'));
|
|
||||||
$this->assertEquals('<strong>txt</strong>', $bbc->$funcNam('[b]txt'));
|
|
||||||
$this->assertEquals('<em>txt</em>', $bbc->$funcNam('[i]txt[/i]'));
|
|
||||||
$this->assertEquals('<em>txt</em>', $bbc->$funcNam('[i]txt[/I]'));
|
|
||||||
$this->assertEquals('<em>txt</em>', $bbc->$funcNam('[I]txt[/i]'));
|
|
||||||
$this->assertEquals('<em>txt</em>', $bbc->$funcNam('[I]txt[/I]'));
|
|
||||||
$this->assertEquals('<del>txt</del>', $bbc->$funcNam('[s]txt[/s]'));
|
|
||||||
$this->assertEquals('<span style="text-decoration:underline;">txt</span>', $bbc->$funcNam('[u]txt[/u]'));
|
|
||||||
$this->assertEquals('<sub>txt</sub>', $bbc->$funcNam('[sub]txt[/sub]'));
|
|
||||||
$this->assertEquals('<sup>txt</sup>', $bbc->$funcNam('[sup]txt[/sup]'));
|
|
||||||
$this->assertEquals('<sup><sub>txt</sub></sup>', $bbc->$funcNam('[sup][sub]txt[/sup][/sub]'));
|
|
||||||
$this->assertEquals('<em><strong>txt</strong></em>', $bbc->$funcNam('[i][b]txt[/i][/b]'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function listBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals('<ul><li>txt</li></ul>', $bbc->$funcNam('[*]txt'));
|
|
||||||
$this->assertEquals("<ul><li>txt\n</li></ul>", $bbc->$funcNam("[ulist][*]txt\n[/ulist]"));
|
|
||||||
$this->assertEquals('<ul><li>txt</li></ul>', $bbc->$funcNam('[ulist]txt[/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li><ul><li><ul><li>txt</li></ul></li></ul></li></ul>', $bbc->$funcNam('[ulist][ulist][ulist]txt'));
|
|
||||||
$this->assertEquals('<ul><li>[xxx]txt[/xxx]</li></ul>', $bbc->$funcNam('[ulist][xxx]txt[/xxx][/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li>txt</li></ul>', $bbc->$funcNam('[ulist][li]txt[/li][/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li>txt</li><li>txt</li></ul>', $bbc->$funcNam('[ulist][li]txt[li]txt[/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li>txt</li></ul>', $bbc->$funcNam('[ulist][*]txt[/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li><ol><li>txt</li></ol></li></ul>', $bbc->$funcNam('[ulist][*][list][*]txt[/ulist]'));
|
|
||||||
$this->assertEquals('<ol><li>txt</li></ol>', $bbc->$funcNam('[list][li]txt[/li][/list]'));
|
|
||||||
$this->assertEquals('<ul><li><ol><li>txt</li></ol></li></ul>', $bbc->$funcNam('[li][list][li]txt[/li][/list]'));
|
|
||||||
$this->assertEquals('<ul><li>txt<ul><li>txt</li></ul></li></ul>', $bbc->$funcNam('[*]txt[ulist]txt[/ulist]'));
|
|
||||||
$this->assertEquals('<ul><li><ul><li><ul><li><ul><li>txt</li></ul></li></ul></li></ul></li></ul>', $bbc->$funcNam('[li][ulist][ulist][ulist]txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:upper-alpha;"><li>ordered item 1, nested list:<ol style="list-style-type:upper-roman;"><li>nested item 1</li><li>nested item 2</li></ol></li><li>ordered item 2</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=A s=3][li]ordered item 1, nested list:[list=I][li]nested item 1[/li][li]nested item 2[/li][/list][/li][li]ordered item 2[/li][/list]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:upper-alpha;"><li>ordered item 1 type A</li><li>ordered item 12 type A</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=A][li]ordered item 1 type A[/li][li=12]ordered item 12 type A[/li][/list]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:lower-alpha;"><li>ordered item 5 type a</li><li>ordered item 6 type a</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=a s=5][li]ordered item 5 type a[/li][*]ordered item 6 type a[/list]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:upper-roman;"><li>ordered item 1 type I</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=I][*]ordered item 1 type I[/list]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:lower-roman;"><li>ordered item 1 type i</li><li>ordered item 4 type i</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=i][*]ordered item 1 type i[li=4]ordered item 4 type i[/li][/list]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:decimal;"><li>ordered item 1</li><li>ordered item 2</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=1][*]ordered item 1[*]ordered item 2[/list]'));
|
|
||||||
//Bug #512: [list] in a [list] breaks the first [list]
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol><li> Subject 1<ol><li> First</li><li> Second</li></ol></li><li> Subject 2</li></ol>',
|
|
||||||
$bbc->$funcNam('[list][*] Subject 1[list][*] First[*] Second[/list][*] Subject 2[/list]')
|
|
||||||
);
|
|
||||||
//Bug #1201: [list] output adding extra <li></li>
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol><li>txt</li></ol>',
|
|
||||||
$bbc->$funcNam('[list][*]txt[/list]')
|
|
||||||
);
|
|
||||||
//Bug#6335 Empty item displayed
|
|
||||||
$this->assertEquals(
|
|
||||||
'<ol style="list-style-type:decimal;"><li> Item one</li><li> Item two</li><li> Item three</li></ol>',
|
|
||||||
$bbc->$funcNam('[list=1][*] Item one[*] Item two[*] Item three[/list]'));
|
|
||||||
}
|
|
||||||
|
|
||||||
function linkBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://www.test.com/">http://www.test.com/</a>',
|
|
||||||
$bbc->$funcNam('http://www.test.com/'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://www.test.com/">www.test.com</a>',
|
|
||||||
$bbc->$funcNam('[url]www.test.com[/url]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://www.test.com/testurl">http://www.test.com/testurl</a>',
|
|
||||||
$bbc->$funcNam('[url]http://www.test.com/testurl[/url]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://www.test.com/">testurl</a>',
|
|
||||||
$bbc->$funcNam('[url=www.test.com/]testurl[/url]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://www.server.org">server</a>',
|
|
||||||
$bbc->$funcNam('[url=http://www.server.org t=new]server[/url]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <a href="http://www.test.com/">www.test.com</a> txt',
|
|
||||||
$bbc->$funcNam('txt www.test.com txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt (<a href="http://www.test.com/">www.test.com</a>) txt',
|
|
||||||
$bbc->$funcNam('txt (www.test.com) txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <a href="http://www.test.com/test.php?a=1,2">www.test.com/test.php?a=1,2</a>, txt',
|
|
||||||
$bbc->$funcNam('txt www.test.com/test.php?a=1,2, txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <a href="http://www.test.com/">www.test.com</a>, txt',
|
|
||||||
$bbc->$funcNam('txt www.test.com, txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <a href="http://www.test.com/">http://www.test.com</a>: txt',
|
|
||||||
$bbc->$funcNam('txt http://www.test.com: txt'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <a href="http://www.test.com/">www.test.com</a>; txt',
|
|
||||||
$bbc->$funcNam('txt www.test.com; txt'));
|
|
||||||
//Bug #1755: tags around an url -> mess
|
|
||||||
$this->assertEquals(
|
|
||||||
'txt <em><a href="http://www.test.com/">www.test.com</a></em> txt',
|
|
||||||
$bbc->$funcNam('txt [i]www.test.com[/i] txt'));
|
|
||||||
//Bug #1512: URL Tags Allow Javascript injection
|
|
||||||
$this->assertEquals(
|
|
||||||
'Click here',
|
|
||||||
$bbc->$funcNam('[url=javascript:location.replace("bad_link");]Click here[/url]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://domain.com/index.php?i=1&j=2">linked text</a>',
|
|
||||||
$bbc->$funcNam('[url=http://domain.com/index.php?i=1&j=2]linked text[/URL]'));
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="http://domain.com/index.php?i=1&j=2">linked text</a>',
|
|
||||||
$bbc->$funcNam('[url=http://domain.com/index.php?i=1&j=2]linked text[/URL]'));
|
|
||||||
//Bug #5609: BBCodeParser allows XSS
|
|
||||||
$this->assertEquals(
|
|
||||||
'<a href="javascript&#058;//%0ASh=alert(%22CouCou%22);window.close();">Alert box with "CouCou"</a>',
|
|
||||||
$bbc->$funcNam('[url=javascript://%0ASh=alert(%22CouCou%22);window.close();]Alert box with "CouCou"[/url]')
|
|
||||||
);
|
|
||||||
/*
|
|
||||||
//Request #4936: Nested URLs in quotes not handled
|
|
||||||
$this->assertEquals(
|
|
||||||
'<q>Quoted text</q>', //?!?!?
|
|
||||||
$bbc->$funcNam('[quote="[url=http://somewhere.com]URL-Title[/url]"]Quoted text[/quote]')
|
|
||||||
);
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
|
|
||||||
function extBBCode($bbc, $funcNam)
|
|
||||||
{
|
|
||||||
$this->assertEquals('<h2>txt</h2>', $bbc->$funcNam('[h2]txt[/h2]'));
|
|
||||||
$this->assertEquals('<span style="color:blue">blue text</span>', $bbc->$funcNam('[color=blue]blue text[/color]'));
|
|
||||||
$this->assertEquals('<span style="font-size:18pt">the size of this text is 18pt</span>', $bbc->$funcNam('[size=18]the size of this text is 18pt[/size]'));
|
|
||||||
$this->assertEquals('<span style="font-family:arial">different font type</span>', $bbc->$funcNam('[font=arial]different font type[/font]'));
|
|
||||||
$this->assertEquals('<div style="text-align:right">yes, you\'re right, this isn\'t on the left</div>', $bbc->$funcNam('[align=right]yes, you\'re right, this isn\'t on the left[/align]'));
|
|
||||||
$this->assertEquals('he said: <q cite="http://www.server.org/quote.html">i\'m tony montana</q>', $bbc->$funcNam('he said: [quote=http://www.server.org/quote.html]i\'m tony montana[/quote]'));
|
|
||||||
$this->assertEquals('<code>x + y = 6;</code>', $bbc->$funcNam('[code]x + y = 6;[/code]'));
|
|
||||||
//Bug #1258: Extra tags rendered with faulty BBCode
|
|
||||||
$this->assertEquals(
|
|
||||||
'<span style="font-family:Verdana"><span style="color:red">my name NeverMind!</span></span>',
|
|
||||||
$bbc->$funcNam('[font=Verdana][color=red]my name NeverMind![/font][/color]')
|
|
||||||
);
|
|
||||||
//Bug #1979: Whitespaces in attribute are breaking it
|
|
||||||
$this->assertEquals(
|
|
||||||
'<span style="font-family:Comic Sans MS">txt</span>',
|
|
||||||
$bbc->$funcNam('[font=Comic Sans MS]txt[/font]')
|
|
||||||
);
|
|
||||||
//Bug #4844: Arbitrary HTML injection
|
|
||||||
$this->assertEquals(
|
|
||||||
'<div style="text-align:foo"><script>alert(\'JavaScript_Enabled\');</script>"></div>',
|
|
||||||
$bbc->$funcNam('[align=foo"><script>alert(\'JavaScript_Enabled\');</script>][/align]')
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* An empty <li> had been included for the first space
|
|
||||||
*/
|
|
||||||
function testBug11400()
|
|
||||||
{
|
|
||||||
$bbc = new HTML_BBCodeParser(array('filters' => ''));
|
|
||||||
$bbc->addFilter('Lists');
|
|
||||||
|
|
||||||
//this works
|
|
||||||
$this->assertEquals('<ul><li>one</li><li>two</li></ul>',
|
|
||||||
$bbc->qparse("[ulist][*]one[*]two[/ulist]")
|
|
||||||
);
|
|
||||||
//this not
|
|
||||||
$this->assertEquals('<ul><li>one</li><li>two</li></ul>',
|
|
||||||
$bbc->qparse("[ulist] [*]one[*]two[/ulist]")
|
|
||||||
);
|
|
||||||
//this not
|
|
||||||
$this->assertEquals('<ol><li>one</li><li>two</li></ol>',
|
|
||||||
$bbc->qparse("[list] [*]one[*]two[/list]")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
|
||||||
* img tags didn't like = in url
|
|
||||||
*/
|
|
||||||
function testBug11370()
|
|
||||||
{
|
|
||||||
$bbc = new HTML_BBCodeParser(array('filters' => ''));
|
|
||||||
$bbc->addFilter('Images');
|
|
||||||
|
|
||||||
$this->assertEquals('<img src="admin.php?fs=image" />',
|
|
||||||
$bbc->qparse("[img]admin.php?fs=image[/img]")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Run tests if run from the command line
|
|
||||||
if (realpath($_SERVER['PHP_SELF']) == __FILE__){
|
|
||||||
$suite = new PHPUnit_TestSuite('BBCodeParser_TestCase');
|
|
||||||
$result = PHPUnit::run($suite);
|
|
||||||
echo $result->toString();
|
|
||||||
}
|
|
||||||
?>
|
|
Loading…
Reference in New Issue
Block a user