diff options
-rw-r--r-- | CHANGELOG | 3 | ||||
-rw-r--r-- | config/main.inc.php.dist | 7 | ||||
-rw-r--r-- | program/steps/mail/spell.inc | 48 | ||||
-rw-r--r-- | program/steps/mail/spell_googie.inc | 64 | ||||
-rw-r--r-- | program/steps/mail/spell_pspell.inc | 54 |
5 files changed, 132 insertions, 44 deletions
@@ -1,10 +1,11 @@ CHANGELOG RoundCube Webmail --------------------------- -2008/08/14 (thomasb) +2008/08/15 (thomasb) ---------- - Use current mailbox name in template (#1485256) - Better fix for skipping untagged responses (#1485261) +- Added pspell support patch by Kris Steinhoff (#1483960) 2008/08/09 (alec) ---------- diff --git a/config/main.inc.php.dist b/config/main.inc.php.dist index e79e3f382..5f61b9fe7 100644 --- a/config/main.inc.php.dist +++ b/config/main.inc.php.dist @@ -189,6 +189,10 @@ $rcmail_config['default_charset'] = 'ISO-8859-1'; // requires to be compiled with Open SSL support $rcmail_config['enable_spellcheck'] = TRUE; +// Set the spell checking engine. 'googie' is the default. 'pspell' is also available, +// but requires the Pspell extensions. When using Nox Spell Server, also set 'googie' here. +$rcmail_config['spellcheck_engine'] = 'googie'; + // For a locally installed Nox Spell Server, please specify the URI to call it. // Get Nox Spell Server from http://orangoo.com/labs/?page_id=72 // Leave empty to use the Google spell checking service, what means @@ -197,7 +201,8 @@ $rcmail_config['spellcheck_uri'] = ''; // These languages can be selected for spell checking. // Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); -// Leave empty for default set of Google spell check languages +// Leave empty for default set of Google spell check languages, should be defined +// when using local Pspell extension $rcmail_config['spellcheck_languages'] = NULL; // path to a text file which will be added to each sent message diff --git a/program/steps/mail/spell.inc b/program/steps/mail/spell.inc index 06c050882..a567c7bf6 100644 --- a/program/steps/mail/spell.inc +++ b/program/steps/mail/spell.inc @@ -5,60 +5,24 @@ | program/steps/mail/spell.inc | | | | This file is part of the RoundCube Webmail client | - | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | | Licensed under the GNU GPL | | | | PURPOSE: | - | Submit request to Google's spell checking engine | - | | - | CREDITS: | - | Script from GoogieSpell by amix.dk | + | Invoke the configured or default spell checking engine. | | | +-----------------------------------------------------------------------+ - | Author: Thomas Bruederli <roundcube@gmail.com> | + | Author: Kris Steinhoff <steinhof@umich.edu> | +-----------------------------------------------------------------------+ $Id$ */ -$REMOTE_REQUEST = TRUE; - -// default settings -$host = "ssl://www.google.com"; -$port = 443; -$lang = get_input_value('lang', RCUBE_INPUT_GET); -$path = "/tbproxy/spell?lang=$lang"; - -// spell check uri is configured -if (!empty($CONFIG['spellcheck_uri'])) - { - $a_uri = parse_url($CONFIG['spellcheck_uri']); - $ssl = ($a_uri['scheme']=='https' || $a_uri['scheme']=='ssl'); - $port = $a_uri['port'] ? $a_uri['port'] : ($ssl ? 443 : 80); - $host = ($ssl ? 'ssl://' : '') . $a_uri['host']; - $path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : '') . $lang; - } - -$data = file_get_contents('php://input'); -$store = ""; - -if ($fp = fsockopen($host, $port, $errno, $errstr, 30)) - { - $out = "POST $path HTTP/1.0\r\n"; - $out .= "Host: $host\r\n"; - $out .= "Content-Length: " . strlen($data) . "\r\n"; - $out .= "Content-type: application/x-www-form-urlencoded\r\n"; - $out .= "Connection: Close\r\n\r\n"; - $out .= $data; - fwrite($fp, $out); - - while (!feof($fp)) - $store .= fgets($fp, 128); - fclose($fp); - } +if ($spell_engine = $RCMAIL->config->get('spellcheck_engine', 'googie')) { + include('spell_'.$spell_engine.'.inc'); +} -print $store; +header('HTTP/1.1 404 Not Found'); exit; ?> diff --git a/program/steps/mail/spell_googie.inc b/program/steps/mail/spell_googie.inc new file mode 100644 index 000000000..06c050882 --- /dev/null +++ b/program/steps/mail/spell_googie.inc @@ -0,0 +1,64 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | program/steps/mail/spell.inc | + | | + | This file is part of the RoundCube Webmail client | + | Copyright (C) 2005-2007, RoundCube Dev. - Switzerland | + | Licensed under the GNU GPL | + | | + | PURPOSE: | + | Submit request to Google's spell checking engine | + | | + | CREDITS: | + | Script from GoogieSpell by amix.dk | + | | + +-----------------------------------------------------------------------+ + | Author: Thomas Bruederli <roundcube@gmail.com> | + +-----------------------------------------------------------------------+ + + $Id$ + +*/ + +$REMOTE_REQUEST = TRUE; + +// default settings +$host = "ssl://www.google.com"; +$port = 443; +$lang = get_input_value('lang', RCUBE_INPUT_GET); +$path = "/tbproxy/spell?lang=$lang"; + +// spell check uri is configured +if (!empty($CONFIG['spellcheck_uri'])) + { + $a_uri = parse_url($CONFIG['spellcheck_uri']); + $ssl = ($a_uri['scheme']=='https' || $a_uri['scheme']=='ssl'); + $port = $a_uri['port'] ? $a_uri['port'] : ($ssl ? 443 : 80); + $host = ($ssl ? 'ssl://' : '') . $a_uri['host']; + $path = $a_uri['path'] . ($a_uri['query'] ? '?'.$a_uri['query'] : '') . $lang; + } + +$data = file_get_contents('php://input'); +$store = ""; + +if ($fp = fsockopen($host, $port, $errno, $errstr, 30)) + { + $out = "POST $path HTTP/1.0\r\n"; + $out .= "Host: $host\r\n"; + $out .= "Content-Length: " . strlen($data) . "\r\n"; + $out .= "Content-type: application/x-www-form-urlencoded\r\n"; + $out .= "Connection: Close\r\n\r\n"; + $out .= $data; + fwrite($fp, $out); + + while (!feof($fp)) + $store .= fgets($fp, 128); + fclose($fp); + } + +print $store; +exit; + +?> diff --git a/program/steps/mail/spell_pspell.inc b/program/steps/mail/spell_pspell.inc new file mode 100644 index 000000000..ad637e85b --- /dev/null +++ b/program/steps/mail/spell_pspell.inc @@ -0,0 +1,54 @@ +<?php + +/* + +-----------------------------------------------------------------------+ + | program/steps/mail/spell_pspell.inc | + | | + | This file is part of the RoundCube Webmail client | + | Licensed under the GNU GPL | + | | + | PURPOSE: | + | Use the Pspell extension to check spelling, returns results | + | compatible with spell_googie.inc. | + | | + +-----------------------------------------------------------------------+ + | Author: Kris Steinhoff <steinhof@umich.edu> | + +-----------------------------------------------------------------------+ + + $Id$ + +*/ + +if (!extension_loaded('pspell')) { + raise_error(array( + 'code' => 500, + 'file' => __FILE__, + 'message' => "Pspell extension not available"), true, false); + + header('HTTP/1.1 404 Not Found'); + exit; +} + +$data = file_get_contents('php://input'); +$xml = simplexml_load_string($data); +$text = (string)$xml->text; +$words = preg_split('/[ !"#$%&()*+\\,-.\/\n:;<=>?@\[\]^_{|}]+/', $text, NULL, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_OFFSET_CAPTURE ); +$plink = pspell_new(get_input_value('lang', RCUBE_INPUT_GET), null, null, 'utf-8'); +$out = '<?xml version="1.0" encoding="UTF-8"?><spellresult charschecked="'.strlen($text).'">'; +foreach ($words as $w) { + $word = $w[0]; + $pos = $w[1]; + $len = strlen($word); + if (!pspell_check($plink, $word)) { + $suggestions = pspell_suggest($plink, $word); + $out .= '<c o="'.$pos.'" l="'.$len.'">'; + $out .= implode("\t", $suggestions); + $out .= '</c>'; + } +} +$out .= '</spellresult>'; + +echo $out; +exit; + +?> |