Source for file php_pspell.php

Documentation is available at php_pspell.php

  1. <?php
  2. /**
  3.  * PHP pspell spellcheck class functions
  4.  * @copyright 2006-2020 The SquirrelMail Project Team
  5.  * @license http://opensource.org/licenses/gpl-license.php GNU Public License
  6.  * @version $Id: php_pspell.php 14845 2020-01-07 08:09:34Z pdontthink $
  7.  * @package plugins
  8.  * @subpackage squirrelspell
  9.  */
  10.  
  11. /**
  12.  * PHP Pspell class
  13.  * @package plugins
  14.  * @subpackage squirrelspell
  15.  */
  16. class php_pspell extends squirrelspell {
  17.     //
  18.     var $dict = 'en';
  19.     var $subdict = '';
  20.     var $jargon = '';
  21.     var $charset = 'utf-8';
  22.     var $mode = null;
  23.     var $userdic = array();
  24.  
  25.     /**
  26.      */
  27.     var $missed_words = array();
  28.  
  29.     /**
  30.      * Error buffer
  31.      * @var string 
  32.      */
  33.     var $error = '';
  34.     /**
  35.      */
  36.     var $dictionary_link = null;
  37.  
  38.     /**
  39.      * Constructor function
  40.      * @param array $aParams 
  41.      */
  42.     function php_pspell($aParams=array()) {
  43.         if (extension_loaded('pspell')) {
  44.             return $this->set_error('Pspell extension is not available');
  45.         }
  46.         //
  47.         if (isset($aParams['dictionary'])) {
  48.             $aDict explode(',',$aParams['dictionary']);
  49.             if (isset($aDict[0])) $this->dict = trim($aDict[0]);
  50.             if (isset($aDict[1])) $this->subdict = trim($aDict[1]);
  51.             if (isset($aDict[2])) $this->jargon = trim($aDict[2]);
  52.         }
  53.         if (isset($aParams['charset'])) {
  54.             $this->charset = $aParams['charset'];
  55.         }
  56.         if (isset($aParams['userdic'])) {
  57.             $this->userdic = $aParams['userdic'];
  58.         }
  59.         if (isset($aParams['mode'])) {
  60.             $this->mode = $aParams['mode'];
  61.         else {
  62.             $this->mode = PSPELL_FAST;
  63.         }
  64.         // dict, subdict, jargon, charset, spellcheck_type
  65.         $this->dictionary_link = pspell_new($this->dict,$this->subdict,$this->jargon,$this->charset,$this->mode);
  66.     }
  67.  
  68.     // private functions
  69.     function check_word($sWord{
  70.         return pspell_check($this->dictionary_link,$sWord);
  71.     }
  72.  
  73.     function suggest($sWord{
  74.         return pspell_suggest($this->dictionary_link,$sWord);
  75.     }
  76.  
  77.     // public function
  78.  
  79.     /**
  80.      * Check block of text
  81.      * @return array 
  82.      */
  83.     function check_text($sText{
  84.         // resets missed words array
  85.         $this->missed_words = array();
  86.  
  87.         $line 0;
  88.         $start 0;
  89.         $position 0;
  90.         $word '';
  91.         // parse text. sq_* functions are used in order to work with characters and not with bytes
  92.         for ($i 0$i <= sq_strlen($sText,$this->charset)$i++{
  93.             if ($i == sq_strlen($sText,$this->charset)) {
  94.                 // add space in order to check last $word.
  95.                 $char ' ';
  96.             else {
  97.                 $char sq_substr($sText,$i,1,$this->charset);
  98.             }
  99.             // Current
  100.             switch($char{
  101.             case ' ':
  102.             case '.':
  103.             case ';':
  104.             case "\t":
  105.             case "\r":
  106.             case "\n":
  107.                 if (!empty($word)) {
  108.                     if (isset($this->missed_words[$word]|| !$this->check_word($word)) {
  109.                         if (isset($this->missed_words[$word]['suggestions'])) {
  110.                             $this->missed_words[$word]['suggestions'$this->suggest($word);
  111.                         }
  112.                         $this->missed_words[$word]['locations']["$line:$start";
  113.                     }
  114.                     $word '';
  115.                 }
  116.                 if ($char == "\n"{
  117.                     $position 0;
  118.                     $line++;
  119.                 else {
  120.                     $position++;
  121.                 }
  122.                 break;
  123.             default:
  124.                 // a-zA-Z0-9' + 8bit chars (nbspace and other spaces excluded, depends on charset)
  125.                 // add char to word
  126.                 if(empty($word)) {
  127.                     $start $position// squirrelspell adds one space to checked text
  128.                 }
  129.                 $position++;
  130.                 $word.=$char;
  131.             }
  132.         }
  133.         return $this->missed_words;
  134.     }
  135. }

Documentation generated on Mon, 13 Jan 2020 04:23:21 +0100 by phpDocumentor 1.4.3