mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 10:00:33 +00:00
Edwin's spellchecker3 patch
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@2261 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
5c40a062b2
commit
188ec04f70
@ -1,3 +1,7 @@
|
||||
2001-07-17 Edwin Leuven <leuven@fee.uva.nl>
|
||||
|
||||
* sp_spell.C: repair language selection for pspell
|
||||
|
||||
2001-07-12 Lars Gullik Bjønnes <larsbj@birdstep.com>
|
||||
|
||||
* lyxfunc.h: change more methods to begin with lower char.
|
||||
|
@ -1,3 +1,11 @@
|
||||
2001-07-17 Angus Leeming <a.leeming@ic.ac.uk>
|
||||
|
||||
* ControlSpellchecker.[Ch]: remove d-tor.
|
||||
|
||||
2001-07-17 Edwin Leuven <leuven@fee.uva.nl>
|
||||
|
||||
* ControlSpellchecker.[Ch]: remove member quit() and some cleaning
|
||||
|
||||
2001-07-16 Juergen Vigna <jug@sad.it>
|
||||
|
||||
* ControlSpellchecker.C (show): use the lyxrc.use_pspell flag (if
|
||||
|
@ -54,34 +54,16 @@
|
||||
using SigC::slot;
|
||||
|
||||
ControlSpellchecker::ControlSpellchecker(LyXView & lv, Dialogs & d)
|
||||
: ControlDialog<ControlConnectBD>(lv, d)
|
||||
: ControlDialog<ControlConnectBD>(lv, d),
|
||||
rtl_(false), newval_(0.0), oldval_(0), newvalue_(0), count_(0),
|
||||
stop_(false), result_(SpellBase::ISP_UNKNOWN), speller_(0)
|
||||
{
|
||||
d_.showSpellchecker.connect(SigC::slot(this, &ControlSpellchecker::show));
|
||||
|
||||
rtl_ = false;
|
||||
word_ = "";
|
||||
newval_ = 0.0;
|
||||
oldval_ = 0;
|
||||
newvalue_ = 0;
|
||||
count_ = 0;
|
||||
message_ = "";
|
||||
stop_ = false;
|
||||
result_ = SpellBase::ISP_UNKNOWN;
|
||||
speller_ = 0;
|
||||
|
||||
}
|
||||
|
||||
|
||||
ControlSpellchecker::~ControlSpellchecker()
|
||||
void ControlSpellchecker::setParams()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void ControlSpellchecker::show()
|
||||
{
|
||||
if (isBufferDependent() && !lv_.view()->available())
|
||||
return;
|
||||
|
||||
if (!speller_) {
|
||||
// create spell object
|
||||
string tmp;
|
||||
@ -111,24 +93,12 @@ void ControlSpellchecker::show()
|
||||
|
||||
if (speller_->error() != 0) {
|
||||
message_ = speller_->error();
|
||||
// show error message
|
||||
view().partialUpdate(2);
|
||||
hide();
|
||||
clearParams();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
bc().readOnly(isReadonly());
|
||||
view().show();
|
||||
}
|
||||
|
||||
|
||||
void ControlSpellchecker::hide()
|
||||
{
|
||||
delete speller_;
|
||||
speller_ = 0;
|
||||
|
||||
disconnect();
|
||||
view().hide();
|
||||
}
|
||||
|
||||
|
||||
@ -139,13 +109,14 @@ void ControlSpellchecker::check()
|
||||
|
||||
while (result_!=SpellBase::ISP_MISSED && !stop_) {
|
||||
word_ = lv_.view()->nextWord(newval_);
|
||||
|
||||
if (word_.empty()) {
|
||||
quit();
|
||||
clearParams();
|
||||
break;
|
||||
}
|
||||
|
||||
++count_;
|
||||
|
||||
|
||||
// Update slider if and only if value has changed
|
||||
newvalue_ = int(100.0*newval_);
|
||||
if (newvalue_!= oldval_) {
|
||||
@ -154,7 +125,7 @@ void ControlSpellchecker::check()
|
||||
view().partialUpdate(0);
|
||||
}
|
||||
|
||||
if (!speller_->alive()) quit();
|
||||
if (!speller_->alive()) clearParams();
|
||||
|
||||
result_ = speller_->check(word_);
|
||||
}
|
||||
@ -223,32 +194,36 @@ void ControlSpellchecker::ignoreAll()
|
||||
void ControlSpellchecker::stop()
|
||||
{
|
||||
stop_ = true;
|
||||
lv_.view()->endOfSpellCheck();
|
||||
}
|
||||
|
||||
|
||||
void ControlSpellchecker::quit()
|
||||
void ControlSpellchecker::clearParams()
|
||||
{
|
||||
if (!speller_) return;
|
||||
|
||||
if (speller_->alive()) {
|
||||
speller_->close();
|
||||
message_ = tostr(count_);
|
||||
if (count_ != 1) {
|
||||
message_ += _(" words checked.");
|
||||
|
||||
} else {
|
||||
message_ += _(" word checked.");
|
||||
}
|
||||
message_ = "\n" + message_;
|
||||
message_ = _("Spellchecking completed! ") + message_;
|
||||
|
||||
} else {
|
||||
speller_->cleanUp();
|
||||
message_ = _("The spell checker has died for some reason.\n"
|
||||
"Maybe it has been killed.");
|
||||
"Maybe it has been killed.");
|
||||
}
|
||||
|
||||
|
||||
delete speller_;
|
||||
|
||||
lv_.view()->endOfSpellCheck();
|
||||
|
||||
// hide dialog, disconnect and delete speller
|
||||
hide();
|
||||
|
||||
// show closing message
|
||||
view().partialUpdate(2);
|
||||
|
||||
@ -262,6 +237,7 @@ void ControlSpellchecker::quit()
|
||||
message_ = "";
|
||||
stop_ = false;
|
||||
result_ = SpellBase::ISP_UNKNOWN;
|
||||
speller_ = 0;
|
||||
}
|
||||
|
||||
|
||||
@ -269,5 +245,3 @@ void ControlSpellchecker::options()
|
||||
{
|
||||
lv_.getDialogs()->showSpellcheckerPreferences();
|
||||
}
|
||||
|
||||
|
||||
|
@ -29,9 +29,6 @@ public:
|
||||
///
|
||||
ControlSpellchecker(LyXView &, Dialogs &);
|
||||
|
||||
///
|
||||
~ControlSpellchecker();
|
||||
|
||||
/// replace word with replacement
|
||||
void replace(string const &);
|
||||
|
||||
@ -44,9 +41,6 @@ public:
|
||||
/// ignore all occurances of word
|
||||
void ignoreAll();
|
||||
|
||||
/// quit spellchecker
|
||||
void quit();
|
||||
|
||||
/// stop checking
|
||||
void stop();
|
||||
|
||||
@ -75,10 +69,9 @@ public:
|
||||
private:
|
||||
|
||||
/// set the params before show or update
|
||||
void show();
|
||||
|
||||
void setParams();
|
||||
/// clean-up on hide.
|
||||
void hide();
|
||||
void clearParams();
|
||||
|
||||
/// not needed.
|
||||
virtual void apply() {}
|
||||
@ -112,5 +105,3 @@ private:
|
||||
};
|
||||
|
||||
#endif // CONTROLSPELLCHECKER_H
|
||||
|
||||
|
||||
|
@ -13,6 +13,7 @@
|
||||
#endif
|
||||
|
||||
#include "xformsBC.h"
|
||||
#include "xforms_helpers.h"
|
||||
#include "ControlSpellchecker.h"
|
||||
#include "FormSpellchecker.h"
|
||||
#include "form_spellchecker.h"
|
||||
@ -36,6 +37,7 @@ void FormSpellchecker::build()
|
||||
bc().addReadOnly(dialog_->ignore);
|
||||
bc().addReadOnly(dialog_->start);
|
||||
bc().addReadOnly(dialog_->stop);
|
||||
bc().addReadOnly(dialog_->browser);
|
||||
}
|
||||
|
||||
void FormSpellchecker::update()
|
||||
@ -45,9 +47,15 @@ void FormSpellchecker::update()
|
||||
fl_set_object_label(dialog_->text, w.c_str());
|
||||
fl_clear_browser(dialog_->browser);
|
||||
fl_set_slider_value(dialog_->slider, 0);
|
||||
clickline_ = -1 ;
|
||||
}
|
||||
|
||||
void FormSpellchecker::hide()
|
||||
{
|
||||
clickline_ = -1;
|
||||
|
||||
if (form() && form()->visible)
|
||||
fl_hide_form(form());
|
||||
}
|
||||
|
||||
ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long)
|
||||
{
|
||||
@ -56,16 +64,16 @@ ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long)
|
||||
controller().replace(tmp);
|
||||
} else if (obj == dialog_->start) {
|
||||
controller().check();
|
||||
fl_deactivate_object(dialog_->start);
|
||||
fl_set_object_lcol(dialog_->start, FL_INACTIVE);
|
||||
stop(false);
|
||||
} else if (obj == dialog_->stop) {
|
||||
controller().stop();
|
||||
stop(true);
|
||||
} else if (obj == dialog_->ignore) {
|
||||
controller().check();
|
||||
} else if (obj == dialog_->accept) {
|
||||
controller().ignoreAll();
|
||||
} else if (obj == dialog_->insert) {
|
||||
controller().insert();
|
||||
} else if (obj == dialog_->done) {
|
||||
controller().quit();
|
||||
} else if (obj == dialog_->options) {
|
||||
controller().options();
|
||||
} else if (obj == dialog_->browser) {
|
||||
@ -84,22 +92,30 @@ ButtonPolicy::SMInput FormSpellchecker::input(FL_OBJECT * obj, long)
|
||||
|
||||
void FormSpellchecker::partialUpdate(int id)
|
||||
{
|
||||
// set suggestions
|
||||
if (id==0) {
|
||||
// set progress bar (always)
|
||||
switch (id) {
|
||||
case 0:
|
||||
// set progress bar
|
||||
fl_set_slider_value(dialog_->slider,
|
||||
controller().getProgress());
|
||||
} else if (id==1) {
|
||||
break;
|
||||
case 1:
|
||||
{
|
||||
// set suggestions
|
||||
string w = controller().getWord();
|
||||
fl_set_input(dialog_->input, w.c_str());
|
||||
fl_set_object_label(dialog_->text, w.c_str());
|
||||
fl_clear_browser(dialog_->browser);
|
||||
while (!(w = controller().getSuggestion()).empty() ) {
|
||||
while ( !(w = controller().getSuggestion()).empty() ) {
|
||||
fl_add_browser_line(dialog_->browser, w.c_str());
|
||||
}
|
||||
} else if (id==2) {
|
||||
fl_show_messages(controller().getMessage().c_str());
|
||||
}
|
||||
break;
|
||||
case 2:
|
||||
// show exit message
|
||||
fl_show_messages(controller().getMessage().c_str());
|
||||
hide();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -108,7 +124,14 @@ void FormSpellchecker::showMessage(const char * msg)
|
||||
fl_show_message(msg, "", "");
|
||||
}
|
||||
|
||||
// note there is a button accept in session
|
||||
// it is not clear whether this is ingoreall or replaceall
|
||||
|
||||
|
||||
void FormSpellchecker::stop(bool stop)
|
||||
{
|
||||
setEnabled(dialog_->start, stop);
|
||||
setEnabled(dialog_->replace, !stop);
|
||||
setEnabled(dialog_->ignore, !stop);
|
||||
setEnabled(dialog_->accept, !stop);
|
||||
setEnabled(dialog_->insert, !stop);
|
||||
setEnabled(dialog_->stop, !stop);
|
||||
setEnabled(dialog_->browser, !stop);
|
||||
setEnabled(dialog_->input, !stop);
|
||||
}
|
||||
|
@ -28,19 +28,24 @@ public:
|
||||
|
||||
private:
|
||||
/// not needed.
|
||||
virtual void apply() {}
|
||||
void apply() {}
|
||||
/// Build the dialog
|
||||
virtual void build();
|
||||
/// not needed.
|
||||
virtual void update();
|
||||
void build();
|
||||
///
|
||||
void update();
|
||||
///
|
||||
void hide();
|
||||
|
||||
/// update progress bar and suggestions
|
||||
/// enable/disable widgets when start/stop
|
||||
void stop(bool);
|
||||
|
||||
/// update progress bar, set suggestions, exit message
|
||||
void partialUpdate(int);
|
||||
|
||||
/// show an error message
|
||||
void showMessage(const char * msg);
|
||||
|
||||
/// line clicked in browser, necessart for double clicking
|
||||
/// line clicked in browser, necessary for double clicking
|
||||
int clickline_;
|
||||
|
||||
/// Filter the inputs
|
||||
|
@ -34,9 +34,10 @@ FD_form_spellchecker * FormSpellchecker::build_spellchecker()
|
||||
fdui->input = obj = fl_add_input(FL_NORMAL_INPUT, 80, 40, 220, 30, _("Replace"));
|
||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||
fdui->browser = obj = fl_add_browser(FL_SELECT_BROWSER, 80, 70, 220, 150, _("Near\nMisses"));
|
||||
fdui->browser = obj = fl_add_browser(FL_SELECT_BROWSER, 80, 70, 220, 150, _("Suggestions"));
|
||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||
fl_set_object_lalign(obj, FL_ALIGN_LEFT);
|
||||
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||
{
|
||||
char const * const dummy = N_("Spellchecker Options...|#O");
|
||||
fdui->options = obj = fl_add_button(FL_NORMAL_BUTTON, 310, 210, 220, 30, idex(_(dummy)));
|
||||
@ -85,7 +86,7 @@ FD_form_spellchecker * FormSpellchecker::build_spellchecker()
|
||||
fl_set_button_shortcut(obj, scex(_(dummy)), 1);
|
||||
}
|
||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||
fl_set_object_callback(obj, C_FormBaseInputCB, 0);
|
||||
fl_set_object_callback(obj, C_FormBaseCancelCB, 0);
|
||||
// xgettext:no-c-format
|
||||
obj = fl_add_box(FL_NO_BOX, 10, 250, 50, 20, _("0 %"));
|
||||
fl_set_object_lsize(obj, FL_NORMAL_SIZE);
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
/** Callbacks, globals and object handlers **/
|
||||
extern "C" void C_FormBaseInputCB(FL_OBJECT *, long);
|
||||
extern "C" void C_FormBaseCancelCB(FL_OBJECT *, long);
|
||||
|
||||
|
||||
/**** Forms and Objects ****/
|
||||
|
@ -76,13 +76,13 @@ alignment: FL_ALIGN_LEFT
|
||||
style: FL_NORMAL_STYLE
|
||||
size: FL_NORMAL_SIZE
|
||||
lcol: FL_BLACK
|
||||
label: Near\nMisses
|
||||
label: Suggestions
|
||||
shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name: browser
|
||||
callback:
|
||||
argument:
|
||||
callback: C_FormBaseInputCB
|
||||
argument: 0
|
||||
|
||||
--------------------
|
||||
class: FL_BUTTON
|
||||
@ -207,7 +207,7 @@ shortcut:
|
||||
resize: FL_RESIZE_ALL
|
||||
gravity: FL_NoGravity FL_NoGravity
|
||||
name: done
|
||||
callback: C_FormBaseInputCB
|
||||
callback: C_FormBaseCancelCB
|
||||
argument: 0
|
||||
|
||||
--------------------
|
||||
|
@ -74,19 +74,13 @@ extern void sigchldchecker(pid_t pid, int * status);
|
||||
|
||||
|
||||
PSpell::PSpell()
|
||||
: els(0), sc(0), spell_error_object(0), flag(ISP_UNKNOWN)
|
||||
{
|
||||
els = 0;
|
||||
sc = 0;
|
||||
spell_error_object = 0;
|
||||
flag = ISP_UNKNOWN;
|
||||
}
|
||||
|
||||
PSpell::PSpell(BufferParams const & params, string const & lang)
|
||||
: els(0), sc(0), spell_error_object(0), flag(ISP_UNKNOWN)
|
||||
{
|
||||
els = 0;
|
||||
sc = 0;
|
||||
spell_error_object = 0;
|
||||
flag = ISP_UNKNOWN;
|
||||
initialize(params, lang);
|
||||
}
|
||||
|
||||
@ -102,9 +96,7 @@ PSpell::~PSpell()
|
||||
void PSpell::initialize(BufferParams const &, string const & lang)
|
||||
{
|
||||
PspellConfig * config = new_pspell_config();
|
||||
string code;
|
||||
split(lang, code, '_');
|
||||
config->replace("language-tag", code.c_str());
|
||||
config->replace("language-tag", lang.c_str());
|
||||
spell_error_object = new_pspell_manager(config);
|
||||
if (pspell_error_number(spell_error_object) != 0) {
|
||||
error_ = pspell_error_message(spell_error_object);
|
||||
|
Loading…
Reference in New Issue
Block a user