[hunspell] 49/98: Imported Upstream version 1.2.2~b2~20080401
This is an automated email from the git hooks/post-receive script.
rene pushed a commit to branch master
in repository hunspell.
commit 0593209d0c0ed0f846a80f9bfd4e927ac7fb5a98
Author: Rene Engelhard <rene@debian.org>
Date: Thu Apr 21 14:45:18 2016 +0200
Imported Upstream version 1.2.2~b2~20080401
---
BUGS | 4 +-
ChangeLog | 55 ++-
NEWS | 6 +-
configure | 20 +-
configure.ac | 4 +-
man/hu/hunspell.4 | 847 +++++++++++++++++++++++++----------------
man/hunspell.1 | 12 +-
man/hunspell.4 | 26 +-
po/hu.gmo | Bin 7564 -> 7563 bytes
po/hu.po | 2 +-
src/hunspell/Makefile.am | 2 +-
src/hunspell/Makefile.in | 2 +-
src/hunspell/affentry.cxx | 107 +++---
src/hunspell/affixmgr.cxx | 41 +-
src/hunspell/affixmgr.hxx | 2 +
src/hunspell/atypes.hxx | 14 +-
src/hunspell/csutil.cxx | 12 +-
src/hunspell/csutil.hxx | 16 +-
src/hunspell/hashmgr.cxx | 2 +-
src/hunspell/htypes.hxx | 4 -
src/hunspell/hunspell.cxx | 12 +-
src/hunspell/hunspell.h | 35 +-
src/hunspell/hunspell.hxx | 5 +-
src/hunspell/hunzip.cxx | 17 +-
src/hunspell/phonet.cxx | 2 +-
src/hunspell/phonet.hxx | 4 +-
src/hunspell/suggestmgr.cxx | 3 +-
src/hunspell/w_char.hxx | 19 +
src/tools/affixcompress | 13 +-
src/tools/analyze.cxx | 2 +-
src/tools/chmorph.cxx | 14 +-
src/tools/hunspell.cxx | 223 ++++++++---
src/tools/makealias | 34 +-
src/win_api/Hunspell.rc | 10 +-
src/win_api/config.h | 4 +-
src/win_api/libhunspell.vcproj | 20 +
tests/circumfix.morph | 4 +-
tests/rep.aff | 3 +-
38 files changed, 1038 insertions(+), 564 deletions(-)
diff --git a/BUGS b/BUGS
index 98558e1..cb0ea7f 100644
--- a/BUGS
+++ b/BUGS
@@ -1,7 +1,5 @@
-* Interactive interface has some visualisation problem with UTF-8 characters
+* Interactive interface has some visualization problem with long lines
* -U, -u options doesn't support Unicode.
* Compound handling is not thread safe in Hungarian specific code
-
-* stemming is experimental and incomplete
diff --git a/ChangeLog b/ChangeLog
index 46d1473..3216f5b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,58 @@
-2007-11-16 Németh László <nemeth at OOo>:
+* src/hunspell.h: add DLL macro for Flemming Frandsen
+
+- add per mille to LANG hu_HU section
+
+új makealias
+ivóvíz tiltási probléma!!!
+- több szótár::
+hu_HU_geo
+hu_HU_politics
+hu_HU_
+NAME magyar geológiai szakszótár
+
+- időkorlát a generáláshoz???
+- valami optimalizálás kell
+
+
+- DEBUG mode: -m
+- m: analyze or flag debug mode
+- s: stems
+
+- hunzip.cxx: explicit binary read for Windows (fopen(,"rb"))
+
+- szinonimaszótár elkészítése,
+
+- javított javaslattevés???
+ötlet:
+- nagyon eltérőt ne javasoljon!!!
+- gyorsítás, optimalizálás??? (egy betűs eltérés jav.???)
+-
+
+Hunspell ui: refresh() for better reaction time!!!
+- fix tabulators
+- fix different encoding of dic and input, and suggestions
+- long lines: problems
+
+timeless warnings Mozilla (Ryan)
+hunspell.cxx-ben config.h???
+ * man/hunspell.4: fix formatting problem (missing header)
+
+2008-01-30 1882105 Mark McClain: OS X fix on PPC platform
+
+
+- manual!!
+- chmorph vissza!!!!
+HENTRY_DATA át, kitöröl a htypes hiv., máshonnan
+két konstruktor
+* phonet.cxx ->HASHs
+csutill a htypes-hoz
+Ryan: MOZILLA_CLIENT a hunzipba
+
+* tests/rep.aff: fix REP count
+
+2008-01-30 Németh László <nemeth at OOo>:
- ZWSP, REP, tabulator problems: need for the final release?
+
* Bug 1851246 IDB_Winshell Visual C, hunspell.cxx, csutil.cxx, hunspelldll.c
diff --git a/NEWS b/NEWS
index a68e581..c514e10 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
-2008-01-16: Hunspell 1.2.2 release:
+2008-03-03: Hunspell 1.2.2 release:
- multiple dictionary (dic file) support to use extra (medical,
- geographical etc.) dictionaries
+ geographical etc.) dictionaries (tools/example)
- optional compressed dictionary format "hzip" for aff and dic files
@@ -8,7 +8,7 @@
other commercial programs
- new affix compression tool "affixcompress"
-
+
- bug fixes
2007-11-01: Hunspell 1.2.1 release:
diff --git a/configure b/configure
index f2d6276..48880d9 100755
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.59 for hunspell 1.2.2b.
+# Generated by GNU Autoconf 2.59 for hunspell 1.2.2.
#
# Report bugs to <nemeth@openoffice.org>.
#
@@ -423,8 +423,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
# Identity of this package.
PACKAGE_NAME='hunspell'
PACKAGE_TARNAME='hunspell'
-PACKAGE_VERSION='1.2.2b'
-PACKAGE_STRING='hunspell 1.2.2b'
+PACKAGE_VERSION='1.2.2'
+PACKAGE_STRING='hunspell 1.2.2'
PACKAGE_BUGREPORT='nemeth@openoffice.org'
ac_unique_file="config.h.in"
@@ -954,7 +954,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures hunspell 1.2.2b to adapt to many kinds of systems.
+\`configure' configures hunspell 1.2.2 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1021,7 +1021,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of hunspell 1.2.2b:";;
+ short | recursive ) echo "Configuration of hunspell 1.2.2:";;
esac
cat <<\_ACEOF
@@ -1171,7 +1171,7 @@ fi
test -n "$ac_init_help" && exit 0
if $ac_init_version; then
cat <<\_ACEOF
-hunspell configure 1.2.2b
+hunspell configure 1.2.2
generated by GNU Autoconf 2.59
Copyright (C) 2003 Free Software Foundation, Inc.
@@ -1185,7 +1185,7 @@ cat >&5 <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by hunspell $as_me 1.2.2b, which was
+It was created by hunspell $as_me 1.2.2, which was
generated by GNU Autoconf 2.59. Invocation command line was
$ $0 $@
@@ -1913,7 +1913,7 @@ fi
# Define the identity of the package.
PACKAGE=hunspell
- VERSION=1.2.2b
+ VERSION=1.2.2
cat >>confdefs.h <<_ACEOF
@@ -23881,7 +23881,7 @@ _ASBOX
} >&5
cat >&5 <<_CSEOF
-This file was extended by hunspell $as_me 1.2.2b, which was
+This file was extended by hunspell $as_me 1.2.2, which was
generated by GNU Autoconf 2.59. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -23944,7 +23944,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF
ac_cs_version="\\
-hunspell config.status 1.2.2b
+hunspell config.status 1.2.2
configured by $0, generated by GNU Autoconf 2.59,
with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
diff --git a/configure.ac b/configure.ac
index 19ec498..0e580d0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -4,12 +4,12 @@
m4_pattern_allow
AC_PREREQ(2.59)
-AC_INIT([hunspell],[1.2.2b],[nemeth@openoffice.org])
+AC_INIT([hunspell],[1.2.2],[nemeth@openoffice.org])
AC_CANONICAL_SYSTEM
AC_SUBST(XFAILED)
-AM_INIT_AUTOMAKE(hunspell, 1.2.2b)
+AM_INIT_AUTOMAKE(hunspell, 1.2.2)
HUNSPELL_VERSION_MAJOR=`echo $VERSION | cut -d"." -f1`
HUNSPELL_VERSION_MINOR=`echo $VERSION | cut -d"." -f2`
AC_SUBST(HUNSPELL_VERSION_MAJOR)
diff --git a/man/hu/hunspell.4 b/man/hu/hunspell.4
index 904bb0e..8932c4b 100644
--- a/man/hu/hunspell.4
+++ b/man/hu/hunspell.4
@@ -1,28 +1,28 @@
.hla hu
-.TH hunspell 4 "2005. m�jus 13."
+.TH hunspell 4 "2005. május 13."
.LO 1
-.SH N�V
-hunspell \- a Hunspell �llom�nyainak form�tuma
-.SH LE�R�S
+.SH NÉV
+hunspell \- a Hunspell állományainak formátuma
+.SH LEÍRÁS
A
.IR Hunspell (1)
-k�t �llom�nyt ig�nyel egy adott nyelven t�rt�n� helyes�r�s\-ellen�rz�shez.
-Az els� �llom�ny egy sz�t�r�llom�ny, ami az adott nyelv szavait, �s
-ezek kapcsol�it (attrib�tumait) tartalmazza. A m�sodik �llom�ny
-egy ragoz�si (affixum) �llom�ny, ami meghat�rozza az eml�tett
-kapcsol�k jelent�s�t. A \fIhunspell\fR, ellent�tben az \fIispell\fR\-lel,
-k�zvetlen�l haszn�lja fel ezeket az �llom�nyokat, teh�t nem
-k�pez bel�l�k bin�ris (.hash kiterjeszt�s�) �llom�nyt (l.
-.IR ispell "(4))."
-.SH SZ�T�R�LLOM�NY
+két állományt igényel egy adott nyelven történő helyesírás\-ellenőrzéshez.
+Az első állomány egy szótárállomány, ami az adott nyelv szavait, és
+ezek kapcsolóit (attribútumait) tartalmazza. A második állomány
+egy ragozási (affixum) állomány, ami meghatározza az említett
+kapcsolók jelentését.
+
+.SH SZÓTÁRÁLLOMÁNY
Egy hunspell
-.B sz�t�r�llom�ny
-els� sora a sz�t�r�llom�nyban
-l�v� szavak sz�m�t tartalmazza. A t�bbi sor soronk�nt egy
-sz�t tartalmaz. Minden sz� ut�n nem k�telez�en egy
-perjel, �s egy, vagy t�bb kapcsol� k�vetkezhet. A
-kapcsol�k egybet�sek, �s meghat�rozz�k, hogy milyen
-toldal�kokat kaphat a t�sz�. P�ld�ul a
+.B szótárállomány
+(*.dic) első sora a szótárállományban
+lévő szavak közelítő számát tartalmazza (az optimális méretű
+memóriaterület lefoglalásához). A többi sor soronként egy
+szót tartalmaz. Minden szó után nem kötelezően egy
+perjel, és egy, vagy több kapcsoló következhet. A
+kapcsolók egybetűsek, és meghatározzák, hogy milyen
+toldalékokat kaphat a tőszó, illetve milyen egyéb speciális
+tulajdonságokkal rendelkezik. Például a
.PP
.RS
.nf
@@ -31,47 +31,66 @@ hunspellezik/EeX
.fi
.RE
.PP
-sz�t�r egy sz�t tartalmaz (hunspell), ami a magyar ragoz�si
-�llom�ny alapj�n alanyi �s t�rgyas igeragoz�st is
-vonz (E �s e kapcsol�k), valamint igek�t� prefixumokat is
-kaphat. A p�lda sz�t�r�llom�ny �s a magyar ragoz�si
-�llom�ny alapj�n a \fImeghunspellezt�tek\fR helyes sz�k�nt
-ker�lne felismer�sre.
-.PP
-Morfol�giai le�r�st adhatunk meg a tabul�torjellel
-elv�lasztott m�sodik mez�ben:
+szótár egy szót tartalmaz (hunspell), ami a magyar ragozási
+állomány alapján alanyi és tárgyas igeragozást is
+vonz (E és e kapcsolók), valamint igekötő prefixumokat is
+kaphat. A példa szótárállomány és a magyar ragozási
+állomány alapján a \fImeghunspelleztétek\fR helyes szóként
+kerülne felismerésre.
+
+A szótári szavak perjelet is tartalmazhatnak, ha
+az fordított perjellel van bevezetve: "\/". A kapcsolók
+alapértelmezésként egy karakteresek, de ha több ragozási
+osztályt szeretnénk használni, ez több karakteresre vagy számra is
+módosítható.
+
+A Hunspell szótárállományok sorai kiegészítő adatmezőket is tartalmazhatnak,
+amelyek szóközökkel vagy tabulátorokkal vannak elválasztva (l. kiegészítő
+adatmezők).
+
+A személyes szótárak egyszerű szólisták. Megadhatunk
+perjellel elválasztott példaszavakat is a toldalékolás engedélyezésére:
+
.PP
.RS
.nf
-1
-hunspellezik/EeX [IGE]
+Obama/Tamara
.fi
.RE
.PP
-.SH RAGOZ�SI �LLOM�NY
+
+A példában a Tamara szó toldalékolását a személyes szótár
+Obama szavára is alkalmazza az ellenőrző, elfogadva az Obamáról,
+Obamáékat stb. alakokat is.
+
+.SH RAGOZÁSI ÁLLOMÁNY
A
-.B "ragoz�si �llom�ny"
-rendszerint kisebb m�ret�, �s k�l�nf�le defin�ci�k mellett
-a ragoz�si szab�lyokat adja meg.
+.B "ragozási állomány"
+rendszerint kisebb méretű. Különféle definíciókat és
+ragozási szabályokat ad meg meghatározott kulcsszóival. Például a
+.B SET
+a karakterkódolás, a
+.B TRY
+javaslattevésnél módosítot betűk, a
+.B REP
+a javaslattevésnél módosított szórészletek, a
+.B PFX
+és az
+.B SFX
+pedig a szó elejére és végére illesztendő toldalékok megadására szolgál.
+
+A következő példa egy UTF\-8-as kódolású szótár affixumállományának
+definíciója. A TRY felsorolja a magyar betűket gyakorisági sorrendjükben,
+a LANG beállítja a magyar nyelvet, a WORDCHARS megadja azokat a karaktereket,
+amelyeket a parancssori Hunspell a szavak részeként fog kezelni.
+
.PP
.RS
.nf
-SET ISO8859\-2
-TRY ������taeslz�norhgki�dmy�pv�bucfj��xwqTAESLZ�NORHGKI�DMY�PV�BUCFJ��XWQ\-.
+SET UTF\-8
+TRY íóúÍÓÚtaeslzánorhgkiédmyőpvöbucfjüűxwqTAESLZÁNORHGKIÉDMYŐPVÖBUCFJÜŰXWQ\-.
LANG hu_HU
-COMPOUNDMIN 2
-COMPOUNDFLAG Y
-COMPOUNDWORDMAX 2
-COMPOUNDROOT y
-COMPOUNDSYLLABLE 6 a�e�i�o���u���
-SYLLABLENUM klmc
-COMPOUNDBEGIN v
-COMPOUNDEND x
-FORBIDDENWORD w
-PSEUDOROOT u
-ACCENT ��������� aeiooouuu
-WORDCHARS \-.�%�0123456789
-LEMMA_PRESENT (
+WORDCHARS \-.§%‰°0123456789
REP 2
REP j ly
@@ -79,303 +98,483 @@ REP ly j
PFX X Y 3
PFX X 0 meg .
-PFX X 0 r� .
-PFX X 0 �ssze .
+PFX X 0 rá .
+PFX X 0 össze .
SFX e Y 6
-SFX e ik t�k e[dz]ik
-SFX e ik t�tek e[dz]ik
-SFX e ik t�k e[dz]ik
-SFX e 0 t�k e[dzt]
-SFX e 0 t�tek e[dzt]
-SFX e 0 t�k e[dzt]
+SFX e ik tük e[dz]ik
+SFX e ik tétek e[dz]ik
+SFX e ik ték e[dz]ik
+SFX e 0 tük e[dzt]
+SFX e 0 tétek e[dzt]
+SFX e 0 ték e[dzt]
SFX f Y 2
-SFX f ik het/e e[dz]ik [hAt]
-SFX f ik tet/e e[dz]ik [tAt]
+SFX f ik het/e e[dz]ik
+SFX f ik tet/e e[dz]ik
+.fi
+.RE
+.PP
+
+A REP a j és ly felcserélése esetén ad jó és elöl rangsorolt
+javaslatokat. A PFX-ek pár igekötőt definiálnak, az SFX-ek
+pedig pár igeragot. Ezek nagyobb részénél a szó végi ik is levágásra
+kerül a toldalék illesztése előtt. Itt az illesztés feltétele, hogy az
+igék -edik vagy -ezik karaktersorozatra végződjenek, különben pedig
+az -ed, -ez vagy -et betűkre. Az f jelű toldalékolási osztály
+érdekessége, hogy a -het és -tet illesztése után még folytatódhat
+a toldalékolás az e jelű toldalékolási osztállyal (ezt a het/e
+ls tet/e határozza meg), így kaphat -hettük, -hettétek, -hették,
+-tettük, -tettétek, -tették toldalékokat a szótárban szereplő
+levelezik szó:
+
+.PP
+.RS
+.nf
+1
+levelezik/e
+.fi
+.RE
+.PP
+
+.SH "ÁLTALÁNOS PARAMÉTEREK"
+.IP "SET karakterkód"
+A szótár és affixumállomány karakterkódolásának beállítása.
+A lehetséges értékek: UTF-8, ISO8859\-1-től ISO8859\-10-ig,
+ISO8859\-13\-ISO8859\-15, KOI8-R, KOI8-U, microsoft-cp1251, ISCII-DEVANAGARI.
+.IP "FLAG érték"
+A kapcsolók 1 karakteres alapbeállításának módosítása.
+(A ragozási osztályokat és egyéb tulajdonságokat jelölik a kapcsolók,
+amelyek alapértelmezés szerint 1 karakteresek, a pékdákban
+legtöbbször nagybetűvel szerepelnek). Az `UTF-8' értékkel
+Unicode karaktereket használhatunk kapcsolóként (UTF-8 kódolással és
+maximum 65 ezres karakterkódig), a `long' értékkel két karakteres
+kapcsolókat (több kapcsoló esetén sincs elválasztójel, a `num'
+értékkel vesszővel elválasztott decimális számokat 1-től
+65 ezerig.
+.IP "COMPLEXPREFIXES"
+Kétszeres prefixumillesztést állít be (de csak egyszeres szuffixumokat
+az alapértelmezett kettő helyett.) Jobbról balra író ragasztó nyelveknél hasznos.
+.IP "LANG nyelvkód"
+Nyelv megadása (nyelvfüggő programrészek bekapcsolásához) az
+ISO nyelv- és régiókóddal (pl. hu_HU).
+.IP "IGNORE karakterek"
+A felsorolt karaktereket törli a szótári szavakból és toldalékokból,
+valamint a bemeneti szavakból. Hasznos az opcionális írásjelek, mint
+az arab vagy a héber mellékjelek kezelésére.
+.IP "AF a_következő_AF_sorok_száma"
+.IP "AF kapcsolók"
+A Hunspell program képes a kapcsolóhalmazokat egy természetes
+számmal helyettesíteni a szótárállományban
+és a többszörös toldalékásnál az affixumállományban (alias tömörítés),
+felgyorsítva ezzel a szótár betöltődését és csökkentve a program
+memóriaigényét. Egy rövid példa:
+.PP
+.RS
+.nf
+3
+hello
+try/1
+work/2
+.fi
+.RE
+.PP
+És a kapcsolódó AF definíciók az affixumállományban:
+.PP
+.RS
+.nf
+SET UTF-8
+TRY esianrtolcdugmphbyfvkwzESIANRTOLCDUGMPHBYFVKWZ'
+AF 2
+AF A
+AF AB
+...
+.fi
+.RE
+.PP
+
+Ami megfelel a következő szótárállománynak:
+
+.PP
+.RS
+.nf
+3
+hello
+try/A
+work/AB
+.fi
+.RE
+.PP
+Lásd még a tests/alias* példát a forrásban.
+
+Megjegyzés: az AF sorok nem előzhetik meg a FLAG paramétert.
+Alias tömörítésre szolgál a Hunspell makealias segédprogramja.
+
+.IP "AM a_következő_AM_sorok_száma"
+.IP "AM morfológiai_és_egyéb_adatmezők"
+A Hunspell program képes a kiegészítő adatmezőket
+egy természetes számmal helyettesíteni, az AF paraméterhez hasonlóan.
+Lásd még a tests/alias* példát a forrásban.
+
+.SH "JAVÍTÁSI PARAMÉTEREK"
+Az alapértelmezett n-gram, illetve betűcserén és -törlésen
+alapuló javaslatokat kiegészíthetjük a javítási paraméterekkel.
+A REP segít a tipikus hibák és javításuk megadásában.
+A PHONE a kiejtést kevésbé követő írásrendszereknél nyújt segítséget.
+.IP "KEY szomszédos_karakterek_opcionálisan_függőleges_vonallal_elválasztva"
+A nyelv alapértelmezett billentyűzetkiosztását adhatjuk meg a KEY
+paraméterrel, hogy a javaslatoknál a szomszédos betűk elütését
+felismerje a program. A nem szomszédos betűket függőleges vonallal
+választhatjuk el:
+.PP
+.RS
+.nf
+KEY öüó|qwertzuiopőú|asdfghjkléáű|íyxcvbnm
.fi
.RE
.PP
-A kulcsszavak jelent�se:
-.IP "SET karakterk�d"
-A sz�t�r �s affixum�llom�ny karakterk�dol�s�nak be�ll�t�sa.
-A lehets�ges �rt�kek: UTF-8, ISO8859\-1-t�l ISO8859\-10-ig,
-ISO8859\-14, KOI8-R, KOI8-U, microsoft-cp1251, ISCII-DEVANAGARI.
.IP "TRY karakterek"
-A javaslattev�sn�l az 1 karakteres pr�b�lkoz�sokn�l az itt felsorolt
-karakterekre cser�l, illetve b�v�t.
-.IP "NOSPLITSUGS"
-Nem javasol sz�felbont�st a Hunspell ezzel a be�ll�t�ssal.
+A javaslattevésnél az 1 karakteres próbálkozásoknál az itt felsorolt
+karakterekre cserél, illetve bővít. A paraméternél a kis- és nagybetűket
+külön kell megadni.
+.IP "NOSUGGEST kapcsoló"
+Az itt definiált kapcsolóval jelölt szavakat a program nem javasolja
+a hibajavításnál. Vulgáris és obszcén szavak esetében hasznos.
.IP "MAXNGRAMSUGS"
-Az ngram javaslatok maxim�lis sz�m�nak be�ll�t�sa. Alap�rtelmezetten
-3. A 0 �rt�k kikapcsolja az ngram javaslatokat.
+Az n-gram (n hosszú szórészletek megegyezősége alapján súlyozott)
+javaslatok maximális számának beállítása. Alapértelmezetten
+5. A 0 érték kikapcsolja az n-gram javaslatokat.
+.IP "NOSPLITSUGS"
+Nem javasol szófelbontást a Hunspell ezzel a beállítással.
+Hiányzó összetettszó-kezelés esetén hasznos a hibás különírási
+javaslatok tiltására.
.IP "SUGSWITHDOTS"
-Ha a hib�s sz� pont(ok)ra v�gz�dik, ezeket a javaslatok eset�ben is
-felt�nteti. Az OpenOffice.org sz�t�rak sz�m�ra nem sz�ks�ges ez a
-be�ll�t�s.
-.IP "LANG nyelvk�d"
-Nyelv megad�sa (Morphbase kieg�sz�t�s, ami a nyelvf�gg�
-programr�szek bekapcsol�s�t v�gzi). �j nyelv hozz�ad�sa a langnum.hxx
-�s a csutil.cxx �llom�nyon kereszt�l lehets�ges a forr�sk�dban.
-.IP "COMPLEXPREFIXES"
-K�tszeres prefixum lev�g�s be�ll�t�sa (de ezzel a k�tszeres szuffixum
-lev�g�s lehet�s�ge megsz�nik).
-.IP "COMPOUNDMIN sz�m"
-A legkisebb sz�hossz, ami m�g �sszetett sz�ban szerepelhet.
-Alap�rtelmez�s szerint 3 karakter.
-.IP "COMPOUNDFLAG kapcsol�"
-Itt adhat� meg a sz��sszet�telben val� szerepl�st enged�lyez�
-kapcsol�.
-.IP "COMPOUNDBEGIN kapcsol�"
-A kapcsol� az �sszetett szavak els� tagjak�nt enged�lyezi
-a megjel�lt szavakat.
-.IP "COMPOUNDLAST kapcsol�"
-A kapcsol� az �sszetett szavak utols� tagjak�nt enged�lyezi
-a megjel�lt szavakat. Kombin�lhat� az el�z� kapcsol�val.
-.IP "COMPOUNDMIDDLE kapcsol�"
-A kapcsol� az �sszetett szavak k�zbens� tagjak�nt enged�lyezi
-a megjel�lt szavakat. Kombin�lhat� a k�t el�z� kapcsol�val.
-.IP "ONLYINCOMPOUND kapcsol�"
-Csak az �sszetett szavakban megjelen� ragoz�s jel�l�s�re szolg�l�
-kapcsol� (germ�n nyelvek eset�ben tipikus).
-.IP "CIRCUMFIX kapcsol�"
-Ezzel a kapcsol�val jel�lt szuffixum csak ugyanilyen kapcsol�val
-jel�lt prefixummal jelenhet meg egy t�v�n. (Pl. leg-�des-ebb).
-.IP "COMPOUNDPERMITFLAG kapcsol�"
-Alap�etelmez�s szerint a prefixumok �s szuffixumok nem fordulhatnak
-el� az �sszetett szavak belsej�ben. A COMPOUNDPERMITFLAG
-kapcsol�val rendelkez� affixumok viszont itt is megjelenhetnek.
-.IP "COMPOUNDFORBIDFLAG kapcsol�"
-Toldal�kolt szavak sz��sszet�telben val� szerepl�s�t tilt�
-kapcsol�. A tilt�shoz az adott SFX szab�ly folytat�si
-oszt�lyak�nt (l. k�s�bb) adjuk meg ezt a kapcsol�t.
-.IP "COMPOUNDROOT kapcsol�"
-A sz�t�rba k�zvetlen�l felvett �sszetett szavakat
-jel�l� kapcsol�. A COMPOUNDWORDMAX, �s �gy a magyar eset�ben
-a 6-3-as szab�ly m�k�d�s�t befoly�solja azzal, hogy a COMPOUNDROOT
-kapcsol�val �sszetettnek jel�lt
-szavak k�t sz�nak sz�m�tanak.
-.IP "COMPOUNDWORDMAX sz�m"
-A sz��sszet�telekben szerepl� egyszer� t�vek maxim�lis sz�ma.
-A magyar eset�ben 2 az �rt�k, e f�l�tti sz�sz�mn�l m�r �letbe l�p
-a 6-3-as szab�ly.
-.IP "COMPOUNDSYLLABLE sz�m karakterek"
-K�t param�tert v�r. Az els� megadja az �sszetett szavak t�v�nek
-maxim�lis sz�tagsz�m�t, ami a magyar helyes�r�s 6-3-as szab�lya szerint 6.
-A m�sodik mez� felsorolja a mag�nhangz�kat,
-ami a sz�tagsz�m meg�llap�t�s�hoz sz�ks�ges.
-Ha hi�nyzik ez a defin�ci�, akkor nincsen
-korl�toz�s az �sszetett szavak t�v�nek sz�tagsz�m�ra
-vonatkoz�an.
-.IP "SYLLABLENUM kapcsol�k"
-Egy param�tert v�r. A param�terben megadhat�ak azok a ragoz�si
-oszt�lyok, amelyek ragoz�s eset�n eggyel n�velik az �sszetett
-szavak t�v�n�l kisz�m�tott sz�tagsz�mot. A magyarban ezek
-a mell�kn�vk�pz�k: ker�kp�rjav�t�sainkr�l, de ker�kp�r\-jav�t�si.
+Ha a hibás szó pont(ok)ra végződik, ezeket a javaslatok esetében is
+feltünteti. Az OpenOffice.org szótárak számára nem szükséges ez a
+beállítás.
+.IP "REP szám"
+.IP "REP mit mire"
+A javítási cseretáblázat megadására szolgáló definíciók.
+Az első REP után adjuk meg a többi REP sor számát.
+Ezek a sorok már két paramétert várnak: először
+megadjuk a felismerendő mintát (hibás szórészletet),
+utána pedig azt a karaktersorozatot, amire a felismert
+mintát javítani szeretnénk. A helyesírás\-ellenőrző
+a cseretáblázat révén tud helyes javaslatot tenni
+többkarakteres eltérés (pl. j-ly) esetén.
+
+A szóköz aláhúzásjellel helyettesítendő a javaslatokban:
+
+.PP
+.RS
+.nf
+REP 1
+REP végülis végül_is
+.fi
+.RE
+.PP
+
+A szervíz, szintű és a hasonló hibás összetett szavak
+letiltásában szintén a REP táblázat segít a CHECKCOMPOUNDREP
+megadásával (l. ott).
+
+.IP "MAP a_MAP_definíciók_száma"
+.IP "MAP karakterek"
+Rokon karaktereket adhatunk meg több sorban. A javaslattevésnél
+több rokon karakter cseréje is lehetséges, így például ékezet
+nélküli szavakat is képes ékezetesíteni a Hunspell a következő
+definíció mellett:
+
+.PP
+.RS
+.nf
+MAP 5
+MAP aá
+MAP eé
+MAP ií
+MAP oóöő
+MAP uúüű
+.fi
+.RE
+.PP
+.IP "PHONE a_PHONE_definíciók_száma"
+.IP "PHONE karakterek"
+A PHONE egy táblázattal megadható fonetikus átírási algoritmust
+használ a kiejtési hasonlóság kiszámítására. Különösen
+hasznos azoknál a nyelveknél, ahol az írás nem tükrözi a kiejtést.
+A részletes dokumentáció az Aspell helyesírás-ellenőrző oldalán
+érhető el angol nyelven: http://aspell.net/man-html/Phonetic-Code.html.
+
+Megjegyzés: a szabályokban szereplő kapcsos zárójelek nem
+tartalmazhatnak még több byte-os UTF-8 karaktereket, ahogy
+a kötőjeles kifejezések is byte-ot jelölnek, nem karaktert Unicode
+szótár esetén is.
+.SH "SZÓ-ÖSSZETÉTELEZÉSI PARAMÉTEREK"
+.IP "BREAK a_BREAK_definíciók_száma"
+.IP "BREAK karakter_vagy_karaktersorozat"
+Ha a keresett szó nincs a szótárban, a felsorolt karaktereknél vagy
+karaktersorozatoknál felbontja és részenként ellenőrzi. Hasznos
+például a kis- és nagykötőjeles szavaknál a magyarban.
+.IP "COMPOUNDRULE"
+xxxxxxx
+
+.IP "COMPOUNDMIN szám"
+A legkisebb szóhossz, ami még összetett szóban szerepelhet.
+Alapértelmezés szerint 3 karakter.
+.IP "COMPOUNDFLAG kapcsoló"
+Itt adható meg a szóösszetételben való szereplést engedélyező
+kapcsoló.
+.IP "COMPOUNDBEGIN kapcsoló"
+A kapcsoló az összetett szavak első tagjaként engedélyezi
+a megjelölt szavakat.
+.IP "COMPOUNDLAST kapcsoló"
+A kapcsoló az összetett szavak utolsó tagjaként engedélyezi
+a megjelölt szavakat. Kombinálható az előző kapcsolóval.
+.IP "COMPOUNDMIDDLE kapcsoló"
+A kapcsoló az összetett szavak közbenső tagjaként engedélyezi
+a megjelölt szavakat. Kombinálható a két előző kapcsolóval.
+.IP "ONLYINCOMPOUND kapcsoló"
+Csak az összetett szavakban megjelenő ragozás jelölésére szolgáló
+kapcsoló (germán nyelvek esetében tipikus).
+.IP "CIRCUMFIX kapcsoló"
+Ezzel a kapcsolóval jelölt szuffixum csak ugyanilyen kapcsolóval
+jelölt prefixummal jelenhet meg egy tövön. (Pl. leg-édes-ebb).
+.IP "COMPOUNDPERMITFLAG kapcsoló"
+Alapéetelmezés szerint a prefixumok és szuffixumok nem fordulhatnak
+elő az összetett szavak belsejében. A COMPOUNDPERMITFLAG
+kapcsolóval rendelkező affixumok viszont itt is megjelenhetnek.
+.IP "COMPOUNDFORBIDFLAG kapcsoló"
+Toldalékolt szavak szóösszetételben való szereplését tiltó
+kapcsoló. A tiltáshoz az adott SFX szabály folytatási
+osztályaként (l. később) adjuk meg ezt a kapcsolót.
+.IP "COMPOUNDROOT kapcsoló"
+A szótárba közvetlenül felvett összetett szavakat
+jelölő kapcsoló. A COMPOUNDWORDMAX, és így a magyar esetében
+a 6-3-as szabály működését befolyásolja azzal, hogy a COMPOUNDROOT
+kapcsolóval összetettnek jelölt
+szavak két szónak számítanak.
+.IP "COMPOUNDWORDMAX szám"
+A szóösszetételekben szereplő egyszerű tövek maximális száma.
+A magyar esetében 2 az érték, e fölötti szószámnál már életbe lép
+a 6-3-as szabály.
+.IP "COMPOUNDSYLLABLE szám karakterek"
+Két paramétert vár. Az első megadja az összetett szavak tövének
+maximális szótagszámát, ami a magyar helyesírás 6-3-as szabálya szerint 6.
+A második mező felsorolja a magánhangzókat,
+ami a szótagszám megállapításához szükséges.
+Ha hiányzik ez a definíció, akkor nincsen
+korlátozás az összetett szavak tövének szótagszámára
+vonatkozóan.
+.IP "SYLLABLENUM kapcsolók"
+Egy paramétert vár. A paraméterben megadhatóak azok a ragozási
+osztályok, amelyek ragozás esetén eggyel növelik az összetett
+szavak tövénél kiszámított szótagszámot. A magyarban ezek
+a melléknévképzők: kerékpárjavításainkról, de kerékpár\-javítási.
A
-.IP "FORBIDDENWORD kapcsol�"
-A tiltott szavakat jel�l� kapcsol�. A tiltott sz�t�vek
-toldal�kolt alakjai is letilt�sra ker�lnek. A tiltott
-szavak ak�r toldal�kol�si, vagy sz��sszet�teli szinonimak�nt
-sem ker�lnek elfogad�sra.
-.IP "PSEUDOROOT kapcsol�"
-A kapcsol�val jel�lt szavak toldal�kolt alakjai ker�lnek
-csak elfogad�sra. Fikt�v t�vek megad�s�ra szolg�l�
-kapcsol�. A t� lehet m�g helyes sz�, ha
-�rv�nyes szinonimak�nt el��ll vagy szerepel a sz�t�rban.
-.IP "ACCENT �kezetes_bet�k ugyanaz_�kezet_n�lk�l"
-Az �kezetes�t�shez sz�ks�ges bet�ket k�t param�terrel
-adhatjuk meg itt. Az els� param�terben
-az �kezetes karaktereket, a m�sodikban az azoknak
-megfelel� �kezet n�lk�li bet�ket adjuk meg.
+.IP "FORBIDDENWORD kapcsoló"
+A tiltott szavakat jelölő kapcsoló. A tiltott szótövek
+toldalékolt alakjai is letiltásra kerülnek. A tiltott
+szavak akár toldalékolási, vagy szóösszetételi szinonimaként
+sem kerülnek elfogadásra.
+.IP "PSEUDOROOT kapcsoló"
+A kapcsolóval jelölt szavak toldalékolt alakjai kerülnek
+csak elfogadásra. Fiktív tövek megadására szolgáló
+kapcsoló. A tő lehet még helyes szó, ha
+érvényes szinonimaként előáll vagy szerepel a szótárban.
.IP "WORDCHARS karakterek"
-Param�tere azok a karakterek, amelyek a be�ll�tott k�dol�s (pl.
-a magyar eset�ben az ISO-8859-2) bet�i mellett m�g az adott
-nyelv szavaiban el�fordulhatnak. Ilyen p�ld�ul a magyarban
-a k�t�jel, pont, sz�zal�kjel, fokjel, paragrafusjel �s a
-nagyk�t�jel. Az ut�bbi csak UTF-8, vagy microsoft-cp1250
-karakterk�szlet mellett lesz haszn�lhat� a magyar sz�t�rban.
-.IP "LEMMA_PRESENT kapcsol�"
-A morfol�giai le�r�s elej�n megadhatunk m�s t�veket is a
-t�sz�t�rban az alap�rtelmezett helyett. A LEMMA_PRESENT
-kapcsol�val jel�lt t�vek eset�ben az elemz� nem teszi a
-kimenetbe a lemm�t (mivel az m�r szerepel a morfol�giai
-le�r�sban). �gy adhatunk meg fikt�v vagy nem sz�t�ri
-t�vekhez val�di t�veket.
-.IP "REP sz�m"
-.IP "REP mit mire"
-A jav�t�si cseret�bl�zat megad�s�ra szolg�l� defin�ci�k.
-Az els� REP ut�n adjuk meg a t�bbi REP sor sz�m�t.
-Ezek a sorok m�r k�t param�tert v�rnak: el�sz�r
-megadjuk a felismerend� mint�t (hib�s sz�r�szletet),
-ut�na pedig azt a karaktersorozatot, amire a felismert
-mint�t jav�tani szeretn�nk. A helyes�r�s\-ellen�rz�
-a cseret�bl�zat r�v�n tud helyes javaslatot tenni
-t�bbkarakteres elt�r�s (pl. j/ly) eset�n.
-A Magyar Ispellben megl�v� keresztellen�rz�s miatt
-egy karakteres cser�k (i/�) is szerepelnek
-a REP t�bl�zatban. Ennek k�sz�nhet�, hogy az am�gy
-helyes nem sz�t�ri sz��sszet�telek nem ker�lnek
-elfogad�sra, ha a cseret�bl�zat egyik cser�j�vel
-el��ll�that�k egy sz�t�ri sz�b�l (p�ld�ul:
-a ,,sz�nt�'' sz� hib�s �sszetett sz� lesz, mert az
-i\->� cser�vel el��ll�that� a szint� sz�b�l).
-.IP "PFX kapcsol� keresztkombin�l�d�s sz�m"
-.IP "PFX kapcsol� lev�g�s prefixum felt�tel morfol�gia"
-Prefixum megad�s�ra szolg�l� defin�ci�k.
-A prefixumok egykarakteres n�vvel jel�lt oszt�lyokba
-vannak sorolva. A p�ld�ban az X oszt�ly
-defin�ci�ja l�that�. Az egyes oszt�lyokra
-vonatkoz� PFX fejl�c tartalmazza a k�vetkez�ket:
-
-(1) az oszt�ly bet�jel�t (a p�ld�ban X)
-
-(2) a keresztbe val� kombin�l�s enged�lyez�se, illetve
-tilt�sa (Y/N). Enged�lyez�s eset�n az adott prefixum akkor is
-alkalmazhat�, ha a t�sz� toldal�kolt alakban fordul el�.
-Ehhez az is sz�ks�ges, hogy a toldal�k (affixum) ragoz�si
-oszt�ly�ban is legyen enged�lyezve a kombin�l�s.
-
-(3) az oszt�lyba tartoz� bejegyz�sek sz�m�t
-
-A PFX fejl�cet k�vet� sorokban a PFX param�terek jelent�se
-a k�vetkez�:
-
-(1) az oszt�ly bet�jele
-
-(2) a ragoz�sn�l a sz� elej�r�l lev�lasztand� karaktersorozat.
-Ha nem kell lev�lasztani, akkor 0.
-
-(3) a prefixum (p�ld�ul igek�t�, vagy a leg\-, legesleg\-
-a mell�knevekn�l). Perjellel elv�lasztva kapcsol�kat
-is megadhatunk (l. t�bbsz�r�s toldal�kol�s).
-
-(4) a minta, ami ha illeszkedik, alkalmazhat� a szab�ly.
-P�ld�ul ha itt kutya szerepelne, akkor csak a kutya
-kezdet� szavak el� lehetne tenni az ebben a sorban
-megadott prefixumot. A minta megad�s�n�l a pont (.)
-speci�lis jelent�ssel b�r: minden karakterre illeszkedik.
-Megadhatunk csak bizonyos karakterekre illeszked� mint�t
-is sz�gletes z�r�jelek seg�ts�g�vel. P�ld�ul az [abcd] illeszkedik
+Paramétere azok a karakterek, amelyek a beállított kódolás (pl.
+a magyar esetében az ISO-8859-2) betűi mellett még az adott
+nyelv szavaiban előfordulhatnak. Ilyen például a magyarban
+a kötőjel, pont, százalékjel, fokjel, paragrafusjel és a
+nagykötőjel. Az utóbbi csak UTF-8, vagy microsoft-cp1250
+karakterkészlet mellett lesz használható a magyar szótárban.
+.IP "LEMMA_PRESENT kapcsoló"
+A morfológiai leírás elején megadhatunk más töveket is a
+tőszótárban az alapértelmezett helyett. A LEMMA_PRESENT
+kapcsolóval jelölt tövek esetében az elemző nem teszi a
+kimenetbe a lemmát (mivel az már szerepel a morfológiai
+leírásban). Így adhatunk meg fiktív vagy nem szótári
+tövekhez valódi töveket.
+.IP "PFX kapcsoló keresztkombinálódás szám"
+.IP "PFX kapcsoló levágás prefixum feltétel morfológia"
+Prefixum megadására szolgáló definíciók.
+A prefixumok egykarakteres névvel jelölt osztályokba
+vannak sorolva. A példában az X osztály
+definíciója látható. Az egyes osztályokra
+vonatkozó PFX fejléc tartalmazza a következőket:
+
+(1) az osztály betűjelét (a példában X)
+
+(2) a keresztbe való kombinálás engedélyezése, illetve
+tiltása (Y/N). Engedélyezés esetén az adott prefixum akkor is
+alkalmazható, ha a tőszó toldalékolt alakban fordul elő.
+Ehhez az is szükséges, hogy a toldalék (affixum) ragozási
+osztályában is legyen engedélyezve a kombinálás.
+
+(3) az osztályba tartozó bejegyzések számát
+
+A PFX fejlécet követő sorokban a PFX paraméterek jelentése
+a következő:
+
+(1) az osztály betűjele
+
+(2) a ragozásnál a szó elejéről leválasztandó karaktersorozat.
+Ha nem kell leválasztani, akkor 0.
+
+(3) a prefixum (például igekötő, vagy a leg\-, legesleg\-
+a mellékneveknél). Perjellel elválasztva kapcsolókat
+is megadhatunk (l. többszörös toldalékolás).
+
+(4) a minta, ami ha illeszkedik, alkalmazható a szabály.
+Például ha itt kutya szerepelne, akkor csak a kutya
+kezdetű szavak elé lehetne tenni az ebben a sorban
+megadott prefixumot. A minta megadásánál a pont (.)
+speciális jelentéssel bír: minden karakterre illeszkedik.
+Megadhatunk csak bizonyos karakterekre illeszkedő mintát
+is szögletes zárójelek segítségével. Például az [abcd] illeszkedik
az a, b, c, illetve d karakterekre is.
-Ellent�tben az Ispell\-lel, a k�t�jel
-szerepe a sz�gletes z�r�jelek k�z�tt nem speci�lis,
-vagyis k�t�jelet jelent, �s nem karaktertartom�nyt.
-Ha a nyit� sz�gletes z�r�jel ut�n kalap (^) karakter
-tal�lhat�, a karaktertartom�ny komplementer�re
-illeszkedik a minta, hasonl�an a regul�ris
-kifejez�sekhez (l.
+Ellentétben az Ispell\-lel, a kötőjel
+szerepe a szögletes zárójelek között nem speciális,
+vagyis kötőjelet jelent, és nem karaktertartományt.
+Ha a nyitó szögletes zárójel után kalap (^) karakter
+található, a karaktertartomány komplementerére
+illeszkedik a minta, hasonlóan a reguláris
+kifejezésekhez (l.
.IR regex "(7))."
-(5) Morfol�giai le�r�s. Sz�k�z�n �s sz�k�z �rt�k�
-karaktereken k�v�l tetsz�leges karakterekb�l �ll� le�r�s.
-A morfol�giai elemz�s sor�n a program �sszef�zi az
-itt tal�lhat� le�r�st, tartalm�val nem foglalkozik.
-Kiv�ve a { �s } k�z� z�rt le�r�sokat, amelyek a
-sor v�gi z�r�jelezett r�sz kiv�tel�vel elt�nnek az elemz�sb�l.
-Ezen a m�don a z�r� morf�m�hoz kapcsol�d� elemz�st adhatjuk
+(5) Morfológiai leírás. Szóközön és szóköz értékű
+karaktereken kívül tetszőleges karakterekből álló leírás.
+A morfológiai elemzés során a program összefűzi az
+itt található leírást, tartalmával nem foglalkozik.
+Kivéve a { és } közé zárt leírásokat, amelyek a
+sor végi zárójelezett rész kivételével eltűnnek az elemzésből.
+Ezen a módon a zéró morfémához kapcsolódó elemzést adhatjuk
meg.
-.IP "SFX kapcsol� keresztkombin�l�d�s sz�m"
-.IP "SFX kapcsol� szuffixum felt�tel mofol�giai_le�r�s"
-A PFX\-szel megegyez� param�tereket kap, csak nem
-a sz� eleji, hanem a sz� v�gi toldal�kok le�r�s�ra
-szolg�l. A p�ld�ban szerepl� defin�ci�k jelent�se:
-az \-edik, vagy \-ezik v�g� szavakra alkalmazhat�
-a h�rom szab�ly. A rag illeszt�s�n�l levessz�k
-a sz� v�gi \-ik karaktersorozatot, �s szab�lyt�l f�gg�en
-illesztj�k a \-t�k, \-t�tek, \-t�k toldal�kokat,
-v�geredm�nyben \-edt�k, \-edt�tek, \-edt�k, illetve
--ezt�k, \-ezt�tek, \-ezt�k v�g� szavakat kapva.
-.IP "T�bbsz�r�s toldal�kol�s"
-A PFX �s az SFX szab�lyokban a toldal�k perjellel elv�lasztva kapcsol�kat is
-kaphat, hasonl�an a sz�t�r�llom�ny t�veihez. A kapcsol�k a
-k�vetkez�ek lehetnek:
-
-(1) SFX szab�lyban az SFX folytat�s jelent�se, hogy a toldal�k m�g tov�bb
-ragoz�dhat a megadott kapcsol�kkal (t�bbsz�r�s affixumlev�laszt�s).
-A Hunspell eset�ben csak a k�tszeres affixumlev�laszt�s lett megval�s�tva,
-teh�t a folytat�si oszt�ly folytat�s�t m�r nem veszi figyelembe a program.
-
-(2) SFX szab�lyban a PFX folytat�s jelent�se, hogy az adott prefixum is
-hozz�j�rulhat a t�h�z, felt�ve, ha az SFX szab�ly is �l.
-
-(3) PFX szab�lyban az SFX szab�ly jelent�se, hogy a megjel�lt SFX
-szab�ly a t�h�z j�rulhat, ha a PFX szab�ly is �l.
-
-(4) ONLYINCOMPOUND kapcsol� megad�s�val az adott PFX vagy SFX toldal�k csak
-sz��sszet�telben jelentkezhet.
-
-(5) CIRCUMFIX kapcsol� megad�s�val az adott SFX csak az ugyanilyen
-toldal�kot kap� PFX-szel egy�tt fordulhat csak el�.
-
-(6) Az �sszet�teli kapcsol�k megad�s�val enged�lyezhetj�k
-vagy letilthatjuk (COMPOUNDFORBIDFLAG) az �sszet�telben val�
-szerepl�st. A �sszetett szavak utols� tagja alap�rtelmez�s szerint
-minden affixumot felvehet. A k�zbens� szavakn�l viszont
-explixit m�don enged�lyezni kell ezt.
+.IP "SFX kapcsoló keresztkombinálódás szám"
+.IP "SFX kapcsoló szuffixum feltétel mofológiai_leírás"
+A PFX\-szel megegyező paramétereket kap, csak nem
+a szó eleji, hanem a szó végi toldalékok leírására
+szolgál. A példában szereplő definíciók jelentése:
+az \-edik, vagy \-ezik végű szavakra alkalmazható
+a három szabály. A rag illesztésénél levesszük
+a szó végi \-ik karaktersorozatot, és szabálytól függően
+illesztjük a \-tük, \-tétek, \-ték toldalékokat,
+végeredményben \-edtük, \-edtétek, \-edték, illetve
+-eztük, \-eztétek, \-ezték végű szavakat kapva.
+.IP "Többszörös toldalékolás"
+A PFX és az SFX szabályokban a toldalék perjellel elválasztva kapcsolókat is
+kaphat, hasonlóan a szótárállomány töveihez. A kapcsolók a
+következőek lehetnek:
+
+(1) SFX szabályban az SFX folytatás jelentése, hogy a toldalék még tovább
+ragozódhat a megadott kapcsolókkal (többszörös affixumleválasztás).
+A Hunspell esetében csak a kétszeres affixumleválasztás lett megvalósítva,
+tehát a folytatási osztály folytatását már nem veszi figyelembe a program.
+
+(2) SFX szabályban a PFX folytatás jelentése, hogy az adott prefixum is
+hozzájárulhat a tőhöz, feltéve, ha az SFX szabály is él.
+
+(3) PFX szabályban az SFX szabály jelentése, hogy a megjelölt SFX
+szabály a tőhöz járulhat, ha a PFX szabály is él.
+
+(4) ONLYINCOMPOUND kapcsoló megadásával az adott PFX vagy SFX toldalék csak
+szóösszetételben jelentkezhet.
+
+(5) CIRCUMFIX kapcsoló megadásával az adott SFX csak az ugyanilyen
+toldalékot kapó PFX-szel együtt fordulhat csak elő.
+
+(6) Az összetételi kapcsolók megadásával engedélyezhetjük
+vagy letilthatjuk (COMPOUNDFORBIDFLAG) az összetételben való
+szereplést. A összetett szavak utolsó tagja alapértelmezés szerint
+minden affixumot felvehet. A közbenső szavaknál viszont
+explixit módon engedélyezni kell ezt.
.PP
-A ragoz�si �llom�ny ezeken k�v�l m�g megjegyz�seket is tartalmazhat, ez�rt az adott
-sz�t�r v�ltozat�t, szerz�j�t, felhaszn�l�si enged�lyeit itt
-keress�k.
-.SH SAJ�T SZ�T�R
-A saj�t sz�t�r form�tuma k�zel megegyezik a sz�t�r�llom�ny
-form�tum�val. A k�l�nbs�gek a k�vetkez�ek:
-
-(1) Nem kell megadni az els� sorban az �llom�nyban l�v� szavak
-m�ret�t. (Ne is adjuk meg!)
-
-(2) A sorban a kapcsol�k helyett megadhatunk k�t
-perjellel elv�lasztva egy mintasz�t is,
-aminek a kapcsol�it �r�kli a k�s�bbiekben a saj�t
-sz�t�rba felvett sz�. P�ld�ul a Patyomkin//�d�m sor
-jelent�se, hogy a Patyomkin sz�t az �d�m�val megegyez�
-ragoz�ssal is el kell fogadni.
-
-(3) Az �llom�ny k�zzel m�dos�that�, �s ezt id�nk�nt
-javasolt is megtenni, ha esetleg hib�san vett�nk fel szavakat.
-.SH L�SD M�G
-.B angol nyelv� hunspell (4),
+A ragozási állomány ezeken kívül még megjegyzéseket is tartalmazhat, ezért az adott
+szótár változatát, szerzőjét, felhasználási engedélyeit itt
+keressük.
+.SH SAJÁT SZÓTÁR
+A saját szótár formátuma közel megegyezik a szótárállomány
+formátumával. A különbségek a következőek:
+
+(1) Nem kell megadni az első sorban az állományban lévő szavak
+méretét. (Ne is adjuk meg!)
+
+(2) A sorban a kapcsolók helyett megadhatunk két
+perjellel elválasztva egy mintaszót is,
+aminek a kapcsolóit örökli a későbbiekben a saját
+szótárba felvett szó. Például a Patyomkin//Ádám sor
+jelentése, hogy a Patyomkin szót az Ádáméval megegyező
+ragozással is el kell fogadni.
+
+(3) Az állomány kézzel módosítható, és ezt időnként
+javasolt is megtenni, ha esetleg hibásan vettünk fel szavakat.
+.SH LÁSD MÉG
+.B angol nyelvű hunspell (4),
.B hunspell (1),
.B ispell (1),
.B ispell (4),
-Magyar Ispell dokument�ci�.
-.SH T�RT�NET
-A MySpell sz�t�r\-, illetve ragoz�si �llom�ny�nak form�tum�t
-Kevin Hendricks k�sz�tette olyan c�llal, hogy lehet�v�
-tegye ezen �llom�nyok gyors, fut�s idej� feldolgoz�s�t.
-
-A COMPOUNDFLAG �s a Hunspell form�tumb�v�t�st, valamint
-a REP t�bbkarakteres cseret�bl�zatot N�meth L�szl�
-k�sz�tette els�sorban a jobb magyar
-nyelv� helyes�r�s\-ellen�rz�s c�lj�b�l. A minim�lis
-�sszetettsz�\-kezel�st lehet�v� tev� COMPOUNDMIN, COMPOUNDFLAG,
-�s a REP t�bbkarakteres cseret�bl�zat r�sze a hivatalos
-MySpell f�ggv�nyk�nyvt�rnak is.
-
-A Hunspell sz�t�r�llom�ny�nak form�tuma megegyezik
-a MySpell f�ggv�nyk�nyvt�r�val, a ragoz�si t�bl�zat pedig
-a fentiekben felsorolt b�v�t�seket tartalmazza.
-A b�v�tett form�tum� affixum �llom�ny gond n�lk�l
-egy�ttm�k�dik az eredeti MySpell f�ggv�nyk�nyvt�rral is,
-de a b�v�t�sek nem fognak m�k�dni. S�t, mivel a
-hivatalos MySpell egy megenged�bb �sszetettsz�\-kezel�st
-val�s�t meg, mint a magyar v�ltozat, az
-�sszetett szavakon bel�li toldal�kolt alakok is elfogad�sra
-ker�lnek (ez k�l�n�sen sok hib�s �sszet�tel
-elfogad�s�t eredm�nyezi a magyar nyelv eset�ben).
-
-Ebb�l fakad, hogy a hivatalos Magyar
+Magyar Ispell dokumentáció.
+.SH TÖRTÉNET
+A MySpell szótár\-, illetve ragozási állományának formátumát
+Kevin Hendricks készítette olyan céllal, hogy lehetővé
+tegye ezen állományok gyors, futás idejű feldolgozását.
+
+A COMPOUNDFLAG és a Hunspell formátumbővítést, valamint
+a REP többkarakteres cseretáblázatot Németh László
+készítette elsősorban a jobb magyar
+nyelvű helyesírás\-ellenőrzés céljából. A minimális
+összetettszó\-kezelést lehetővé tevő COMPOUNDMIN, COMPOUNDFLAG,
+és a REP többkarakteres cseretáblázat része a hivatalos
+MySpell függvénykönyvtárnak is.
+
+A Hunspell szótárállományának formátuma megegyezik
+a MySpell függvénykönyvtáréval, a ragozási táblázat pedig
+a fentiekben felsorolt bővítéseket tartalmazza.
+A bővített formátumú affixum állomány gond nélkül
+együttműködik az eredeti MySpell függvénykönyvtárral is,
+de a bővítések nem fognak működni. Sőt, mivel a
+hivatalos MySpell egy megengedőbb összetettszó\-kezelést
+valósít meg, mint a magyar változat, az
+összetett szavakon belüli toldalékolt alakok is elfogadásra
+kerülnek (ez különösen sok hibás összetétel
+elfogadását eredményezi a magyar nyelv esetében).
+
+Ebből fakad, hogy a hivatalos Magyar
OpenOffice.org (http://office.fsf.hu) \- mivel a Magyar
-MySpell f�ggv�nyk�nyvt�rat tartalmazza \- jobban t�mogatja
-a magyar nyelvet, mint m�s v�ltozatok. Egyszer�en
-meggy�z�dhet�nk arr�l, hogy melyik v�ltozattal van dolgunk:
-�rjuk be, hogy
-.I helyes�r�sellen�rz�
-az OOo sz�vegszerkeszt�j�be.
-Ha hib�snak jelzi, �s
-.I helyes�r�s\-ellen�rz�t
+MySpell függvénykönyvtárat tartalmazza \- jobban támogatja
+a magyar nyelvet, mint más változatok. Egyszerűen
+meggyőződhetünk arról, hogy melyik változattal van dolgunk:
+írjuk be, hogy
+.I helyesírásellenőrző
+az OOo szövegszerkesztőjébe.
+Ha hibásnak jelzi, és
+.I helyesírás\-ellenőrzőt
javasol helyette,
a Hunspell\-lel van dolgunk. Ha helyesnek fogadja
el, akkor pedig az eredeti MySpell\-lel.
+
+
+
+A Magyar Ispellben meglévő keresztellenőrzés miatt
+egy karakteres cserék (i-í) is szerepelnek
+a REP táblázatban. Ennek köszönhető, hogy az amúgy
+helyes nem szótári szóösszetételek nem kerülnek
+elfogadásra, ha a cseretáblázat egyik cseréjével
+előállíthatók egy szótári szóból (például:
+a ,,színtű'' szó hibás összetett szó lesz, mert az
+i\->í cserével előállítható a szintű szóból).
+
+
+COMPOUNDMIN 2
+COMPOUNDFLAG Y
+COMPOUNDWORDMAX 2
+COMPOUNDROOT y
+COMPOUNDSYLLABLE 6 aáeéiíoóöőuúüű
+SYLLABLENUM klmc
+COMPOUNDBEGIN v
+COMPOUNDEND x
+FORBIDDENWORD w
+PSEUDOROOT u
+ACCENT áéíóöőúüű aeiooouuu
diff --git a/man/hunspell.1 b/man/hunspell.1
index 2f358be..6459ff6 100644
--- a/man/hunspell.1
+++ b/man/hunspell.1
@@ -1,5 +1,5 @@
.hla hu
-.TH hunspell 1 "2007-06-18"
+.TH hunspell 1 "2008-03-03"
.LO 1
.SH NAME
hunspell \- spell checker, stemmer and morphological analyzer
@@ -276,9 +276,16 @@ Print lines with misspelled words.
The "list" option
is used to produce a list of misspelled words from the standard input.
+.IP \fB\-m\fR
+Analyze the words of the input text (see also hunspell(4) about
+morphological analysis).
+
.IP \fB\-n\fR
The input file is in nroff/troff format.
+.IP \fB\-P\ password\fR
+Set password for encrypted dictionaries.
+
.IP \fB\-p\ dict\fR
Set path of personal dictionary.
Default is $HOME/.hunspell_default.
@@ -289,6 +296,9 @@ or the
environmental variable, personal dictionary will be
.BR $HOME/.hunspell_dicname
+.IP \fB\-s\fR
+Stem the words of the input text (see also hunspell(4) about
+stemming).
.IP \fB\-t\fR
The input file is in TeX or LaTeX format.
diff --git a/man/hunspell.4 b/man/hunspell.4
index dc9d883..986ac01 100644
--- a/man/hunspell.4
+++ b/man/hunspell.4
@@ -1,3 +1,4 @@
+.TH hunspell 4 "2008-03-03"
.LO 1
.SH NAME
hunspell \- format of Hunspell dictionaries and affix files
@@ -107,7 +108,7 @@ Set flag type. Default type is the extended ASCII (8-bit) character.
`UTF-8' parameter sets UTF-8 encoded Unicode character flags.
The `long' value sets the double extended ASCII character flag type,
the `num' sets the decimal number flag type. Decimal flags numbered from 1 to
-65535, and in flag fields are separated by comma.
+65000, and in flag fields are separated by comma.
BUG: UTF-8 flag type doesn't work on ARM platform.
.IP "COMPLEXPREFIXES"
Set twofold prefix stripping (but single suffix stripping) for agglutinative
@@ -122,8 +123,8 @@ Useful for optional characters, as Arabic diacritical marks (Harakat).
.IP "AF number_of_flag_vector_aliases"
.IP "AF flag_vector"
Hunspell can substitute affix flag sets with
-ordinal numbers in affix rules (alias compression). First example with
-alias compression:
+ordinal numbers in affix rules (alias compression, see makealias
+tool). First example with alias compression:
.PP
.RS
.nf
@@ -147,7 +148,20 @@ AF AB
.fi
.RE
.PP
-See also tests/alias* examples.
+
+It is equivalent of the following dic file:
+.PP
+.RS
+.nf
+3
+hello
+try/A
+work/AB
+.fi
+.RE
+.PP
+
+See also tests/alias* examples of the source distribution.
Note: If affix file contains the FLAG parameter, define it before the AF
definitions.
@@ -655,8 +669,8 @@ SFX D 0 ed . is:past_2
.RE
.PP
-Typical example of terminal suffix is nominative of languages
-with case suffixes.
+Typical example of the terminal suffix is the zero morpheme
+of the nominative case.
.IP "sp:"
Surface prefix. Temporary solution for adding prefixes to the
diff --git a/po/hu.gmo b/po/hu.gmo
index 10d4fdb..a004fec 100644
Binary files a/po/hu.gmo and b/po/hu.gmo differ
diff --git a/po/hu.po b/po/hu.po
index 037f6a2..f136223 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -311,7 +311,7 @@ msgstr ""
#: src/hunspell/hunspell.cxx:1008
#, c-format
msgid " hunspell -l file.txt # print misspelled words\n"
-msgstr " hunspell -l f�jl.txt # ki�rja a hib�s szavakat\n"
+msgstr " hunspell -l f�jl.txt # ki�rja a hib�s szavakat\n"
#: src/hunspell/hunspell.cxx:1009
#, c-format
diff --git a/src/hunspell/Makefile.am b/src/hunspell/Makefile.am
index f83b0a9..bbb720d 100644
--- a/src/hunspell/Makefile.am
+++ b/src/hunspell/Makefile.am
@@ -10,6 +10,6 @@ libhunspell_1_2_la_SOURCES=affentry.cxx affixmgr.cxx csutil.cxx \
libhunspell_1_2_include_HEADERS=affentry.hxx htypes.hxx affixmgr.hxx \
csutil.hxx hunspell.hxx atypes.hxx dictmgr.hxx hunspell.h \
suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \
- phonet.hxx filemgr.hxx hunzip.hxx
+ phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx
EXTRA_DIST=hunspell.dsp makefile.mk README
diff --git a/src/hunspell/Makefile.in b/src/hunspell/Makefile.in
index 8e6f837..dc19d78 100644
--- a/src/hunspell/Makefile.in
+++ b/src/hunspell/Makefile.in
@@ -227,7 +227,7 @@ libhunspell_1_2_la_SOURCES = affentry.cxx affixmgr.cxx csutil.cxx \
libhunspell_1_2_include_HEADERS = affentry.hxx htypes.hxx affixmgr.hxx \
csutil.hxx hunspell.hxx atypes.hxx dictmgr.hxx hunspell.h \
suggestmgr.hxx baseaffix.hxx hashmgr.hxx langnum.hxx \
- phonet.hxx filemgr.hxx hunzip.hxx
+ phonet.hxx filemgr.hxx hunzip.hxx w_char.hxx
EXTRA_DIST = hunspell.dsp makefile.mk README
all: all-am
diff --git a/src/hunspell/affentry.cxx b/src/hunspell/affentry.cxx
index fd737e0..2436fbb 100644
--- a/src/hunspell/affentry.cxx
+++ b/src/hunspell/affentry.cxx
@@ -7,9 +7,9 @@
#include <cctype>
#include <cstdio>
#else
-#include <stdlib.h>
+#include <stdlib.h>
#include <string.h>
-#include <stdio.h>
+#include <stdio.h>
#include <ctype.h>
#endif
@@ -17,7 +17,7 @@
#include "csutil.hxx"
#ifndef MOZILLA_CLIENT
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
@@ -29,8 +29,8 @@ PfxEntry::PfxEntry(AffixMgr* pmgr, affentry* dp)
pmyMgr = pmgr;
// set up its intial values
-
- aflag = dp->aflag; // flag
+
+ aflag = dp->aflag; // flag
strip = dp->strip; // string to strip
appnd = dp->appnd; // string to append
stripl = dp->stripl; // length of strip string
@@ -70,7 +70,7 @@ char * PfxEntry::add(const char * word, int len)
char tword[MAXWORDUTF8LEN + 4];
if ((len > stripl) && (len >= numconds) && test_condition(word) &&
- (!stripl || (strncmp(word, strip, stripl) == 0)) &&
+ (!stripl || (strncmp(word, strip, stripl) == 0)) &&
((MAXWORDUTF8LEN + 4) > (len + appndl - stripl))) {
/* we have a match so add prefix */
char * pp = tword;
@@ -81,7 +81,7 @@ char * PfxEntry::add(const char * word, int len)
strcpy(pp, (word + stripl));
return mystrdup(tword);
}
- return NULL;
+ return NULL;
}
inline char * PfxEntry::nextchar(char * p) {
@@ -149,7 +149,7 @@ inline int PfxEntry::test_condition(const char * st)
}
}
-// check if this prefix entry matches
+// check if this prefix entry matches
struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound, const FLAG needflag)
{
int tmpl; // length of tmpword
@@ -171,7 +171,7 @@ struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound
if (stripl) strcpy (tmpword, strip);
strcpy ((tmpword + stripl), (word + appndl));
-
+
// now make sure all of the conditions on characters
// are met. Please see the appendix at the end of
// this file for more info on exactly what is being
@@ -194,14 +194,14 @@ struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound
he = he->next_homonym; // check homonyms
} while (he);
}
-
- // prefix matched but no root word was found
- // if aeXPRODUCT is allowed, try again but now
+
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
// ross checked combined with a suffix
//if ((opts & aeXPRODUCT) && in_compound) {
if ((opts & aeXPRODUCT)) {
- he = pmyMgr->suffix_check(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this, NULL,
+ he = pmyMgr->suffix_check(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this, NULL,
0, NULL, FLAG_NULL, needflag, in_compound);
if (he) return he;
}
@@ -210,7 +210,7 @@ struct hentry * PfxEntry::checkword(const char * word, int len, char in_compound
return NULL;
}
-// check if this prefix entry matches
+// check if this prefix entry matches
struct hentry * PfxEntry::check_twosfx(const char * word, int len,
char in_compound, const FLAG needflag)
{
@@ -245,8 +245,8 @@ struct hentry * PfxEntry::check_twosfx(const char * word, int len,
if (test_condition(tmpword)) {
tmpl += stripl;
- // prefix matched but no root word was found
- // if aeXPRODUCT is allowed, try again but now
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
// cross checked combined with a suffix
if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
@@ -258,7 +258,7 @@ struct hentry * PfxEntry::check_twosfx(const char * word, int len,
return NULL;
}
-// check if this prefix entry matches
+// check if this prefix entry matches
char * PfxEntry::check_twosfx_morph(const char * word, int len,
char in_compound, const FLAG needflag)
{
@@ -292,8 +292,8 @@ char * PfxEntry::check_twosfx_morph(const char * word, int len,
if (test_condition(tmpword)) {
tmpl += stripl;
- // prefix matched but no root word was found
- // if aeXPRODUCT is allowed, try again but now
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
// ross checked combined with a suffix
if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
@@ -305,7 +305,7 @@ char * PfxEntry::check_twosfx_morph(const char * word, int len,
return NULL;
}
-// check if this prefix entry matches
+// check if this prefix entry matches
char * PfxEntry::check_morph(const char * word, int len, char in_compound, const FLAG needflag)
{
int tmpl; // length of tmpword
@@ -313,7 +313,7 @@ char * PfxEntry::check_morph(const char * word, int len, char in_compound, const
char tmpword[MAXWORDUTF8LEN + 4];
char result[MAXLNLEN];
char * st;
-
+
*result = '\0';
// on entry prefix is 0 length or already matches the beginning of the word.
@@ -349,7 +349,7 @@ char * PfxEntry::check_morph(const char * word, int len, char in_compound, const
! TESTAFF(contclass, pmyMgr->get_needaffix(), contclasslen) &&
// needflag
((!needflag) || TESTAFF(he->astr, needflag, he->alen) ||
- (contclass && TESTAFF(contclass, needflag, contclasslen)))) {
+ (contclass && TESTAFF(contclass, needflag, contclasslen)))) {
if (morphcode) {
strcat(result, " ");
strcat(result, morphcode);
@@ -364,6 +364,13 @@ char * PfxEntry::check_morph(const char * word, int len, char in_compound, const
if (HENTRY_DATA(he)) {
strcat(result, " ");
strcat(result,HENTRY_DATA(he));
+ } else {
+ // return with debug information
+ char * flag = pmyMgr->encode_flag(getFlag());
+ strcat(result, " ");
+ strcat(result, MORPH_FLAG);
+ strcat(result, flag);
+ free(flag);
}
strcat(result, "\n");
}
@@ -371,12 +378,12 @@ char * PfxEntry::check_morph(const char * word, int len, char in_compound, const
} while (he);
}
- // prefix matched but no root word was found
- // if aeXPRODUCT is allowed, try again but now
+ // prefix matched but no root word was found
+ // if aeXPRODUCT is allowed, try again but now
// ross checked combined with a suffix
if ((opts & aeXPRODUCT) && (in_compound != IN_CPD_BEGIN)) {
- st = pmyMgr->suffix_check_morph(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this,
+ st = pmyMgr->suffix_check_morph(tmpword, tmpl, aeXPRODUCT, (AffEntry *)this,
FLAG_NULL, needflag);
if (st) {
strcat(result, st);
@@ -385,7 +392,7 @@ char * PfxEntry::check_morph(const char * word, int len, char in_compound, const
}
}
}
-
+
if (*result) return mystrdup(result);
return NULL;
}
@@ -396,7 +403,7 @@ SfxEntry::SfxEntry(AffixMgr * pmgr, affentry* dp)
pmyMgr = pmgr;
// set up its intial values
- aflag = dp->aflag; // char flag
+ aflag = dp->aflag; // char flag
strip = dp->strip; // string to strip
appnd = dp->appnd; // string to append
stripl = dp->stripl; // length of strip string
@@ -425,7 +432,7 @@ SfxEntry::~SfxEntry()
if (strip) free(strip);
pmyMgr = NULL;
appnd = NULL;
- strip = NULL;
+ strip = NULL;
if (opts & aeLONGCOND) free(c.l.conds2);
if (morphcode && !(opts & aeALIASM)) free(morphcode);
if (contclass && !(opts & aeALIASF)) free(contclass);
@@ -521,7 +528,7 @@ inline int SfxEntry::test_condition(const char * st, const char * beg)
if (p && *p != '\0') p = nextchar(p);
} else if (pos) {
if (neg) return 0;
- else if (i == numconds) return 1;
+ else if (i == numconds) return 1;
ingroup = true;
}
if (!pos) {
@@ -538,12 +545,12 @@ inline int SfxEntry::test_condition(const char * st, const char * beg)
}
}
-// see if this suffix is present in the word
+// see if this suffix is present in the word
struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
AffEntry* ppfx, char ** wlst, int maxSug, int * ns, const FLAG cclass, const FLAG needflag,
const FLAG badflag)
{
- int tmpl; // length of tmpword
+ int tmpl; // length of tmpword
struct hentry * he; // hash entry pointer
unsigned char * cp;
char tmpword[MAXWORDUTF8LEN + 4];
@@ -563,7 +570,7 @@ struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
tmpl = len - appndl;
// the second condition is not enough for UTF-8 strings
// it checked in test_condition()
-
+
if ((tmpl > 0) && (tmpl + stripl >= numconds)) {
// if (tmpl > 0) {
@@ -596,21 +603,21 @@ struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
do {
// check conditional suffix (enabled by prefix)
if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() &&
- TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
- (((optflags & aeXPRODUCT) == 0) ||
+ TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
+ (((optflags & aeXPRODUCT) == 0) ||
TESTAFF(he->astr, ep->getFlag(), he->alen) ||
// enabled by prefix
((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
) &&
// handle cont. class
- ((!cclass) ||
+ ((!cclass) ||
((contclass) && TESTAFF(contclass, cclass, contclasslen))
) &&
// check only in compound homonyms (bad flags)
(!badflag || !TESTAFF(he->astr, badflag, he->alen)
- ) &&
+ ) &&
// handle required flag
- ((!needflag) ||
+ ((!needflag) ||
(TESTAFF(he->astr, needflag, he->alen) ||
((contclass) && TESTAFF(contclass, needflag, contclasslen)))
)
@@ -618,12 +625,12 @@ struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
he = he->next_homonym; // check homonyms
} while (he);
- // obsolote stemming code (used only by the
+ // obsolote stemming code (used only by the
// experimental SuffixMgr:suggest_pos_stems)
// store resulting root in wlst
} else if (wlst && (*ns < maxSug)) {
int cwrd = 1;
- for (int k=0; k < *ns; k++)
+ for (int k=0; k < *ns; k++)
if (strcmp(tmpword, wlst[k]) == 0) cwrd = 0;
if (cwrd) {
wlst[*ns] = mystrdup(tmpword);
@@ -640,11 +647,11 @@ struct hentry * SfxEntry::checkword(const char * word, int len, int optflags,
return NULL;
}
-// see if two-level suffix is present in the word
+// see if two-level suffix is present in the word
struct hentry * SfxEntry::check_twosfx(const char * word, int len, int optflags,
AffEntry* ppfx, const FLAG needflag)
{
- int tmpl; // length of tmpword
+ int tmpl; // length of tmpword
struct hentry * he; // hash entry pointer
unsigned char * cp;
char tmpword[MAXWORDUTF8LEN + 4];
@@ -689,7 +696,7 @@ struct hentry * SfxEntry::check_twosfx(const char * word, int len, int optflags,
if (test_condition((char *) cp, (char *) tmpword)) {
if (ppfx) {
// handle conditional suffix
- if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
+ if ((contclass) && TESTAFF(contclass, ep->getFlag(), contclasslen))
he = pmyMgr->suffix_check(tmpword, tmpl, 0, NULL, NULL, 0, NULL, (FLAG) aflag, needflag);
else
he = pmyMgr->suffix_check(tmpword, tmpl, optflags, ppfx, NULL, 0, NULL, (FLAG) aflag, needflag);
@@ -702,18 +709,18 @@ struct hentry * SfxEntry::check_twosfx(const char * word, int len, int optflags,
return NULL;
}
-// see if two-level suffix is present in the word
+// see if two-level suffix is present in the word
char * SfxEntry::check_twosfx_morph(const char * word, int len, int optflags,
AffEntry* ppfx, const FLAG needflag)
{
- int tmpl; // length of tmpword
+ int tmpl; // length of tmpword
unsigned char * cp;
char tmpword[MAXWORDUTF8LEN + 4];
PfxEntry* ep = (PfxEntry *) ppfx;
char * st;
char result[MAXLNLEN];
-
+
*result = '\0';
// if this suffix is being cross checked with a prefix
@@ -788,7 +795,7 @@ char * SfxEntry::check_twosfx_morph(const char * word, int len, int optflags,
}
// get next homonym with same affix
-struct hentry * SfxEntry::get_next_homonym(struct hentry * he, int optflags, AffEntry* ppfx,
+struct hentry * SfxEntry::get_next_homonym(struct hentry * he, int optflags, AffEntry* ppfx,
const FLAG cclass, const FLAG needflag)
{
PfxEntry* ep = (PfxEntry *) ppfx;
@@ -796,18 +803,18 @@ struct hentry * SfxEntry::get_next_homonym(struct hentry * he, int optflags, Aff
while (he->next_homonym) {
he = he->next_homonym;
- if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() && TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
- ((optflags & aeXPRODUCT) == 0 ||
+ if ((TESTAFF(he->astr, aflag, he->alen) || (ep && ep->getCont() && TESTAFF(ep->getCont(), aflag, ep->getContLen()))) &&
+ ((optflags & aeXPRODUCT) == 0 ||
TESTAFF(he->astr, eFlag, he->alen) ||
// handle conditional suffix
((contclass) && TESTAFF(contclass, eFlag, contclasslen))
) &&
// handle cont. class
- ((!cclass) ||
+ ((!cclass) ||
((contclass) && TESTAFF(contclass, cclass, contclasslen))
) &&
// handle required flag
- ((!needflag) ||
+ ((!needflag) ||
(TESTAFF(he->astr, needflag, he->alen) ||
((contclass) && TESTAFF(contclass, needflag, contclasslen)))
)
diff --git a/src/hunspell/affixmgr.cxx b/src/hunspell/affixmgr.cxx
index 251d7ae..3fe51b6 100644
--- a/src/hunspell/affixmgr.cxx
+++ b/src/hunspell/affixmgr.cxx
@@ -20,7 +20,7 @@
#include "csutil.hxx"
#ifndef MOZILLA_CLIENT
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
@@ -946,6 +946,15 @@ int AffixMgr::process_sfx_order()
return 0;
}
+// add flags to the result for dictionary debugging
+void AffixMgr::debugflag(char * result, unsigned short flag) {
+ char * st = encode_flag(flag);
+ strcat(result, " ");
+ strcat(result, MORPH_FLAG);
+ strcat(result, st);
+ free(st);
+}
+
// calculate the character length of the condition
int AffixMgr::condlen(char * st)
{
@@ -2411,14 +2420,14 @@ char * AffixMgr::suffix_check_twosfx_morph(const char * word, int len,
if (((PfxEntry *) ppfx)->getMorph()) {
strcat(result, ((PfxEntry *) ppfx)->getMorph());
strcat(result, " ");
- }
+ } else debugflag(result, ((PfxEntry *) ppfx)->getFlag());
}
strcat(result, st);
free(st);
if (se->getMorph()) {
strcat(result, " ");
strcat(result, se->getMorph());
- }
+ } else debugflag(result, se->getFlag());
strcat(result, "\n");
}
}
@@ -2453,7 +2462,7 @@ char * AffixMgr::suffix_check_twosfx_morph(const char * word, int len,
if (sptr->getMorph()) {
strcat(result3, " ");
strcat(result3, sptr->getMorph());
- }
+ } else debugflag(result3, sptr->getFlag());
strlinecat(result2, result3);
strcat(result2, "\n");
strcat(result, result2);
@@ -2513,7 +2522,7 @@ char * AffixMgr::suffix_check_morph(const char * word, int len,
if (((PfxEntry *) ppfx)->getMorph()) {
strcat(result, ((PfxEntry *) ppfx)->getMorph());
strcat(result, " ");
- }
+ } else debugflag(result, ((PfxEntry *) ppfx)->getFlag());
}
if (complexprefixes && HENTRY_DATA(rv)) strcat(result, HENTRY_DATA(rv));
if (! HENTRY_FIND(rv, MORPH_STEM)) {
@@ -2525,13 +2534,13 @@ char * AffixMgr::suffix_check_morph(const char * word, int len,
// sprintf(result + strlen(result), " %s%p", MORPH_HENTRY, rv);
if (!complexprefixes && HENTRY_DATA(rv)) {
- strcat(result, " ");
- strcat(result, HENTRY_DATA(rv));
+ strcat(result, " ");
+ strcat(result, HENTRY_DATA(rv));
}
if (se->getMorph()) {
strcat(result, " ");
strcat(result, se->getMorph());
- }
+ } else debugflag(result, se->getFlag());
strcat(result, "\n");
rv = se->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag);
}
@@ -2571,7 +2580,7 @@ char * AffixMgr::suffix_check_morph(const char * word, int len,
if (((PfxEntry *) ppfx)->getMorph()) {
strcat(result, ((PfxEntry *) ppfx)->getMorph());
strcat(result, " ");
- }
+ } else debugflag(result, ((PfxEntry *) ppfx)->getFlag());
}
if (complexprefixes && HENTRY_DATA(rv)) strcat(result, HENTRY_DATA(rv));
if (! HENTRY_FIND(rv, MORPH_STEM)) {
@@ -2599,7 +2608,7 @@ char * AffixMgr::suffix_check_morph(const char * word, int len,
if (sptr->getMorph()) {
strcat(result, " ");
strcat(result, sptr->getMorph());
- }
+ } else debugflag(result, sptr->getFlag());
strcat(result, "\n");
rv = sptr->get_next_homonym(rv, sfxopts, ppfx, cclass, needflag);
}
@@ -2965,6 +2974,12 @@ int AffixMgr::get_checksharps()
return checksharps;
}
+char * AffixMgr::encode_flag(unsigned short aflag)
+{
+ return pHMgr->encode_flag(aflag);
+}
+
+
// return the preferred ignore string for suggestions
char * AffixMgr::get_ignore()
{
@@ -3745,7 +3760,7 @@ int AffixMgr::parse_affix(char * line, const char at, FileMgr * af, char * dupf
struct affentry * nptr= NULL;
char * tp = line;
- char * nl;
+ char * nl = NULL;
char * piece;
int i = 0;
@@ -3773,7 +3788,7 @@ int AffixMgr::parse_affix(char * line, const char at, FileMgr * af, char * dupf
HUNSPELL_WARNING(stderr, "error: duplicate affix flag %s in line %s\n", piece, nl);
// return 1; XXX permissive mode for bad dictionaries
}
- dupflags[aflag] += ((at == 'S') ? dupSFX : dupPFX);
+ dupflags[aflag] += (char) ((at == 'S') ? dupSFX : dupPFX);
break;
}
// piece 3 - is cross product indicator
@@ -3835,7 +3850,7 @@ int AffixMgr::parse_affix(char * line, const char at, FileMgr * af, char * dupf
case 0: {
np++;
if (nptr != ptr) nptr->opts = ptr->opts &
- (aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM);
+ (char) (aeXPRODUCT + aeUTF8 + aeALIASF + aeALIASM);
break;
}
diff --git a/src/hunspell/affixmgr.hxx b/src/hunspell/affixmgr.hxx
index 969780d..f045b87 100644
--- a/src/hunspell/affixmgr.hxx
+++ b/src/hunspell/affixmgr.hxx
@@ -193,6 +193,7 @@ public:
int get_sugswithdots(void);
FLAG get_keepcase(void);
int get_checksharps(void);
+ char * encode_flag(unsigned short aflag);
private:
int parse_file(const char * affpath, const char * key);
@@ -208,6 +209,7 @@ private:
int parse_affix(char * line, const char at, FileMgr * af, char * dupflags);
void reverse_condition(char *);
+ void debugflag(char * result, unsigned short flag);
int condlen(char *);
int encodeit(struct affentry * ptr, char * cs);
int build_pfxtree(AffEntry* pfxptr);
diff --git a/src/hunspell/atypes.hxx b/src/hunspell/atypes.hxx
index 0afb345..0d4db14 100644
--- a/src/hunspell/atypes.hxx
+++ b/src/hunspell/atypes.hxx
@@ -13,8 +13,8 @@ static inline void HUNSPELL_WARNING(FILE *, const char *, ...) {}
// HUNSTEM def.
#define HUNSTEM
-#include "csutil.hxx"
#include "hashmgr.hxx"
+#include "w_char.hxx"
#define SETSIZE 256
#define CONTSIZE 65536
@@ -70,6 +70,12 @@ struct affentry
char * morphcode;
};
+struct guessword {
+ char * word;
+ bool allow;
+ char * orig;
+};
+
struct mapentry {
char * set;
w_char * set_utf16;
@@ -81,10 +87,4 @@ struct flagentry {
int len;
};
-struct guessword {
- char * word;
- bool allow;
- char * orig;
-};
-
#endif
diff --git a/src/hunspell/csutil.cxx b/src/hunspell/csutil.cxx
index 784ffa9..008e19f 100644
--- a/src/hunspell/csutil.cxx
+++ b/src/hunspell/csutil.cxx
@@ -45,7 +45,7 @@ static NS_DEFINE_CID(kUnicharUtilCID, NS_UNICHARUTIL_CID);
using namespace std;
#endif
#else
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
@@ -350,9 +350,10 @@ char * line_uniq_app(char ** text, char breakchar) {
}
char ** lines;
+ int i;
int linenum = line_tok(*text, &lines, breakchar);
int dup = 0;
- for (int i = 0; i < linenum; i++) {
+ for (i = 0; i < linenum; i++) {
for (int j = 0; j < (i - 1); j++) {
if (strcmp(lines[i], lines[j]) == 0) {
*(lines[i]) = '\0';
@@ -375,7 +376,7 @@ char * line_uniq_app(char ** text, char breakchar) {
return *text;
}
strcpy(*text," ( ");
- for (int i = 0; i < linenum; i++) if (*(lines[i])) {
+ for (i = 0; i < linenum; i++) if (*(lines[i])) {
sprintf(*text + strlen(*text), "%s%s", lines[i], " | ");
}
(*text)[strlen(*text) - 2] = ')'; // " ) "
@@ -579,8 +580,9 @@ char * mystrrep(char * word, const char * pat, const char * rep) {
}
int uniqlist(char ** list, int n) {
+ int i;
if (n < 2) return n;
- for (int i = 0; i < n; i++) {
+ for (i = 0; i < n; i++) {
for (int j = 0; j < i; j++) {
if (list[j] && list[i] && (strcmp(list[j], list[i]) == 0)) {
free(list[i]);
@@ -590,7 +592,7 @@ char * mystrrep(char * word, const char * pat, const char * rep) {
}
}
int m = 1;
- for (int i = 1; i < n; i++) if (list[i]) {
+ for (i = 1; i < n; i++) if (list[i]) {
list[m] = list[i];
m++;
}
diff --git a/src/hunspell/csutil.hxx b/src/hunspell/csutil.hxx
index 442cac2..fbed083 100644
--- a/src/hunspell/csutil.hxx
+++ b/src/hunspell/csutil.hxx
@@ -3,6 +3,8 @@
// First some base level utility routines
+#include "w_char.hxx"
+
#define NOCAP 0
#define INITCAP 1
#define ALLCAP 2
@@ -23,6 +25,7 @@
#define MORPH_PHON "ph:"
#define MORPH_HYPH "hy:"
#define MORPH_PART "pa:"
+#define MORPH_FLAG "fl:"
#define MORPH_HENTRY "_H:"
#define MORPH_TAG_LEN strlen(MORPH_STEM)
@@ -35,10 +38,9 @@
#define FORBIDDENWORD 65510
#define ONLYUPCASEFLAG 65511
-typedef struct __attribute__ ((packed)) {
- unsigned char l;
- unsigned char h;
-} w_char;
+#define HENTRY_DATA(h) (h->var ? ((h->var & H_OPT_ALIASM) ? \
+ get_stored_pointer(&(h->word) + h->blen + 1) : &(h->word) + h->blen + 1) : NULL)
+#define HENTRY_FIND(h,p) (HENTRY_DATA(h) ? strstr(HENTRY_DATA(h), p) : NULL)
#define w_char_eq(a,b) (((a).l == (b).l) && ((a).h == (b).h))
@@ -103,12 +105,6 @@ struct cs_info {
unsigned char cupper;
};
-// two character arrays
-struct replentry {
- char * pattern;
- char * pattern2;
-};
-
// Unicode character encoding information
struct unicode_info {
unsigned short c;
diff --git a/src/hunspell/hashmgr.cxx b/src/hunspell/hashmgr.cxx
index 5f0b169..48cbb25 100644
--- a/src/hunspell/hashmgr.cxx
+++ b/src/hunspell/hashmgr.cxx
@@ -22,7 +22,7 @@
using namespace std;
#endif
#else
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
diff --git a/src/hunspell/htypes.hxx b/src/hunspell/htypes.hxx
index 718a0f8..33fe91b 100644
--- a/src/hunspell/htypes.hxx
+++ b/src/hunspell/htypes.hxx
@@ -12,10 +12,6 @@
#define H_OPT_PHON (1 << 2)
#define HENTRY_WORD(h) &(h->word)
-#define HENTRY_DATA(h) (h->var ? ((h->var & H_OPT_ALIASM) ? \
- get_stored_pointer(&(h->word) + h->blen + 1) : &(h->word) + h->blen + 1) : NULL)
-// *((char **) (&(h->word) + h->blen + 1)) : &(h->word) + h->blen + 1) : NULL)
-#define HENTRY_FIND(h,p) (HENTRY_DATA(h) ? strstr(HENTRY_DATA(h), p) : NULL)
// approx. number of user defined words
#define USERWORD 1000
diff --git a/src/hunspell/hunspell.cxx b/src/hunspell/hunspell.cxx
index f2f7536..0acf7bd 100644
--- a/src/hunspell/hunspell.cxx
+++ b/src/hunspell/hunspell.cxx
@@ -14,9 +14,10 @@
#include "hunspell.hxx"
#include "hunspell.h"
#include "config.h"
+#include "csutil.hxx"
#ifndef MOZILLA_CLIENT
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
@@ -51,7 +52,6 @@ Hunspell::Hunspell(const char * affpath, const char * dpath, const char * key)
/* and finally set up the suggestion manager */
pSMgr = new SuggestMgr(try_string, MAXSUGGESTION, pAMgr);
if (try_string) free(try_string);
-
}
Hunspell::~Hunspell()
@@ -62,7 +62,6 @@ Hunspell::~Hunspell()
maxdic = 0;
pSMgr = NULL;
pAMgr = NULL;
- pHMgr[0] = NULL;
#ifdef MOZILLA_CLIENT
free(csconv);
#endif
@@ -369,7 +368,8 @@ int Hunspell::spell(const char * word, int * info, char ** root)
// LANG_hu section: number(s) + (percent or degree) with suffixes
if (langnum == LANG_hu) {
if ((nstate == NNUM) && ((cw[i] == '%') || ((!utf8 && (cw[i] == '\xB0')) ||
- (utf8 && (strncmp(cw + i, "\xC2\xB0", 2)==0))))
+ (utf8 && (strncmp(cw + i, "\xC2\xB0", 2)==0 || // UTF-8 degree
+ strncmp(cw + i, "\xE2\x80\xB0", 3)==0)))) // UTF-8 per mille
&& checkword(cw + i, info, root)) return 1;
}
// END of LANG_hu section
@@ -1098,7 +1098,9 @@ int Hunspell::stem(char*** slst, char ** desc, int n)
}
freelist(&pl, pln);
}
- return uniqlist(*slst, line_tok(result2, slst, MSEP_REC));
+ int sln = line_tok(result2, slst, MSEP_REC);
+ return uniqlist(*slst, sln);
+
}
int Hunspell::stem(char*** slst, const char * word)
diff --git a/src/hunspell/hunspell.h b/src/hunspell/hunspell.h
index dc8d501..63c0c29 100644
--- a/src/hunspell/hunspell.h
+++ b/src/hunspell/hunspell.h
@@ -7,19 +7,25 @@ extern "C" {
typedef struct Hunhandle Hunhandle;
-Hunhandle *Hunspell_create(const char * affpath, const char * dpath);
+#ifdef _MSC_VER
+#define DLL __declspec ( dllexport )
+#else
+#define DLL
+#endif
+
+DLL Hunhandle *Hunspell_create(const char * affpath, const char * dpath);
-Hunhandle *Hunspell_create_key(const char * affpath, const char * dpath,
+DLL Hunhandle *Hunspell_create_key(const char * affpath, const char * dpath,
const char * key);
-void Hunspell_destroy(Hunhandle *pHunspell);
+DLL void Hunspell_destroy(Hunhandle *pHunspell);
/* spell(word) - spellcheck word
* output: 0 = bad word, not 0 = good word
*/
-int Hunspell_spell(Hunhandle *pHunspell, const char *);
+DLL int Hunspell_spell(Hunhandle *pHunspell, const char *);
-char *Hunspell_get_dic_encoding(Hunhandle *pHunspell);
+DLL char *Hunspell_get_dic_encoding(Hunhandle *pHunspell);
/* suggest(suggestions, word) - search suggestions
* input: pointer to an array of strings pointer and the (bad) word
@@ -28,17 +34,17 @@ char *Hunspell_get_dic_encoding(Hunhandle *pHunspell);
* a newly allocated array of strings (*slts will be NULL when number
* of suggestion equals 0.)
*/
-int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word);
+DLL int Hunspell_suggest(Hunhandle *pHunspell, char*** slst, const char * word);
/* morphological functions */
/* analyze(result, word) - morphological analysis of the word */
-int Hunspell_analyze(Hunhandle *pHunspell, char*** slst, const char * word);
+DLL int Hunspell_analyze(Hunhandle *pHunspell, char*** slst, const char * word);
/* stem(result, word) - stemmer function */
-int Hunspell_stem(Hunhandle *pHunspell, char*** slst, const char * word);
+DLL int Hunspell_stem(Hunhandle *pHunspell, char*** slst, const char * word);
/* stem(result, analysis, n) - get stems from a morph. analysis
* example:
@@ -47,11 +53,11 @@ int Hunspell_stem(Hunhandle *pHunspell, char*** slst, const char * word);
* int n2 = Hunspell_stem2(result2, result, n1);
*/
-int Hunspell_stem2(Hunhandle *pHunspell, char*** slst, char** desc, int n);
+DLL int Hunspell_stem2(Hunhandle *pHunspell, char*** slst, char** desc, int n);
/* generate(result, word, word2) - morphological generation by example(s) */
-int Hunspell_generate(Hunhandle *pHunspell, char*** slst, const char * word,
+DLL int Hunspell_generate(Hunhandle *pHunspell, char*** slst, const char * word,
const char * word2);
/* generate(result, word, desc, n) - generation by morph. description(s)
@@ -62,27 +68,26 @@ int Hunspell_generate(Hunhandle *pHunspell, char*** slst, const char * word,
* for (int i = 0; i < n; i++) printf("%s\n", result[i]);
*/
-int Hunspell_generate2(Hunhandle *pHunspell, char*** slst, const char * word,
+DLL int Hunspell_generate2(Hunhandle *pHunspell, char*** slst, const char * word,
char** desc, int n);
/* functions for run-time modification of the dictionary */
/* add word to the run-time dictionary */
-int Hunspell_add(Hunhandle *pHunspell, const char * word);
+DLL int Hunspell_add(Hunhandle *pHunspell, const char * word);
/* add word to the run-time dictionary with affix flags of
* the example (a dictionary word): Hunspell will recognize
* affixed forms of the new word, too.
*/
-int Hunspell_add_with_affix(Hunhandle *pHunspell, const char * word, const char * example);
+DLL int Hunspell_add_with_affix(Hunhandle *pHunspell, const char * word, const char * example);
/* remove word from the run-time dictionary */
/* NOTE: not implemented yet */
-int Hunspell_remove(Hunhandle *pHunspell, const char * word);
-
+DLL int Hunspell_remove(Hunhandle *pHunspell, const char * word);
#ifdef __cplusplus
}
diff --git a/src/hunspell/hunspell.hxx b/src/hunspell/hunspell.hxx
index 8461b54..c083f20 100644
--- a/src/hunspell/hunspell.hxx
+++ b/src/hunspell/hunspell.hxx
@@ -1,7 +1,6 @@
#include "hashmgr.hxx"
#include "affixmgr.hxx"
#include "suggestmgr.hxx"
-#include "csutil.hxx"
#include "langnum.hxx"
#define SPELL_COMPOUND (1 << 0)
@@ -27,7 +26,7 @@
#endif
#endif
-#ifdef W32
+#ifdef WIN32
class DLLEXPORT Hunspell
#else
class Hunspell
@@ -51,7 +50,7 @@ public:
/* Hunspell(aff, dic) - constructor of Hunspell class
* input: path of affix file and dictionary file
*/
-
+
Hunspell(const char * affpath, const char * dpath, const char * key = NULL);
~Hunspell();
diff --git a/src/hunspell/hunzip.cxx b/src/hunspell/hunzip.cxx
index 93912df..f9091b8 100644
--- a/src/hunspell/hunzip.cxx
+++ b/src/hunspell/hunzip.cxx
@@ -1,6 +1,12 @@
-#include <stdio.h>
-#include <stdlib.h>
+#ifndef MOZILLA_CLIENT
+#include <cstdlib>
+#include <cstring>
+#include <cstdio>
+#else
+#include <stdlib.h>
#include <string.h>
+#include <stdio.h>
+#endif
#include "hunzip.hxx"
@@ -31,11 +37,11 @@ Hunzip::Hunzip(const char * file, const char * key) {
int Hunzip::getcode(const char * key) {
unsigned char c[2];
- int i, j, n, o, p;
+ int i, j, n, p;
int allocatedbit = BASEBITREC;
const char * enc = key;
- fin = fopen(filename, "r");
+ fin = fopen(filename, "rb");
if (!fin) return -1;
// read magic number
@@ -85,7 +91,7 @@ int Hunzip::getcode(const char * key) {
if (*(++enc) == '\0') enc = key;
l ^= *enc;
}
- if (fread(in, 1, l/8+1, fin) < l/8+1) return fail(MSG_FORMAT, filename);
+ if (fread(in, 1, l/8+1, fin) < (size_t) l/8+1) return fail(MSG_FORMAT, filename);
if (key) for (j = 0; j <= l/8; j++) {
if (*(++enc) == '\0') enc = key;
in[j] ^= *enc;
@@ -151,7 +157,6 @@ int Hunzip::getbuf() {
const char * Hunzip::getline() {
char linebuf[BUFSIZE];
int l = 0, eol = 0, left = 0, right = 0;
- char end;
if (bufsiz == -1) return NULL;
while (l < bufsiz && !eol) {
linebuf[l++] = out[outc];
diff --git a/src/hunspell/phonet.cxx b/src/hunspell/phonet.cxx
index e4ad5a0..91dc419 100644
--- a/src/hunspell/phonet.cxx
+++ b/src/hunspell/phonet.cxx
@@ -46,7 +46,7 @@ void init_phonet_hash(phonetable & parms)
{
int i, k;
- for (i = 0; i < parms.hash_size; i++) {
+ for (i = 0; i < HASHSIZE; i++) {
parms.hash[i] = -1;
}
diff --git a/src/hunspell/phonet.hxx b/src/hunspell/phonet.hxx
index 471ff84..d1cf995 100644
--- a/src/hunspell/phonet.hxx
+++ b/src/hunspell/phonet.hxx
@@ -30,6 +30,7 @@
#ifndef __PHONETHXX__
#define __PHONETHXX__
+#define HASHSIZE 256
#define MAXPHONETLEN 256
#define MAXPHONETUTF8LEN (MAXPHONETLEN * 4)
@@ -38,8 +39,7 @@ struct phonetable {
cs_info * lang;
int num;
char * * rules;
- static const int hash_size = 256;
- int hash[hash_size];
+ int hash[HASHSIZE];
};
void init_phonet_hash(phonetable & parms);
diff --git a/src/hunspell/suggestmgr.cxx b/src/hunspell/suggestmgr.cxx
index ce54f57..c19ba08 100644
--- a/src/hunspell/suggestmgr.cxx
+++ b/src/hunspell/suggestmgr.cxx
@@ -15,9 +15,10 @@
#include "suggestmgr.hxx"
#include "htypes.hxx"
+#include "csutil.hxx"
#ifndef MOZILLA_CLIENT
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
#endif
diff --git a/src/hunspell/w_char.hxx b/src/hunspell/w_char.hxx
new file mode 100644
index 0000000..a3d11c3
--- /dev/null
+++ b/src/hunspell/w_char.hxx
@@ -0,0 +1,19 @@
+#ifndef __WCHARHXX__
+#define __WCHARHXX__
+
+#ifdef WIN32
+typedef struct {
+#else
+typedef struct __attribute__ ((packed)) {
+#endif
+ unsigned char l;
+ unsigned char h;
+} w_char;
+
+// two character arrays
+struct replentry {
+ char * pattern;
+ char * pattern2;
+};
+
+#endif
diff --git a/src/tools/affixcompress b/src/tools/affixcompress
index a2b9508..c2e174b 100755
--- a/src/tools/affixcompress
+++ b/src/tools/affixcompress
@@ -1,21 +1,22 @@
#!/bin/sh
# affix compressor utility for Hunspell
-# 2007 (c) László Németh, version 0.2
-# usage: affixcompress sorted_word_list_file
+# 2008 (c) László Németh, version 0.3
+# usage: affixcompress sorted_word_list_file [max_affix_rules]
case $# in
0) echo \
"affixcompress - compress a huge sorted word list to Hunspell aff and dic file
-Usage: affixcompress sorted_word_list_file
+Usage: affixcompress sorted_word_list_file [max_affix_rules]
Note: output may need manually added affix parameters (SET character_encoding,
TRY suggestion_characters etc., see man(4) hunspell)"
exit 0;;
esac
+MAXAFFIX=${2:-5000}
+
# profiling
#AWK="pgawk --profile"
AWK="gawk"
-export LC_ALL=C
rm -f $1.aff $1.dic
cat $1 | $AWK '
{
@@ -33,6 +34,7 @@ cat $1 | $AWK '
delete A
delete B
print "Deleted roots: ", prev > "/dev/stderr"
+ A[$1] = 1
}
prev = r
}
@@ -50,7 +52,8 @@ END {
for (i in sfy) print i, sfy[i]
}
' | tr '\034' ' ' >affixcompress0.tmp
-sort -rnk 3 affixcompress0.tmp | $AWK '$3 > 20{print $0}' | head -20000 >affixcompress1.tmp
+sort -rnk 3 affixcompress0.tmp | $AWK '$3 >= 1{print $0}' |
+head -$MAXAFFIX >affixcompress1.tmp
cat affixcompress1.tmp |
$AWK '
function potential_roots() {
diff --git a/src/tools/analyze.cxx b/src/tools/analyze.cxx
index 9b2fa91..e6ac5c2 100644
--- a/src/tools/analyze.cxx
+++ b/src/tools/analyze.cxx
@@ -5,7 +5,7 @@
#include "hunspell.hxx"
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
diff --git a/src/tools/chmorph.cxx b/src/tools/chmorph.cxx
index c2f372e..c2bd113 100644
--- a/src/tools/chmorph.cxx
+++ b/src/tools/chmorph.cxx
@@ -5,12 +5,20 @@
#include "hunspell.hxx"
#include "textparser.hxx"
-#ifndef W32
+#ifndef WIN32
using namespace std;
#endif
-int
-main(int argc, char** argv)
+void freelist(char *** list, int n) {
+ if (list && (n > 0)) {
+ for (int i = 0; i < n; i++) if ((*list)[i]) free((*list)[i]);
+ free(*list);
+ *list = NULL;
+ }
+}
+
+
+int main(int argc, char** argv)
{
FILE * f;
diff --git a/src/tools/hunspell.cxx b/src/tools/hunspell.cxx
index 96d17fd..c699c2c 100644
--- a/src/tools/hunspell.cxx
+++ b/src/tools/hunspell.cxx
@@ -7,9 +7,9 @@
#include <cstdlib>
#include <cstdio>
-
#include "config.h"
#include "hunspell.hxx"
+#include "csutil.hxx"
#ifndef HUNSPELL_EXTRA
#define suggest_auto suggest
@@ -26,12 +26,14 @@
#define DEFAULTDICNAME "default"
-#ifdef W32
+#ifdef WIN32
#define gettext
#define LIBDIR "C:\\Hunspell\\"
#define USEROOODIR "Application Data\\OpenOffice.org 2\\user\\wordbook"
-#define OOODIR "C:\\Program files\\OpenOffice.org 2.3\\share\\dict\\ooo\\;" \
+#define OOODIR \
+ "C:\\Program files\\OpenOffice.org 2.4\\share\\dict\\ooo\\;" \
+ "C:\\Program files\\OpenOffice.org 2.3\\share\\dict\\ooo\\;" \
"C:\\Program files\\OpenOffice.org 2.2\\share\\dict\\ooo\\;" \
"C:\\Program files\\OpenOffice.org 2.1\\share\\dict\\ooo\\;" \
"C:\\Program files\\OpenOffice.org 2.0\\share\\dict\\ooo\\"
@@ -51,7 +53,8 @@
#else
// Not Windows
-
+#include <sys/types.h>
+#include <dirent.h>
#include <unistd.h>
#include "textparser.hxx"
#include "htmlparser.hxx"
@@ -59,9 +62,16 @@
#include "manparser.hxx"
#include "firstparser.hxx"
-#define LIBDIR "/usr/share/hunspell:/usr/share/myspell"
-#define USEROOODIR ".openoffice.org2/user/wordbook"
-#define OOODIR "/opt/openoffice.org2.3/share/dict/ooo:" \
+#define LIBDIR \
+ "/usr/share/hunspell:" \
+ "/usr/share/myspell"
+#define USEROOODIR \
+ ".openoffice.org2/user/wordbook:" \
+ ".openoffice.org2.0/user/wordbook"
+#define OOODIR \
+ "/opt/openoffice.org2.4/share/dict/ooo:" \
+ "/usr/lib/openoffice.org2.4/share/dict/ooo:" \
+ "/opt/openoffice.org2.3/share/dict/ooo:" \
"/usr/lib/openoffice.org2.3/share/dict/ooo:" \
"/opt/openoffice.org2.2/share/dict/ooo:" \
"/usr/lib/openoffice.org2.2/share/dict/ooo:" \
@@ -143,6 +153,8 @@ enum { NORMAL,
BADWORD, // print only bad words
WORDFILTER, // print only bad words from 1 word/line input
BADLINE, // print only lines with bad words
+ STEM, // stem input words
+ ANALYZE, // analyze input words
PIPE, // print only stars for LyX compatibility
AUTO0, // search typical error (based on SuggestMgr::suggest_auto())
AUTO, // automatic spelling to standard output
@@ -516,7 +528,7 @@ nextline: while(fgets(buf, MAXLNLEN, fileid)) {
fprintf(stderr, gettext("error - missing HOME variable"));
continue;
}
-#ifndef W32
+#ifndef WIN32
strcat(buf,"/");
#endif
buf2 = buf+strlen(buf);
@@ -608,6 +620,46 @@ if (pos >= 0) {
continue;
}
+ case STEM: {
+ char ** result;
+ int n = pMS->stem(&result, token);
+ for (int i = 0; i < n; i++) {
+ fprintf(stdout, "%s %s\n", token, result[i]);
+ free(result[i]);
+ }
+ if (n == 0 && token[strlen(token) - 1] == '.') {
+ token[strlen(token) - 1] = '\0';
+ n = pMS->stem(&result, token);
+ for (int i = 0; i < n; i++) {
+ fprintf(stdout, "%s %s\n", token, result[i]);
+ free(result[i]);
+ }
+ }
+ if (n == 0) fprintf(stdout, "%s\n", token); else free(result);
+ free(token);
+ continue;
+ }
+
+ case ANALYZE: {
+ char ** result;
+ int n = pMS->analyze(&result, token);
+ for (int i = 0; i < n; i++) {
+ fprintf(stdout, "%s %s\n", token, result[i]);
+ free(result[i]);
+ }
+ if (n == 0 && token[strlen(token) - 1] == '.') {
+ token[strlen(token) - 1] = '\0';
+ n = pMS->analyze(&result, token);
+ for (int i = 0; i < n; i++) {
+ fprintf(stdout, "%s %s\n", token, result[i]);
+ free(result[i]);
+ }
+ }
+ if (n == 0) fprintf(stdout, "%s\n", token); else free(result);
+ free(token);
+ continue;
+ }
+
case PIPE: {
int info;
char * root = NULL;
@@ -703,7 +755,7 @@ if (parser) delete(parser);
} // pipe_interface
-#ifndef W32
+#ifndef WIN32
#ifdef HAVE_CURSES_H
#ifdef HAVE_READLINE
@@ -730,32 +782,50 @@ static int rl_escape (int count, int key)
}
#endif
-void expand_tab(char * dest, char * src, int limit) {
+int expand_tab(char * dest, char * src, int limit) {
int i = 0;
+ int u8 = strcmp(ui_enc, "UTF-8") == 0 ? 1 : 0;
+ int chpos = 0;
for(int j = 0; (i < limit) && (src[j] != '\0') && (src[j] != '\r'); j++) {
dest[i] = src[j];
if (src[j] == '\t') {
- int end = 8 - (i % 8);
+ int end = 8 - (chpos % 8);
for(int k = 0; k < end; k++) {
dest[i] = ' ';
i++;
+ chpos++;
}
- } else i++;
+ } else {
+ i++;
+ if (!u8 || (src[j] & 0xc0) != 0x80) chpos++;
+ }
}
dest[i] = '\0';
+ return chpos;
}
-int pos_tab(char * s, int pos) {
- int expand = 0;
- for(int i = 0; i < pos; i++) {
- expand += (s[i] == '\t') ? 8 - (expand % 8) : 1;
- }
- return expand;
+// UTF-8 version of strncpy (but output is always null terminated)
+char * strncpyu8(char * dest, const char * src, int begin, size_t n) {
+ int u8 = strcmp(ui_enc, "UTF-8") == 0 ? 1 : 0;
+ for (int i = 0; i <= begin + n;) {
+ if (!u8 || (*src & 0xc0) != 0x80) i++;
+ if (i >= begin && i <= begin + n) {
+ if (*src) {
+ *dest = *src;
+ src++;
+ } else *dest = '\0';
+ dest++;
+ }
+ }
+ if (n) *(dest - 1) = '\0'; else *dest = '\0';
+ return dest;
}
void dialogscreen(TextParser * parser, char * token,
char * filename, int forbidden, char ** wlst, int ns) {
int x, y;
+ char line[MAXLNLEN];
+ char line2[MAXLNLEN];
getmaxyx(stdscr,y,x);
clear();
@@ -767,55 +837,49 @@ void dialogscreen(TextParser * parser, char * token,
char lines[MAXPREVLINE][MAXLNLEN];
for (int i = 0; i < MAXPREVLINE; i++) {
- expand_tab(lines[i], parser->get_prevline(i), MAXLNLEN);
+ expand_tab(lines[i], chenc(parser->get_prevline(i), io_enc, ui_enc), MAXLNLEN);
}
int prevline = 0;
- int rowindex = pos_tab(parser->get_prevline(0), parser->get_tokenpos() + strlen(token)) / x;
- int beginrow = rowindex - pos_tab(parser->get_prevline(0), parser->get_tokenpos()) / x;
+
+ strncpy(line, parser->get_prevline(0), parser->get_tokenpos());
+ line[parser->get_tokenpos()] = '\0';
+ int tokenbeg = expand_tab(line2, chenc(line, io_enc, ui_enc), MAXLNLEN);
+
+ strncpy(line, parser->get_prevline(0), parser->get_tokenpos() + strlen(token));
+ line[parser->get_tokenpos() + strlen(token)] = '\0';
+ int tokenend = expand_tab(line2, chenc(line, io_enc, ui_enc), MAXLNLEN);
+
+ int rowindex = tokenend / x;
+ int beginrow = rowindex - tokenbeg / x;
if (beginrow >= MAXPREVLINE) beginrow = MAXPREVLINE - 1;
-/*
for (int i = 0; i < MAXPREVLINE; i++) {
- char * line = (char *) calloc(1, x + 1);
- strncpy(line, lines[prevline] + x * rowindex, x);
- mvprintw(MAXPREVLINE + 1 - i, 0, "%s", chenc(line, io_enc, ui_enc));
+ strncpyu8(line, lines[prevline], x * rowindex, x);
+ mvprintw(MAXPREVLINE + 1 - i, 0, "%s", line);
rowindex--;
if (rowindex == -1) {
prevline++;
rowindex = strlen(lines[prevline]) / x;
}
- free(line);
}
-*/
- char * line = (char *) calloc(1, x + 1);
- int poslen;
- strncpy(line, lines[0] + x * rowindex, parser->get_tokenpos() % x);
-// fprintf(stderr, "%s\n", line);
-// exit(1);
- chenc(line, io_enc, ui_enc);
- if (strcmp(ui_enc, "UTF-8")==0) {
- char * p;
- w_char dest_utf[BUFSIZ];
- poslen = u8_u16(dest_utf, BUFSIZ, line);
-// for (p = line; *p; p++) if (*p == '\t') exit(1);
- } else poslen = strlen(line);
-// mvprintw(MAXPREVLINE + 1 - beginrow, 0, "%s", chenc(line, io_enc, ui_enc));
+
+ strncpyu8(line, lines[0], x * rowindex, (tokenbeg + 1) % x);
+ fprintf(stderr, "LIBA: |%s| (%s) %d %d\n", line, token, tokenbeg, tokenend);
+ mvprintw(MAXPREVLINE + 1 - beginrow, 0, "%s", line);
attron(A_REVERSE);
-// mvprintw(MAXPREVLINE + 1 - beginrow, 0, "%s", chenc(line, io_enc, ui_enc));
- mvprintw(MAXPREVLINE + 1 - beginrow, poslen, "%s", chenc(token, io_enc, ui_enc));
+ printw("%s", chenc(token, io_enc, ui_enc));
attroff(A_REVERSE);
- free(line);
-
-// mvprintw(MAXPREVLINE + 2, 0, "\n");
-/* for (int i = 0; i < ns; i++) {
+
+ mvprintw(MAXPREVLINE + 2, 0, "\n");
+ for (int i = 0; i < ns; i++) {
if ((ns > 10) && (i < 10)) {
- printw(" 0%d: %s\n", i, chenc(wlst[i], dic_enc, ui_enc));
+ printw(" 0%d: %s\n", i, chenc(wlst[i], io_enc, ui_enc));
} else {
- printw(" %d: %s\n", i, chenc(wlst[i], dic_enc, ui_enc));
+ printw(" %d: %s\n", i, chenc(wlst[i], io_enc, ui_enc));
}
}
-*/
+
mvprintw(y-3, 0, "%s\n",
gettext("\n[SP] <number> R)epl A)ccept I)nsert L)ookup U)ncap Q)uit e(X)it or ? for help\n"));
}
@@ -940,7 +1004,7 @@ printw(gettext("\n-- Type space to continue -- \n"));
fprintf(stderr, gettext("error - missing HOME variable"));
break;
}
-#ifndef W32
+#ifndef WIN32
strcat(buf,"/");
#endif
buf2 = buf+strlen(buf);
@@ -1070,7 +1134,7 @@ printw(gettext("\n-- Type space to continue -- \n"));
fprintf(stderr, gettext("error - missing HOME variable"));
continue;
}
-#ifndef W32
+#ifndef WIN32
strcat(buf,"/");
#endif
buf2 = buf + strlen(buf);
@@ -1123,11 +1187,18 @@ int interactive_line(TextParser * parser, Hunspell * pMS, char * filename, FILE
while ((token=parser->next_token())) {
if (! pMS->spell(chenc(token, io_enc, dic_enc), &info, NULL)) {
dialogscreen(parser, token, filename, (info & SPELL_FORBIDDEN), NULL, 0); // preview
+ refresh();
char ** wlst = NULL;
int ns = pMS->suggest(&wlst, chenc(token, io_enc, dic_enc));
if (ns==0) {
dialogexit = dialog(parser, pMS, token, filename, wlst, ns, (info & SPELL_FORBIDDEN));
} else {
+ for (int j = 0; j < ns; j++) {
+ char d2io[MAXLNLEN];
+ strcpy(d2io, chenc(wlst[j], dic_enc, io_enc));
+ wlst[j] = (char *) realloc(wlst[j], strlen(d2io) + 1);
+ strcpy(wlst[j], d2io);
+ }
dialogexit = dialog(parser, pMS, token, filename, wlst, ns, (info & SPELL_FORBIDDEN));
}
for (int j = 0; j < ns; j++) {
@@ -1233,12 +1304,43 @@ char * exist2(char * dir, int len, char * name, char * ext) {
return NULL;
}
+#ifndef WIN32
+int listdicpath(char * dir, int len) {
+ char buf[MAXLNLEN];
+ const char * sep = (len == 0) ? "": DIRSEP;
+ strncpy(buf, dir, len);
+ strcpy(buf + len, sep);
+ DIR *d = opendir(buf);
+ if (!d) return 0;
+ struct dirent * de;
+ while ((de = readdir(d))) {
+ int len = strlen(de->d_name);
+ if ((len > 4 && strcmp(de->d_name + len - 4, ".aff") == 0) ||
+ (len > 7 && strcmp(de->d_name + len - 7, ".aff.hz") == 0)) {
+ char * s = mystrdup(de->d_name);
+ s[len - ((s[len - 1] == 'z') ? 7 : 4)] = '\0';
+ fprintf(stderr, "%s%s\n", buf, s);
+ free(s);
+ }
+ }
+ closedir(d);
+ return 1;
+}
+#endif
+
// search existing path for file "name + ext"
char * search(char * begin, char * name, char * ext) {
char * end = begin;
while (1) {
while (!((*end == *PATHSEP) || (*end == '\0'))) end++;
- char * res = exist2(begin, end - begin, name, ext);
+ char * res = NULL;
+ if (name) {
+ res = exist2(begin, end - begin, name, ext);
+ } else {
+#ifndef WIN32
+ listdicpath(begin, end - begin);
+#endif
+ }
if ((*end == '\0') || res) return res;
end++;
begin = end;
@@ -1313,9 +1415,11 @@ int main(int argc, char** argv)
fprintf(stderr,gettext(" -i enc\tinput encoding\n"));
fprintf(stderr,gettext(" -l\t\tprint mispelled words\n"));
fprintf(stderr,gettext(" -L\t\tprint lines with mispelled words\n"));
+ fprintf(stderr,gettext(" -m \t\tanalyze the words of the input text\n"));
fprintf(stderr,gettext(" -n\t\tnroff/troff input file format\n"));
fprintf(stderr,gettext(" -p dict\tset dict custom dictionary\n"));
fprintf(stderr,gettext(" -P password\tset password for encrypted dictionaries\n"));
+ fprintf(stderr,gettext(" -s \t\tstem the words of the input text\n"));
fprintf(stderr,gettext(" -t\t\tTeX/LaTeX input file format\n"));
// experimental functions: missing Unicode support
// fprintf(stderr,gettext(" -u\t\tshow typical misspellings\n"));
@@ -1348,6 +1452,10 @@ int main(int argc, char** argv)
exit(0);
} else if ((strcmp(argv[i],"-a")==0)) {
filter_mode = PIPE;
+ } else if ((strcmp(argv[i],"-m")==0)) {
+ filter_mode = ANALYZE;
+ } else if ((strcmp(argv[i],"-s")==0)) {
+ filter_mode = STEM;
} else if ((strcmp(argv[i],"-t")==0)) {
format = FMT_LATEX;
} else if ((strcmp(argv[i],"-n")==0)) {
@@ -1415,7 +1523,12 @@ int main(int argc, char** argv)
char * aff = search(path, dicname, ".aff");
char * dic = search(path, dicname, ".dic");
if (aff && dic) {
- if (showpath) fprintf(stderr, "%s\n%s\n", aff, dic);
+ if (showpath) {
+ fprintf(stderr, gettext("SEARCH PATH:\n%s\n"), path);
+ fprintf(stderr, gettext("AVAILABLE DICTIONARIES (full path is not mandatory for -d):\n"), path);
+ search(path, NULL, NULL);
+ fprintf(stderr, gettext("LOADED DICTIONARY:\n%s\n%s\n"), aff, dic);
+ }
pMS = new Hunspell(aff, dic, key);
} else {
fprintf(stderr,gettext("Can't open affix or dictionary files.\n"));
@@ -1425,7 +1538,7 @@ int main(int argc, char** argv)
/* open the private dictionaries */
if (HOME) {
strcpy(buf,HOME);
-#ifndef W32
+#ifndef WIN32
strcat(buf,"/");
#endif
if (!privdicname) {
@@ -1446,7 +1559,7 @@ int main(int argc, char** argv)
if (arg_files==-1) {
pipe_interface(pMS, format, stdin);
} else {
-#ifndef W32
+#ifndef WIN32
#ifdef HAVE_CURSES_H
if (filter_mode == NORMAL) {
initscr();
diff --git a/src/tools/makealias b/src/tools/makealias
index 7b0f4ab..60d93b6 100755
--- a/src/tools/makealias
+++ b/src/tools/makealias
@@ -57,7 +57,7 @@ FILENAME ~ /.dic$/ && NF > 1 {
next
}
FILENAME ~ /.dic$/ { print cutslash($1) }
-FILENAME ~ /.aff$/ && /^[PS]FX/ && ($4 ~ /\/[^ ]/) && NF > 5 {
+FILENAME ~ /.aff$/ && /^[PS]FX/ && ($4 ~ /\/[^ ]/) && NF > 4 {
split($4,t,"/")
if(!a[t[2]]){
a[t[2]]=n
@@ -65,32 +65,38 @@ FILENAME ~ /.aff$/ && /^[PS]FX/ && ($4 ~ /\/[^ ]/) && NF > 5 {
n++
}
begin = $1 " " $2 " " $3 " " (t[1]"/"a[t[2]]) " " $5
+ if ($6!="") ok = 1; else ok = 0;
$1 = ""
$2 = ""
$3 = ""
$4 = ""
$5 = ""
- if($0 && !a2[$0]){
- a2[$0]=m
- c[m]=$0
- m++
- }
- print begin " " a2[$0] >>"/dev/stderr"
+ if(ok){
+ if(!a2[$0]){
+ a2[$0]=m
+ c[m]=$0
+ m++
+ }
+ print begin " " a2[$0] >>"/dev/stderr"
+ } else print begin >>"/dev/stderr"
next
}
-FILENAME ~ /.aff$/ && /^[PS]FX/ && NF > 5 {
+FILENAME ~ /.aff$/ && /^[PS]FX/ && NF > 4 {
begin = $1 " " $2 " " $3 " " cutslash($4) " " $5
+ if ($6!="") ok = 1; else ok = 0;
$1 = ""
$2 = ""
$3 = ""
$4 = ""
$5 = ""
- if($0 && !a2[$0]){
- a2[$0]=m
- c[m]=$0
- m++
- }
- print begin " " a2[$0] >>"/dev/stderr"
+ if(ok) {
+ if (!a2[$0]){
+ a2[$0]=m
+ c[m]=$0
+ m++
+ }
+ print begin " " a2[$0] >>"/dev/stderr"
+ } else print begin >>"/dev/stderr"
next
}
FILENAME ~ /.aff$/ { print $0 >>"/dev/stderr" }
diff --git a/src/win_api/Hunspell.rc b/src/win_api/Hunspell.rc
index 57b8387..d855de8 100644
--- a/src/win_api/Hunspell.rc
+++ b/src/win_api/Hunspell.rc
@@ -2,8 +2,8 @@
#include <windows.h>
VS_VERSION_INFO VERSIONINFO
-FILEVERSION 1,2,1,0
-PRODUCTVERSION 1,2,1,0
+FILEVERSION 1,2,2,0
+PRODUCTVERSION 1,2,2,0
FILEFLAGSMASK 0x17L
FILEFLAGS 0
FILEOS VOS_NT_WINDOWS32
@@ -21,12 +21,12 @@ BEGIN
VALUE "Comments", "Hunspell (http://hunspell.sourceforge.net/) by L�szl� N�meth"
VALUE "CompanyName", "http://hunspell.sourceforge.net/"
VALUE "FileDescription", "libhunspell"
- VALUE "FileVersion", "1.2.1"
+ VALUE "FileVersion", "1.2.2"
VALUE "InternalName", "libhunspell"
- VALUE "LegalCopyright", "Copyright (c) 2007"
+ VALUE "LegalCopyright", "Copyright (c) 2007-2008"
VALUE "OriginalFilename", "libhunspell.dll"
VALUE "ProductName", "Hunspell Dynamic Link Library"
- VALUE "ProductVersion", "1.2.1"
+ VALUE "ProductVersion", "1.2.2"
END
END
END
diff --git a/src/win_api/config.h b/src/win_api/config.h
index 59d57f7..25a31e1 100644
--- a/src/win_api/config.h
+++ b/src/win_api/config.h
@@ -211,5 +211,5 @@
#define PACKAGE_TARNAME
/* Define to the version of this package. */
-#define PACKAGE_VERSION "1.1.11"
-#define VERSION "1.1.11"
+#define PACKAGE_VERSION "1.2.2"
+#define VERSION "1.2.2"
diff --git a/src/win_api/libhunspell.vcproj b/src/win_api/libhunspell.vcproj
index 0fb9934..a594474 100644
--- a/src/win_api/libhunspell.vcproj
+++ b/src/win_api/libhunspell.vcproj
@@ -416,6 +416,14 @@
>
</File>
<File
+ RelativePath="..\hunspell\filemgr.cxx"
+ >
+ </File>
+ <File
+ RelativePath="..\hunspell\filemgr.hxx"
+ >
+ </File>
+ <File
RelativePath="..\hunspell\hashmgr.cxx"
>
</File>
@@ -440,6 +448,14 @@
>
</File>
<File
+ RelativePath="..\hunspell\hunzip.cxx"
+ >
+ </File>
+ <File
+ RelativePath="..\hunspell\hunzip.hxx"
+ >
+ </File>
+ <File
RelativePath="..\hunspell\langnum.hxx"
>
</File>
@@ -463,6 +479,10 @@
RelativePath="..\hunspell\utf_info.cxx"
>
</File>
+ <File
+ RelativePath="..\hunspell\w_char.hxx"
+ >
+ </File>
</Filter>
</Files>
<Globals>
diff --git a/tests/circumfix.morph b/tests/circumfix.morph
index 250ed11..62e6c53 100644
--- a/tests/circumfix.morph
+++ b/tests/circumfix.morph
@@ -5,8 +5,8 @@ stem(nagy) = nagy
analyze(nagyobb) = st:nagy po:adj is:COMPARATIVE
stem(nagyobb) = nagy
> legnagyobb
-analyze(legnagyobb) = st:nagy po:adj is:SUPERLATIVE
+analyze(legnagyobb) = fl:A st:nagy po:adj is:SUPERLATIVE
stem(legnagyobb) = nagy
> legeslegnagyobb
-analyze(legeslegnagyobb) = st:nagy po:adj is:SUPERSUPERLATIVE
+analyze(legeslegnagyobb) = fl:B st:nagy po:adj is:SUPERSUPERLATIVE
stem(legeslegnagyobb) = nagy
diff --git a/tests/rep.aff b/tests/rep.aff
index 0e0cbc0..66365e5 100644
--- a/tests/rep.aff
+++ b/tests/rep.aff
@@ -3,9 +3,10 @@
# switch off ngram suggestion for testing
MAXNGRAMSUGS 0
-REP 5
+REP 6
REP f ph
REP ph f
+REP ph f
REP shun tion
REP alot a_lot # add the highest priority for "a lot" suggestion to "alot"
REP ' _ # "un'alunno" -> "un alunno"
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-openoffice/hunspell.git
Reply to: