Spell checker working overtime & fix


Subject: Spell checker working overtime & fix
From: Nikolaj Brandt Jensen (mailbag@postman.dk)
Date: Fri Jun 29 2001 - 13:00:23 CDT


Hello.

I have found that the spell checker is working at full speed, even if
the dictionary hash isn't present.

It checks for the presence of the hash file 150 times a second! And
the linit() function takes up 14% of the execution time when profiling
AW.

Shouldn't the spell checker keep a flag saying hash gone (probably for
each language), and only retry loading it e.g. the next time the user
manually issues a spell check?

Hmm... Looking at SpellManager::requestDictionary(), it actually does
that. Unfortunately it doesn't work...

OK, UT_StringPtrMap can't be used to store NULL value hash entries
because of UT_StringPtrMap::find_slot()/hash_slot::empty(), so the
code in requestDictionary() won't work.

If someone can commit this, AW will behave much better.

Add this to the SpellManager class in
src/other/spell/xp/spell_manager.h:
UT_String m_missingHashs;

And change the function in src/other/spell/xp/spell_manager.cpp to:
SpellChecker *
SpellManager::requestDictionary (const char * szLang)
{
        SpellCheckerClass * checker = 0;
        
        // Don't try to load hashes we know are missing
        if (strstr(m_missingHashs.c_str(), szLang))
                return 0;

        // first look up the entry in the hashtable
        if (m_map.contains (szLang, 0))
        {
                return (SpellCheckerClass *)m_map.pick (szLang);
        }

        // not found, so insert it
        checker = new SpellCheckerClass ();
        
        if (checker->requestDictionary (szLang))
    {
                m_map.insert (szLang, (void *)checker);
                m_lastDict = checker;
                return checker;
    }
        else
    {
                m_missingHashs += szLang;
                delete checker;
                return 0;
    }
}

I have a few ideas for making this even better, but I sense that 0.9
is approaching fast :-)

        - Nikolaj



This archive was generated by hypermail 2b25 : Fri Jun 29 2001 - 13:00:38 CDT