#ifdef HAVE_SYS_SELECT_H
# ifdef HAVE_STRINGS_H
// <strings.h> is needed at least on AIX because FD_ZERO uses bzero().
-# include <strings.h>
+ // BUT we cannot include both string.h and strings.h on Irix 6.5 :(
+# ifdef _AIX
+# include <strings.h>
+# endif
# endif
#include <sys/select.h>
#endif
#include "lyx_gui_misc.h"
#include "debug.h"
#include "support/lstrings.h"
+#include "language.h"
#include "encoding.h"
-
-//#define USE_PSPELL 1
+#include "support/lstrings.h"
#ifdef USE_PSPELL
-
-#include <pspell/pspell.h>
-
+# include <pspell/pspell.h>
#endif
using std::reverse;
#endif
-static FD_form_spell_options *fd_form_spell_options = 0;
+// Non-static so that it can be redrawn if the xforms colors are re-mapped
+FD_form_spell_options *fd_form_spell_options = 0;
FD_form_spell_check *fd_form_spell_check = 0;
-//void sigchldhandler(int sig);
void sigchldhandler(pid_t pid, int *status);
-//extern void sigchldchecker(int sig);
extern void sigchldchecker(pid_t pid, int *status);
#ifndef USE_PSPELL
fl_raise_form(fd_form_spell_options->form_spell_options);
} else {
fl_show_form(fd_form_spell_options->form_spell_options,
- FL_PLACE_MOUSE, FL_FULLBORDER,
+ FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT,
_("Spellchecker Options"));
}
}
isp_pid = -1;
- if(pipe(pipein) == -1 || pipe(pipeout) == -1) {
+ if (pipe(pipein) == -1 || pipe(pipeout) == -1) {
lyxerr << "LyX: Can't create pipe for spellchecker!" << endl;
goto END;
}
isp_pid = fork();
- if(isp_pid == -1) {
+ if (isp_pid == -1) {
lyxerr << "LyX: Can't create child process for spellchecker!"
<< endl;
goto END;
}
- if(isp_pid == 0) {
+ if (isp_pid == 0) {
/* child process */
dup2(pipein[0], STDIN_FILENO);
dup2(pipeout[1], STDOUT_FILENO);
if (lyxrc.isp_use_input_encoding &&
params.inputenc != "default") {
string enc = (params.inputenc == "auto")
- ? params.language_info->encoding()->LatexName()
+ ? params.language->encoding()->LatexName()
: params.inputenc;
string::size_type n = enc.length();
tmp = new char[3];
static
void sc_clean_up_after_error()
{
- fclose(out);
+ ::fclose(out);
}
// Send word to ispell and get reply
{
//Please rewrite to use string.
- fputs(word.c_str(), out);
- fputc('\n', out);
+ ::fputs(word.c_str(), out);
+ ::fputc('\n', out);
char buf[1024];
- fgets(buf, 1024, in);
+ ::fgets(buf, 1024, in);
/* I think we have to check if ispell is still alive here because
the signal-handler could have disabled blocking on the fd */
static inline
void sc_insert_word(string const & word)
{
- fputc('*', out); // Insert word in personal dictionary
- fputs(word.c_str(), out);
- fputc('\n', out);
+ ::fputc('*', out); // Insert word in personal dictionary
+ ::fputs(word.c_str(), out);
+ ::fputc('\n', out);
}
static inline
void sc_accept_word(string const & word)
{
- fputc('@', out); // Accept in this session
- fputs(word.c_str(), out);
- fputc('\n', out);
+ ::fputc('@', out); // Accept in this session
+ ::fputs(word.c_str(), out);
+ ::fputc('\n', out);
}
static inline
void sc_store_replacement(string const & mis, string const & cor) {
- if(actual_spell_checker == ASC_ASPELL) {
- fputs("$$ra ", out);
- fputs(mis.c_str(), out);
- fputc(',', out);
- fputs(cor.c_str(), out);
- fputc('\n', out);
+ if (actual_spell_checker == ASC_ASPELL) {
+ ::fputs("$$ra ", out);
+ ::fputs(mis.c_str(), out);
+ ::fputc(',', out);
+ ::fputs(cor.c_str(), out);
+ ::fputc('\n', out);
}
}
void init_spell_checker(BufferParams const &, string const & lang)
{
PspellConfig * config = new_pspell_config();
+ string code;
+ split(lang, code, '_');
+ config->replace("language-tag", code.c_str());
spell_error_object = new_pspell_manager(config);
if (pspell_error_number(spell_error_object) != 0) {
spell_error = pspell_error_message(spell_error_object);
-// Send word to ispell and get reply
+// Send word to pspell and get reply
static
isp_result * sc_check_word(string const & word)
{
isp_result * result = new isp_result;
+#warning Why isnt word_ok a bool? (Lgb)
int word_ok = pspell_manager_check(sc, word.c_str());
Assert(word_ok != -1);
if (word_ok) {
result->flag = ISP_OK;
} else {
-
PspellWordList const * sugs =
pspell_manager_suggest(sc, word.c_str());
Assert(sugs != 0);
fl_raise_form(fd_form_spell_check->form_spell_check);
} else {
fl_show_form(fd_form_spell_check->form_spell_check,
- FL_PLACE_MOUSE, FL_FULLBORDER,
+ FL_PLACE_MOUSE | FL_FREE_SIZE, FL_TRANSIENT,
_("Spellchecker"));
}
fl_deactivate_object(fd_form_spell_check->slider);
fl_set_object_lcol(fd_form_spell_check->input, FL_INACTIVE);
fl_set_object_lcol(fd_form_spell_check->browser, FL_INACTIVE);
- while (true){
+ while (true) {
obj = fl_do_forms();
- if (obj == fd_form_spell_check->options){
+ if (obj == fd_form_spell_check->options) {
SpellCheckerOptions();
}
- if (obj == fd_form_spell_check->start){
+ if (obj == fd_form_spell_check->start) {
// activate insert, accept, and stop
fl_activate_object(fd_form_spell_check->insert);
fl_activate_object(fd_form_spell_check->accept);
}
-// Perform an ispell session
+// Perform a spell session
static
bool RunSpellChecker(BufferView * bv)
{
int newvalue;
FL_OBJECT * obj;
- string tmp = (lyxrc.isp_use_alt_lang) ? lyxrc.isp_alt_lang : bv->buffer()->GetLanguage();
- bool rtl = tmp == "hebrew" || tmp == "arabic";
+#ifndef NEW_INSETS
+ // Open all floats
+ bv->allFloats(1, 0);
+ bv->allFloats(1, 1);
+#endif
+
+#ifdef USE_PSPELL
+ string tmp = (lyxrc.isp_use_alt_lang) ?
+ lyxrc.isp_alt_lang : bv->buffer()->params.language->code();
+#else
+ string tmp = (lyxrc.isp_use_alt_lang) ?
+ lyxrc.isp_alt_lang : bv->buffer()->params.language->lang();
+#endif
+ bool rtl = false;
+ if (lyxrc.isp_use_alt_lang) {
+ Language const * lang = languages.getLanguage(tmp);
+ if (lang)
+ rtl = lang->RightToLeft();
+ } else
+ rtl = bv->buffer()->params.language->RightToLeft();
int oldval = 0; /* used for updating slider only when needed */
float newval = 0.0;
// Update slider if and only if value has changed
newvalue = int(100.0*newval);
- if(newvalue!= oldval) {
+ if (newvalue!= oldval) {
oldval = newvalue;
fl_set_slider_value(fd_form_spell_check->slider, oldval);
}
}
}
- if(sc_still_alive()) {
+ if (sc_still_alive()) {
close_spell_checker();
string word_msg(tostr(word_count));
if (word_count != 1) {
}
}
-
-#ifndef USE_PSPELL
-
+#warning should go somewhere more sensible
void sigchldhandler(pid_t pid, int * status)
{
if (isp_pid > 0)
}
sigchldchecker(pid, status);
}
-
-#else
-
-void sigchldhandler(pid_t, int *)
-{
- // do nothing
-}
-
-#endif