[voikko] GtkSpell ei toimi kunnolla Voikon kanssa

Ville-Pekka Vainio vpivaini at cs.helsinki.fi
Mon Feb 1 21:29:52 EET 2010


Hei,

Tuli vastaan gtkspell-ongelmia, kun ryhdyin tutkimaan, että miksi
oikoluku ei toimi virtaal-po-editorissa (jossa sen pitäisi siis toimia
suunnilleen gtkspell-pyenchant-enchant-libvoikko-tyyppisen pinon
kautta).

Käytän tässä nyt gtkspellin python-rajapinnan metodien nimiä, koska
sillä näitä asioita on helpointa testata. Huomasin että jos gtkspellille
antaa joko set_language()-metodissa tai gtkspell.Spell()-konstruktorin
toisena parametrina jonkin muun kielen kuin fi_FI, niin kontekstivalikon
kielivalinnassa näkyy fi. Sen voi valita ja suomen kielen oikoluku tulee
käyttöön, mutta samalla fi katoaa luettelosta ja gtkspell väittää, että
käytössä on luettelon ensimmäinen kieli, täällä en_AG. Jos gtkspellille
antaa heti aluksi parametrina fi_FI:n, niin suomen kielen oikoluku on
käytössä, mutta fi-valintaa ei näy valikossa ollenkaan ja valittuna on
tuo sama en_AG.

Huomasin myös, että gtkspell.Spell()-konstruktori ja
set_language()-metodi hyväksyvät erilaiset parametrit. Konstruktorille
kelpaa muodot fi, fi_FI ja fi-FI, sen sijaan set_language()-metodille
kelpaa muodot fi_FI ja fi-FI, mutta ei fi, josta seuraa RuntimeError
pythonissa.

Tein näistä Sourceforgeen tiketit:
https://sourceforge.net/tracker/index.php?func=detail&aid=2942898&group_id=7896&atid=107896
https://sourceforge.net/tracker/index.php?func=detail&aid=2942885&group_id=7896&atid=107896

Minulla on Fedora 12:ssa käytössä gtkspell 2.0.16 ja enchant 1.5. Onko
vastaavia ongelmia muissa jakeluissa?

Liitän tähän vielä lyhyen testikoodin, jolla noita ongelmia voi
kokeilla, se perustuu Kalvin Zariuksen tiketissä
<https://sourceforge.net/tracker/?func=detail&aid=2827511&group_id=7896&atid=107896> julkaisemaan koodiin (jolle ei ole merkitty lisenssiä, mutta ehkäpä voidaan ajatella, että näin yksinkertainen koodi ei ylitä teoskynnystä...)

import gtk
import gtkspell

class PyApp (gtk.Window) :
    def __init__ (self) :
        gtk.Window.__init__ (self)
        self.textView = gtk.TextView()
        textWindow = gtk.ScrolledWindow()
        textWindow.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_ALWAYS)
        textWindow.add(self.textView)
        self.set_size_request(800, 600)
        # demonstrate "fi" getting listed when some other language is 
        # selected at initialization
        spell = gtkspell.Spell(self.textView, "en_US")
        # demonstrate inconsistencies between Spell and set_language
        # arguments
        # these work
        #spell = gtkspell.Spell(self.textView, "fi")
        #spell = gtkspell.Spell(self.textView, "fi_FI")
        #spell = gtkspell.Spell(self.textView, "fi-FI")
        #spell = gtkspell.Spell(self.textView)
        # these work
        #spell.set_language("fi_FI")
        #spell.set_language("fi-FI")
        # this DOES NOT WORK, throws RuntimeError
        #spell.set_language("fi")
        self.add(textWindow)
        self.show_all()
        self.connect("destroy", gtk.main_quit)

win = PyApp ()
gtk.main ()


-- 
Ville-Pekka Vainio




More information about the voikko mailing list