     1: <?php
     2: /*************************************************************************************/
     3: /*                                                                                   */
     4: /*      Thelia                                                                       */
     5: /*                                                                                   */
     6: /*      Copyright (c) OpenStudio                                                     */
     7: /*      email : info@thelia.net                                                      */
     8: /*      web : http://thelia.net                                                  */
     9: /*                                                                                   */
    10: /*      This program is free software; you can redistribute it and/or modify         */
    11: /*      it under the terms of the GNU General Public License as published by         */
    12: /*      the Free Software Foundation; either version 3 of the License                */
    13: /*                                                                                   */
    14: /*      This program is distributed in the hope that it will be useful,              */
    15: /*      but WITHOUT ANY WARRANTY; without even the implied warranty of               */
    16: /*      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the                */
    17: /*      GNU General Public License for more details.                                 */
    18: /*                                                                                   */
    19: /*      You should have received a copy of the GNU General Public License            */
    20: /*      along with this program. If not, see <http://www.gnu.org/licenses/>.         */
    21: /*                                                                                   */
    22: /*************************************************************************************/
    23:
    24: namespace Thelia\Tpex\Filter;
    25:
    26: abstract class BaseFilter
    27: {
    28:     protected $regexp;
    29:
    30:     public function __construct()
    31:     {
    32:         $this->regexp = $this->defineRegex();
    33:     }
    34:
    35:     abstract public function defineRegex();
    36:     abstract public function interpret($match);
    37:
    38:     public function exec($text)
    39:     {
    40:         if (preg_match_all($this->regexp, $text, $matches, PREG_SET_ORDER)) {
    41:
    42:             foreach ($matches as $match) {
    43:
    44:                 $text = substr_replace(
    45:                     $text,
    46:                     $this->interpret($match),
    47:                     strpos($text, $match[0]),
    48:                     strlen($match[0])
    49:                 );
    50:             }
    51:
    52:             return $text;
    53:         }
    54:     }
    55:
    56: }
    57: