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