($Author$)
* @version $Date$
*/
/**
* This function makes a javascript-powered link. Not sure why
* Philippe decided to move it outside the main code, but hey. ;)
* I bet for the i18n reasons.
*
* @param $jscode Javascript code to include in the link.
* @param $title A little pop-up title to provide for the links.
* @param $link The content of the link.
* @return void, since this just draws the content.
*/
function SpellLink($jscode, $title, $link) {
echo "
';
}
/**
* Declaring globals for users with E_ALL set.
*/
global $SQSPELL_APP, $attachment_dir, $SQSPELL_EREG, $color;
$sqspell_text = $_POST['sqspell_text'];
$sqspell_use_app = $_POST['sqspell_use_app'];
/**
* Now we explode the lines for three reasons:
* 1) So we can ignore lines starting with ">" (reply's)
* 2) So we can stop processing when we get to "--" on a single line,
* which means that the signature is starting
* 3) So we can add an extra space at the beginning of each line. This way
* ispell/aspell don't treat these as command characters.
*/
$sqspell_raw_lines = explode("\n", $sqspell_text);
for ($i=0; $i'){
$sqspell_new_lines[$i] = ' ' . $sqspell_raw_lines[$i];
} else {
$sqspell_new_lines[$i] = '';
}
}
/**
* $sqspell_new_lines array now contains the lines to submit to the
* spellchecker.
*/
$sqspell_new_text=implode("\n", $sqspell_new_lines);
/**
* Define the command used to spellcheck the document.
*/
$sqspell_command=$SQSPELL_APP[$sqspell_use_app];
/**
* For the simplicity's sake we'll put all text into a file in
* attachment_dir directory, then cat it and pipe it to
* sqspell_command. There are other ways to do it, including popen(),
* but it's unidirectional and no fun at all.
*
* The name of the file is an md5 hash of the message itself plus
* microtime. This prevents symlink attacks. The loop is here to
* further enhance this feature, and make sure we don't overwrite
* someone else's data, although the possibility of this happening is
* QUITE remote.
*/
do {
$floc = "$attachment_dir/" . md5($sqspell_new_text . microtime());
} while (file_exists($floc));
/**
* Write the contents to the file.
*/
$fp=fopen($floc, 'w');
fwrite($fp, $sqspell_new_text);
fclose($fp);
/**
* Execute ispell/aspell and catch the output.
*/
exec("cat $floc | $sqspell_command 2>&1", $sqspell_output, $sqspell_exitcode);
/**
* Remove the temp file.
*/
unlink($floc);
/**
* Check if the execution was successful. Bail out if it wasn't.
*/
if ($sqspell_exitcode){
$msg= "
"
. sprintf(_("I tried to execute '%s', but it returned:"),
$sqspell_command) . "
"
. nl2br(join("\n", $sqspell_output)) . "
"
. "
";
sqspell_makeWindow(null, _("SquirrelSpell is misconfigured."), null, $msg);
exit;
}
/**
* Load the user dictionary.
*/
$words=sqspell_getLang(sqspell_getWords(), $sqspell_use_app);
/**
* Define some variables to be used during the processing.
*/
$current_line=0;
$missed_words=Array();
$misses = Array();
$locations = Array();
$errors=0;
/**
* Now we process the output of sqspell_command (ispell or aspell in
* ispell compatibility mode, whichever). I'm going to be scarce on
* comments here, since you can just look at the ispell/aspell output
* and figure out what's going on. ;) The best way to describe this is
* "Dark Magic".
*/
for ($i=0; $i\n"
. "\n"
. '' . _("SquirrelSpell Results") . '';
/**
* Check if there are user-defined stylesheets.
*/
if ($theme_css != '') {
echo "\n";
}
/**
* Load the spelling errors into JavaScript arrays
* (More dark magic!)
*/
echo "\n"
. "\n"
. "\n";
echo "\n";
?>