Added pspell support patch by Kris Steinhoff (#1483960)

release-0.6
thomascube 16 years ago
parent ac5d15de29
commit 5d2b7fd387

@ -1,10 +1,11 @@
CHANGELOG RoundCube Webmail CHANGELOG RoundCube Webmail
--------------------------- ---------------------------
2008/08/14 (thomasb) 2008/08/15 (thomasb)
---------- ----------
- Use current mailbox name in template (#1485256) - Use current mailbox name in template (#1485256)
- Better fix for skipping untagged responses (#1485261) - Better fix for skipping untagged responses (#1485261)
- Added pspell support patch by Kris Steinhoff (#1483960)
2008/08/09 (alec) 2008/08/09 (alec)
---------- ----------

@ -189,6 +189,10 @@ $rcmail_config['default_charset'] = 'ISO-8859-1';
// requires to be compiled with Open SSL support // requires to be compiled with Open SSL support
$rcmail_config['enable_spellcheck'] = TRUE; $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. // 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 // Get Nox Spell Server from http://orangoo.com/labs/?page_id=72
// Leave empty to use the Google spell checking service, what means // 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. // These languages can be selected for spell checking.
// Configure as a PHP style hash array: array('en'=>'English', 'de'=>'Deutsch'); // 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; $rcmail_config['spellcheck_languages'] = NULL;
// path to a text file which will be added to each sent message // path to a text file which will be added to each sent message

@ -5,60 +5,24 @@
| program/steps/mail/spell.inc | | program/steps/mail/spell.inc |
| | | |
| This file is part of the RoundCube Webmail client | | This file is part of the RoundCube Webmail client |
| Copyright (C) 2005-2007, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL | | Licensed under the GNU GPL |
| | | |
| PURPOSE: | | PURPOSE: |
| Submit request to Google's spell checking engine | | Invoke the configured or default spell checking engine. |
| |
| CREDITS: |
| Script from GoogieSpell by amix.dk |
| | | |
+-----------------------------------------------------------------------+ +-----------------------------------------------------------------------+
| Author: Thomas Bruederli <roundcube@gmail.com> | | Author: Kris Steinhoff <steinhof@umich.edu> |
+-----------------------------------------------------------------------+ +-----------------------------------------------------------------------+
$Id$ $Id$
*/ */
$REMOTE_REQUEST = TRUE; if ($spell_engine = $RCMAIL->config->get('spellcheck_engine', 'googie')) {
include('spell_'.$spell_engine.'.inc');
// 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; header('HTTP/1.1 404 Not Found');
exit; exit;
?> ?>

@ -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;
?>

@ -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;
?>
Loading…
Cancel
Save