XML_SaxFilters
[ class tree: XML_SaxFilters ] [ index: XML_SaxFilters ] [ all elements ]

Source for file FormFilters.php

Documentation is available at FormFilters.php

  1. <?php
  2. # require_once 'XML/SaxFilters.php'; // This is the normal way to do it
  3.  
  4. # Done to help development
  5. if !@include_once 'XML/SaxFilters.php' {
  6.     define('XML_SAXFILTERS''../../../');
  7.     include_once XML_SAXFILTERS . 'SaxFilters.php';
  8. }
  9. require_once(XML_SAXFILTERS.'SaxFilters/FilterBuilder.php');
  10. require_once(XML_SAXFILTERS.'SaxFilters/IO/StringWriter.php');
  11.  
  12. // require PEAR::Validate
  13. require_once('Validate.php');
  14.  
  15. class FormFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  16. {
  17.     var $filterBuilder;
  18.     function FormFilter()
  19.     {
  20.         $maps = array();
  21.         $maps[= new XML_SaxFilters_FilterMap('LinkFilter','A');
  22.         $maps[= new XML_SaxFilters_FilterMap('StrongFilter','B');
  23.         $maps[= new XML_SaxFilters_FilterMap('StrongFilter','STRONG');
  24.         $maps[= new XML_SaxFilters_FilterMap('EmFilter','I');
  25.         $maps[= new XML_SaxFilters_FilterMap('EmFilter','EM');
  26.         $maps[= new XML_SaxFilters_FilterMap('CodeFilter','CODE');
  27.         $maps[= new XML_SaxFilters_FilterMap('TextBlock','BLOCKQUOTE');
  28.         $maps[= new XML_SaxFilters_FilterMap('TextBlock','P');
  29.         $maps[= new XML_SaxFilters_FilterMap('NewlineFilter','BR');
  30.         $maps[= new XML_SaxFilters_FilterMap('ListFilter','OL');
  31.         $maps[= new XML_SaxFilters_FilterMap('ListFilter','UL');
  32.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  33.     }
  34.     function open($name,$attribs{
  35.         if isset $this->child ) )
  36.         {
  37.             $this->child->open($name,$attribs);
  38.         }
  39.         else if $this->filterBuilder->attachFilter($this,$name) )
  40.         {
  41.             $this->child->setWriter($this->writer);
  42.             $this->child->open($name,$attribs);
  43.         }
  44.     }
  45.     function close($name{
  46.         if isset $this->child ) )
  47.         {
  48.             $this->child->close($name);
  49.         }
  50.     }
  51.     function data($data{
  52.         if isset($this->child) )
  53.             $this->child->data($data);
  54.         else
  55.             $this->writer->write($data);
  56.     }
  57.     /**
  58.     * @static
  59.     */
  60.     function buildOpenTag($name,$attrs{
  61.         $openTag '<'.$name;
  62.         foreach $attribs as $key => $value {
  63.             if $value !== true )
  64.                 $openTag .= ' '.$key.='"'.$value.'"';
  65.             else
  66.                 $openTag .= ' '.$key;
  67.         }
  68.         return $openTag.='>';
  69.     }
  70.  
  71. }
  72.  
  73. class LinkFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  74. {
  75.     var $filterBuilder;
  76.     var $opened = false;
  77.     function LinkFilter()
  78.     {
  79.         $maps = array();
  80.         $maps[= new XML_SaxFilters_FilterMap('B','StrongFilter');
  81.         $maps[= new XML_SaxFilters_FilterMap('STRONG','StrongFilter');
  82.         $maps[= new XML_SaxFilters_FilterMap('I','EmFilter');
  83.         $maps[= new XML_SaxFilters_FilterMap('EM','EmFilter');
  84.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  85.     }
  86.     function open($name,$attribs{
  87.         if isset $this->child ) )
  88.         {
  89.             $this->child->open($name,$attribs);
  90.         }
  91.         else if $this->filterBuilder->attachFilter($this,$name) )
  92.         {
  93.             $this->child->setWriter($this->writer);
  94.             $this->child->open($name,$attribs);
  95.         else if !$this->openened && $name == 'A' {
  96.             if isset($attribs['href']&& Validate::url($attribs['href']) ) {
  97.                 $tag '<a href="'.$attribs['href'].' target="_blank">';
  98.                 $this->writer->write($tag);
  99.             }
  100.             $this->opened = true;
  101.         }
  102.     }
  103.     function close($name{
  104.         if isset $this->child ) ) {
  105.             $this->child->close($name);
  106.         else if $name == 'A' {
  107.             $this->writer->write('</a>');
  108.             $this->parent->unsetChild();
  109.         }
  110.     }
  111.     function data($data{
  112.         if isset($this->child) )
  113.             $this->child->data($data);
  114.         else
  115.             $this->writer->write($data);
  116.     }
  117. }
  118.  
  119. class StrongFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  120. {
  121.     var $filterBuilder;
  122.     var $opened = false;
  123.     function StrongFilter()
  124.     {
  125.         $maps = array();
  126.         $maps[= new XML_SaxFilters_FilterMap('A','LinkFilter');
  127.         $maps[= new XML_SaxFilters_FilterMap('I','EmFilter');
  128.         $maps[= new XML_SaxFilters_FilterMap('EM','EmFilter');
  129.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  130.     }
  131.     function open($name,$attribs{
  132.         if isset $this->child ) )
  133.         {
  134.             $this->child->open($name,$attribs);
  135.         }
  136.         else if $this->filterBuilder->attachFilter($this,$name) )
  137.         {
  138.             $this->child->setWriter($this->writer);
  139.             $this->child->open($name,$attribs);
  140.         else if !$this->opened && ($name == 'B' || $name == 'STRONG') ) {
  141.             $this->writer->write('<strong>');
  142.             $this->opened = true;
  143.         }
  144.     }
  145.     function close($name{
  146.         if isset $this->child ) ) {
  147.             $this->child->close($name);
  148.         else if $name == 'B' || $name == 'STRONG' {
  149.             $this->writer->write('</strong>');
  150.             $this->parent->unsetChild();
  151.         }
  152.     }
  153.     function data($data{
  154.         if isset($this->child) )
  155.             $this->child->data($data);
  156.         else
  157.             $this->writer->write($data);
  158.     }
  159. }
  160.  
  161. class EmFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  162. {
  163.     var $filterBuilder;
  164.     var $opened = false;
  165.     function EmFilter()
  166.     {
  167.         $maps = array();
  168.         $maps[= new XML_SaxFilters_FilterMap('A','LinkFilter');
  169.         $maps[= new XML_SaxFilters_FilterMap('B','StrongFilter');
  170.         $maps[= new XML_SaxFilters_FilterMap('STRONG','StrongFilter');
  171.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  172.     }
  173.     function open($name,$attribs{
  174.         if isset $this->child ) )
  175.         {
  176.             $this->child->open($name,$attribs);
  177.         }
  178.         else if $this->filterBuilder->attachFilter($this,$name) )
  179.         {
  180.             $this->child->setWriter($this->writer);
  181.             $this->child->open($name,$attribs);
  182.         else if !$this->opened && $name == 'I' || $name == 'EM' ) ) {
  183.             $this->writer->write('<em>');
  184.             $this->opened = true;
  185.         }
  186.     }
  187.     function close($name{
  188.         if isset $this->child ) ) {
  189.             $this->child->close($name);
  190.         else if $name == 'I' || $name == 'EM' {
  191.             $this->writer->write('</em>');
  192.             $this->parent->unsetChild();
  193.         }
  194.     }
  195.     function data($data{
  196.         if isset($this->child) )
  197.             $this->child->data($data);
  198.         else
  199.             $this->writer->write($data);
  200.     }
  201. }
  202.  
  203. class CodeFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  204. {
  205.     var $opened = false;
  206.     function open($name,$attribs{
  207.         if !$this->opened && $name == 'CODE' {
  208.             $this->writer->write('<code>');
  209.             $this->opened = true;
  210.         else {
  211.             $this->writer->write(FormFilter::buildOpenTag(strtolower($name),$attribs));
  212.         }
  213.     }
  214.     function data($data{
  215.         $this->writer->write($data);
  216.     }
  217.     function close($name{
  218.         if $name == 'CODE' {
  219.             $this->writer->write('</code>');
  220.             $this->parent->unsetChild();
  221.         else {
  222.             $this->writer->write('</'.strtolower($name).'>');
  223.         }
  224.     }
  225. }
  226.  
  227. class TextBlock extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  228. {
  229.     var $filterBuilder;
  230.     var $popened = false;
  231.     var $bopened = false;
  232.     function TextBlock()
  233.     {
  234.         $maps = array();
  235.         $maps[= new XML_SaxFilters_FilterMap('A','LinkFilter');
  236.         $maps[= new XML_SaxFilters_FilterMap('B','StrongFilter');
  237.         $maps[= new XML_SaxFilters_FilterMap('STRONG','StrongFilter');
  238.         $maps[= new XML_SaxFilters_FilterMap('I','EmFilter');
  239.         $maps[= new XML_SaxFilters_FilterMap('EM','EmFilter');
  240.         $maps[= new XML_SaxFilters_FilterMap('CODE','CodeFilter');
  241.         $maps[= new XML_SaxFilters_FilterMap('BR','NewlineFilter');
  242.         $maps[= new XML_SaxFilters_FilterMap('OL','ListFilter');
  243.         $maps[= new XML_SaxFilters_FilterMap('UL','ListFilter');
  244.         $maps[= new XML_SaxFilters_FilterMap('LI','ListItemFilter');
  245.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  246.     }
  247.     function open($name,$attribs{
  248.         if isset $this->child ) )
  249.         {
  250.             $this->child->open($name,$attribs);
  251.         }
  252.         else if $this->filterBuilder->attachFilter($this,$name) )
  253.         {
  254.             $this->child->setWriter($this->writer);
  255.             $this->child->open($name,$attribs);
  256.         else if !$this->popened && $name == 'P' {
  257.             $this->writer->write('<p>');
  258.             $this->popened = true;
  259.         else if !$this->bopened && $name == 'BLOCKQUOTE' {
  260.             $this->writer->write('<blockquote>');
  261.             $this->bopened = true;
  262.         }
  263.     }
  264.     function close($name{
  265.         if isset $this->child ) ) {
  266.             $this->child->close($name);
  267.         else if $name == 'P' {
  268.             $this->writer->write('</p>');
  269.             $this->parent->unsetChild();
  270.         else if $name == 'BLOCKQUOTE' {
  271.             $this->writer->write('</blockquote>');
  272.             $this->parent->unsetChild();
  273.         }
  274.     }
  275.     function data($data{
  276.         if isset($this->child) )
  277.             $this->child->data($data);
  278.         else
  279.             $this->writer->write($data);
  280.     }
  281. }
  282.  
  283. class NewLineFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  284. {
  285.     function open($name,$attribs{
  286.         $this->writer->write('<br />');
  287.         $this->parent->unsetChild();
  288.     }
  289.     function close($name{}
  290.     function data($data{}
  291. }
  292.  
  293. class ListFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  294. {
  295.     var $filterBuilder;
  296.     var $uopened = false;
  297.     var $oopened = false;
  298.     function ListFilter()
  299.     {
  300.         $maps = array();
  301.         $maps[= new XML_SaxFilters_FilterMap('LI','ListItemFilter');
  302.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  303.     }
  304.     function open($name,$attribs{
  305.         if isset $this->child ) )
  306.         {
  307.             $this->child->open($name,$attribs);
  308.         }
  309.         else if $this->filterBuilder->attachFilter($this,$name) )
  310.         {
  311.             $this->child->setWriter($this->writer);
  312.             $this->child->open($name,$attribs);
  313.         }
  314.         else if !$this->uopened && $name == 'UL' )
  315.         {
  316.             $this->writer->write('<ul>');
  317.         }
  318.         else if !$this->oopened && $name == 'OL' )
  319.         {
  320.             $this->writer->write('<ol>');
  321.         }
  322.     }
  323.     function close($name{
  324.         if isset $this->child ) ) {
  325.             $this->child->close($name);
  326.         else if $name == 'UL' {
  327.             $this->writer->write('</ul>');
  328.             $this->parent->unsetChild();
  329.         else if $name == 'OL' {
  330.             $this->writer->write('</ol>');
  331.             $this->parent->unsetChild();
  332.         }
  333.     }
  334.     function data($data{
  335.         if isset($this->child) )
  336.             $this->child->data($data);
  337.     }
  338. }
  339.  
  340. class ListItemFilter extends XML_SaxFilters_AbstractFilter /* implements XML_SaxFilters_FilterInterface */
  341. {
  342.     var $filterBuilder;
  343.     var $opened = false;
  344.     function ListItemFilter()
  345.     {
  346.         $maps = array();
  347.         $maps[= new XML_SaxFilters_FilterMap('A','LinkFilter');
  348.         $maps[= new XML_SaxFilters_FilterMap('B','StrongFilter');
  349.         $maps[= new XML_SaxFilters_FilterMap('STRONG','StrongFilter');
  350.         $maps[= new XML_SaxFilters_FilterMap('I','EmFilter');
  351.         $maps[= new XML_SaxFilters_FilterMap('EM','EmFilter');
  352.         $maps[= new XML_SaxFilters_FilterMap('OL','ListFilter');
  353.         $maps[= new XML_SaxFilters_FilterMap('UL','ListFilter');
  354.         $this->filterBuilder = new XML_SaxFilters_FilterBuilder($maps);
  355.     }
  356.     function open($name,$attribs{
  357.         if isset $this->child ) )
  358.         {
  359.             $this->child->open($name,$attribs);
  360.         }
  361.         else if $this->filterBuilder->attachFilter($this,$name) )
  362.         {
  363.             $this->child->setWriter($this->writer);
  364.             $this->child->open($name,$attribs);
  365.         else if !$this->opened && $name == 'LI' {
  366.             $this->writer->write('<li>');
  367.         }
  368.     }
  369.     function close($name{
  370.         if isset $this->child ) ) {
  371.             $this->child->close($name);
  372.         else if $name == 'LI' {
  373.             $this->writer->write('</li>');
  374.             $this->parent->unsetChild();
  375.         }
  376.     }
  377.     function data($data{
  378.         if isset($this->child) )
  379.             $this->child->data($data);
  380.         else
  381.             $this->writer->write($data);
  382.     }
  383. }
  384.  
  385. function filterForm($text{
  386.     $parser XML_SaxFilters_createParser('HTMLSax','String',$text);
  387.     $parser->parserSetOption('XML_OPTION_CASE_FOLDING',1);
  388.     $filter new FormFilter();
  389.     $writer new XML_SaxFilters_IO_StringWriter();
  390.     $filter->setWriter($writer);
  391.     $parser->setChild($filter);
  392.     $parser->parse();
  393.     $reader $writer->getReader();
  394.     $text '';
  395.     while ( ($slice $reader->read()) !== false {
  396.         $text.=$slice;
  397.     }
  398.     return $text;
  399. }
  400. ?>

Documentation generated on Mon, 11 Mar 2019 10:15:10 -0400 by phpDocumentor 1.4.4. PEAR Logo Copyright © PHP Group 2004.