From 7c9d922b96f9a88b350d6e07f5bde84ccc40f9b0 Mon Sep 17 00:00:00 2001 From: thomascube <thomas@roundcube.net> Date: Tue, 02 Mar 2010 16:27:53 -0500 Subject: [PATCH] New recent check based on UIDs --- program/steps/mail/spell_pspell.inc | 19 +++++++++++++------ 1 files changed, 13 insertions(+), 6 deletions(-) diff --git a/program/steps/mail/spell_pspell.inc b/program/steps/mail/spell_pspell.inc index 102ef5a..b443ed5 100644 --- a/program/steps/mail/spell_pspell.inc +++ b/program/steps/mail/spell_pspell.inc @@ -23,12 +23,15 @@ raise_error(array( 'code' => 500, 'type' => 'php', - 'file' => __FILE__, + 'file' => __FILE__, 'line' => __LINE__, 'message' => "Pspell extension not available"), true, false); header('HTTP/1.1 404 Not Found'); exit; } + +// max. number of suggestions for one word +define('MAX_SUGGESTIONS', 10); // read input $data = file_get_contents('php://input'); @@ -40,21 +43,25 @@ $text = html_entity_decode($text, ENT_QUOTES, RCMAIL_CHARSET); // tokenize -$words = preg_split('/[ !"#$%&()*+\\,-.\/\n:;<=>?@\[\]^_{|}]+/', $text, NULL, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ); +$words = preg_split('/[ !"#$%&()*+\\,\/\n:;<=>?@\[\]^_{|}-]+|\.[^\w]/', $text, NULL, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ); // init spellchecker $plink = pspell_new(get_input_value('lang', RCUBE_INPUT_GET), null, null, RCMAIL_CHARSET, PSPELL_FAST); // send output -$out = '<?xml version="1.0" encoding="UTF-8"?><spellresult charschecked="'.rc_strlen($text).'">'; +$out = '<?xml version="1.0" encoding="'.RCMAIL_CHARSET.'"?><spellresult charschecked="'.mb_strlen($text).'">'; $diff = 0; foreach ($words as $w) { $word = trim($w[0]); $pos = $w[1] - $diff; - $len = rc_strlen($word); - if ($word && $plink && !pspell_check($plink, $word)) { + $len = mb_strlen($word); + if ($word && $plink && preg_match('/[^0-9\.]/', $word) + && !pspell_check($plink, $word)) { $suggestions = pspell_suggest($plink, $word); + if (sizeof($suggestions)>10) + $suggestions = array_slice($suggestions, 0, MAX_SUGGESTIONS); + $out .= '<c o="'.$pos.'" l="'.$len.'">'; $out .= implode("\t", $suggestions); $out .= '</c>'; @@ -64,7 +71,7 @@ $out .= '</spellresult>'; -header("Content-Type: text/xml"); +header("Content-Type: text/xml; charset=".RCMAIL_CHARSET); echo $out; exit; -- Gitblit v1.9.1