diff --git a/ORM/FieldType/DBText.php b/ORM/FieldType/DBText.php
index d69bf1ac046..7d37cdd41db 100644
--- a/ORM/FieldType/DBText.php
+++ b/ORM/FieldType/DBText.php
@@ -9,7 +9,6 @@
use SilverStripe\Forms\NullableField;
use SilverStripe\Forms\TextField;
use SilverStripe\ORM\DB;
-use SilverStripe\View\Parsers\TextParser;
use InvalidArgumentException;
/**
@@ -233,24 +232,6 @@ public function ContextSummary(
return $summary;
}
- /**
- * Allows a sub-class of TextParser to be rendered.
- *
- * @see TextParser for implementation details.
- * @param string $parser Class name of parser (Must extend {@see TextParser})
- * @return DBField Parsed value in the appropriate type
- */
- public function Parse($parser) {
- $reflection = new \ReflectionClass($parser);
- if($reflection->isAbstract() || !$reflection->isSubclassOf('SilverStripe\\View\\Parsers\\TextParser')) {
- throw new InvalidArgumentException("Invalid parser {$parser}");
- }
-
- /** @var TextParser $obj */
- $obj = Injector::inst()->createWithArgs($parser, [$this->forTemplate()]);
- return $obj->parse();
- }
-
public function scaffoldFormField($title = null, $params = null) {
if(!$this->nullifyEmpty) {
// Allow the user to select if it's null instead of automatically assuming empty string is
diff --git a/View/Parsers/BBCodeParser.ini b/View/Parsers/BBCodeParser.ini
deleted file mode 100644
index 83b3f419ab1..00000000000
--- a/View/Parsers/BBCodeParser.ini
+++ /dev/null
@@ -1,24 +0,0 @@
-[SSHTMLBBCodeParser]
-
-; possible values: single|double
-; use single or double quotes for attributes
-quotestyle = "double"
-
-; possible values: all|nothing|strings
-; quote all attribute values, none, or only the strings
-quotewhat = "all"
-
-; the closing tag character
-close = "]"
-
-; the opening tag character
-open = "["
-
-; possible values: true|false
-; use xml style closing tags for single html tags ( or )
-xmlclose = "true"
-
-; possible values: a comma seperated list of filters
-; comma seperated list of filters to use
-filters = "Basic,Extended,Email,Images,Links,Lists"
-
diff --git a/View/Parsers/BBCodeParser.php b/View/Parsers/BBCodeParser.php
deleted file mode 100644
index 86d0fcf08fc..00000000000
--- a/View/Parsers/BBCodeParser.php
+++ /dev/null
@@ -1,152 +0,0 @@
- _t('BBCodeParser.BOLD', 'Bold Text'),
- "Example" => '[b]'._t('BBCodeParser.BOLDEXAMPLE', 'Bold').'[/b]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.ITALIC', 'Italic Text'),
- "Example" => '[i]'._t('BBCodeParser.ITALICEXAMPLE', 'Italics').'[/i]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.UNDERLINE', 'Underlined Text'),
- "Example" => '[u]'._t('BBCodeParser.UNDERLINEEXAMPLE', 'Underlined').'[/u]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.STRUCK', 'Struck-out Text'),
- "Example" => '[s]'._t('BBCodeParser.STRUCKEXAMPLE', 'Struck-out').'[/s]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.COLORED', 'Colored text'),
- "Example" => '[color=blue]'._t('BBCodeParser.COLOREDEXAMPLE', 'blue text').'[/color]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.ALIGNEMENT', 'Alignment'),
- "Example" => '[align=right]'._t('BBCodeParser.ALIGNEMENTEXAMPLE', 'right aligned').'[/align]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.CODE', 'Code Block'),
- "Description" => _t('BBCodeParser.CODEDESCRIPTION', 'Unformatted code block'),
- "Example" => '[code]'._t('BBCodeParser.CODEEXAMPLE', 'Code block').'[/code]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.EMAILLINK', 'Email link'),
- "Description" => _t('BBCodeParser.EMAILLINKDESCRIPTION', 'Create link to an email address'),
- "Example" => "[email]you@yoursite.com[/email]"
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.EMAILLINK', 'Email link'),
- "Description" => _t('BBCodeParser.EMAILLINKDESCRIPTION', 'Create link to an email address'),
- "Example" => "[email=you@yoursite.com]Email[/email]"
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.UNORDERED', 'Unordered list'),
- "Description" => _t('BBCodeParser.UNORDEREDDESCRIPTION', 'Unordered list'),
- "Example" => '[ulist][*]'._t('BBCodeParser.UNORDEREDEXAMPLE1', 'unordered item 1').'[/ulist]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.IMAGE', 'Image'),
- "Description" => _t('BBCodeParser.IMAGEDESCRIPTION', 'Show an image in your post'),
- "Example" => "[img]http://www.website.com/image.jpg[/img]"
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.LINK', 'Website link'),
- "Description" => _t('BBCodeParser.LINKDESCRIPTION', 'Link to another website or URL'),
- "Example" => '[url]http://www.website.com/[/url]'
- )),
- new ArrayData(array(
- "Title" => _t('BBCodeParser.LINK', 'Website link'),
- "Description" => _t('BBCodeParser.LINKDESCRIPTION', 'Link to another website or URL'),
- "Example" => "[url=http://www.website.com/]Website[/url]"
- ))
- )
- );
- }
-
- public function useable_tagsHTML() {
- $useabletags = "
";
- foreach($this->usable_tags()->toArray() as $tag){
- $useabletags = $useabletags."
".$tag->Example."
";
- }
- return $useabletags."
";
- }
-
- /**
- * Main BBCode parser method. This takes plain jane content and
- * runs it through so many filters
- *
- * @return DBField
- */
- public function parse() {
- // Convert content to plain text
- /** @var DBHTMLText $fragment */
- $fragment = DBField::create_field('HTMLFragment', $this->content);
- $this->content = $fragment->Plain();
-
- // Get options
- $config = parse_ini_file('BBCodeParser.ini', true);
- $options = $config['SSHTMLBBCodeParser'];
-
- $p = new HTML_BBCodeParser2($options);
- $this->content = $p->qparse($this->content);
- unset($p);
-
- if($this->config()->allow_smilies) {
- $smiliesLocation = $this->config()->get('smilies_location');
- $smilies = array(
- '#(? " ", // :D
- '#(? " ", // :)
- '#(? " ", // :-)
- '#(? " ", // :(
- '#(? " ", // :-(
- '#(? " ", // :p
- '#(? " ", // 8-)
- '#(? " " // :^)
- );
- $this->content = preg_replace(array_keys($smilies), array_values($smilies), $this->content);
- }
-
- // Ensure to return cast value
- return DBField::create_field('HTMLFragment', $this->content);
- }
-
-}
diff --git a/View/Parsers/TextParser.php b/View/Parsers/TextParser.php
deleted file mode 100644
index 4e64283d65f..00000000000
--- a/View/Parsers/TextParser.php
+++ /dev/null
@@ -1,66 +0,0 @@
-content and parse it however you want. For an example
- * of the implementation, @see BBCodeParser.
- *
- * Your sub-class will be initialized with a string of text, then parse() will be called.
- * parse() should (after processing) return the formatted string.
- *
- * Note: $this->content will have NO conversions applied to it.
- * You should run Covert::raw2xml or whatever is appropriate before using it.
- *
- * Optionally (but recommended), is creating a static usable_tags method,
- * which will return a SS_List of all the usable tags that can be parsed.
- * This will (mostly) be used to create helper blocks - telling users what things will be parsed.
- * Again, @see BBCodeParser for an example of the syntax
- *
- * @todo Define a proper syntax for (or refactor) usable_tags that can be extended as needed.
- */
-abstract class TextParser extends Object {
-
- /**
- * @var string
- */
- protected $content;
-
- /**
- * Creates a new TextParser object.
- *
- * @param string $content The contents of the dbfield
- */
- public function __construct($content = "") {
- parent::__construct();
- $this->content = $content;
- parent::__construct();
- }
-
- /**
- * Convenience method, shouldn't really be used, but it's here if you want it
- *
- * @param string $content
- */
- public function setContent($content = "") {
- $this->content = $content;
- }
-
- /**
- * Define your own parse method to parse $this->content appropriately.
- * See the class doc-block for more implementation details.
- *
- * @return DBField
- */
- abstract public function parse();
-}
diff --git a/composer.json b/composer.json
index ef489f30961..6619985b36a 100644
--- a/composer.json
+++ b/composer.json
@@ -45,14 +45,10 @@
"SilverStripe\\Security\\": "Security/",
"SilverStripe\\View\\": "View/"
},
- "psr-0": {
- "HTML_": "thirdparty/HTML_BBCodeParser2"
- },
"files": ["Core/Constants.php"],
"classmap": ["tests/behat/features/bootstrap"]
},
"include-path": [
- "thirdparty/",
- "thirdparty/HTML_BBCodeParser2/"
+ "thirdparty/"
]
}
diff --git a/docs/en/04_Changelogs/4.0.0.md b/docs/en/04_Changelogs/4.0.0.md
index 259b347c23b..7c9179602a0 100644
--- a/docs/en/04_Changelogs/4.0.0.md
+++ b/docs/en/04_Changelogs/4.0.0.md
@@ -817,6 +817,8 @@ specific functions.
* `RestfulService` has been removed. Use Guzzle instead. See Upgrading notes.
* Our self-maintained `Oembed` implementation has been removed, in favour of introducing
[oscarotero/Embed](https://github.com/oscarotero/Embed) as a dependency.
+* Removed TextParser and BBCodeParser. These are available in an archived module,
+ [silverstripe-archive/bbcodeparser](https://github.com/silverstripe-archive/silverstripe-bbcodeparser)
#### General and Core Deprecated API
diff --git a/tests/model/DBHTMLTextTest.php b/tests/model/DBHTMLTextTest.php
index 3b37442567e..4249ee15e7a 100644
--- a/tests/model/DBHTMLTextTest.php
+++ b/tests/model/DBHTMLTextTest.php
@@ -411,21 +411,6 @@ public function testShortcodesProcessed()
);
}
- public function testParse() {
- // Test parse
- /** @var DBHTMLText $obj */
- $obj = DBField::create_field(
- 'HTMLText',
- '
[b]Some content[/b] [test_shortcode] with shortcode
'
- );
-
- // BBCode strips HTML and applies own formatting
- $this->assertEquals(
- 'Some content shortcode content with shortcode',
- $obj->Parse('SilverStripe\\View\\Parsers\\BBCodeParser')->forTemplate()
- );
- }
-
function testExists() {
$h = new DBHTMLText();
$h->setValue("");
diff --git a/thirdparty/HTML_BBCodeParser2/.gitignore b/thirdparty/HTML_BBCodeParser2/.gitignore
deleted file mode 100755
index 869f4985844..00000000000
--- a/thirdparty/HTML_BBCodeParser2/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-# composer related
-composer.lock
-composer.phar
-vendor
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2.php
deleted file mode 100755
index 9a856ba19df..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2.php
+++ /dev/null
@@ -1,865 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*
-*
-* This is a parser to replace UBB style tags with their html equivalents. It
-* does not simply do some regex calls, but is complete stack based
-* parse engine. This ensures that all tags are properly nested, if not,
-* extra tags are added to maintain the nesting. This parser should only produce
-* xhtml 1.0 compliant code. All tags are validated and so are all their attributes.
-* It should be easy to extend this parser with your own tags, see the _definedTags
-* format description below.
-*
-*
-* Usage:
-* $parser = new HTML_BBCodeParser2($options = array(...));
-* $parser->setText('normal [b]bold[/b] and normal again');
-* $parser->parse();
-* echo $parser->getParsed();
-* or:
-* $parser = new HTML_BBCodeParser2($options = array(...));
-* echo $parser->qparse('normal [b]bold[/b] and normal again');
-* or:
-* echo HTML_BBCodeParser2::staticQparse('normal [b]bold[/b] and normal again');
-*
-*
-* Setting the options from the ini file:
-* $config = parse_ini_file('BBCodeParser.ini', true);
-* $options = $config['HTML_BBCodeParser2'];
-*
-* The _definedTags variables should be in this format:
-* array('tag' // the actual tag used
-* => array('htmlopen' => 'open', // the opening tag in html
-* 'htmlclose' => 'close', // the closing tag in html,
-* can be set to an empty string
-* if no closing tag is present
-* in html (like )
-* 'allowed' => 'allow', // tags that are allowed inside
-* this tag. Values can be all
-* or none, or either of these
-* two, followed by a ^ and then
-* followed by a comma seperated
-* list of exceptions on this
-* 'attributes' => array() // an associative array containing
-* the tag attributes and their
-* printf() html equivalents, to
-* which the first argument is
-* the value, and the second is
-* the quote. Default would be
-* something like this:
-* 'attr' => 'attr=%2$s%1$s%2$s'
-* ),
-* 'etc'
-* => (...)
-* )
-*/
-class HTML_BBCodeParser2
-{
- /**
- * An array of tags parsed by the engine, should be overwritten by filters
- *
- * @access private
- * @var array
- */
- var $_definedTags = array();
-
- /**
- * A string containing the input
- *
- * @access private
- * @var string
- */
- var $_text = '';
-
- /**
- * A string containing the preparsed input
- *
- * @access private
- * @var string
- */
- var $_preparsed = '';
-
- /**
- * An array tags and texts build from the input text
- *
- * @access private
- * @var array
- */
- var $_tagArray = array();
-
- /**
- * A string containing the parsed version of the text
- *
- * @access private
- * @var string
- */
- var $_parsed = '';
-
- /**
- * An array of options, filled by an ini file or through the contructor
- *
- * @access private
- * @var array
- */
- var $_options = array(
- 'quotestyle' => 'double',
- 'quotewhat' => 'all',
- 'open' => '[',
- 'close' => ']',
- 'xmlclose' => true,
- 'filters' => 'Basic'
- );
-
- /**
- * An array of filters used for parsing
- *
- * @access private
- * @var array
- */
- var $_filters = array();
-
- /**
- * Constructor, initialises the options and filters
- *
- * Sets options to properly escape the tag
- * characters in preg_replace() etc.
- *
- * All the filters in the options are initialised and their defined tags
- * are copied into the private variable _definedTags.
- *
- * @param array options to use, can be left out
- * @return none
- * @access public
- * @author Stijn de Reede
- */
- function __construct($options = array())
- {
- // set the options passed as an argument
- foreach ($options as $k => $v ) {
- $this->_options[$k] = $v;
- }
-
- // add escape open and close chars to the options for preg escaping
- $preg_escape = '\^$.[]|()?*+{}';
- if ($this->_options['open'] != '' && strpos($preg_escape, $this->_options['open'])) {
- $this->_options['open_esc'] = "\\".$this->_options['open'];
- } else {
- $this->_options['open_esc'] = $this->_options['open'];
- }
- if ($this->_options['close'] != '' && strpos($preg_escape, $this->_options['close'])) {
- $this->_options['close_esc'] = "\\".$this->_options['close'];
- } else {
- $this->_options['close_esc'] = $this->_options['close'];
- }
-
- // set the options back so that child classes can use them */
- $baseoptions = $this->_options;
- unset($baseoptions);
-
- // return if this is a subclass
- if (is_subclass_of($this, 'HTML_BBCodeParser2_Filter')) {
- return;
- }
-
- // extract the definedTags from subclasses */
- $this->addFilters($this->_options['filters']);
- }
-
- /**
- * Option setter
- *
- * @param string option name
- * @param mixed option value
- * @author Lorenzo Alberton
- */
- function setOption($name, $value)
- {
- $this->_options[$name] = $value;
- }
-
- /**
- * Add a new filter
- *
- * @param string filter
- * @author Lorenzo Alberton
- */
- function addFilter($filter)
- {
- $filter = ucfirst($filter);
- if (!array_key_exists($filter, $this->_filters)) {
- $class = 'HTML_BBCodeParser2_Filter_'.$filter;
- @include_once 'HTML/BBCodeParser2/Filter/'.$filter.'.php';
- if (!class_exists($class)) {
- throw new InvalidArgumentException("Failed to load filter $filter");
- }
- $this->_filters[$filter] = new $class;
- $this->_definedTags = array_merge(
- $this->_definedTags,
- $this->_filters[$filter]->_definedTags
- );
- }
- }
-
- /**
- * Remove an existing filter
- *
- * @param string $filter
- * @author Lorenzo Alberton
- */
- function removeFilter($filter)
- {
- $filter = ucfirst(trim($filter));
- if (!empty($filter) && array_key_exists($filter, $this->_filters)) {
- unset($this->_filters[$filter]);
- }
- // also remove the related $this->_definedTags for this filter,
- // preserving the others
- $this->_definedTags = array();
- foreach (array_keys($this->_filters) as $filter) {
- $this->_definedTags = array_merge(
- $this->_definedTags,
- $this->_filters[$filter]->_definedTags
- );
- }
- }
-
- /**
- * Add new filters
- *
- * @param mixed (array or string)
- * @return boolean true if all ok, false if not.
- * @author Lorenzo Alberton
- */
- function addFilters($filters)
- {
- if (is_string($filters)) {
- //comma-separated list
- if (strpos($filters, ',') !== false) {
- $filters = explode(',', $filters);
- } else {
- $filters = array($filters);
- }
- }
- if (!is_array($filters)) {
- //invalid format
- return false;
- }
- foreach ($filters as $filter) {
- if (trim($filter)){
- $this->addFilter($filter);
- }
- }
- return true;
- }
-
- /**
- * 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. The filters should modify their private $_preparsed
- * variable, with input from $_text.
- *
- * @return none
- * @access private
- * @see $_text
- * @author Stijn de Reede
- */
- function _preparse()
- {
- // default: assign _text to _preparsed, to be overwritten by filters
- $this->_preparsed = $this->_text;
-
- // return if this is a subclass
- if (is_subclass_of($this, 'HTML_BBCodeParser2')) {
- return;
- }
-
- // walk through the filters and execute _preparse
- foreach ($this->_filters as $filter) {
- $filter->setText($this->_preparsed);
- $filter->_preparse();
- $this->_preparsed = $filter->getPreparsed();
- }
- }
-
- /**
- * Builds the tag array from the input string $_text
- *
- * An array consisting of tag and text elements is contructed from the
- * $_preparsed variable. The method uses _buildTag() to check if a tag is
- * valid and to build the actual tag to be added to the tag array.
- *
- * TODO: - rewrite whole method, as this one is old and probably slow
- * - see if a recursive method would be better than an iterative one
- *
- * @return none
- * @access private
- * @see _buildTag()
- * @see $_text
- * @see $_tagArray
- * @author Stijn de Reede
- */
- function _buildTagArray()
- {
- $this->_tagArray = array();
- $str = $this->_preparsed;
- $strPos = 0;
- $strLength = strlen($str);
-
- while (($strPos < $strLength)) {
- $tag = array();
- $openPos = strpos($str, $this->_options['open'], $strPos);
- if ($openPos === false) {
- $openPos = $strLength;
- $nextOpenPos = $strLength;
- }
- if ($openPos + 1 > $strLength) {
- $nextOpenPos = $strLength;
- } else {
- $nextOpenPos = strpos($str, $this->_options['open'], $openPos + 1);
- if ($nextOpenPos === false) {
- $nextOpenPos = $strLength;
- }
- }
- $closePos = strpos($str, $this->_options['close'], $strPos);
- if ($closePos === false) {
- $closePos = $strLength + 1;
- }
-
- if ($openPos == $strPos) {
- if (($nextOpenPos < $closePos)) {
- // new open tag before closing tag: treat as text
- $newPos = $nextOpenPos;
- $tag['text'] = substr($str, $strPos, $nextOpenPos - $strPos);
- $tag['type'] = 0;
- } else {
- // possible valid tag
- $newPos = $closePos + 1;
- $newTag = $this->_buildTag(substr($str, $strPos, $closePos - $strPos + 1));
- if (($newTag !== false)) {
- $tag = $newTag;
- } else {
- // no valid tag after all
- $tag['text'] = substr($str, $strPos, $closePos - $strPos + 1);
- $tag['type'] = 0;
- }
- }
- } else {
- // just text
- $newPos = $openPos;
- $tag['text'] = substr($str, $strPos, $openPos - $strPos);
- $tag['type'] = 0;
- }
-
- // join 2 following text elements
- if ($tag['type'] === 0 && isset($prev) && $prev['type'] === 0) {
- $tag['text'] = $prev['text'].$tag['text'];
- array_pop($this->_tagArray);
- }
-
- $this->_tagArray[] = $tag;
- $prev = $tag;
- $strPos = $newPos;
- }
- }
-
- /**
- * Builds a tag from the input string
- *
- * This method builds a tag array based on the string it got as an
- * argument. If the tag is invalid, is returned. The tag
- * attributes are extracted from the string and stored in the tag
- * array as an associative array.
- *
- * @param string string to build tag from
- * @return array tag in array format
- * @access private
- * @see _buildTagArray()
- * @author Stijn de Reede
- */
- function _buildTag($str)
- {
- $tag = array('text' => $str, 'attributes' => array());
-
- if (substr($str, 1, 1) == '/') { // closing tag
-
- $tag['tag'] = strtolower(substr($str, 2, strlen($str) - 3));
- if (!in_array($tag['tag'], array_keys($this->_definedTags))) {
- return false; // nope, it's not valid
- } else {
- $tag['type'] = 2;
- return $tag;
- }
- } else { // opening tag
-
- $tag['type'] = 1;
- if (strpos($str, ' ') && (strpos($str, '=') === false)) {
- return false; // nope, it's not valid
- }
-
- // tnx to Onno for the regex
- // split the tag with arguments and all
- $oe = $this->_options['open_esc'];
- $ce = $this->_options['close_esc'];
- $tagArray = array();
- if (preg_match("!$oe([a-z0-9]+)[^$ce]*$ce!i", $str, $tagArray) == 0) {
- return false;
- }
- $tag['tag'] = strtolower($tagArray[1]);
- if (!in_array($tag['tag'], array_keys($this->_definedTags))) {
- return false; // nope, it's not valid
- }
-
- // tnx to Onno for the regex
- // validate the arguments
- $attributeArray = array();
- $regex = "![\s$oe]([a-z0-9]+)=(\"[^\s$ce]+\"|[^\s$ce]";
- if ($tag['tag'] != 'url') {
- $regex .= "[^=]";
- }
- $regex .= "+)(?=[\s$ce])!i";
- preg_match_all($regex, $str, $attributeArray, PREG_SET_ORDER);
- foreach ($attributeArray as $attribute) {
- $attNam = strtolower($attribute[1]);
- if (in_array($attNam, array_keys($this->_definedTags[$tag['tag']]['attributes']))) {
- if ($attribute[2][0] == '"' && $attribute[2][strlen($attribute[2])-1] == '"') {
- $tag['attributes'][$attNam] = substr($attribute[2], 1, -1);
- } else {
- $tag['attributes'][$attNam] = $attribute[2];
- }
- }
- }
- return $tag;
- }
- }
-
- /**
- * Validates the tag array, regarding the allowed tags
- *
- * While looping through the tag array, two following text tags are
- * joined, and it is checked that the tag is allowed inside the
- * last opened tag.
- * By remembering what tags have been opened it is checked that
- * there is correct (xml compliant) nesting.
- * In the end all still opened tags are closed.
- *
- * @return none
- * @access private
- * @see _isAllowed()
- * @see $_tagArray
- * @author Stijn de Reede , Seth Price
- */
- function _validateTagArray()
- {
- $newTagArray = array();
- $openTags = array();
- foreach ($this->_tagArray as $tag) {
- $prevTag = end($newTagArray);
- switch ($tag['type']) {
- case 0:
- if (($child = $this->_childNeeded(end($openTags), 'text')) &&
- $child !== false &&
- /*
- * No idea what to do in this case: A child is needed, but
- * no valid one is returned. We'll ignore it here and live
- * with it until someone reports a valid bug.
- */
- $child !== true )
- {
- if (trim($tag['text']) == '') {
- //just an empty indentation or newline without value?
- continue;
- }
- $newTagArray[] = $child;
- $openTags[] = $child['tag'];
- }
- if ($prevTag['type'] === 0) {
- $tag['text'] = $prevTag['text'].$tag['text'];
- array_pop($newTagArray);
- }
- $newTagArray[] = $tag;
- break;
-
- case 1:
- if (!$this->_isAllowed(end($openTags), $tag['tag']) ||
- ($parent = $this->_parentNeeded(end($openTags), $tag['tag'])) === true ||
- ($child = $this->_childNeeded(end($openTags), $tag['tag'])) === true) {
- $tag['type'] = 0;
- if ($prevTag['type'] === 0) {
- $tag['text'] = $prevTag['text'].$tag['text'];
- array_pop($newTagArray);
- }
- } else {
- if ($parent) {
- /*
- * Avoid use of parent if we can help it. If we are
- * trying to insert a new parent, but the current tag is
- * the same as the previous tag, then assume that the
- * previous tag structure is valid, and add this tag as
- * a sibling. To add as a sibling, we need to close the
- * current tag.
- */
- if ($tag['tag'] == end($openTags)){
- $newTagArray[] = $this->_buildTag('[/'.$tag['tag'].']');
- array_pop($openTags);
- } else {
- $newTagArray[] = $parent;
- $openTags[] = $parent['tag'];
- }
- }
- if ($child) {
- $newTagArray[] = $child;
- $openTags[] = $child['tag'];
- }
- $openTags[] = $tag['tag'];
- }
- $newTagArray[] = $tag;
- break;
-
- case 2:
- if (($tag['tag'] == end($openTags) || $this->_isAllowed(end($openTags), $tag['tag']))) {
- if (in_array($tag['tag'], $openTags)) {
- $tmpOpenTags = array();
- while (end($openTags) != $tag['tag']) {
- $newTagArray[] = $this->_buildTag('[/'.end($openTags).']');
- $tmpOpenTags[] = end($openTags);
- array_pop($openTags);
- }
- $newTagArray[] = $tag;
- array_pop($openTags);
- /* why is this here? it just seems to break things
- * (nested lists where closing tags need to be
- * generated)
- while (end($tmpOpenTags)) {
- $tmpTag = $this->_buildTag('['.end($tmpOpenTags).']');
- $newTagArray[] = $tmpTag;
- $openTags[] = $tmpTag['tag'];
- array_pop($tmpOpenTags);
- }*/
- }
- } else {
- $tag['type'] = 0;
- if ($prevTag['type'] === 0) {
- $tag['text'] = $prevTag['text'].$tag['text'];
- array_pop($newTagArray);
- }
- $newTagArray[] = $tag;
- }
- break;
- }
- }
- while (end($openTags)) {
- $newTagArray[] = $this->_buildTag('[/'.end($openTags).']');
- array_pop($openTags);
- }
- $this->_tagArray = $newTagArray;
- }
-
- /**
- * Checks to see if a parent is needed
- *
- * Checks to see if the current $in tag has an appropriate parent. If it
- * does, then it returns false. If a parent is needed, then it returns the
- * first tag in the list to add to the stack.
- *
- * @param array tag that is on the outside
- * @param array tag that is on the inside
- * @return boolean false if not needed, tag if needed, true if out
- * of our minds
- * @access private
- * @see _validateTagArray()
- * @author Seth Price
- */
- function _parentNeeded($out, $in)
- {
- if (!isset($this->_definedTags[$in]['parent']) ||
- ($this->_definedTags[$in]['parent'] == 'all')
- ) {
- return false;
- }
-
- $ar = explode('^', $this->_definedTags[$in]['parent']);
- $tags = explode(',', $ar[1]);
- if ($ar[0] == 'none'){
- if ($out && in_array($out, $tags)) {
- return false;
- }
- //Create a tag from the first one on the list
- return $this->_buildTag('['.$tags[0].']');
- }
- if ($ar[0] == 'all' && $out && !in_array($out, $tags)) {
- return false;
- }
- // Tag is needed, we don't know which one. We could make something up,
- // but it would be so random, I think that it would be worthless.
- return true;
- }
-
- /**
- * Checks to see if a child is needed
- *
- * Checks to see if the current $out tag has an appropriate child. If it
- * does, then it returns false. If a child is needed, then it returns the
- * first tag in the list to add to the stack.
- *
- * @param array tag that is on the outside
- * @param array tag that is on the inside
- * @return boolean false if not needed, tag if needed, true if out
- * of our minds
- * @access private
- * @see _validateTagArray()
- * @author Seth Price
- */
- function _childNeeded($out, $in)
- {
- if (!isset($this->_definedTags[$out]['child']) ||
- ($this->_definedTags[$out]['child'] == 'all')
- ) {
- return false;
- }
-
- $ar = explode('^', $this->_definedTags[$out]['child']);
- $tags = explode(',', $ar[1]);
- if ($ar[0] == 'none'){
- if ($in && in_array($in, $tags)) {
- return false;
- }
- //Create a tag from the first one on the list
- return $this->_buildTag('['.$tags[0].']');
- }
- if ($ar[0] == 'all' && $in && !in_array($in, $tags)) {
- return false;
- }
- // Tag is needed, we don't know which one. We could make something up,
- // but it would be so random, I think that it would be worthless.
- return true;
- }
-
- /**
- * Checks to see if a tag is allowed inside another tag
- *
- * The allowed tags are extracted from the private _definedTags array.
- *
- * @param array tag that is on the outside
- * @param array tag that is on the inside
- * @return boolean return true if the tag is allowed, false
- * otherwise
- * @access private
- * @see _validateTagArray()
- * @author Stijn de Reede
- */
- function _isAllowed($out, $in)
- {
- if (!$out || ($this->_definedTags[$out]['allowed'] == 'all')) {
- return true;
- }
- if ($this->_definedTags[$out]['allowed'] == 'none') {
- return false;
- }
-
- $ar = explode('^', $this->_definedTags[$out]['allowed']);
- $tags = explode(',', $ar[1]);
- if ($ar[0] == 'none' && in_array($in, $tags)) {
- return true;
- }
- if ($ar[0] == 'all' && in_array($in, $tags)) {
- return false;
- }
- return false;
- }
-
- /**
- * Builds a parsed string based on the tag array
- *
- * The correct html and attribute values are extracted from the private
- * _definedTags array.
- *
- * @return none
- * @access private
- * @see $_tagArray
- * @see $_parsed
- * @author Stijn de Reede
- */
- function _buildParsedString()
- {
- $this->_parsed = '';
- foreach ($this->_tagArray as $tag) {
- switch ($tag['type']) {
-
- // just text
- case 0:
- $this->_parsed .= $tag['text'];
- break;
-
- // opening tag
- case 1:
- $this->_parsed .= '<'.$this->_definedTags[$tag['tag']]['htmlopen'];
- if ($this->_options['quotestyle'] == 'single') $q = "'";
- if ($this->_options['quotestyle'] == 'double') $q = '"';
- foreach ($tag['attributes'] as $a => $v) {
- //prevent XSS attacks. IMHO this is not enough, though...
- //@see http://pear.php.net/bugs/bug.php?id=5609
- $v = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $v);
- $v = htmlspecialchars($v);
- $v = str_replace('&', '&', $v);
-
- if (($this->_options['quotewhat'] == 'nothing') ||
- (($this->_options['quotewhat'] == 'strings') && is_numeric($v))
- ) {
- $this->_parsed .= ' '.sprintf($this->_definedTags[$tag['tag']]['attributes'][$a], $v, '');
- } else {
- $this->_parsed .= ' '.sprintf($this->_definedTags[$tag['tag']]['attributes'][$a], $v, $q);
- }
- }
- if ($this->_definedTags[$tag['tag']]['htmlclose'] == '' && $this->_options['xmlclose']) {
- $this->_parsed .= ' /';
- }
- $this->_parsed .= '>';
- break;
-
- // closing tag
- case 2:
- if ($this->_definedTags[$tag['tag']]['htmlclose'] != '') {
- $this->_parsed .= ''.$this->_definedTags[$tag['tag']]['htmlclose'].'>';
- }
- break;
- }
- }
- }
-
- /**
- * Sets text in the object to be parsed
- *
- * @param string the text to set in the object
- * @return none
- * @access public
- * @see getText()
- * @see $_text
- * @author Stijn de Reede
- */
- function setText($str)
- {
- $this->_text = $str;
- }
-
- /**
- * Gets the unparsed text from the object
- *
- * @return string the text set in the object
- * @access public
- * @see setText()
- * @see $_text
- * @author Stijn de Reede
- */
- function getText()
- {
- return $this->_text;
- }
-
- /**
- * Gets the preparsed text from the object
- *
- * @return string the text set in the object
- * @access public
- * @see _preparse()
- * @see $_preparsed
- * @author Stijn de Reede
- */
- function getPreparsed()
- {
- return $this->_preparsed;
- }
-
- /**
- * Gets the parsed text from the object
- *
- * @return string the parsed text set in the object
- * @access public
- * @see parse()
- * @see $_parsed
- * @author Stijn de Reede
- */
- function getParsed()
- {
- return $this->_parsed;
- }
-
- /**
- * Parses the text set in the object
- *
- * @return none
- * @access public
- * @see _preparse()
- * @see _buildTagArray()
- * @see _validateTagArray()
- * @see _buildParsedString()
- * @author Stijn de Reede
- */
- function parse()
- {
- $this->_preparse();
- $this->_buildTagArray();
- $this->_validateTagArray();
- $this->_buildParsedString();
- }
-
- /**
- * Quick method to do setText(), parse() and getParsed at once
- *
- * @return none
- * @access public
- * @see parse()
- * @see $_text
- * @author Stijn de Reede
- */
- function qparse($str)
- {
- $this->_text = $str;
- $this->parse();
- return $this->_parsed;
- }
-
- /**
- * Quick static method to do setText(), parse() and getParsed at once
- *
- * @return none
- * @access public
- * @see parse()
- * @see $_text
- * @author Stijn de Reede
- */
- function staticQparse($str)
- {
- $p = new HTML_BBCodeParser2();
- $str = $p->qparse($str);
- unset($p);
- return $str;
- }
-}
-?>
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter.php
deleted file mode 100755
index ef207a32353..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter.php
+++ /dev/null
@@ -1,9 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*/
-
-
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-
-
-
-class HTML_BBCodeParser2_Filter_Basic extends HTML_BBCodeParser2_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())
- );
-
-}
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Email.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Email.php
deleted file mode 100755
index 4c927209da3..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Email.php
+++ /dev/null
@@ -1,82 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*/
-
-
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-
-
-
-class HTML_BBCodeParser2_Filter_Email extends HTML_BBCodeParser2_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
- */
- function _preparse()
- {
- $options = $this->_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);
- }
-
-
-}
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Extended.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Extended.php
deleted file mode 100755
index 1e8007c6199..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Extended.php
+++ /dev/null
@@ -1,95 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*/
-
-
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-
-
-
-class HTML_BBCodeParser2_Filter_Extended extends HTML_BBCodeParser2_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' => 'code',
- 'htmlclose' => 'code',
- '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())
-
- );
-
-
-}
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Images.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Images.php
deleted file mode 100755
index a80396ad20d..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Images.php
+++ /dev/null
@@ -1,79 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser
-* @author Stijn de Reede
-*/
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-class HTML_BBCodeParser2_Filter_Images extends HTML_BBCodeParser2_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
- */
- function _preparse()
- {
- $options = $this->_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\" alt=\"\"\$1".$c.$o."/img".$c,
- $this->_text);
- }
-}
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Links.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Links.php
deleted file mode 100755
index 81d5e471dad..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Links.php
+++ /dev/null
@@ -1,202 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*/
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-/**
- *
- */
-class HTML_BBCodeParser2_Filter_Links extends HTML_BBCodeParser2_Filter
-{
- /**
- * List of allowed schemes
- *
- * @access private
- * @var array
- */
- var $_allowedSchemes = array('http', 'https', 'ftp', 'irc');
-
- /**
- * 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',
- 't' => 'target=%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
- * @author Seth Price
- */
- function _preparse()
- {
- $options = $this->_options;
- $o = $options['open'];
- $c = $options['close'];
- $oe = $options['open_esc'];
- $ce = $options['close_esc'];
-
- $schemes = implode('|', $this->_allowedSchemes);
-
- $pattern = array( "/(?_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
- * @author Lorenzo Alberton
- */
- function smarterPPLinkExpand($matches)
- {
- $options = $this->_options;
- $o = $options['open'];
- $c = $options['close'];
- $oe = $options['open_esc'];
- $ce = $options['close_esc'];
-
- //If we have an intro tag that is [url], then skip this match
- if (preg_match("/".$oe."url(=[^\s()\[\]=]+)?".$ce."/i", $matches[1])) {
- 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
- */
- function smarterPPLink($matches)
- {
- $options = $this->_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];
- }
-}
-?>
diff --git a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Lists.php b/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Lists.php
deleted file mode 100755
index 514e81ae73a..00000000000
--- a/thirdparty/HTML_BBCodeParser2/HTML/BBCodeParser2/Filter/Lists.php
+++ /dev/null
@@ -1,105 +0,0 @@
- |
-// +----------------------------------------------------------------------+
-//
-// $Id$
-//
-
-
-/**
-* @package HTML_BBCodeParser2
-* @author Stijn de Reede
-*/
-
-require_once 'HTML/BBCodeParser2/Filter.php';
-
-/**
- *
- */
-class HTML_BBCodeParser2_Filter_Lists extends HTML_BBCodeParser2_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 , Seth Price
- */
- function _preparse()
- {
- $options = $this->_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);
- }
-}
diff --git a/thirdparty/HTML_BBCodeParser2/README b/thirdparty/HTML_BBCodeParser2/README
deleted file mode 100755
index 96d39122392..00000000000
--- a/thirdparty/HTML_BBCodeParser2/README
+++ /dev/null
@@ -1,19 +0,0 @@
-This package is http://pear.php.net/package/HTML_BBCodeParser2
-
-Please report all new issues via the PEAR bug tracker.
-
-If this package is marked as unmaintained and you have fixes, please submit your pull requests and start discussion on the pear-qa mailing list.
-
-To test, run either
-$ phpunit tests/
- or
-$ pear run-tests -r
-
-To build, simply
-$ pear package
-
-To install from scratch
-$ pear install package.xml
-
-To upgrade
-$ pear upgrade -f package.xml
diff --git a/thirdparty/HTML_BBCodeParser2/TODO b/thirdparty/HTML_BBCodeParser2/TODO
deleted file mode 100755
index 99737441850..00000000000
--- a/thirdparty/HTML_BBCodeParser2/TODO
+++ /dev/null
@@ -1,14 +0,0 @@
-TODO
-- fix bugs reported through http://pear.php.net/bugs/ (373, 512)
-- think about custom runtime tag loading (Stan Lemon was busy with this)
-- make sure
is embedded in
of
-- add a nl2br option
-- maybe add default value for attributes (target in url)
-- try to fix recursive lists (only occurs with [*] shorthand)
-- make it possible to use spaces in argument values with quotes
-
-DONE
-- fix urls with strange characters (#, &, spaces)
-- add more advanced text filter (color, size, quote, code, etc)
-- check for notice errors (undefined offset)
-- fixed bugs 484, 486, 518, 508, 462
\ No newline at end of file
diff --git a/thirdparty/HTML_BBCodeParser2/composer.json b/thirdparty/HTML_BBCodeParser2/composer.json
deleted file mode 100755
index c14aba09357..00000000000
--- a/thirdparty/HTML_BBCodeParser2/composer.json
+++ /dev/null
@@ -1,33 +0,0 @@
-{
- "authors": [
- {
- "email": "sjr@gmx.co.uk",
- "name": "Stijn de Reede",
- "role": "Lead"
- },
- {
- "email": "clockwerx@php.net",
- "name": "Daniel O'Connor",
- "role": "Lead"
- }
- ],
- "autoload": {
- "psr-0": {
- "HTML": "./"
- }
- },
- "description": "A PHP5 replacement for HTML_BBCodeParser",
- "include-path": [
- "./"
- ],
- "license": "PHP License",
- "name": "pear/html_bbcodeparser2",
- "support": {
- "issues": "http://pear.php.net/bugs/search.php?cmd=display&package_name[]=HTML_BBCodeParser2",
- "source": "https://github.com/pear/HTML_BBCodeParser2"
- },
- "type": "library",
- "require-dev": {
- "phpunit/phpunit": "*"
- }
-}
diff --git a/thirdparty/HTML_BBCodeParser2/example/BBCodeParser2.ini b/thirdparty/HTML_BBCodeParser2/example/BBCodeParser2.ini
deleted file mode 100755
index eba1173977e..00000000000
--- a/thirdparty/HTML_BBCodeParser2/example/BBCodeParser2.ini
+++ /dev/null
@@ -1,23 +0,0 @@
-[HTML_BBCodeParser2]
-
-; possible values: single|double
-; use single or double quotes for attributes
-quotestyle = single
-
-; possible values: all|nothing|strings
-; quote all attribute values, none, or only the strings
-quotewhat = all
-
-; the opening tag character
-open = [
-
-; the closing tag character
-close = ]
-
-; possible values: true|false
-; use xml style closing tags for single html tags ( or )
-xmlclose = true
-
-; possible values: a comma seperated list of filters
-; comma seperated list of filters to use
-filters = Basic,Extended,Images,Links,Lists,Email
diff --git a/thirdparty/HTML_BBCodeParser2/example/parser.php b/thirdparty/HTML_BBCodeParser2/example/parser.php
deleted file mode 100755
index 9290d640dd8..00000000000
--- a/thirdparty/HTML_BBCodeParser2/example/parser.php
+++ /dev/null
@@ -1,107 +0,0 @@
-setText($_GET['string']);
-$parser->parse();
-$parsed = $parser->getParsed();
-
-?>
-
-
-
-HTML_BBCodeParser2 (by Stijn de Reede)
-
-
-
-
diff --git a/thirdparty/HTML_BBCodeParser2/package.xml b/thirdparty/HTML_BBCodeParser2/package.xml
deleted file mode 100755
index 30d1c1d03f5..00000000000
--- a/thirdparty/HTML_BBCodeParser2/package.xml
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
- HTML_BBCodeParser2
- pear.php.net
- This is a parser to replace UBB style tags with their html equivalents.
- This is a parser to replace UBB style tags with their html equivalents.
- It does not simply do some regex calls, but is complete stack based parse engine. This ensures that all tags are properly nested, if not, extra tags are added to maintain the nesting. This parser should only produce xhtml 1.0 compliant code. All tags are validated and so are all their attributes. It should be easy to extend this parser with your own tags.
-
- Stijn de Reede
- sjr
- sjr@gmx.co.uk
- no
-
-
- Daniel O'Connor
- doconnor
- clockwerx@php.net
- yes
-
- 2012-11-03
-
-
- 0.1.0
- 0.1.0
-
-
- beta
- beta
-
- PHP License
-
-Forked from HTML_BBCodeParser
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 5.0.0
-
-
- 1.5.4
-
-
-
-
-
-
-
- 0.1.0
- 0.1.0
-
-
- stable
- stable
-
- 2012-11-03
- PHP License
-
-Forked from HTML_BBCodeParser
-
-
-
-
diff --git a/thirdparty/HTML_BBCodeParser2/tests/HTML_BBCodeParser2Test.php b/thirdparty/HTML_BBCodeParser2/tests/HTML_BBCodeParser2Test.php
deleted file mode 100755
index 21f82248693..00000000000
--- a/thirdparty/HTML_BBCodeParser2/tests/HTML_BBCodeParser2Test.php
+++ /dev/null
@@ -1,237 +0,0 @@
- ''));
- $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_BBCodeParser2(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('guest@anonymous.org', $bbc->$funcNam('guest@anonymous.org'));
- $this->assertEquals('mail me', $bbc->$funcNam('[email=guest@anonymous.org]mail me[/email]'));
- $this->assertEquals('guest@anonymous.org', $bbc->$funcNam('[email]guest@anonymous.org[/email]'));
- }
-
- function imgBBCode($bbc, $funcNam)
- {
- $this->assertEquals('', $bbc->$funcNam('[img w=100 h=99 alt=Enthalpy Wheel]/images/Enthalpy Wheel.png[/img]'));
- $this->assertEquals('', $bbc->$funcNam('[img]img.jpg[/img]'));
- $this->assertEquals('', $bbc->$funcNam('[img w=100 h=200]http://www.server.org/image.jpg[/img]'));
- }
-
- function basicBBCode($bbc, $funcNam)
- {
- $this->assertEquals('txt', $bbc->$funcNam('[b]txt[/b]'));
- $this->assertEquals('txt', $bbc->$funcNam('[b]txt'));
- $this->assertEquals('txt', $bbc->$funcNam('[i]txt[/i]'));
- $this->assertEquals('txt', $bbc->$funcNam('[i]txt[/I]'));
- $this->assertEquals('txt', $bbc->$funcNam('[I]txt[/i]'));
- $this->assertEquals('txt', $bbc->$funcNam('[I]txt[/I]'));
- $this->assertEquals('txt', $bbc->$funcNam('[s]txt[/s]'));
- $this->assertEquals('txt', $bbc->$funcNam('[u]txt[/u]'));
- $this->assertEquals('txt', $bbc->$funcNam('[sub]txt[/sub]'));
- $this->assertEquals('txt', $bbc->$funcNam('[sup]txt[/sup]'));
- $this->assertEquals('txt', $bbc->$funcNam('[sup][sub]txt[/sup][/sub]'));
- $this->assertEquals('txt', $bbc->$funcNam('[i][b]txt[/i][/b]'));
- }
-
- function listBBCode($bbc, $funcNam)
- {
- $this->assertEquals('
', $bbc->$funcNam('[h2]txt[/h2]'));
- $this->assertEquals('blue text', $bbc->$funcNam('[color=blue]blue text[/color]'));
- $this->assertEquals('the size of this text is 18pt', $bbc->$funcNam('[size=18]the size of this text is 18pt[/size]'));
- $this->assertEquals('different font type', $bbc->$funcNam('[font=arial]different font type[/font]'));
- $this->assertEquals('
yes, you\'re right, this isn\'t on the left
', $bbc->$funcNam('[align=right]yes, you\'re right, this isn\'t on the left[/align]'));
- $this->assertEquals('he said: i\'m tony montana', $bbc->$funcNam('he said: [quote=http://www.server.org/quote.html]i\'m tony montana[/quote]'));
- $this->assertEquals('x + y = 6;', $bbc->$funcNam('[code]x + y = 6;[/code]'));
- //Bug #1258: Extra tags rendered with faulty BBCode
- $this->assertEquals(
- 'my name NeverMind!',
- $bbc->$funcNam('[font=Verdana][color=red]my name NeverMind![/font][/color]')
- );
- //Bug #1979: Whitespaces in attribute are breaking it
- $this->assertEquals(
- 'txt',
- $bbc->$funcNam('[font=Comic Sans MS]txt[/font]')
- );
- //Bug #4844: Arbitrary HTML injection
- $this->assertEquals(
- '',
- $bbc->$funcNam('[align=foo">][/align]')
- );
- }
-
-
-
- /**
- * An empty
had been included for the first space
- */
- function testBug11400()
- {
- $bbc = new HTML_BBCodeParser2(array('filters' => ''));
- $bbc->addFilter('Lists');
-
- //this works
- $this->assertEquals('
one
two
',
- $bbc->qparse("[ulist][*]one[*]two[/ulist]")
- );
- //this not
- $this->assertEquals('