Page Menu
Home
Phorge
Search
Configure Global Search
Log In
Files
F117887103
spell_pspell.inc
No One
Temporary
Actions
Download File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
2 KB
Referenced Files
None
Subscribers
None
spell_pspell.inc
View Options
<
?
php
/*
+-----------------------------------------------------------------------+
| program/steps/utils/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
,
'
type
'
=
>
'
php
'
,
'
file
'
=
>
__FILE__
,
'
line
'
=
>
__LINE__
,
'
message
'
=
>
"Pspell extension not available"
),
true
,
false
);
header
(
'
HTTP
/
1.1
404
Not
Found
'
);
exit
;
}
// read input
$
data
=
file_get_contents
(
'
php
:
//input');
// parse data (simplexml_load_string breaks CRLFs)
$
left
=
strpos
(
$
data
,
'
<
text
>
'
);
$
right
=
strrpos
(
$
data
,
'
<
/
text
>
'
);
$
text
=
substr
(
$
data
,
$
left
+
6
,
$
right
-
(
$
left
+
6
));
$
text
=
html_entity_decode
(
$
text
,
ENT_QUOTES
,
RCMAIL_CHARSET
);
// tokenize
$
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="
'.
RCMAIL_CHARSET
.'
"?><spellresult charschecked="
'.
mb_strlen
(
$
text
)
.'
">';
$diff = 0;
foreach ($words as $w) {
$word = trim($w[0]);
$pos = $w[1] - $diff;
$len = mb_strlen($word);
if ($word && $plink && preg_match('/[^0-9\.]/', $word)
&& !pspell_check($plink, $word)) {
$suggestions = pspell_suggest($plink, $word);
if (sizeof($suggestions)>MAX_SUGGESTIONS)
$suggestions = array_slice($suggestions, 0, MAX_SUGGESTIONS);
$out .= '<c o="
'.$
pos
.'
" l="
'.$
len
.'
">';
$out .= implode("
\
t
", $suggestions);
$out .= '</c>';
}
$diff += (strlen($word) - $len);
}
$out .= '</spellresult>';
header("
Content
-
Type
:
text
/
xml
;
charset
=
".
RCMAIL_CHARSET
);
echo
$
out
;
exit
;
File Metadata
Details
Attached
Mime Type
text/x-php
Expires
Mon, Apr 6, 2:50 AM (2 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
18829132
Default Alt Text
spell_pspell.inc (2 KB)
Attached To
Mode
R113 roundcubemail
Attached
Detach File
Event Timeline