Created
June 24, 2015 17:07
-
-
Save mrubinsk/5c7df14d22d7cdde46ef to your computer and use it in GitHub Desktop.
Text_Filter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
require_once 'PEAR.php'; | |
define('TEXT_HTML_PASSTHRU', 0); | |
define('TEXT_HTML_SYNTAX', 1); | |
define('TEXT_HTML_MICRO', 2); | |
define('TEXT_HTML_MICRO_LINKURL', 3); | |
define('TEXT_HTML_NOHTML', 4); | |
define('TEXT_HTML_NOHTML_NOBREAK', 5); | |
/** | |
* Text_Filter:: is a parent class for defining stackable text filters. | |
* | |
* $Horde: framework/Text_Filter/Filter.php,v 1.28 2008/08/20 05:49:54 slusarz Exp $ | |
* | |
* Copyright 1999-2008 The Horde Project (http://www.horde.org/) | |
* | |
* See the enclosed file COPYING for license information (LGPL). If you | |
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html. | |
* | |
* @author Chuck Hagenbuch <chuck@horde.org> | |
* @author Jan Schneider <jan@horde.org> | |
* @package Horde_Text | |
*/ | |
class Text_Filter { | |
/** | |
* Filter parameters. | |
* | |
* @var array | |
*/ | |
var $_params = array(); | |
/** | |
* Constructor. | |
* | |
* @param array $params Any parameters that the filter instance needs. | |
*/ | |
function Text_Filter($params = array()) | |
{ | |
$this->_params = array_merge($this->_params, $params); | |
} | |
/** | |
* Applies a set of patterns to a block of text. | |
* | |
* @param string $text The text to filter. | |
* @param array $patterns The array of patterns to filter with. | |
* | |
* @return string The transformed text. | |
*/ | |
function filter($text, $filters = array(), $params = array()) | |
{ | |
if (!is_array($filters)) { | |
$filters = array($filters); | |
$params = array($params); | |
} | |
foreach ($filters as $num => $filter) { | |
$filterOb = Text_Filter::factory($filter, isset($params[$num]) ? $params[$num] : array()); | |
if (is_a($filterOb, 'PEAR_Error')) { | |
return $filterOb->getMessage(); | |
} | |
$patterns = $filterOb->getPatterns(); | |
/* Pre-processing. */ | |
$text = $filterOb->preProcess($text); | |
/* str_replace() simple patterns. */ | |
if (isset($patterns['replace'])) { | |
$text = str_replace(array_keys($patterns['replace']), array_values($patterns['replace']), $text); | |
} | |
/* preg_replace complex patterns. */ | |
if (isset($patterns['regexp'])) { | |
$text = preg_replace(array_keys($patterns['regexp']), array_values($patterns['regexp']), $text); | |
} | |
/* Post-processing. */ | |
$text = $filterOb->postProcess($text); | |
} | |
return $text; | |
} | |
/** | |
* Executes any code necessaray before applying the filter | |
* patterns. | |
* | |
* @param string $text The text before the filtering. | |
* | |
* @return string The modified text. | |
*/ | |
function preProcess($text) | |
{ | |
return $text; | |
} | |
/** | |
* Returns a hash with replace patterns. | |
* | |
* @return array Patterns hash. | |
*/ | |
function getPatterns() | |
{ | |
return array(); | |
} | |
/** | |
* Executes any code necessaray after applying the filter | |
* patterns. | |
* | |
* @param string $text The text after the filtering. | |
* | |
* @return string The modified text. | |
*/ | |
function postProcess($text) | |
{ | |
return $text; | |
} | |
/** | |
* Attempts to return a concrete Text_filter instance based on | |
* $driver. | |
* | |
* @param mixed $driver The type of concrete Text_Filter subclass to | |
* return. This is based on the filter driver | |
* ($driver). The code is dynamically included. If | |
* $driver is an array, then we will look in | |
* $driver[0] for the subclass implementation named | |
* $driver[1].php. | |
* @param array $params A hash containing any additional configuration | |
* parameters a subclass might need. | |
* | |
* @return Text_Filter The newly created concrete Text_Filter instance, | |
* or false on an error. | |
*/ | |
function &factory($driver, $params = array()) | |
{ | |
if (is_array($driver)) { | |
list($dir, $driver) = $driver; | |
} | |
$class = 'Text_Filter_' . $driver; | |
if (!class_exists($class)) { | |
if (!empty($dir)) { | |
include_once $dir . '/' . $driver . '.php'; | |
} else { | |
include_once 'Horde/Text/Filter/' . $driver . '.php'; | |
} | |
} | |
if (class_exists($class)) { | |
$filter = new $class($params); | |
} else { | |
$filter = PEAR::raiseError('Class definition of ' . $class . ' not found.'); | |
} | |
return $filter; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment