diff options
Diffstat (limited to 'nixpkgs/pkgs/development/libraries/hunspell')
6 files changed, 1226 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/libraries/hunspell/0001-Make-hunspell-look-in-XDG_DATA_DIRS-for-dictionaries.patch b/nixpkgs/pkgs/development/libraries/hunspell/0001-Make-hunspell-look-in-XDG_DATA_DIRS-for-dictionaries.patch new file mode 100644 index 000000000000..4607f8b8ee09 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/0001-Make-hunspell-look-in-XDG_DATA_DIRS-for-dictionaries.patch @@ -0,0 +1,37 @@ +From 8c67f314de2684d77315eecd99ef091d441f17dd Mon Sep 17 00:00:00 2001 +From: Matthew Bauer <mjbauer95@gmail.com> +Date: Wed, 24 Jul 2019 15:35:18 -0400 +Subject: [PATCH] Make hunspell look in XDG_DATA_DIRS for dictionaries + +Some dictionaries may exist but only show up under XDG_DATA_DIRS. For +instance, $HOME/.local/share/hunspell could contain some dictionaries. + +This patch adds each directory in the hunspell subdir of each +XDG_DATA_DIRS to the lookup path. + +Upstream pr is available at: https://github.com/hunspell/hunspell/pull/637 +--- + src/tools/hunspell.cxx | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/tools/hunspell.cxx b/src/tools/hunspell.cxx +index 690e34a..6cd127e 100644 +--- a/src/tools/hunspell.cxx ++++ b/src/tools/hunspell.cxx +@@ -2044,6 +2044,13 @@ int main(int argc, char** argv) { + if (getenv("DICPATH")) { + path_std_str.append(getenv("DICPATH")).append(PATHSEP); + } ++ if (getenv("XDG_DATA_DIRS")) { ++ char* dir = strtok(getenv("XDG_DATA_DIRS"), ":"); ++ while (dir != NULL) { ++ path_std_str.append(dir).append("/hunspell:"); ++ dir = strtok(NULL, ":"); ++ } ++ } + path_std_str.append(LIBDIR).append(PATHSEP); + if (HOME) { + const char * userooodir[] = USEROOODIR; +-- +2.22.0 + diff --git a/nixpkgs/pkgs/development/libraries/hunspell/default.nix b/nixpkgs/pkgs/development/libraries/hunspell/default.nix new file mode 100644 index 000000000000..2f48bd668de4 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/default.nix @@ -0,0 +1,60 @@ +{ lib, stdenv, fetchFromGitHub, ncurses, readline, autoreconfHook }: + +stdenv.mkDerivation rec { + version = "1.7.2"; + pname = "hunspell"; + + src = fetchFromGitHub { + owner = "hunspell"; + repo = "hunspell"; + rev = "v${version}"; + sha256 = "sha256-x2FXxnVIqsf5/UEQcvchAndXBv/3mW8Z55djQAFgNA8="; + }; + + outputs = [ "bin" "dev" "out" "man" ]; + + buildInputs = [ ncurses readline ]; + nativeBuildInputs = [ autoreconfHook ]; + + patches = [ + ./0001-Make-hunspell-look-in-XDG_DATA_DIRS-for-dictionaries.patch + ]; + + postPatch = '' + patchShebangs tests + ''; + + autoreconfFlags = [ "-vfi" ]; + + configureFlags = [ "--with-ui" "--with-readline" ]; + + hardeningDisable = [ "format" ]; + + meta = with lib; { + homepage = "https://hunspell.sourceforge.net"; + description = "Spell checker"; + longDescription = '' + Hunspell is the spell checker of LibreOffice, OpenOffice.org, Mozilla + Firefox 3 & Thunderbird, Google Chrome, and it is also used by + proprietary software packages, like macOS, InDesign, memoQ, Opera and + SDL Trados. + + Main features: + + * Extended support for language peculiarities; Unicode character encoding, compounding and complex morphology. + * Improved suggestion using n-gram similarity, rule and dictionary based pronunciation data. + * Morphological analysis, stemming and generation. + * Hunspell is based on MySpell and works also with MySpell dictionaries. + * C++ library under GPL/LGPL/MPL tri-license. + * Interfaces and ports: + * Enchant (Generic spelling library from the Abiword project), + * XSpell (macOS port, but Hunspell is part of the macOS from version 10.6 (Snow Leopard), and + now it is enough to place Hunspell dictionary files into + ~/Library/Spelling or /Library/Spelling for spell checking), + * Delphi, Java (JNA, JNI), Perl, .NET, Python, Ruby ([1], [2]), UNO. + ''; + platforms = platforms.all; + license = with licenses; [ gpl2 lgpl21 mpl11 ]; + maintainers = with lib.maintainers; [ ]; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/hunspell/dictionaries-chromium.nix b/nixpkgs/pkgs/development/libraries/hunspell/dictionaries-chromium.nix new file mode 100644 index 000000000000..6f834147d00b --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/dictionaries-chromium.nix @@ -0,0 +1,70 @@ +{ lib, stdenv, fetchgit }: + +let + mkDictFromChromium = { shortName, dictFileName, shortDescription }: + stdenv.mkDerivation { + pname = "hunspell-dict-${shortName}-chromium"; + version = "115.0.5790.170"; + + src = fetchgit { + url = "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries"; + rev = "41cdffd71c9948f63c7ad36e1fb0ff519aa7a37e"; + hash = "sha256-67mvpJRFFa9eMfyqFMURlbxOaTJBICnk+gl0b0mEHl8="; + }; + + dontBuild = true; + + installPhase = '' + cp ${dictFileName} $out + ''; + + passthru = { + # As chromium needs the exact filename in ~/.config/chromium/Dictionaries, + # this value needs to be known to tools using the package if they want to + # link the file correctly. + inherit dictFileName; + + updateScript = ./update-chromium-dictionaries.py; + }; + + meta = { + homepage = "https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries/"; + description = "Chromium compatible hunspell dictionary for ${shortDescription}"; + longDescription = '' + Humspell directories in Chromium's custom bdic format + + See https://www.chromium.org/developers/how-tos/editing-the-spell-checking-dictionaries/ + ''; + license = with lib.licenses; [ gpl2 lgpl21 mpl11 lgpl3 ]; + maintainers = with lib.maintainers; [ networkexception ]; + platforms = lib.platforms.all; + }; + }; +in +rec { + + /* ENGLISH */ + + en_US = en-us; + en-us = mkDictFromChromium { + shortName = "en-us"; + dictFileName = "en-US-10-1.bdic"; + shortDescription = "English (United States)"; + }; + + en_GB = en-us; + en-gb = mkDictFromChromium { + shortName = "en-gb"; + dictFileName = "en-GB-10-1.bdic"; + shortDescription = "English (United Kingdom)"; + }; + + /* GERMAN */ + + de_DE = de-de; + de-de = mkDictFromChromium { + shortName = "de-de"; + dictFileName = "de-DE-3-0.bdic"; + shortDescription = "German (Germany)"; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/hunspell/dictionaries.nix b/nixpkgs/pkgs/development/libraries/hunspell/dictionaries.nix new file mode 100644 index 000000000000..d62f672f0660 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/dictionaries.nix @@ -0,0 +1,970 @@ +/* hunspell dictionaries */ + +{ lib, stdenv, fetchurl, fetchzip, fetchFromGitHub, unzip, coreutils, bash, which, zip, ispell, perl, python3, hunspell }: + + +let + mkDict = + { pname, readmeFile, dictFileName, ... }@args: + stdenv.mkDerivation ({ + inherit pname; + installPhase = '' + runHook preInstall + # hunspell dicts + install -dm755 "$out/share/hunspell" + install -m644 ${dictFileName}.dic "$out/share/hunspell/" + install -m644 ${dictFileName}.aff "$out/share/hunspell/" + # myspell dicts symlinks + install -dm755 "$out/share/myspell/dicts" + ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/" + ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/" + # docs + install -dm755 "$out/share/doc" + install -m644 ${readmeFile} $out/share/doc/${pname}.txt + runHook postInstall + ''; + } // args); + + mkDictFromRla = + { shortName, shortDescription, dictFileName }: + mkDict rec { + inherit dictFileName; + version = "2.5"; + pname = "hunspell-dict-${shortName}-rla"; + readmeFile = "README.txt"; + src = fetchFromGitHub { + owner = "sbosio"; + repo = "rla-es"; + rev = "v${version}"; + sha256 = "sha256-oGnxOGHzDogzUMZESydIxRTbq9Dmd03flwHx16AK1yk="; + }; + meta = with lib; { + description = "Hunspell dictionary for ${shortDescription} from rla"; + homepage = "https://github.com/sbosio/rla-es"; + license = with licenses; [ gpl3 lgpl3 mpl11 ]; + maintainers = with maintainers; [ renzo ]; + platforms = platforms.all; + }; + nativeBuildInputs = [ bash coreutils which zip unzip ]; + postPatch = '' + substituteInPlace ortograf/herramientas/make_dict.sh \ + --replace /bin/bash ${bash}/bin/bash \ + --replace /dev/stderr stderr.log + + substituteInPlace ortograf/herramientas/remover_comentarios.sh \ + --replace /bin/bash ${bash}/bin/bash \ + ''; + buildPhase = '' + cd ortograf/herramientas + bash -x ./make_dict.sh -l ${dictFileName} -2 + unzip ${dictFileName}.zip \ + ${dictFileName}.dic ${dictFileName}.aff ${readmeFile} + ''; + }; + + mkDictFromDSSO = + { shortName, shortDescription, dictFileName }: + mkDict rec { + inherit dictFileName; + version = "2.40"; + # Should really use a string function or something + _version = "2-40"; + pname = "hunspell-dict-${shortName}-dsso"; + _name = "ooo_swedish_dict_${_version}"; + readmeFile = "LICENSE_en_US.txt"; + src = fetchurl { + url = "https://extensions.libreoffice.org/extensions/swedish-spelling-dictionary-den-stora-svenska-ordlistan/${version}/@@download/file/${_name}.oxt"; + sha256 = "b982881cc75f5c4af1199535bd4735ee476bdc48edf63e3f05fb4f715654a7bc"; + }; + meta = with lib; { + longDescription = '' + Svensk ordlista baserad på DSSO (den stora svenska ordlistan) och Göran + Anderssons (goran@init.se) arbete med denna. Ordlistan hämtas från + LibreOffice då dsso.se inte längre verkar vara med oss. + ''; + description = "Hunspell dictionary for ${shortDescription} from LibreOffice"; + license = licenses.lgpl3; + platforms = platforms.all; + }; + nativeBuildInputs = [ unzip ]; + sourceRoot = "."; + unpackCmd = '' + unzip $src dictionaries/${dictFileName}.dic dictionaries/${dictFileName}.aff $readmeFile + ''; + installPhase = '' + # hunspell dicts + install -dm755 "$out/share/hunspell" + install -m644 dictionaries/${dictFileName}.dic "$out/share/hunspell/" + install -m644 dictionaries/${dictFileName}.aff "$out/share/hunspell/" + # myspell dicts symlinks + install -dm755 "$out/share/myspell/dicts" + ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/" + ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/" + # docs + install -dm755 "$out/share/doc" + install -m644 ${readmeFile} $out/share/doc/${pname}.txt + ''; + }; + + mkDictFromDicollecte = + { shortName, shortDescription, longDescription, dictFileName, isDefault ? false }: + mkDict rec { + inherit dictFileName; + version = "5.3"; + pname = "hunspell-dict-${shortName}-dicollecte"; + readmeFile = "README_dict_fr.txt"; + src = fetchurl { + url = "http://www.dicollecte.org/download/fr/hunspell-french-dictionaries-v${version}.zip"; + sha256 = "0ca7084jm7zb1ikwzh1frvpb97jn27i7a5d48288h2qlfp068ik0"; + }; + meta = with lib; { + inherit longDescription; + description = "Hunspell dictionary for ${shortDescription} from Dicollecte"; + homepage = "https://www.dicollecte.org/home.php?prj=fr"; + license = licenses.mpl20; + maintainers = with maintainers; [ renzo ]; + platforms = platforms.all; + }; + nativeBuildInputs = [ unzip ]; + sourceRoot = "."; + unpackCmd = '' + unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile} + ''; + postInstall = lib.optionalString isDefault '' + for ext in aff dic; do + ln -sv $out/share/hunspell/${dictFileName}.$ext $out/share/hunspell/fr_FR.$ext + ln -sv $out/share/myspell/dicts/${dictFileName}.$ext $out/share/myspell/dicts/fr_FR.$ext + done + ''; + }; + + mkDictFromWordlist = + { shortName, shortDescription, srcFileName, dictFileName, src }: + mkDict rec { + inherit src srcFileName dictFileName; + version = "2018.04.16"; + pname = "hunspell-dict-${shortName}-wordlist"; + srcReadmeFile = "README_" + srcFileName + ".txt"; + readmeFile = "README_" + dictFileName + ".txt"; + meta = with lib; { + description = "Hunspell dictionary for ${shortDescription} from Wordlist"; + homepage = "http://wordlist.aspell.net/"; + license = licenses.bsd3; + maintainers = with maintainers; [ renzo ]; + platforms = platforms.all; + }; + nativeBuildInputs = [ unzip ]; + sourceRoot = "."; + unpackCmd = '' + unzip $src ${srcFileName}.dic ${srcFileName}.aff ${srcReadmeFile} + ''; + postUnpack = '' + mv ${srcFileName}.dic ${dictFileName}.dic || true + mv ${srcFileName}.aff ${dictFileName}.aff || true + mv ${srcReadmeFile} ${readmeFile} || true + ''; + }; + + mkDictFromLinguistico = + { shortName, shortDescription, dictFileName, src }: + mkDict rec { + inherit src dictFileName; + version = "2.4"; + pname = "hunspell-dict-${shortName}-linguistico"; + readmeFile = dictFileName + "_README.txt"; + meta = with lib; { + description = "Hunspell dictionary for ${shortDescription}"; + homepage = "https://sourceforge.net/projects/linguistico/"; + license = licenses.gpl3; + maintainers = with maintainers; [ renzo ]; + platforms = platforms.all; + }; + nativeBuildInputs = [ unzip ]; + sourceRoot = "."; + prePatch = '' + # Fix dic file empty lines (FS#22275) + sed '/^\/$/d' -i ${dictFileName}.dic + ''; + unpackCmd = '' + unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile} + ''; + }; + + mkDictFromXuxen = + { shortName, srcs, shortDescription, longDescription, dictFileName }: + stdenv.mkDerivation rec { + pname = "hunspell-dict-${shortName}-xuxen"; + version = "5-2015.11.10"; + + inherit srcs; + + sourceRoot = "."; + # Copy files stripping until first dash (path and hash) + unpackCmd = "cp $curSrc \${curSrc##*-}"; + installPhase = '' + # hunspell dicts + install -dm755 "$out/share/hunspell" + install -m644 ${dictFileName}.dic "$out/share/hunspell/" + install -m644 ${dictFileName}.aff "$out/share/hunspell/" + # myspell dicts symlinks + install -dm755 "$out/share/myspell/dicts" + ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/" + ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/" + ''; + + meta = with lib; { + homepage = "http://xuxen.eus/"; + description = shortDescription; + longDescription = longDescription; + license = licenses.gpl2; + maintainers = with maintainers; [ zalakain ]; + platforms = platforms.all; + }; + }; + + mkDictFromJ3e = + { shortName, shortDescription, dictFileName }: + stdenv.mkDerivation rec { + pname = "hunspell-dict-${shortName}-j3e"; + version = "20161207"; + + src = fetchurl { + url = "https://j3e.de/ispell/igerman98/dict/igerman98-${version}.tar.bz2"; + sha256 = "1a3055hp2bc4q4nlg3gmg0147p3a1zlfnc65xiv2v9pyql1nya8p"; + }; + + nativeBuildInputs = [ ispell perl hunspell ]; + + dontBuild = true; + + installPhase = '' + patchShebangs bin + make hunspell/${dictFileName}.aff hunspell/${dictFileName}.dic + # hunspell dicts + install -dm755 "$out/share/hunspell" + install -m644 hunspell/${dictFileName}.dic "$out/share/hunspell/" + install -m644 hunspell/${dictFileName}.aff "$out/share/hunspell/" + # myspell dicts symlinks + install -dm755 "$out/share/myspell/dicts" + ln -sv "$out/share/hunspell/${dictFileName}.dic" "$out/share/myspell/dicts/" + ln -sv "$out/share/hunspell/${dictFileName}.aff" "$out/share/myspell/dicts/" + ''; + + meta = with lib; { + homepage = "https://www.j3e.de/ispell/igerman98/index_en.html"; + description = shortDescription; + license = with licenses; [ gpl2 gpl3 ]; + maintainers = with maintainers; [ timor ]; + platforms = platforms.all; + }; + }; + + mkDictFromLibreOffice = + { shortName + , shortDescription + , dictFileName + , license + , readmeFile ? "README_${dictFileName}.txt" + , sourceRoot ? dictFileName + }: + mkDict rec { + pname = "hunspell-dict-${shortName}-libreoffice"; + version = "6.3.0.4"; + inherit dictFileName readmeFile; + src = fetchFromGitHub { + owner = "LibreOffice"; + repo = "dictionaries"; + rev = "libreoffice-${version}"; + sha256 = "14z4b0grn7cw8l9s7sl6cgapbpwhn1b3gwc3kn6b0k4zl3dq7y63"; + }; + buildPhase = '' + cp -a ${sourceRoot}/* . + ''; + meta = with lib; { + homepage = "https://wiki.documentfoundation.org/Development/Dictionaries"; + description = "Hunspell dictionary for ${shortDescription} from LibreOffice"; + license = license; + maintainers = with maintainers; [ vlaci ]; + platforms = platforms.all; + }; + }; + +in +rec { + + /* ENGLISH */ + + en_US = en-us; + en-us = mkDictFromWordlist { + shortName = "en-us"; + shortDescription = "English (United States)"; + srcFileName = "en_US"; + dictFileName = "en_US"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_US-2018.04.16.zip"; + sha256 = "18hbncvqnckzqarrmnzk58plymjqyi93k4qj98fac5mr71jbmzaf"; + }; + }; + + en_US-large = en-us-large; + en-us-large = mkDictFromWordlist { + shortName = "en-us-large"; + shortDescription = "English (United States) Large"; + srcFileName = "en_US-large"; + dictFileName = "en_US"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_US-large-2018.04.16.zip"; + sha256 = "1xm9jgqbivp5cb78ykjxg47vzq1yqj82l7r4q5cjpivrv99s49qc"; + }; + }; + + en_CA = en-ca; + en-ca = mkDictFromWordlist { + shortName = "en-ca"; + shortDescription = "English (Canada)"; + srcFileName = "en_CA"; + dictFileName = "en_CA"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_CA-2018.04.16.zip"; + sha256 = "06yf3s7y1215jmikbs18cn4j8a13csp4763w3jfgah8zlim6vc47"; + }; + }; + + en_CA-large = en-ca-large; + en-ca-large = mkDictFromWordlist { + shortName = "en-ca-large"; + shortDescription = "English (Canada) Large"; + srcFileName = "en_CA-large"; + dictFileName = "en_CA"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_CA-large-2018.04.16.zip"; + sha256 = "1200xxyvv6ni8nk52v3059c367817vnrkm0cdh38rhiigb5flfha"; + }; + }; + + en_AU = en-au; + en-au = mkDictFromWordlist { + shortName = "en-au"; + shortDescription = "English (Australia)"; + srcFileName = "en_AU"; + dictFileName = "en_AU"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_AU-2018.04.16.zip"; + sha256 = "1kp06npl1kd05mm9r52cg2iwc13x02zwqgpibdw15b6x43agg6f5"; + }; + }; + + en_AU-large = en-au-large; + en-au-large = mkDictFromWordlist { + shortName = "en-au-large"; + shortDescription = "English (Australia) Large"; + srcFileName = "en_AU-large"; + dictFileName = "en_AU"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_AU-large-2018.04.16.zip"; + sha256 = "14l1w4dpk0k1js2wwq5ilfil89ni8cigph95n1rh6xi4lzxj7h6g"; + }; + }; + + en_GB-ise = en-gb-ise; + en-gb-ise = mkDictFromWordlist { + shortName = "en-gb-ise"; + shortDescription = "English (United Kingdom, 'ise' ending)"; + srcFileName = "en_GB-ise"; + dictFileName = "en_GB"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-ise-2018.04.16.zip"; + sha256 = "0ylg1zvfvsawamymcc9ivrqcb9qhlpgpnizm076xc56jz554xc2l"; + }; + }; + + en_GB-ize = en-gb-ize; + en-gb-ize = mkDictFromWordlist { + shortName = "en-gb-ize"; + shortDescription = "English (United Kingdom, 'ize' ending)"; + srcFileName = "en_GB-ize"; + dictFileName = "en_GB"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-ize-2018.04.16.zip"; + sha256 = "1rmwy6sxmd400cwjf58az6g14sq28p18f5mlq8ybg8y33q9m42ps"; + }; + }; + + en_GB-large = en-gb-large; + en-gb-large = mkDictFromWordlist { + shortName = "en-gb-large"; + shortDescription = "English (United Kingdom) Large"; + srcFileName = "en_GB-large"; + dictFileName = "en_GB"; + src = fetchurl { + url = "mirror://sourceforge/wordlist/speller/2018.04.16/hunspell-en_GB-large-2018.04.16.zip"; + sha256 = "1y4d7x5vvi1qh1s3i09m0vvqrpdzzqhsdngr8nsh7hc5bnlm37mi"; + }; + }; + + /* SPANISH */ + + es_ANY = es-any; + es-any = mkDictFromRla { + shortName = "es-any"; + shortDescription = "Spanish (any variant)"; + dictFileName = "es_ANY"; + }; + + es_AR = es-ar; + es-ar = mkDictFromRla { + shortName = "es-ar"; + shortDescription = "Spanish (Argentina)"; + dictFileName = "es_AR"; + }; + + es_BO = es-bo; + es-bo = mkDictFromRla { + shortName = "es-bo"; + shortDescription = "Spanish (Bolivia)"; + dictFileName = "es_BO"; + }; + + es_CL = es-cl; + es-cl = mkDictFromRla { + shortName = "es-cl"; + shortDescription = "Spanish (Chile)"; + dictFileName = "es_CL"; + }; + + es_CO = es-co; + es-co = mkDictFromRla { + shortName = "es-co"; + shortDescription = "Spanish (Colombia)"; + dictFileName = "es_CO"; + }; + + es_CR = es-cr; + es-cr = mkDictFromRla { + shortName = "es-cr"; + shortDescription = "Spanish (Costa Rica)"; + dictFileName = "es_CR"; + }; + + es_CU = es-cu; + es-cu = mkDictFromRla { + shortName = "es-cu"; + shortDescription = "Spanish (Cuba)"; + dictFileName = "es_CU"; + }; + + es_DO = es-do; + es-do = mkDictFromRla { + shortName = "es-do"; + shortDescription = "Spanish (Dominican Republic)"; + dictFileName = "es_DO"; + }; + + es_EC = es-ec; + es-ec = mkDictFromRla { + shortName = "es-ec"; + shortDescription = "Spanish (Ecuador)"; + dictFileName = "es_EC"; + }; + + es_ES = es-es; + es-es = mkDictFromRla { + shortName = "es-es"; + shortDescription = "Spanish (Spain)"; + dictFileName = "es_ES"; + }; + + es_GT = es-gt; + es-gt = mkDictFromRla { + shortName = "es-gt"; + shortDescription = "Spanish (Guatemala)"; + dictFileName = "es_GT"; + }; + + es_HN = es-hn; + es-hn = mkDictFromRla { + shortName = "es-hn"; + shortDescription = "Spanish (Honduras)"; + dictFileName = "es_HN"; + }; + + es_MX = es-mx; + es-mx = mkDictFromRla { + shortName = "es-mx"; + shortDescription = "Spanish (Mexico)"; + dictFileName = "es_MX"; + }; + + es_NI = es-ni; + es-ni = mkDictFromRla { + shortName = "es-ni"; + shortDescription = "Spanish (Nicaragua)"; + dictFileName = "es_NI"; + }; + + es_PA = es-pa; + es-pa = mkDictFromRla { + shortName = "es-pa"; + shortDescription = "Spanish (Panama)"; + dictFileName = "es_PA"; + }; + + es_PE = es-pe; + es-pe = mkDictFromRla { + shortName = "es-pe"; + shortDescription = "Spanish (Peru)"; + dictFileName = "es_PE"; + }; + + es_PR = es-pr; + es-pr = mkDictFromRla { + shortName = "es-pr"; + shortDescription = "Spanish (Puerto Rico)"; + dictFileName = "es_PR"; + }; + + es_PY = es-py; + es-py = mkDictFromRla { + shortName = "es-py"; + shortDescription = "Spanish (Paraguay)"; + dictFileName = "es_PY"; + }; + + es_SV = es-sv; + es-sv = mkDictFromRla { + shortName = "es-sv"; + shortDescription = "Spanish (El Salvador)"; + dictFileName = "es_SV"; + }; + + es_UY = es-uy; + es-uy = mkDictFromRla { + shortName = "es-uy"; + shortDescription = "Spanish (Uruguay)"; + dictFileName = "es_UY"; + }; + + es_VE = es-ve; + es-ve = mkDictFromRla { + shortName = "es-ve"; + shortDescription = "Spanish (Venezuela)"; + dictFileName = "es_VE"; + }; + + /* FRENCH */ + + fr-any = mkDictFromDicollecte { + shortName = "fr-any"; + dictFileName = "fr-toutesvariantes"; + shortDescription = "French (any variant)"; + longDescription = '' + Ce dictionnaire contient les nouvelles et les anciennes graphies des + mots concernés par la réforme de 1990. + ''; + }; + + fr-classique = mkDictFromDicollecte { + shortName = "fr-classique"; + dictFileName = "fr-classique"; + shortDescription = "French (classic)"; + longDescription = '' + Ce dictionnaire est une extension du dictionnaire «Moderne» et propose + en sus des graphies alternatives, parfois encore très usitées, parfois + tombées en désuétude. + ''; + }; + + fr-moderne = mkDictFromDicollecte { + shortName = "fr-moderne"; + dictFileName = "fr-moderne"; + shortDescription = "French (modern)"; + longDescription = '' + Ce dictionnaire propose une sélection des graphies classiques et + réformées, suivant la lente évolution de l’orthographe actuelle. Ce + dictionnaire contient les graphies les moins polémiques de la réforme. + ''; + isDefault = true; + }; + + fr-reforme1990 = mkDictFromDicollecte { + shortName = "fr-reforme1990"; + dictFileName = "fr-reforme1990"; + shortDescription = "French (1990 reform)"; + longDescription = '' + Ce dictionnaire ne connaît que les graphies nouvelles des mots concernés + par la réforme de 1990. + ''; + }; + + /* ITALIAN */ + + it_IT = it-it; + it-it = mkDictFromLinguistico { + shortName = "it-it"; + dictFileName = "it_IT"; + shortDescription = "Hunspell dictionary for 'Italian (Italy)' from Linguistico"; + src = fetchurl { + url = "mirror://sourceforge/linguistico/italiano_2_4_2007_09_01.zip"; + sha256 = "0m9frz75fx456bczknay5i446gdcp1smm48lc0qfwzhz0j3zcdrd"; + }; + }; + + /* BASQUE */ + + eu_ES = eu-es; + eu-es = mkDictFromXuxen { + shortName = "eu-es"; + dictFileName = "eu_ES"; + shortDescription = "Basque (Xuxen 5)"; + longDescription = '' + Itxura berritzeaz gain, testuak zuzentzen laguntzeko zenbait hobekuntza + egin dira Xuxen.eus-en. Lexikoari dagokionez, 18645 sarrera berri erantsi + ditugu, eta proposamenak egiteko sistema ere aldatu dugu. Esate baterako, + gaizki idatzitako hitz baten inguruko proposamenak eskuratzeko, euskaraz + idaztean egiten ditugun akats arruntenak hartu dira kontuan. Sistemak + ematen dituen proposamenak ordenatzeko, berriz, aipatutako irizpidea + erabiltzeaz gain, Internetetik automatikoki eskuratutako euskarazko corpus + bateko datuen arabera ordenatu daitezke emaitzak. Erabiltzaileak horrela + ordenatu nahi baditu proposamenak, hautatu egin behar du aukera hori + testu-kutxaren azpian dituen aukeren artean. Interesgarria da proposamenak + ordenatzeko irizpide hori, hala sistemak formarik erabilienak proposatuko + baitizkigu gutxiago erabiltzen direnen aurretik. + ''; + srcs = [ + (fetchurl { + url = "http://xuxen.eus/static/hunspell/eu_ES.aff"; + sha256 = "12w2j6phzas2rdzc7f20jnk93sm59m2zzfdgxv6p8nvcvbrkmc02"; + }) + (fetchurl { + url = "http://xuxen.eus/static/hunspell/eu_ES.dic"; + sha256 = "0lw193jr7ldvln5x5z9p21rz1by46h0say9whfcw2kxs9vprd5b3"; + }) + ]; + }; + + /* HUNGARIAN */ + + hu_HU = hu-hu; + hu-hu = mkDictFromLibreOffice { + shortName = "hu-hu"; + dictFileName = "hu_HU"; + shortDescription = "Hungarian (Hungary)"; + license = with lib.licenses; [ mpl20 lgpl3 ]; + }; + + /* SWEDISH */ + + sv_SE = sv-se; + sv-se = mkDictFromDSSO { + shortName = "sv-se"; + dictFileName = "sv_SE"; + shortDescription = "Swedish (Sweden)"; + }; + + # Finlandian Swedish (hello Linus Torvalds) + sv_FI = sv-fi; + sv-fi = mkDictFromDSSO { + shortName = "sv-fi"; + dictFileName = "sv_FI"; + shortDescription = "Swedish (Finland)"; + }; + + /* GERMAN */ + + de_DE = de-de; + de-de = mkDictFromJ3e { + shortName = "de-de"; + shortDescription = "German (Germany)"; + dictFileName = "de_DE"; + }; + + de_AT = de-at; + de-at = mkDictFromJ3e { + shortName = "de-at"; + shortDescription = "German (Austria)"; + dictFileName = "de_AT"; + }; + + de_CH = de-ch; + de-ch = mkDictFromJ3e { + shortName = "de-ch"; + shortDescription = "German (Switzerland)"; + dictFileName = "de_CH"; + }; + + /* UKRAINIAN */ + + uk_UA = uk-ua; + uk-ua = mkDict rec { + pname = "hunspell-dict-uk-ua"; + version = "4.6.3"; + _version = "4-6.3"; + + src = fetchurl { + url = "https://extensions.libreoffice.org/extensions/ukrainian-spelling-dictionary-and-thesaurus/${_version}/@@download/file/dict-uk_UA-${version}.oxt"; + sha256 = "14rd07yx4fx2qxjr5xqc8qy151idd8k2hr5yi18d9r8gccnm9w50"; + }; + + dictFileName = "uk_UA"; + readmeFile = "README_uk_UA.txt"; + nativeBuildInputs = [ unzip ]; + unpackCmd = '' + unzip $src ${dictFileName}/{${dictFileName}.dic,${dictFileName}.aff,${readmeFile}} + ''; + + meta = with lib; { + description = "Hunspell dictionary for Ukrainian (Ukraine) from LibreOffice"; + homepage = "https://extensions.libreoffice.org/extensions/ukrainian-spelling-dictionary-and-thesaurus/"; + license = licenses.mpl20; + maintainers = with maintainers; [ dywedir ]; + platforms = platforms.all; + }; + }; + + /* RUSSIAN */ + + ru_RU = ru-ru; + ru-ru = mkDictFromLibreOffice { + shortName = "ru-ru"; + dictFileName = "ru_RU"; + shortDescription = "Russian (Russian)"; + license = with lib.licenses; [ mpl20 lgpl3 ]; + }; + + /* CZECH */ + + cs_CZ = cs-cz; + cs-cz = mkDictFromLibreOffice { + shortName = "cs-cz"; + dictFileName = "cs_CZ"; + shortDescription = "Czech (Czechia)"; + readmeFile = "README_cs.txt"; + license = with lib.licenses; [ gpl2 ]; + }; + + /* SLOVAK */ + + sk_SK = sk-sk; + sk-sk = mkDictFromLibreOffice { + shortName = "sk-sk"; + dictFileName = "sk_SK"; + shortDescription = "Slovak (Slovakia)"; + readmeFile = "README_sk.txt"; + license = with lib.licenses; [ gpl2 lgpl21 mpl11 ]; + }; + + /* DANISH */ + + da_DK = da-dk; + da-dk = mkDict rec { + pname = "hunspell-dict-da-dk"; + version = "2.5.189"; + + src = fetchurl { + url = "https://stavekontrolden.dk/dictionaries/da_DK/da_DK-${version}.oxt"; + sha256 = "sha256:0i1cw0nfg24b0sg2yc3q7315ng5vc5245nvh0l1cndkn2c9z4978"; + }; + + shortName = "da-dk"; + shortDescription = "Danish (Danmark)"; + dictFileName = "da_DK"; + readmeFile = "README_da_DK.txt"; + nativeBuildInputs = [ unzip ]; + unpackCmd = '' + unzip $src ${dictFileName}.dic ${dictFileName}.aff ${readmeFile} -d ${dictFileName} + ''; + + meta = with lib; { + description = "Hunspell dictionary for Danish (Denmark) from Stavekontrolden"; + homepage = "https://github.com/jeppebundsgaard/stavekontrolden"; + license = with lib.licenses; [ gpl2Only lgpl21Only mpl11 ]; + maintainers = with maintainers; [ louisdk1 ]; + }; + }; + + /* DUTCH */ + + nl_NL = nl_nl; + nl_nl = mkDict rec { + pname = "hunspell-dict-nl-nl"; + version = "2.20.19"; + + src = fetchFromGitHub { + owner = "OpenTaal"; + repo = "opentaal-hunspell"; + rev = version; + sha256 = "0jma8mmrncyzd77kxliyngs4z6z4769g3nh0a7xn2pd4s5y2xdpy"; + }; + + preInstall = '' + mv nl.aff nl_NL.aff + mv nl.dic nl_NL.dic + ''; + + dictFileName = "nl_NL"; + readmeFile = "README.md"; + + meta = with lib; { + description = "Hunspell dictionary for Dutch (Netherlands) from OpenTaal"; + homepage = "https://www.opentaal.org/"; + license = with licenses; [ bsd3 ]; # and/or cc-by-nc-30 + maintainers = with maintainers; [ artturin ]; + }; + }; + + /* HEBREW */ + + he_IL = he-il; + he-il = mkDictFromLibreOffice { + shortName = "he-il"; + dictFileName = "he_IL"; + shortDescription = "Hebrew (Israel)"; + readmeFile = "README_he_IL.txt"; + license = with lib.licenses; [ agpl3Plus ]; + }; + + /* THAI */ + + th_TH = th-th; + th-th = mkDict { + pname = "hunspell-dict-th-th"; + version = "experimental-2024-02-27"; + dictFileName = "th_TH"; + readmeFile = "README.md"; + src = fetchFromGitHub { + owner = "SyafiqHadzir"; + repo = "Hunspell-TH"; + rev = "62d35f9211ca1eb4c367eac2ae57193efe6e88d2"; + sha256 = "sha256-t4m4u+qIgJPrKz58Cu2Q+knYm/+cvrNLzQsiiSRTB1A="; + }; + meta = with lib; { + description = "Hunspell dictionary for Central Thai (Thailand)"; + homepage = "https://github.com/SyafiqHadzir/Hunspell-TH"; + license = with licenses; [ gpl3 ]; + maintainers = with maintainers; [ toastal ]; # looking for a native speaker + platforms = platforms.all; + }; + }; + + /* CROATIAN */ + + hr_HR = hr-hr; + hr-hr = mkDictFromLibreOffice { + shortName = "hr-hr"; + dictFileName = "hr_HR"; + shortDescription = "Croatian (Croatia)"; + readmeFile = "README_hr_HR.txt"; + license = with lib.licenses; [ gpl2Only lgpl21Only mpl11 ]; + }; + + /* NORWEGIAN */ + + nb_NO = nb-no; + nb-no = mkDictFromLibreOffice { + shortName = "nb-no"; + dictFileName = "nb_NO"; + sourceRoot = "no"; + readmeFile = "README_hyph_NO.txt"; + shortDescription = "Norwegian Bokmål (Norway)"; + license = with lib.licenses; [ gpl2Only ]; + }; + + nn_NO = nn-no; + nn-no = mkDictFromLibreOffice { + shortName = "nn-no"; + dictFileName = "nn_NO"; + sourceRoot = "no"; + readmeFile = "README_hyph_NO.txt"; + shortDescription = "Norwegian Nynorsk (Norway)"; + license = with lib.licenses; [ gpl2Only ]; + }; + + /* TOKI PONA */ + + tok = mkDict rec { + pname = "hunspell-dict-tok"; + version = "20220829"; + dictFileName = "tok"; + readmeFile = "README.en.adoc"; + + src = fetchzip { + url = "https://github.com/somasis/hunspell-tok/releases/download/${version}/hunspell-tok-${version}.tar.gz"; + sha256 = "sha256-RiAODKXPUeIcf8IFcU6Tacehq5S8GYuPTuxEiN2CXD0="; + }; + + dontBuild = true; + + meta = with lib; { + description = "Hunspell dictionary for Toki Pona"; + homepage = "https://github.com/somasis/hunspell-tok"; + license = with lib.licenses; [ cc0 publicDomain cc-by-sa-30 cc-by-sa-40 ]; + maintainers = with maintainers; [ somasis ]; + platforms = platforms.all; + }; + }; + + /* POLISH */ + + pl_PL = pl-pl; + pl-pl = mkDictFromLibreOffice { + shortName = "pl-pl"; + dictFileName = "pl_PL"; + shortDescription = "Polish (Poland)"; + readmeFile = "README_en.txt"; + # the README doesn't specify versions of licenses :/ + license = with lib.licenses; [ gpl2Plus lgpl2Plus mpl10 asl20 cc-by-sa-25 ]; + }; + + /* PORTUGUESE */ + + pt_BR = pt-br; + pt-br = mkDictFromLibreOffice { + shortName = "pt-br"; + dictFileName = "pt_BR"; + shortDescription = "Portuguese (Brazil)"; + readmeFile = "README_pt_BR.txt"; + license = with lib.licenses; [ lgpl3 ]; + }; + + pt_PT = pt-pt; + pt-pt = mkDictFromLibreOffice { + shortName = "pt-pt"; + dictFileName = "pt_PT"; + shortDescription = "Portuguese (Portugal)"; + readmeFile = "README_pt_PT.txt"; + license = with lib.licenses; [ gpl2 lgpl21 mpl11 ]; + }; + + /* PERSIAN */ + + fa_IR = fa-ir; + fa-ir = mkDict { + pname = "hunspell-dict-fa-ir"; + version = "experimental-2022-09-04"; + dictFileName = "fa-IR"; + readmeFile = "README.md"; + src = fetchFromGitHub { + owner = "b00f"; + repo = "lilak"; + rev = "1a80a8e5c9377ac424d29ef20be894e250bc9765"; + hash = "sha256-xonnrclzgFEHdQ9g8ijm0bo9r5a5Y0va52NoJR5d8mo="; + }; + nativeBuildInputs = [ python3 ]; + buildPhase = '' + runHook preBuild + mkdir build + (cd src && python3 lilak.py) + mv build/* ./ + # remove timestamp from file + sed -i 's/^\(## *File Version[^,]*\),.*/\1/' fa-IR.aff + runHook postBuild + ''; + meta = with lib; { + description = "Hunspell dictionary for Persian (Iran)"; + homepage = "https://github.com/b00f/lilak"; + license = licenses.asl20; + maintainers = with maintainers; [ nix-julia ]; + platforms = platforms.all; + }; + }; +} diff --git a/nixpkgs/pkgs/development/libraries/hunspell/update-chromium-dictionaries.py b/nixpkgs/pkgs/development/libraries/hunspell/update-chromium-dictionaries.py new file mode 100755 index 000000000000..eb24fc32937c --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/update-chromium-dictionaries.py @@ -0,0 +1,77 @@ +#! /usr/bin/env nix-shell +#! nix-shell -i python3 -p python3 nix nix-prefetch-git + +import base64 +import fileinput +import json +import os +import re +import subprocess +import sys + +from urllib.request import urlopen, Request + + +DICTIONARIES_CHROMIUM_NIX = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'dictionaries-chromium.nix') + + +def get_latest_chromium_stable_release(): + RELEASES_URL = 'https://versionhistory.googleapis.com/v1/chrome/platforms/linux/channels/stable/versions/all/releases' + print(f'GET {RELEASES_URL}') + with urlopen(RELEASES_URL) as resp: + return json.load(resp)['releases'][0] + + +def get_file_revision(revision, file_path): + """Fetches the requested Git revision of the given Chromium file.""" + url = f'https://chromium.googlesource.com/chromium/src/+/refs/tags/{revision}/{file_path}?format=TEXT' + with urlopen(url) as http_response: + resp = http_response.read() + return base64.b64decode(resp) + + +def nix_prefetch_git(url, rev): + """Prefetches the requested Git revision of the given repository URL.""" + print(f'nix-prefetch-git {url} {rev}') + out = subprocess.check_output(['nix-prefetch-git', '--quiet', '--url', url, '--rev', rev]) + return json.loads(out) + + +def get_current_revision(): + with open(DICTIONARIES_CHROMIUM_NIX) as f: + for line in f: + rev = re.search(r'^ rev = "(.*)";', line) + if rev: + return rev.group(1) + sys.exit(1) + + +print('Getting latest chromium version...') +chromium_release = get_latest_chromium_stable_release() +chromium_version = chromium_release['version'] +print(f'chromium version: {chromium_version}') + +print('Getting corresponding hunspell_dictionaries commit...') +deps = get_file_revision(chromium_version, 'DEPS') +hunspell_dictionaries_pattern = r"^\s*Var\('chromium_git'\)\s*\+\s*'\/chromium\/deps\/hunspell_dictionaries\.git'\s*\+\s*'@'\s*\+\s*'(\w*)',$" +hunspell_dictionaries_commit = re.search(hunspell_dictionaries_pattern, deps.decode(), re.MULTILINE).group(1) +print(f'hunspell_dictionaries commit: {hunspell_dictionaries_commit}') + +current_commit = get_current_revision() +if current_commit == hunspell_dictionaries_commit: + print('Commit is already packaged, no update needed.') + sys.exit(0) + +print('Commit has changed compared to the current package, updating...') + +print('Getting hash of hunspell_dictionaries revision...') +hunspell_dictionaries_git = nix_prefetch_git("https://chromium.googlesource.com/chromium/deps/hunspell_dictionaries", hunspell_dictionaries_commit) +hunspell_dictionaries_hash = hunspell_dictionaries_git['hash'] +print(f'hunspell_dictionaries commit hash: {hunspell_dictionaries_hash}') + +with fileinput.FileInput(DICTIONARIES_CHROMIUM_NIX, inplace=True) as file: + for line in file: + result = re.sub(r'^ version = ".+";', f' version = "{chromium_version}";', line) + result = re.sub(r'^ rev = ".*";', f' rev = "{hunspell_dictionaries_commit}";', result) + result = re.sub(r'^ hash = ".+";', f' hash = "{hunspell_dictionaries_hash}";', result) + print(result, end='') diff --git a/nixpkgs/pkgs/development/libraries/hunspell/wrapper.nix b/nixpkgs/pkgs/development/libraries/hunspell/wrapper.nix new file mode 100644 index 000000000000..01987ab71858 --- /dev/null +++ b/nixpkgs/pkgs/development/libraries/hunspell/wrapper.nix @@ -0,0 +1,12 @@ +{ stdenv, lib, hunspell, makeWrapper, dicts ? [] }: +let + searchPath = lib.makeSearchPath "share/hunspell" dicts; +in +stdenv.mkDerivation { + name = (lib.appendToName "with-dicts" hunspell).name; + nativeBuildInputs = [ makeWrapper ]; + buildCommand = '' + makeWrapper ${hunspell.bin}/bin/hunspell $out/bin/hunspell --prefix DICPATH : ${lib.escapeShellArg searchPath} + ''; + meta = removeAttrs hunspell.meta ["outputsToInstall"]; +} |