Added pspell support patch by Kris Steinhoff (#1483960)
3 files modified
2 files added
| | |
| | | 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) |
| | | ---------- |
| | |
| | | // 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 |
| | |
| | | |
| | | // 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 |
| | |
| | | | 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; |
| | | 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; |
| | | |
| | | ?> |
New file |
| | |
| | | <?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; |
| | | |
| | | ?> |
New file |
| | |
| | | <?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; |
| | | |
| | | ?> |