Loading ...
Sorry, an error occurred while loading the content.

mispell: library kirobbantas?

Expand Messages
  • Koblinger Egmont
    Sziasztok! (Picit körülményesebb bevezetővel kezdem, mielőtt mondandóm lényegére rátérek.) Minap csináltunk abiword-1.1.4 csomagot az UHU Linuxba,
    Message 1 of 2 , Apr 4, 2003
    • 0 Attachment
      Sziasztok!

      (Picit körülményesebb bevezetővel kezdem, mielőtt mondandóm lényegére
      rátérek.)

      Minap csináltunk abiword-1.1.4 csomagot az UHU Linuxba, Pozsy kollégám jól
      elszórakozott a magyar helyesírás-ellenőrzővel, aztán én is javítottam egy
      bugot, így most az ispellt jól használja a Laci-féle szótárral. Jóllehet
      ez nem az igazi, mert a mispell sokkal ügyesebb, mint az ispell, de per
      pillanat elég húzósnak tűnik azzal összedolgozni az abiword-öt.

      Belenézve ugyanis azt találtuk, hogy nem külső programként hívja meg az
      ispell-t, megemésztve annak kimenetét, hanem közvetlenül a .hash fájlokat
      olvassa be, ami elég húzós, ismervén a mindenféle inkompatibilitásokat a
      fájlon belül -- meg is kellett változtatni valami mágikus konstanst az abi
      forrásában ahhoz, hogy "véletlenül" épp működjön.

      Valahogy úgy érzem, hogy első körben a parancssori ispell elég nagy
      hibája, hogy csak parancssori programnak tervezték (de ez talán betudható
      annak, hogy sok-sok éve készült, és akkor még mások voltak az elvárások és
      a rendszerek képességei), másrészt erre az abiword is rárakott egy óriási
      nagy gányolást az ispell kikerülése által.

      Ha az abi azt csinálná, hogy parancssori progiként hívja meg az ispell-t,
      akkor valószínűleg viszonylag kis munkával át tudnánk dolgozni a mispell
      hívására, de hát nem ez történik. Arról nem is beszélve, hogy befigyelnek
      olyan problémák, mint pl. a mispell nem elhanyagolható elindulási ideje,
      illetve ha egyetlen mispell-t indít az egész abi a futása idejére, akkor
      ha több abi-ablakban egyszerre végeztetsz helyesírás-ellenőrzést, azzal
      mit csináljon, stb... számtalan sok ilyen probléma vetődik fel.

      Nem tudom, hogy az OOo-ba hogyan van berakva ez a mispell, de kíváncsi
      lennék rá.

      Én most úgy látom (rátérve mondandómra), hogy a járható út az, ha a per
      pillanat egy és oszthatatlan mispell programot valahogy szétrobbantjuk egy
      függvénytárra és egy erre épülő alkalmazásra. Előbbi feladata volna a
      tényleges helyesírás-ellenőrzés és javaslattétel az argumentumként kapott
      szavakra, míg utóbbi nyújtaná hozzá a parancssori felületet. A
      helyesírás-ellenőrzést végző programokba pedig ez esetben szerintem
      viszonylag könnyű volna belerakni ezt a szolgáltatást, mondjuk egy
      abiword-be szerintem kb. fél napnyi munka egy ilyen mispell függvénytár
      használatát belerakni.

      Esettanulmányként ajánlom a "file" nevű hagyományos parancsot, amely
      évtizedeken át egy parancssori eszköz volt arra, hogy azonosítsa a fájl
      tartalmát, így ha egy alkalmazásból akartad használni, akkor külön
      processzt kellett forkolni, annak a kimenetét elkapni stb., ez körülményes
      és lassú. Ezt felismerve alig 1-2 hete jelent meg az a változat, amely már
      külön library-t is tartalmaz, egy kellőképpen tiszta, egyszerű és jól
      dokumentált felülettel, a mai kor követelményeihez igazodva (egy magic.h-t
      tudsz include-olni a progiból, ebben van definiálva pár MAGIC_AKÁRMI
      fiktív konstans, 9 függvény, természetesen thread-safe/reentrant
      dizájnnal, és a -lmagic kapcsolóval lehet ehhez a magic library-hez
      linkelni a progit.)
      ftp://ftp.astron.com/pub/file/

      Na szóval valami ilyesminek örülnék a mispell esetén is.


      Itt most hirtelen rögtönzök egy átgondolatlan spontán függvényhalmazt,
      abszolút nulladik körű változat, csak úgy a feelinget éreztetni, hogy kb.
      így nézhetne ki a library:

      mispell_dict_t *mispell_open(const char *language);
      Megnyitja az adott nyelvű szótárat, visszaad pointert egy erre vonatkozó
      struktúrára, NULL-t ha hiba, ez esetben errno-t beállítja stb...

      int mispell_check(const char *word, mispell_sugg_t **suggestions);
      Ellenőrzi a szót, visszatérési értéke MISPELL_OK, MISPELL_WRONG stb
      ilyesmi konstansok egyike; ha nincs javaslat, suggestion-ba NULL-t tesz,
      ha van, allokál egy jó kis struktúrát a javaslatokkal, melyet a hívónak
      kell majd felszabadítania alkalomadtán... Persze mindezt utf8-ban :-))

      int mispell_close(mispell_dict_t *dict);
      Jól bezárja a szótárat.


      Na ilyesmi... persze kell szótőfelismerés, szótárbővítés stb, tehát jó
      alaposan meg kellene tervezni az interface-t, de ha ezt sikerülne
      megcsinálni, szerintem remek volna!




      --
      Egmont
    • Koblinger Egmont
      Magamat helyesbítve: ehelyett ... ezt akartam írni: int mispell_check(const mispell_dict_t *dict, const char *word, mispell_sugg_t **suggestions); tehát
      Message 2 of 2 , Apr 4, 2003
      • 0 Attachment
        Magamat helyesbítve:

        ehelyett
        > int mispell_check(const char *word, mispell_sugg_t **suggestions);

        ezt akartam írni:
        int mispell_check(const mispell_dict_t *dict,
        const char *word, mispell_sugg_t **suggestions);

        tehát nyilván a szótár megnyitásakor kapott azonosítót is át kell adni a
        függvénynek...



        --
        Egmont
      Your message has been successfully submitted and would be delivered to recipients shortly.