clear_session, store_replacement, and support

Bill Moseley <[email protected]>
Newsgroups gmane.comp.gnu.aspell.devel
Message-ID <[email protected]>
I'm going to try again, although I've not had much luck with support
here.  Type in "store_replacement" into google and you see two posts
to the Aspell lists that haven't had any response right at the top.
Should I be posting to the sf.net tracker, instead?

I'm the author of the Perl interface Text::Aspell, and as you might
imagine, I get quite a few emails about the module.  I'm no expert on
Aspell -- and the module is really a thin layer on top of the Aspell C
interface.  I'd like to help these people, but often I can't if I
cannot receive help from the Aspell developers.

The questions I referred to above are about store_replacement failing
to return a true value.  aspell.h has only this:

    int aspell_speller_store_replacement(struct AspellSpeller * ths, const char * mis, int mis_size, const char * cor, int cor_size);

And from my *brief* look at the code it seems as if it should return a
value indicating an error, although I didn't dig that deep:


extern "C" int aspell_speller_store_replacement(Speller * ths, const char * mis, int mis_size, const char * cor, int cor_size)
{
  ths->temp_str_0.clear();
  ths->to_internal_->convert(mis, mis_size, ths->temp_str_0);
  unsigned int s0 = ths->temp_str_0.size();
  ths->temp_str_1.clear();
  ths->to_internal_->convert(cor, cor_size, ths->temp_str_1);
  unsigned int s1 = ths->temp_str_1.size();
  PosibErr<bool> ret = ths->store_replacement(MutableString(ths->temp_str_0.mstr(), s0), MutableString(ths->temp_str_1.mstr(), s1));
  ths->err_.reset(ret.release_err());
  if (ths->err_ != 0) return -1;
  return ret.data;
}

Actually, I'm not clear what is expected as a return.  My Perl xs code
does this:

        RETVAL = aspell_speller_store_replacement(self->speller, word, -1, replacement, -1);
        if ( !RETVAL )
        {
            self->errnum = aspell_speller_error_number( (const AspellSpeller *)self->speller );
            strncpy(self->lastError, (char*) aspell_speller_error_message(self->speller), MAX_ERRSTR_LEN);
            XSRETURN_UNDEF;
        }

On linux that seems to run fine.  On some versions of BSD the
store_replacement code returns undefined back to Perl.  Oddly, when I
added a printf to print RETVAL before the if (!RETVAL) the problem
when away -- which made me think I cannot trust the return value.


Then today someone else emailed saying another test was failing.  When
running "make test" on the Perl module I add a new word to the
session, and then make sure that word is returned in the session.
Then I call clear_session() and then check if the word is then removed
from the session.  It's this last test that is failing -- the word is
still being returned from suggest().  The failure report is from
someone using OS X, and I've not been able to reproduce the problem in
other OS X machines.  And the word is not normally in their dictionary.

Am I not understanding clear_session()?  Or is there another reason the
word is not removed from the session?


Is there more than apsell.h and the page

  http://aspell.sourceforge.net/man-html/Through-the-C-API.html#Through-the-C-API

to use as the API reference?


-- 
Bill Moseley
[email protected]
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.