X-Git-Url: https://vcs.fsf.org/?p=squirrelmail.git;a=blobdiff_plain;f=plugins%2Fsquirrelspell%2Fmodules%2Fcheck_me.mod;h=05c9af987bc875f8be605cd49fcace8713d6dca2;hp=4ff9485c1e0b871df0f8c1ade091fc9ca22c58af;hb=6efba534294f6c7badff2e5436f1665247af7cc3;hpb=90ad8cd181bd2d435465b887d2769836ace5d7f0 diff --git a/plugins/squirrelspell/modules/check_me.mod b/plugins/squirrelspell/modules/check_me.mod index 4ff9485c..05c9af98 100644 --- a/plugins/squirrelspell/modules/check_me.mod +++ b/plugins/squirrelspell/modules/check_me.mod @@ -1,17 +1,17 @@ + * @author Konstantin Riabitsev + * @copyright © 1999-2006 The SquirrelMail Project Team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @version $Id$ * @package plugins * @subpackage squirrelspell @@ -36,7 +36,8 @@ function SpellLink($jscode, $title, $link) { /** * Declaring globals for users with E_ALL set. */ -global $SQSPELL_APP_DEFAULT, $SQSPELL_APP, $attachment_dir, $color; +global $SQSPELL_APP_DEFAULT, $SQSPELL_APP, $SQSPELL_SPELLCHECKER, + $SQSPELL_FORCE_POPEN, $attachment_dir, $color; if (! sqgetGlobalVar('sqspell_text',$sqspell_text,SQ_POST)) { $sqspell_text = ''; @@ -46,12 +47,10 @@ if (! sqgetGlobalVar('sqspell_use_app',$sqspell_use_app,SQ_POST)) { } /** - * Now we explode the lines for three reasons: + * Now we explode the lines for two reasons: * 1) So we can ignore lines starting with ">" (reply's) * 2) So we can stop processing when we get to "--" on a single line, * which means that the signature is starting - * 3) So we can add an extra space at the beginning of each line. This way - * ispell/aspell don't treat these as command characters. */ $sqspell_raw_lines = explode("\n", $sqspell_text); for ($i=0; $i= 4.3.0, we can use proc_open and safe mode - * and not mess w/ temp files. Otherwise we will do it the old - * way, (minus the uneeded call to cat that messes up Wintel - * boxen.) - * Thanks Ray Ferguson for providing this patch. - */ -if( check_php_version ( 4, 3 ) ) { - $descriptorspec = array( - 0 => array('pipe', 'r'), // stdin is a pipe that the child will read from - 1 => array('pipe', 'w'), // stdout is a pipe that the child will write to - 2 => array('pipe', 'w'), // stderr is a pipe that the child will write to - ); - $spell_proc = @proc_open($sqspell_command, $descriptorspec, $pipes); - if ( ! is_resource ( $spell_proc ) ) { - error_box ( _("Could not run the spellchecker command (%s).", - htmlspecialchars($sqspell_command) ) , $color ); - } - if ( ! @fwrite($pipes[0], $sqspell_new_text) ) { - error_box ( _("Error while writing to pipe.", - htmlspecialchars($floc) ) , $color ); - } - fclose($pipes[0]); - $sqspell_output = array(); - for($i=1; $i<=2; $i++) { - while(!feof($pipes[$i])) { - array_push($sqspell_output, rtrim(fgetss($pipes[$i],999),"\n")); - } - fclose($pipes[$i]); - } - $sqspell_exitcode=proc_close($spell_proc); +include_once(SM_PATH . 'plugins/squirrelspell/class/common.php'); + +$aParams = array(); +$aParams['words'] = sqspell_getLang($sqspell_use_app); + +if ($SQSPELL_SPELLCHECKER===1) { + include_once(SM_PATH . 'plugins/squirrelspell/class/php_pspell.php'); + $aParams['dictionary'] = $SQSPELL_APP[$sqspell_use_app]; + $aParams['charset'] = $default_charset; + $check = new php_pspell($aParams); } else { - do { - $floc = "$attachment_dir/" . md5($sqspell_new_text . microtime()); - } while (file_exists($floc)); - $fp = @fopen($floc, 'w'); - if ( ! is_resource ($fp) ) { - error_box ( _("Could not open temporary file '%s'.", - htmlspecialchars($floc) ) , $color ); + include_once(SM_PATH . 'plugins/squirrelspell/class/cmd_spell.php'); + $aParams['spell_command'] = $SQSPELL_APP[$sqspell_use_app]; + if ($SQSPELL_FORCE_POPEN) { + $aParams['use_proc_open'] = false; + } else { + $aParams['use_proc_open'] = check_php_version(4,3); } - if ( ! @fwrite($fp, $sqspell_new_text) ) { - error_box ( _("Error while writing to temporary file '%s'.", - htmlspecialchars($floc) ) , $color ); - } - fclose($fp); - exec("$sqspell_command < $floc 2>&1", $sqspell_output, $sqspell_exitcode); - unlink($floc); + $aParams['temp_dir'] = $attachment_dir; + $aParams['debug'] = false; + $check = new cmd_spell($aParams); } /** - * Check if the execution was successful. Bail out if it wasn't. + * Check for class constructor function errors */ -if ($sqspell_exitcode){ - $msg= "
" - . sprintf(_("I tried to execute '%s', but it returned:"), - $sqspell_command) . "
"
-     . htmlspecialchars(join("\n", $sqspell_output)) . '
' +if (!empty($check->error)) { + $msg= '
' + . nl2br(htmlspecialchars($check->error)) . '
' . '
'; @@ -147,87 +114,56 @@ if ($sqspell_exitcode){ exit; } -/** - * Load the user dictionary. - */ -$words=sqspell_getLang($sqspell_use_app); -/** - * Define some variables to be used during the processing. - */ -$current_line=0; $missed_words=Array(); $misses = Array(); $locations = Array(); $errors=0; +$results = $check->check_text($sqspell_new_text); + /** - * Now we process the output of sqspell_command (ispell or aspell in - * ispell compatibility mode, whichever). I'm going to be scarce on - * comments here, since you can just look at the ispell/aspell output - * and figure out what's going on. ;) The best way to describe this is - * "Dark Magic". + * Check for execution errors */ -for ($i=0; $ierror)) { + $msg= '
' + . nl2br(htmlspecialchars($check->error)) + . '
' + . '
'; + sqspell_makeWindow(null, _("SquirrelSpell is misconfigured."), null, $msg); + exit; +} + +if (is_array($results)) { + // convert variables to old style squirrelspell results + if (!empty($results)) { + foreach(array_keys($results) as $word) { + if (isset($results[$word]['locations'])) { + $missed_words[] = $word; + $locations[$word] = implode(', ',$results[$word]['locations']); + if (isset($results[$word]['suggestions'])) { + $misses[$word] = implode(', ',$results[$word]['suggestions']); + } else { + $misses[$word] = '_NONE'; + } + } else { + // $word without 'locations'. ignore it + } + } + $errors = count($missed_words); } - break; - /** - * Line begins with "#". - * This means a misspelled word and no suggestions. - */ - case '#': - $tmparray = explode(" ", $sqspell_output[$i]); - $sqspell_word=$tmparray[1]; - /** - * - * Check if the word is in user dictionary. - */ - if (!in_array($sqspell_word,$words)){ - $sqspell_symb=intval($tmparray[2])-1; - if (!isset($misses[$sqspell_word])) { - $misses[$sqspell_word] = '_NONE'; - $missed_words[$errors] = $sqspell_word; - $errors++; - } - if (isset($locations[$sqspell_word])) { - $locations[$sqspell_word] .= ', '; - } else { - $locations[$sqspell_word] = ''; - } - $locations[$sqspell_word] .= "$current_line:$sqspell_symb"; +} else { + if (!empty($check->error)) { + $error_msg = nl2br(htmlspecialchars($check->error)); + } else { + $error_msg = _("Unknown error"); } - break; - } + $msg= '
' + . $error_msg + . '
' + . '
'; + sqspell_makeWindow(null, _("SquirrelSpell error."), null, $msg); + exit; } if ($errors){ @@ -245,8 +181,9 @@ if ($errors){ */ $extrajs.= "var sqspell_lines=new Array();\n"; for ($i=0; $i - + @@ -336,7 +273,7 @@ if ($errors){ ?>
+ onfocus="this.blur()"> @@ -441,7 +378,7 @@ if ($errors){ /** * AREN'T YOU SUCH A KNOW-IT-ALL! */ - $msg='
' . + $msg='
' . '
'; sqspell_makeWindow(null, _("No errors found"), null, $msg); @@ -454,4 +391,3 @@ if ($errors){ * End: * vim: syntax=php et ts=4 */ -?> \ No newline at end of file