From patchwork Tue Jan 3 23:48:39 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Brian Cully X-Patchwork-Id: 45834 Return-Path: X-Original-To: patchwork@mira.cbaines.net Delivered-To: patchwork@mira.cbaines.net Received: by mira.cbaines.net (Postfix, from userid 113) id C17CD27BBEE; Tue, 3 Jan 2023 23:50:24 +0000 (GMT) X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on mira.cbaines.net X-Spam-Level: X-Spam-Status: No, score=-3.6 required=5.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,MAILING_LIST_MULTI,RCVD_IN_MSPIKE_H2,SPF_HELO_PASS, URIBL_BLOCKED,URIBL_SBL_A autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mira.cbaines.net (Postfix) with ESMTPS id DD9C427BBEB for ; Tue, 3 Jan 2023 23:50:20 +0000 (GMT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pCr2j-0007Nf-Hz; Tue, 03 Jan 2023 18:50:05 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pCr2h-0007NQ-Ch for guix-patches@gnu.org; Tue, 03 Jan 2023 18:50:03 -0500 Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pCr2h-0004vg-3l for guix-patches@gnu.org; Tue, 03 Jan 2023 18:50:03 -0500 Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pCr2g-0006Po-IL for guix-patches@gnu.org; Tue, 03 Jan 2023 18:50:02 -0500 X-Loop: help-debbugs@gnu.org Subject: [bug#60532] [PATCH] gnu: hunspell: migrate hunspell and dictionaries to hunspell module. Resent-From: Brian Cully Original-Sender: "Debbugs-submit" Resent-CC: guix-patches@gnu.org Resent-Date: Tue, 03 Jan 2023 23:50:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 60532 X-GNU-PR-Package: guix-patches X-GNU-PR-Keywords: patch To: 60532@debbugs.gnu.org Cc: Brian Cully X-Debbugs-Original-To: guix-patches@gnu.org Received: via spool by submit@debbugs.gnu.org id=B.167278975824583 (code B ref -1); Tue, 03 Jan 2023 23:50:02 +0000 Received: (at submit) by debbugs.gnu.org; 3 Jan 2023 23:49:18 +0000 Received: from localhost ([127.0.0.1]:47076 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pCr1x-0006OQ-2F for submit@debbugs.gnu.org; Tue, 03 Jan 2023 18:49:18 -0500 Received: from lists.gnu.org ([209.51.188.17]:41038) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pCr1s-0006OB-JF for submit@debbugs.gnu.org; Tue, 03 Jan 2023 18:49:16 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pCr1q-00074n-Na for guix-patches@gnu.org; Tue, 03 Jan 2023 18:49:12 -0500 Received: from coleridge.kublai.com ([166.84.7.167] helo=mail.spork.org) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1pCr1l-0004n8-Sz for guix-patches@gnu.org; Tue, 03 Jan 2023 18:49:10 -0500 Received: from psyduck.jhoto.kublai.com (ool-18b8e9e7.dyn.optonline.net [24.184.233.231]) by mail.spork.org (Postfix) with ESMTPSA id 65E4EBA48; Tue, 3 Jan 2023 18:48:44 -0500 (EST) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=spork.org; s=dkim; t=1672789727; bh=S5xiejyr//GJqlb34ni1OIaYXYJg3s/gjsE3g7P22RI=; h=From:To:Cc:Subject:Date; b=B4lpLtKfCZDqm7lDI5Rv0zkznpsbW15Oi6ByWFsT599GjAU8g/kAp/SjQ9kgnTdGH I7VXr42x5eSn2X707Bz30OipDE9KnS4lA6rzRtOR2/VMexeS60RafVicDnB7N/1Li7 SITbTa7AlRG+bc93PPUuvLNSDgwUHDT68WAr4C+Q= Date: Tue, 3 Jan 2023 18:48:39 -0500 Message-Id: X-Mailer: git-send-email 2.38.1 MIME-Version: 1.0 Received-SPF: pass client-ip=166.84.7.167; envelope-from=bjc@spork.org; helo=mail.spork.org X-Spam_score_int: -19 X-Spam_score: -2.0 X-Spam_bar: -- X-Spam_report: (-2.0 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_SBL_A=0.1 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: guix-patches@gnu.org List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-to: Brian Cully X-ACL-Warn: , Brian Cully via Guix-patches X-Patchwork-Original-From: Brian Cully via Guix-patches via From: Brian Cully Errors-To: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org Sender: guix-patches-bounces+patchwork=mira.cbaines.net@gnu.org X-getmail-retrieved-from-mailbox: Patches Consolidate hunspell and its dictionaries into hunspell module instead of having them scattered about. * gnu/packages/aspell.scm (aspell-word-list, define-word-list-dictionary, hunspell-dict-{en, en-au, en-gb, en-gb-ize, en-us}): Remove variables. * gnu/packages/libreoffice.scm (hunspell, dicollecte-french-dictionary, define-french-dictionary, hunspell-dict-fr-{classique, moderne, réforme, toutes-variantes}, hunspell-dict-pl, hunspell-dict-de, hunspell-dict-hu): Remove variables. * gnu/packages/hunspell.scm (hunspell, dicollecte-french-dictionary, define-french-dictionary, hunspell-dict-fr-{classique, moderne, réforme, toutes-variantes}, hunspell-dict-pl, hunspell-dict-de, hunspell-dict-hu, aspell-word-list, define-word-list-dictionary, hunspell-dict-{en, en-au, en-gb, en-gb-ize, en-us}): Add variables. (hunspell-dictionary): Explicitly declare upstream libreoffice version to prevent circular dependency. --- gnu/packages/aspell.scm | 118 ------------ gnu/packages/hunspell.scm | 362 ++++++++++++++++++++++++++++++++++- gnu/packages/libreoffice.scm | 233 +--------------------- 3 files changed, 361 insertions(+), 352 deletions(-) diff --git a/gnu/packages/aspell.scm b/gnu/packages/aspell.scm index 76deb7cdce..8978b4e087 100644 --- a/gnu/packages/aspell.scm +++ b/gnu/packages/aspell.scm @@ -395,124 +395,6 @@ (define-public aspell-dict-ro (base32 "0gb8j9iy1acdl11jq76idgc2lbc1rq3w04favn8cyh55d1v8phsk"))) - -;;; -;;; 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 (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")) - (define-public ispell (package (name "ispell") diff --git a/gnu/packages/hunspell.scm b/gnu/packages/hunspell.scm index 48df196e17..8bc8c38176 100644 --- a/gnu/packages/hunspell.scm +++ b/gnu/packages/hunspell.scm @@ -17,13 +17,253 @@ ;;; along with GNU Guix. If not, see . (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 @@ (define* (hunspell-dictionary dict-name full-name #:key synopsis home-page licen (#\_ #\-) (chr chr)) (string-downcase dict-name)))) - (version (package-version libreoffice)) + (version "7.4.3.2") (source (origin (method git-fetch) @@ -79,3 +319,121 @@ (define-public hunspell-dict-it-it #: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")) + diff --git a/gnu/packages/libreoffice.scm b/gnu/packages/libreoffice.scm index 2103aec5a0..b959470d8f 100644 --- a/gnu/packages/libreoffice.scm +++ b/gnu/packages/libreoffice.scm @@ -70,6 +70,7 @@ (define-module (gnu packages libreoffice) #:use-module (gnu packages graphics) #:use-module (gnu packages gstreamer) #:use-module (gnu packages gtk) + #:use-module (gnu packages hunspell) #:use-module (gnu packages icu4c) #:use-module (gnu packages image) #:use-module (gnu packages java) @@ -792,191 +793,6 @@ (define-public libzmf Zoner Draw version 4 and 5.") (license license:mpl2.0))) -(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 hyphen (package (name "hyphen") @@ -1000,53 +816,6 @@ (define-public hyphen (license (list license:mpl1.1 license:mpl2.0 license:gpl2+ license:lgpl2.1+)))) -(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-public mythes (package (name "mythes")