\chapter{Programozói dokumentáció}

A Hunspell program, illetve a Magyar Myspell
függvénykönyvtár képességeit saját programjainkhoz
is hozzáadhatjuk. 

\section{Hunspell csőfelület}

A -a kapcsoló megadásával a Hunspell program az
Ispell -a kapcsolójának hatását utánozza, egy kevés
kivételtől eltekintve. Ez az üzemmód ad lehetőséget
arra, hogy alkalmazásaink a Hunspellt
használják a helyesírás-ellenőrzésre.
Ilyenkor a Hunspellt háttérben elindítják az alkalmazások,
annak ellenőrizendő szöveget adnak át,
majd az ellenőrzés végeredményét visszakapva
azt feldolgozzák.
Számos program él ezzel a lehetőséggel: például
a KWord, LyX, Emacs (Windows alatt is).

A Hunspell indulásnál kiír a standard kimenetére egy
bemutatkozó sort, majd a standard bemenetet
soronként dolgozza fel. Minden egyes sor után a
kimeneten a kézikönyvoldalon ismertetett információkat
jeleníti meg, amit a saját programunk (amennyiben
gondoskodtunk a kimenet átirányításáról) feldolgozhat.

A Hunspell a bemenetet szövegsorként értelmezi,
hacsak a bejövő sor első karaktere nem egy parancskarakter.

A Hunspell által kezelt parancskaraktereket, és
leírásukat a következő táblázat ismerteti:

\begin{tabular}{rl}
! & Nem értelmezi a sort. \\
+ & \TeX üzemmód bekapcsolása. \\
- & Visszalépés az előző üzemmódba. \\
@ & A jelet követő szó szótárba kerül a futás idejére.\\
$*$ & A jelet követő szó szótárba kerül.\\
\# & A szótár elmentésre kerül a saját szótárállományba.\\
\^\ & A jelet követő sor feldolgozása.
\end{tabular}

Az \& jel (kisbetűsként való felvétel) még nincs a Hunspellbe építve.
Egyéb kezdőkarakterek esetén a sorok szövegsorként kerülnek feldolgozásra.

\section{Magyar Myspell felület}

A Magyar Myspell felület (API) lehetőséget nyújt a
függvénykönyvtár közvetlen használatára, bár
pár dolgot, mint például a saját szótár elmentését
és betöltését, magunknak kell megoldani. 

\subsection{Konstruktor}

A felhasználói programban a MySpell osztály
metódusaiként férhetünk hozzá a helyesírás-ellenőrzőhöz.

\noindent\verb+MySpell(const char * affixum, const char * szotar);+

A MySpell osztály konstruktora két karakterláncot vár paraméterként:
az affixumállomány, és a szótárállomány útvonalát.

\subsection{Metódusok}

\noindent\verb+int spell(const char * alak);+

A megadott szó ellenőrzése. Ha a visszatérési érték 0, a szó
hibás, egyébként helyes.

\noindent\verb+int suggest(char*** javaslatok, const char * alak);+

Javítási javaslatok kérése a megadott szóra. A függvény visszatérési értéke
a javaslatok száma, illetve a javaslatokat tároló
karakterlánctömb címe. Ez utóbbi tömb a függvényhívás alatt
kerül lefoglalásra, címe pedig a javaslatok változóban kerül
elhelyezésre. A tömb felszabadításáról nekünk kell gondoskodni
a későbbiekben, ügyelve arra, hogy a tömb címe NULL is lehet,
ha a helyfoglalás memóriaproblémák miatt sikertelen volt.
(Több szálat kezelő programban nem használható.)

\noindent\verb+int suggest_stems(char*** javaslatok, const char * alak);+

Helyes tövek előállítása az előző függvényhez hasonló szintaxissal.
Ha nincs tő, akkor a szót nem ismeri az ellenőrző.

\noindent\verb+int suggest_pos_stems(char*** javaslatok, const char * alak);+

Valószínű tövek előállítása az előző függvényhez hasonló szintaxissal.
A Magyar Ispell szótárban szereplő névszóragokat próbálja leválasztani a
a megadott ismeretlen szóról a program.

\noindent\verb+char * get_dic_encoding();+

Visszaadja a betöltött affixumállomány SET paraméterét,
vagyis a beállított karakterkódolást.
(L. man 4 hunspell)

\noindent\verb+char * get_wordchars();+

Visszaadja a beállított karakterkészlet
betűkaraktereinek karakterláncát, kiegészítve
az affixumállomány WORDCHARS paramétereként
megadott karaktereivel. Ez az információ
a szavakra bontáshoz hasznos.

\noindent\verb+struct cs_info * get_csconv();+

Visszaadja a betöltött karaktertáblát, elsősorban
a későbbi betűméret-átalakításokhoz.
(L. \texttt{csutil.cxx}, \texttt{csutil.hxx} a forrásban.)

\noindent\verb+int put_word(const char * alak);+

A megadott szó futásidejű felvételére kerül sor.
Ha az erre biztosított hely elfogy, a visszatérési érték 0,
egyébként 1. (Az így maximálisan felvehető szavak számát
az \texttt{atypes.hxx} állomány MAXUSERWORD makrója adja meg.)

\noindent\verb+int put_word_suffix(const char * alak, const char * kapcsolok);+

A megadott szó futásidejű felvételére kerül sor, a második
paraméterként megadott kapcsolókkal (ezek lehetnek prefixumok is, a
megtévesztő név ellenére).

Például \verb+put_word_suffix("leszörpözik","Pp");+

\noindent\verb+int put_word_pattern(const char * alak, const char * alak2);+

A megadott szó futásidejű felvételére kerül sor a második
paraméterként megadott szó kapcsolóival.

Például \verb+put_word_pattern("alfőnök","főnök");+

\noindent\verb+char * get_prevroot();+

Visszaadja az előzőleg ellenőrzött, és helyesnek
talált szó szótári tövét.
(Több szálat kezelő programban nem használható.)

\noindent\verb+int get_prevcompound();+

A visszatérési érték 0, ha az előzőleg
ellenőrzött szó nem összetett szó volt, különben 1.
(Több szálat kezelő programban nem használható.)

\noindent\verb+int get_forbidden_compound();+

Az előzőleg ellenőrzött szóról adja meg,
hogy tiltott volt-e, vagy sem (rendelkezett
tiltókapcsolóval). Ha nem volt tiltott,
a visszatérési érték 0, ha igen, 1, és
ha még összetett is volt, akkor 2.
Belsőleg annak eldöntésére szolgál, hogy
a javaslatokban szóköz, vagy kötőjel szerepeljen.
A Hunspell pedig annak jelzésére használja, hogy
egyértelmű szótári tiltásról van szó, megerősítve
ezzel a felhasználót helyes működéséről.

\noindent\verb+char * get_possible_root();+

Visszaadja az előzőleg ellenőrzött szóra illeszkedő
első ragozási szabály alapján előálló tövet.
Ez a függvény a későbbiekben bővítve lesz.
(Több szálat kezelő programban nem használható.)

\subsubsection{Példaprogram}

A függvénykönyvtár \texttt{example.cxx} programja rövid összefoglalását
adja a fontosabb függvényeknek:

\verbatiminput{example.txt}
