home *** CD-ROM | disk | FTP | other *** search
/ Cricao de Sites - 650 Layouts Prontos / WebMasters.iso / Servidores / xampp-win32-1.6.7-installer.exe / php / PEAR / Text / Wiki / Parse / Default / Smiley.php < prev    next >
Encoding:
PHP Script  |  2008-07-02  |  5.9 KB  |  158 lines

  1. <?php
  2. // vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4:
  3. /**
  4.  * Default: Parses for smileys / emoticons tags
  5.  *
  6.  * This class implements a Text_Wiki_Rule to find source text marked as
  7.  * smileys defined by symbols as ':)' , ':-)' or ':smile:'
  8.  * The symbol is replaced with a token.
  9.  *
  10.  * PHP versions 4 and 5
  11.  *
  12.  * @category   Text
  13.  * @package    Text_Wiki
  14.  * @author     Bertrand Gugger <bertrand@toggg.com>
  15.  * @copyright  2005 bertrand Gugger
  16.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  17.  * @version    CVS: $Id: Smiley.php,v 1.6 2005/10/04 08:17:51 toggg Exp $
  18.  * @link       http://pear.php.net/package/Text_Wiki
  19.  */
  20.  
  21. /**
  22.  * Smiley rule parser class for Default.
  23.  *
  24.  * @category   Text
  25.  * @package    Text_Wiki
  26.  * @author     Bertrand Gugger <bertrand@toggg.com>
  27.  * @copyright  2005 bertrand Gugger
  28.  * @license    http://www.gnu.org/copyleft/lesser.html  LGPL License 2.1
  29.  * @version    Release: @package_version@
  30.  * @link       http://pear.php.net/package/Text_Wiki
  31.  * @see        Text_Wiki_Parse::Text_Wiki_Parse()
  32.  */
  33. class Text_Wiki_Parse_Smiley extends Text_Wiki_Parse {
  34.  
  35.     /**
  36.      * Configuration keys for this rule
  37.      * 'smileys' => array Smileys recognized by this rule, symbols key definitions:
  38.      *              'symbol' => array ( 'name', 'description' [, 'variante', ...] ) as
  39.      *                  ':)'  => array('smile', 'Smile'),
  40.      *                  ':D'  => array('biggrin', 'Very Happy',':grin:'),
  41.      *              the eventual elements after symbol and description are variantes
  42.      *
  43.      * 'auto_nose' => boolean enabling the auto nose feature:
  44.      *                auto build a variante for 2 chars symbols by inserting a '-' as ':)' <=> ':-)'
  45.      *
  46.      * @access public
  47.      * @var array 'config-key' => mixed config-value
  48.      */
  49.     var $conf = array(
  50.         'smileys' => array(
  51.             ':D'        => array('biggrin', 'Very Happy', ':grin:'),
  52.             ':)'        => array('smile', 'Smile', '(:'),
  53.             ':('        => array('sad', 'Sad', '):'),
  54.             ':o'        => array('surprised', 'Surprised', ':eek:', 'o:'),
  55.             ':shock:'   => array('eek', 'Shocked'),
  56.             ':?'        => array('confused', 'Confused', ':???:'),
  57.             '8)'        => array('cool', 'Cool', '(8'),
  58.             ':lol:'     => array('lol', 'Laughing'),
  59.             ':x'        => array('mad', 'Mad'),
  60.             ':P'        => array('razz', 'Razz'),
  61.             ':oops:'    => array('redface', 'Embarassed'),
  62.             ':cry:'     => array('cry', 'Crying or Very sad'),
  63.             ':evil:'    => array('evil', 'Evil or Very Mad'),
  64.             ':twisted:' => array('twisted', 'Twisted Evil'),
  65.             ':roll:'    => array('rolleyes', 'Rolling Eyes'),
  66.             ';)'        => array('wink', 'Wink', '(;'),
  67.             ':!:'       => array('exclaim', 'Exclamation'),
  68.             ':?:'       => array('question', 'Question'),
  69.             ':idea:'    => array('idea', 'Idea'),
  70.             ':arrow:'   => array('arrow', 'Arrow'),
  71.             ':|'        => array('neutral', 'Neutral', '|:'),
  72.             ':mrgreen:' => array('mrgreen', 'Mr. Green'),
  73.         ),
  74.         'auto_nose' => true
  75.     );
  76.  
  77.     /**
  78.      * Definition array of smileys, variantes references their model
  79.      * 'symbol' => array ( 'name', 'description')
  80.      *
  81.      * @access private
  82.      * @var array 'config-key' => mixed config-value
  83.      */
  84.     var $_smileys = array();
  85.  
  86.      /**
  87.      * Constructor.
  88.      * We override the constructor to build up the regex from config
  89.      *
  90.      * @param object &$obj the base conversion handler
  91.      * @return The parser object
  92.      * @access public
  93.      */
  94.     function Text_Wiki_Parse_Smiley(&$obj)
  95.     {
  96.         $default = $this->conf;
  97.         parent::Text_Wiki_Parse($obj);
  98.  
  99.         // read the list of smileys to sort out variantes and :xxx: while building the regexp
  100.         $this->_smileys = $this->getConf('smileys', $default['smileys']);
  101.         $autoNose = $this->getConf('auto_nose', $default['auto_nose']);
  102.         $reg1 = $reg2 = '';
  103.         $sep1 = ':(?:';
  104.         $sep2 = '';
  105.         foreach ($this->_smileys as $smiley => $def) {
  106.             for ($i = 1; $i < count($def); $i++) {
  107.                 if ($i > 1) {
  108.                     $cur = $def[$i];
  109.                     $this->_smileys[$cur] = &$this->_smileys[$smiley];
  110.                 } else {
  111.                     $cur = $smiley;
  112.                 }
  113.                 $len = strlen($cur);
  114.                 if (($cur{0} == ':') && ($len > 2) && ($cur{$len - 1} == ':')) {
  115.                     $reg1 .= $sep1 . preg_quote(substr($cur, 1, -1), '#');
  116.                     $sep1 = '|';
  117.                     continue;
  118.                 }
  119.                 if ($autoNose && ($len === 2)) {
  120.                     $variante = $cur{0} . '-' . $cur{1};
  121.                     $this->_smileys[$variante] = &$this->_smileys[$smiley];
  122.                     $cur = preg_quote($cur{0}, '#') . '-?' . preg_quote($cur{1}, '#');
  123.                 } else {
  124.                     $cur = preg_quote($cur, '#');
  125.                 }
  126.                 $reg2 .= $sep2 . $cur;
  127.                 $sep2 = '|';
  128.             }
  129.         }
  130.         $delim = '[\n\r\s' . $this->wiki->delim . '$^]';
  131.         $this->regex = '#(?<=' . $delim .
  132.              ')(' . ($reg1 ? $reg1 . '):' . ($reg2 ? '|' : '') : '') . $reg2 .
  133.              ')(?=' . $delim . ')#i';
  134.     }
  135.  
  136.     /**
  137.      * Generates a replacement token for the matched text.  Token options are:
  138.      *     'symbol' => the original marker
  139.      *     'name' => the name of the smiley
  140.      *     'desc' => the description of the smiley
  141.      *
  142.      * @param array &$matches The array of matches from parse().
  143.      * @return string Delimited token representing the smiley
  144.      * @access public
  145.      */
  146.     function process(&$matches)
  147.     {
  148.         // tokenize
  149.         return $this->wiki->addToken($this->rule,
  150.             array(
  151.                 'symbol' => $matches[1],
  152.                 'name'   => $this->_smileys[$matches[1]][0],
  153.                 'desc'   => $this->_smileys[$matches[1]][1]
  154.             ));
  155.     }
  156. }
  157. ?>
  158.