summaryrefslogtreecommitdiff
path: root/gnu/packages/hunspell.scm
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/packages/hunspell.scm')
-rw-r--r--gnu/packages/hunspell.scm364
1 files changed, 361 insertions, 3 deletions
diff --git a/gnu/packages/hunspell.scm b/gnu/packages/hunspell.scm
index 65ff90b4b9..8bc8c38176 100644
--- a/gnu/packages/hunspell.scm
+++ b/gnu/packages/hunspell.scm
@@ -17,13 +17,253 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages hunspell)
+ #:use-module (guix build-system gnu)
#:use-module (guix build-system trivial)
#:use-module (guix download)
+ #:use-module (guix gexp)
#:use-module (guix git-download)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix packages)
#:use-module (ice-9 match)
- #:use-module (gnu packages libreoffice))
+ #:use-module (gnu packages aspell)
+ #:use-module (gnu packages autotools)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages compression)
+ #:use-module (gnu packages m4)
+ #:use-module (gnu packages perl)
+ #:use-module (gnu packages textutils))
+
+(define-public hunspell
+ (package
+ (name "hunspell")
+ (version "1.7.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url "https://github.com/hunspell/hunspell")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0qxlkd012r45ppd21kldbq9k5ac5nmxz290z6m2kch9l56v768k1"))))
+ (build-system gnu-build-system)
+ (native-inputs
+ (list autoconf automake libtool))
+ (inputs
+ (list perl))
+ (native-search-paths (list (search-path-specification
+ (variable "DICPATH")
+ (files '("share/hunspell")))))
+ (home-page "https://hunspell.github.io/")
+ (synopsis "Spell checker")
+ (description "Hunspell is a spell checker and morphological analyzer
+library and program designed for languages with rich morphology and complex
+word compounding or character encoding.")
+ ;; Triple license, including "mpl1.1 or later".
+ (license (list license:mpl1.1 license:gpl2+ license:lgpl2.1+))))
+
+(define (dicollecte-french-dictionary variant synopsis)
+ ;; Return a French dictionary package from dicollecte.org, for the given
+ ;; VARIANT.
+ (package
+ (name (match variant
+ ("classique" "hunspell-dict-fr")
+ (_ (string-append "hunspell-dict-fr-" variant))))
+ (version "6.2")
+ (source (origin
+ (uri (string-append
+ "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v"
+ version ".zip"))
+ (method url-fetch)
+ (sha256
+ (base32
+ "139hfrn5p87sl8hqmgkf6sgvnxrk2mm8vd8xsm8sm98qjnwlg0f9"))))
+ (build-system trivial-build-system)
+ (native-inputs (list unzip))
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder (begin
+ (use-modules (guix build utils)
+ (srfi srfi-26))
+
+ (let* ((out (assoc-ref %outputs "out"))
+ (hunspell (string-append out "/share/hunspell"))
+ (myspell (string-append out "/share/myspell"))
+ (doc (string-append out "/share/doc/"
+ ,name))
+ (unzip (assoc-ref %build-inputs "unzip")))
+ (invoke (string-append unzip "/bin/unzip")
+ (assoc-ref %build-inputs "source"))
+ (for-each (cut install-file <> hunspell)
+ (find-files "."
+ ,(string-append variant
+ "\\.(dic|aff)$")))
+ (mkdir-p myspell)
+ (symlink hunspell (string-append myspell "/dicts"))
+ (for-each (cut install-file <> doc)
+ (find-files "." "\\.(txt|org|md)$"))
+ #t))))
+ (synopsis synopsis)
+ (description
+ "This package provides a dictionary for the Hunspell spell-checking
+library.")
+ (home-page "https://www.dicollecte.org/home.php?prj=fr")
+ (license license:mpl2.0)))
+
+(define-syntax define-french-dictionary
+ (syntax-rules (synopsis)
+ ((_ name variant (synopsis text))
+ (define-public name
+ (dicollecte-french-dictionary variant text)))))
+
+(define-french-dictionary hunspell-dict-fr-classique
+ "classique"
+ ;; TRANSLATORS: In French, this is "Français classique".
+ (synopsis "Hunspell dictionary for ``classic'' French (recommended)"))
+
+(define-french-dictionary hunspell-dict-fr-moderne
+ "moderne"
+ ;; TRANSLATORS: In French, this is "Français moderne".
+ (synopsis "Hunspell dictionary for ``modern'' French"))
+
+(define-french-dictionary hunspell-dict-fr-réforme-1990
+ "reforme1990"
+ (synopsis "Hunspell dictionary for the post @dfn{1990 réforme} French"))
+
+(define-french-dictionary hunspell-dict-fr-toutes-variantes
+ "toutesvariantes"
+ (synopsis "Hunspell dictionary for all variants of French"))
+
+(define-public hunspell-dict-pl
+ (package
+ (name "hunspell-dict-pl")
+ (version "20200327")
+ (source
+ (origin
+ (method url-fetch)
+ ;; Since creators of dictionary host only the latest daily release,
+ ;; we're using version mirrored by Arch Linux, which seems good
+ ;; enough. They're mirroring hunspell-pl releases since 2011.
+ (uri (string-append "https://sources.archlinux.org/other/community/"
+ "hunspell-pl/sjp-myspell-pl-"
+ version ".zip"))
+ (sha256 (base32
+ "14mzf8glxkp2775dcqisb1zv6r8ncm3bvzl46q352rwyl2dg1c59"))))
+
+ (build-system trivial-build-system)
+ (native-inputs (list unzip))
+ (arguments
+ `(#:modules ((guix build utils))
+ #:builder (begin
+ (use-modules (guix build utils)
+ (srfi srfi-26))
+
+ (let* ((out (assoc-ref %outputs "out"))
+ (hunspell (string-append out "/share/hunspell"))
+ (myspell (string-append out "/share/myspell"))
+ (doc (string-append out "/share/doc/"
+ ,name))
+ (unzip (search-input-file %build-inputs
+ "/bin/unzip")))
+ (invoke unzip "-j" "-o" (assoc-ref %build-inputs "source"))
+ (invoke unzip "-j" "-o" "pl_PL.zip")
+ (for-each (cut install-file <> hunspell)
+ (find-files "."
+ ,(string-append "pl_PL"
+ "\\.(dic|aff)$")))
+ (mkdir-p myspell)
+ (symlink hunspell (string-append myspell "/dicts"))
+ (for-each (cut install-file <> doc)
+ (find-files "." "\\.(txt|org|md)$"))
+ #t))))
+ (synopsis "Hunspell dictionary for Polish")
+ (description
+ "This package provides a dictionary for the Hunspell spell-checking
+library.")
+ (home-page "https://sjp.pl/slownik/ort/")
+ (license
+ (list license:gpl2 license:mpl1.1 license:cc-by4.0 license:lgpl2.1 license:asl2.0))))
+
+(define-public hunspell-dict-de
+ (package
+ (name "hunspell-dict-de")
+ (version "20161207")
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "https://www.j3e.de/ispell/igerman98/dict/"
+ "igerman98-" version ".tar.bz2"))
+ (sha256
+ (base32 "1a3055hp2bc4q4nlg3gmg0147p3a1zlfnc65xiv2v9pyql1nya8p"))))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:make-flags '("hunspell/de_DE.dic")
+ #:phases
+ (modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'install ;no install target
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (share (string-append out "/share/hunspell/")))
+ (install-file "hunspell/de_DE.aff" share)
+ (install-file "hunspell/de_DE.dic" share)
+ #t))))
+ #:tests? #f)) ; no tests
+ (native-inputs
+ (list hunspell ispell perl))
+ (synopsis "Hunspell dictionary for German (de_DE)")
+ (description "This package provides a dictionary for the Hunspell
+spell-checking library.")
+ (home-page "https://www.j3e.de/ispell/igerman98/")
+ (license (list license:gpl2 license:gpl3))))
+
+(define-public hunspell-dict-hu
+ (let ((revision "2")
+ (major+minor "1.7"))
+ (package
+ (name "hunspell-dict-hu")
+ (version (string-append major+minor "-" revision))
+ (source
+ (origin
+ (method url-fetch)
+ (uri (string-append "mirror://sourceforge/magyarispell/Magyar Ispell/"
+ major+minor
+ "/magyarispell-" version ".tar.gz"))
+ (sha256
+ (base32 "0r22rvqrp5bzgr9sqyap82kibi5z9n6xy5b06si28idqijw7c772"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:make-flags
+ #~(list "myspell"
+ "--jobs=1" ;the Makefile is not ready for parallelism
+ (string-append "SH="
+ (search-input-file %build-inputs
+ "/bin/bash"))
+ (string-append "AWK="
+ (search-input-file %build-inputs
+ "/bin/awk")))
+ #:phases
+ #~(modify-phases %standard-phases
+ (replace 'configure
+ (lambda* (#:key outputs #:allow-other-keys)
+ (substitute* "config"
+ (("/usr/bin/awk")
+ (which "awk")))))
+ (replace 'install ;no install target
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+ (share (string-append out "/share/hunspell/")))
+ (install-file "hu_HU.aff" share)
+ (install-file "hu_HU.dic" share)))))
+ #:tests? #f)) ; no tests
+ (native-inputs
+ (list hunspell m4 recode))
+ (synopsis "Hunspell dictionary for Hungarian (hu_HU)")
+ (description "This package provides a dictionary for the Hunspell
+spell-checking library.")
+ (home-page "http://magyarispell.sourceforge.net/")
+ (license (list license:gpl2 license:gpl3)))))
(define* (hunspell-dictionary dict-name full-name #:key synopsis home-page license)
(package
@@ -35,7 +275,7 @@
(#\_ #\-)
(chr chr))
(string-downcase dict-name))))
- (version (package-version libreoffice))
+ (version "7.4.3.2")
(source
(origin
(method git-fetch)
@@ -46,7 +286,7 @@
(string-append "libreoffice-" version))))
(file-name (git-file-name "libreoffice-dictionaries" version))
(sha256
- (base32 "1qyn56kcn2scdlssjgi5b33hnsh20mmnd60w78z0gp7bs0mv0wcs"))))
+ (base32 "115p29ywyn7ncq664gxmcrrz55v23s34asd2hmrg4ahjp7ycrnmy"))))
(build-system trivial-build-system)
(native-inputs
`(("source" ,source)))
@@ -79,3 +319,121 @@ spell-checking library.")
#:synopsis (synopsis "Hunspell dictionary for Italian")
#:home-page "https://www.libreitalia.org/"
#:license license:gpl3)))
+
+;;;
+;;; Hunspell packages made from the Aspell word lists.
+;;;
+
+(define* (aspell-word-list language synopsis
+ #:optional
+ (nick (string-map (lambda (chr)
+ (if (char=? #\_ chr)
+ #\-
+ chr))
+ (string-downcase language))))
+ (package
+ (name (string-append "hunspell-dict-" nick))
+ (version "2018.04.16")
+ (source (origin
+ (method url-fetch)
+ (uri (string-append
+ "mirror://sourceforge/wordlist/SCOWL/"
+ version "/scowl-" version ".tar.gz"))
+ (sha256
+ (base32
+ "11lkrnhwrf5mvrrq45k4mads3n9aswgac8dc25ba61c75alxb5rs"))))
+ (native-inputs
+ (list tar gzip perl aspell))
+ (build-system gnu-build-system)
+ (arguments
+ `(#:phases
+ (modify-phases %standard-phases
+ (add-after 'unpack 'make-reproducible
+ (lambda _
+ (substitute* "speller/README_en.txt.sh"
+ (("\\bdate\\b") ""))))
+ (delete 'configure)
+ (delete 'check)
+ (replace 'build
+ (lambda _
+ (substitute* "speller/make-hunspell-dict"
+ (("zip -9 .*$")
+ "return\n"))
+ (mkdir "speller/hunspell")
+
+ ;; XXX: This actually builds all the dictionary variants.
+ (invoke "make" "-C" "speller" "hunspell")))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref %outputs "out"))
+ (hunspell (string-append out "/share/hunspell"))
+ (myspell (string-append out "/share/myspell"))
+ (doc (string-append out "/share/doc/"
+ ,name))
+ (dot-dic ,(string-append "speller/" language ".dic")))
+ (mkdir-p myspell)
+
+ ;; Usually there's only a 'LANGUAGE.dic' file, but for the "en"
+ ;; dictionary, there no 'en.dic'. Instead, there's a set of
+ ;; 'en*.dic' files, hence the 'find-files' call below.
+ (if (file-exists? dot-dic)
+ (install-file dot-dic hunspell)
+ (for-each (lambda (dic)
+ (install-file dic hunspell))
+ (find-files "speller"
+ ,(string-append language ".*\\.dic$"))))
+
+ ;; Install affix files corresponding to installed dictionaries
+ (for-each (lambda (dic)
+ (install-file (string-append
+ "speller/" (basename dic ".dic") ".aff")
+ hunspell))
+ (find-files hunspell ".*\\.dic$"))
+ (symlink hunspell (string-append myspell "/dicts"))
+ (for-each (lambda (file)
+ (install-file file doc))
+ (find-files "."
+ "^(Copyright|.*\\.(txt|org|md))$"))
+ #t))))))
+ (synopsis synopsis)
+ (description
+ "This package provides a dictionary for the Hunspell spell-checking
+library.")
+ (home-page "http://wordlist.aspell.net/")
+ (license (license:non-copyleft "file://Copyright"
+ "Word lists come from several sources, all
+under permissive licensing terms. See the 'Copyright' file."))))
+
+(define-syntax define-word-list-dictionary
+ (syntax-rules (synopsis)
+ ((_ name language (synopsis text))
+ (define-public name
+ (aspell-word-list language text)))
+ ((_ name language nick (synopsis text))
+ (define-public name
+ (aspell-word-list language text nick)))))
+
+(define-word-list-dictionary hunspell-dict-en
+ "en"
+ (synopsis "Hunspell dictionary for English"))
+
+(define-word-list-dictionary hunspell-dict-en-au
+ "en_AU"
+ (synopsis "Hunspell dictionary for Australian English"))
+
+(define-word-list-dictionary hunspell-dict-en-ca
+ "en_CA"
+ (synopsis "Hunspell dictionary for Canadian English"))
+
+(define-word-list-dictionary hunspell-dict-en-gb
+ "en_GB-ise" "en-gb"
+ (synopsis "Hunspell dictionary for British English, with -ise endings"))
+
+(define-word-list-dictionary hunspell-dict-en-gb-ize
+ "en_GB-ize"
+ (synopsis "Hunspell dictionary for British English, with -ize endings"))
+
+(define-word-list-dictionary hunspell-dict-en-us
+ "en_US"
+ (synopsis "Hunspell dictionary for United States English"))
+