about summary refs log tree commit diff
path: root/nixpkgs/pkgs/servers/dict
diff options
context:
space:
mode:
authorAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
committerAlyssa Ross <hi@alyssa.is>2023-06-16 06:56:35 +0000
commit99fcaeccb89621dd492203ce1f2d551c06f228ed (patch)
tree41cb730ae07383004789779b0f6e11cb3f4642a3 /nixpkgs/pkgs/servers/dict
parent59c5f5ac8682acc13bb22bc29c7cf02f7d75f01f (diff)
parent75a5ebf473cd60148ba9aec0d219f72e5cf52519 (diff)
downloadnixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.gz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.bz2
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.lz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.xz
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.tar.zst
nixlib-99fcaeccb89621dd492203ce1f2d551c06f228ed.zip
Merge branch 'nixos-unstable' of https://github.com/NixOS/nixpkgs
Conflicts:
	nixpkgs/nixos/modules/config/console.nix
	nixpkgs/nixos/modules/services/mail/mailman.nix
	nixpkgs/nixos/modules/services/mail/public-inbox.nix
	nixpkgs/nixos/modules/services/mail/rss2email.nix
	nixpkgs/nixos/modules/services/networking/ssh/sshd.nix
	nixpkgs/pkgs/applications/networking/instant-messengers/dino/default.nix
	nixpkgs/pkgs/applications/networking/irc/weechat/default.nix
	nixpkgs/pkgs/applications/window-managers/sway/default.nix
	nixpkgs/pkgs/build-support/go/module.nix
	nixpkgs/pkgs/build-support/rust/build-rust-package/default.nix
	nixpkgs/pkgs/development/interpreters/python/default.nix
	nixpkgs/pkgs/development/node-packages/overrides.nix
	nixpkgs/pkgs/development/tools/b4/default.nix
	nixpkgs/pkgs/servers/dict/dictd-db.nix
	nixpkgs/pkgs/servers/mail/public-inbox/default.nix
	nixpkgs/pkgs/tools/security/pinentry/default.nix
	nixpkgs/pkgs/tools/text/unoconv/default.nix
	nixpkgs/pkgs/top-level/all-packages.nix
Diffstat (limited to 'nixpkgs/pkgs/servers/dict')
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-db.nix10
-rw-r--r--nixpkgs/pkgs/servers/dict/dictd-wordnet.nix4
-rw-r--r--nixpkgs/pkgs/servers/dict/libmaa.nix2
-rw-r--r--nixpkgs/pkgs/servers/dict/wiktionary/default.nix7
-rw-r--r--nixpkgs/pkgs/servers/dict/wiktionary/latest_version.py6
-rw-r--r--nixpkgs/pkgs/servers/dict/wiktionary/wiktionary2dict.py59
-rwxr-xr-x[-rw-r--r--]nixpkgs/pkgs/servers/dict/wordnet_structures.py77
7 files changed, 86 insertions, 79 deletions
diff --git a/nixpkgs/pkgs/servers/dict/dictd-db.nix b/nixpkgs/pkgs/servers/dict/dictd-db.nix
index d72deab2354b..6f4888ce4719 100644
--- a/nixpkgs/pkgs/servers/dict/dictd-db.nix
+++ b/nixpkgs/pkgs/servers/dict/dictd-db.nix
@@ -60,6 +60,16 @@ in rec {
     url = https://download.freedict.org/dictionaries/epo-eng/1.0.1/freedict-epo-eng-1.0.1.dictd.tar.xz;
     sha256 = "095xwqfc43dnm0g74i83lg03542f064jy2xbn3qnjxiwysz9ksnz";
   }) "epo-eng" "epo-eng" "eo";
+  jpn2eng = makeDictdDB (fetchurl {
+    url = let version = "0.1";
+          in "mirror://sourceforge/freedict/jpn-eng/${version}/freedict-jpn-eng-${version}.dictd.tar.xz";
+    sha256 = "sha256-juJBoEq7EztLZzOomc7uoZhXVaQPKoUvIxxPLB0xByc=";
+  }) "jpn-eng" "jpn-eng" "ja_JP";
+  eng2jpn = makeDictdDB (fetchurl {
+    url = let version = "2022.04.06";
+          in "https://download.freedict.org/dictionaries/eng-jpn/${version}/freedict-eng-jpn-${version}.dictd.tar.xz";
+    sha256 = "sha256-kfRT2kgbV3XKarCr4mqDRT5A1jR8M8APky5M5MFYatE=";
+  }) "eng-jpn" "eng-jpn" "en_UK";
   mueller_eng2rus_pkg = makeDictdDB (fetchurl {
     url = "mirror://sourceforge/mueller-dict/mueller-dict-3.1.tar.gz";
     sha256 = "04r5xxznvmcb8hkxqbjgfh2gxvbdd87jnhqn5gmgvxxw53zpwfmq";
diff --git a/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix b/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix
index 8378102dac53..663bd54897bf 100644
--- a/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix
+++ b/nixpkgs/pkgs/servers/dict/dictd-wordnet.nix
@@ -1,10 +1,10 @@
-{lib, stdenv, python2, wordnet, writeScript}:
+{lib, stdenv, python3, wordnet, writeScript}:
 
 stdenv.mkDerivation rec {
   version = "542";
   pname = "dict-db-wordnet";
 
-  buildInputs = [python2 wordnet];
+  buildInputs = [python3 wordnet];
   convert = ./wordnet_structures.py;
 
   builder = writeScript "builder.sh" ''
diff --git a/nixpkgs/pkgs/servers/dict/libmaa.nix b/nixpkgs/pkgs/servers/dict/libmaa.nix
index d55f89b9477f..b0762990f2d5 100644
--- a/nixpkgs/pkgs/servers/dict/libmaa.nix
+++ b/nixpkgs/pkgs/servers/dict/libmaa.nix
@@ -12,7 +12,7 @@ stdenv.mkDerivation rec {
   buildInputs = [ libtool ];
   # configureFlags = [ "--datadir=/run/current-system/share/dictd" ];
 
-  NIX_CFLAGS_COMPILE = "-Wno-error=format-truncation";
+  env.NIX_CFLAGS_COMPILE = "-Wno-error=format-truncation";
 
   meta = with lib; {
     description = "Dict protocol server and client";
diff --git a/nixpkgs/pkgs/servers/dict/wiktionary/default.nix b/nixpkgs/pkgs/servers/dict/wiktionary/default.nix
index 03f60f694c53..b15ece0e8512 100644
--- a/nixpkgs/pkgs/servers/dict/wiktionary/default.nix
+++ b/nixpkgs/pkgs/servers/dict/wiktionary/default.nix
@@ -1,4 +1,4 @@
-{ lib, stdenv, fetchurl, python2, dict, glibcLocales }:
+{ lib, stdenv, fetchurl, python3, dict, glibcLocales }:
 
 stdenv.mkDerivation rec {
   pname = "dict-db-wiktionary";
@@ -9,8 +9,7 @@ stdenv.mkDerivation rec {
     sha256 = "qsha26LL2513SDtriE/0zdPX1zlnpzk1KKk+R9dSdew=";
   };
 
-  # script in nixpkgs does not support python2
-  nativeBuildInputs = [ python2 dict glibcLocales ];
+  nativeBuildInputs = [ python3 dict glibcLocales ];
 
   dontUnpack = true;
 
@@ -18,7 +17,7 @@ stdenv.mkDerivation rec {
     mkdir -p $out/share/dictd/
     cd $out/share/dictd
 
-    ${python2.interpreter} -O ${./wiktionary2dict.py} "${src}"
+    ${python3.interpreter} -O ${./wiktionary2dict.py} "${src}"
     dictzip wiktionary-en.dict
     echo en_US.UTF-8 > locale
   '';
diff --git a/nixpkgs/pkgs/servers/dict/wiktionary/latest_version.py b/nixpkgs/pkgs/servers/dict/wiktionary/latest_version.py
index 2833a1e05b03..1aa767851cee 100644
--- a/nixpkgs/pkgs/servers/dict/wiktionary/latest_version.py
+++ b/nixpkgs/pkgs/servers/dict/wiktionary/latest_version.py
@@ -25,18 +25,18 @@ def nix_prefetch_url(url, algo='sha256'):
     """Prefetches the content of the given URL."""
     print(f'nix-prefetch-url {url}')
     out = subprocess.check_output(['nix-prefetch-url', '--type', algo, url])
-    return out.decode('utf-8').rstrip()
+    return out.rstrip()
 
 
 current_version = subprocess.check_output([
     'nix', 'eval', '--raw',
     '-f', dirname(abspath(__file__)) + '/../../../..',
     'dictdDBs.wiktionary.version',
-]).decode('utf-8')
+])
 
 parser = WiktionaryLatestVersionParser(current_version)
 
 with urlopen('https://dumps.wikimedia.org/enwiktionary/') as resp:
-    parser.feed(resp.read().decode('utf-8'))
+    parser.feed(resp.read())
 
 print(parser.latest_version)
diff --git a/nixpkgs/pkgs/servers/dict/wiktionary/wiktionary2dict.py b/nixpkgs/pkgs/servers/dict/wiktionary/wiktionary2dict.py
index 8a0210e7254f..a737079bf5c8 100644
--- a/nixpkgs/pkgs/servers/dict/wiktionary/wiktionary2dict.py
+++ b/nixpkgs/pkgs/servers/dict/wiktionary/wiktionary2dict.py
@@ -2,7 +2,6 @@
 # Based on code from wiktiondict by Greg Hewgill
 import re
 import sys
-import codecs
 import os
 import textwrap
 import time
@@ -48,7 +47,7 @@ class Delimiter:
         return self.c
 
 def Tokenise(s):
-    s = unicode(s)
+    s = str(s)
     stack = []
     last = 0
     i = 0
@@ -109,17 +108,17 @@ def Tokenise(s):
         yield s[last:i]
 
 def processSub(templates, tokens, args):
-    t = tokens.next()
-    if not isinstance(t, unicode):
+    t = next(tokens)
+    if not isinstance(t, str):
         raise SyntaxError
     name = t
-    t = tokens.next()
+    t = next(tokens)
     default = None
     if isinstance(t, Delimiter) and t.c == '|':
         default = ""
         while True:
-            t = tokens.next()
-            if isinstance(t, unicode):
+            t = next(tokens)
+            if isinstance(t, str):
                 default += t
             elif isinstance(t, OpenDouble):
                 default += processTemplateCall(templates, tokens, args)
@@ -128,7 +127,7 @@ def processSub(templates, tokens, args):
             elif isinstance(t, CloseTriple):
                 break
             else:
-                print "Unexpected:", t
+                print("Unexpected:", t)
                 raise SyntaxError()
     if name in args:
         return args[name]
@@ -142,14 +141,14 @@ def processTemplateCall(templates, tokens, args):
     template = tokens.next().strip().lower()
     args = {}
     a = 1
-    t = tokens.next()
+    t = next(tokens)
     while True:
         if isinstance(t, Delimiter):
-            name = unicode(a)
+            name = str(a)
             arg = ""
             while True:
-                t = tokens.next()
-                if isinstance(t, unicode):
+                t = next(tokens)
+                if isinstance(t, str):
                     arg += t
                 elif isinstance(t, OpenDouble):
                     arg += processTemplateCall(templates, tokens, args)
@@ -163,9 +162,9 @@ def processTemplateCall(templates, tokens, args):
                 name = arg.strip()
                 arg = ""
                 while True:
-                    t = tokens.next()
-                    if isinstance(t, (unicode, Equals)):
-                        arg += unicode(t)
+                    t = next(tokens)
+                    if isinstance(t, (str, Equals)):
+                        arg += str(t)
                     elif isinstance(t, OpenDouble):
                         arg += processTemplateCall(templates, tokens, args)
                     elif isinstance(t, OpenTriple):
@@ -181,7 +180,7 @@ def processTemplateCall(templates, tokens, args):
         elif isinstance(t, CloseDouble):
             break
         else:
-            print "Unexpected:", t
+            print("Unexpected:", t)
             raise SyntaxError
     #print template, args
     if template[0] == '#':
@@ -208,7 +207,7 @@ def processTemplateCall(templates, tokens, args):
             else:
                 return ""
         else:
-            print "Unknown ParserFunction:", template
+            print("Unknown ParserFunction:", template)
             sys.exit(1)
     if template not in templates:
         return "{{%s}}" % template
@@ -225,13 +224,13 @@ def process(templates, s, args = {}):
     tokens = Tokenise(s)
     try:
         while True:
-            t = tokens.next()
+            t = next(tokens)
             if isinstance(t, OpenDouble):
                 r += processTemplateCall(templates, tokens, args)
             elif isinstance(t, OpenTriple):
                 r += processSub(templates, tokens, args)
             else:
-                r += unicode(t)
+                r += str(t)
     except StopIteration:
         pass
     return r
@@ -250,11 +249,11 @@ def test():
         't6': "t2demo|a",
     }
     def t(text, expected):
-        print "text:", text
+        print("text:", text)
         s = process(templates, text)
         if s != expected:
-            print "got:", s
-            print "expected:", expected
+            print("got:", s)
+            print("expected:", expected)
             sys.exit(1)
     t("{{Name-example}}", "I am a template example, my first name is '''{{{firstName}}}''' and my last name is '''{{{lastName}}}'''. You can reference my page at [[{{{lastName}}}, {{{firstName}}}]].")
     t("{{Name-example | firstName=John | lastName=Smith }}", "I am a template example, my first name is '''John''' and my last name is '''Smith'''. You can reference my page at [[Smith, John]].")
@@ -463,7 +462,7 @@ Parts = {
     'Verbal noun': "v.n.",
 }
 PartsUsed = {}
-for p in Parts.keys():
+for p in list(Parts.keys()):
     PartsUsed[p] = 0
 
 def encode(s):
@@ -641,7 +640,7 @@ def formatNormal(word, doc):
                 #    r += "  "*(depth-1) + word + " (" + p + ")\n\n"
                 r += "  "*(depth-1) + section.heading + "\n\n"
             else:
-                print >>errors, "Unknown part: (%s) %s" % (word, section.heading)
+                print("Unknown part: (%s) %s" % (word, section.heading), file=errors)
                 return ""
         elif depth > posdepth:
             return ""
@@ -709,8 +708,8 @@ class WikiHandler(xml.sax.ContentHandler):
         if self.element == "text":
             if self.page:
                 if self.page in self.long:
-                    print self.page, len(self.text)
-                    print
+                    print(self.page, len(self.text))
+                    print()
                 self.doPage(self.page, self.text)
                 self.page = None
             self.text = ""
@@ -760,8 +759,7 @@ info = """   This file was converted from the original database on:
   Wiktionary is available under the GNU Free Documentation License.
 """ % (time.ctime(), os.path.basename(fn))
 
-errors = codecs.open("mkdict.err", "w", "utf_8")
-e = codecs.getencoder("utf_8")
+errors = open("mkdict.err", "w")
 
 Templates = {}
 f = os.popen("bunzip2 -c %s" % fn, "r")
@@ -769,10 +767,9 @@ xml.sax.parse(f, TemplateHandler())
 f.close()
 
 f = os.popen("bunzip2 -c %s" % fn, "r")
-out = codecs.getwriter("utf_8")(
-        os.popen("dictfmt -p wiktionary-en --locale en_US.UTF-8 --columns 0 -u http://en.wiktionary.org", "w"))
+out = os.popen("dictfmt -p wiktionary-en --locale en_US.UTF-8 --columns 0 -u http://en.wiktionary.org", "w")
 
-out.write(("%%h English Wiktionary\n%s" % info).encode('utf-8'))
+out.write("%%h English Wiktionary\n%s" % info)
 xml.sax.parse(f, WordHandler())
 f.close()
 out.close()
diff --git a/nixpkgs/pkgs/servers/dict/wordnet_structures.py b/nixpkgs/pkgs/servers/dict/wordnet_structures.py
index 6a88427c5da1..e5c80b968fc2 100644..100755
--- a/nixpkgs/pkgs/servers/dict/wordnet_structures.py
+++ b/nixpkgs/pkgs/servers/dict/wordnet_structures.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/env python3
 #Copyright 2007 Sebastian Hagen
 # This file is part of wordnet_tools.
 
@@ -26,6 +26,7 @@
 # written.
 
 import datetime
+import math
 from textwrap import TextWrapper
 
 CAT_ADJECTIVE = 0
@@ -49,7 +50,7 @@ class WordIndex:
       self.ptrs = ptrs
       self.synsets = synsets
       self.tagsense_count = tagsense_count
-   
+
    @classmethod
    def build_from_line(cls, line_data, synset_map):
       line_split = line_data.split()
@@ -61,14 +62,14 @@ class WordIndex:
       tagsense_count = int(line_split[5 + ptr_count],10)
       synsets = [synset_map[int(line_split[i],10)] for i in range(6 + ptr_count, 6 + ptr_count + synset_count)]
       return cls(lemma, category, ptrs, synsets, tagsense_count)
-   
+
    @classmethod
    def build_from_file(cls, f, synset_map, rv_base=None):
       if (rv_base is None):
          rv = {}
       else:
          rv = rv_base
-         
+
       for line in f:
          if (line.startswith('  ')):
             continue
@@ -81,8 +82,8 @@ class WordIndex:
 
    def __repr__(self):
       return '%s%s' % (self.__class__.__name__, (self.lemma, self.category, self.ptrs, self.synsets, self.tagsense_count))
-   
-   
+
+
 class WordIndexDictFormatter(WordIndex):
    category_map_rev = {
       CAT_NOUN: 'n',
@@ -96,12 +97,12 @@ class WordIndexDictFormatter(WordIndex):
    prefix_fmtn_line_first = '         '
    prefix_fmtf_line_nonfirst = '%5d: '
    prefix_fmtn_line_nonfirst = '       '
-   
+
    def dict_str(self):
       tw = TextWrapper(width=self.LINE_WIDTH_MAX,
          initial_indent=(self.prefix_fmtf_line_first % self.category_map_rev[self.category]),
          subsequent_indent=self.prefix_fmtn_line_first)
-         
+
       lines = (tw.wrap(self.synsets[0].dict_str()))
       i = 2
       for synset in self.synsets[1:]:
@@ -122,7 +123,7 @@ class Synset:
       self.gloss = gloss
       self.frames = frames
       self.comments = []
-   
+
    @classmethod
    def build_from_line(cls, line_data):
       line_split = line_data.split()
@@ -132,7 +133,7 @@ class Synset:
       words = [line_split[i] for i in range(4, 4 + word_count*2,2)]
       ptr_count = int(line_split[4 + word_count*2],10)
       ptrs = [(line_split[i], line_split[i+1], line_split[i+2], line_split[i+3]) for i in range(5 + word_count*2,4 + word_count*2 + ptr_count*4,4)]
-     
+
       tok = line_split[5 + word_count*2 + ptr_count*4]
       base = 6 + word_count*2 + ptr_count*4
       if (tok != '|'):
@@ -141,20 +142,20 @@ class Synset:
          base += frame_count*3 + 1
       else:
          frames = []
-     
+
       line_split2 = line_data.split(None, base)
       if (len(line_split2) < base):
          gloss = None
       else:
          gloss = line_split2[-1]
-     
+
       return cls(synset_offset, ss_type, words, ptrs, gloss, frames)
-   
+
    @classmethod
    def build_from_file(cls, f):
       rv = {}
       comments = []
-     
+
       for line in f:
          if (line.startswith('  ')):
             line_s = line.lstrip().rstrip('\n')
@@ -197,14 +198,14 @@ original version.\n\n
 
    datetime_fmt = '%Y-%m-%dT%H:%M:%S'
    base64_map = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
-   
+
    def __init__(self, wn_url, desc_short, desc_long):
       self.word_data = {}
       self.wn_url = wn_url
       self.desc_short = desc_short
       self.desc_long = desc_long
       self.wn_license = None
-   
+
    def wn_dict_add(self, file_index, file_data):
       file_data.seek(0)
       file_index.seek(0)
@@ -212,7 +213,7 @@ original version.\n\n
       WordIndexDictFormatter.build_from_file(file_index, synsets, self.word_data)
       if (license_lines):
          self.wn_license = '\n'.join(license_lines) + '\n'
-   
+
    @classmethod
    def base64_encode(cls, i):
       """Encode a non-negative integer into a dictd compatible base64 string"""
@@ -223,15 +224,15 @@ original version.\n\n
       while (r < i):
          e += 1
          r = 64**e - 1
-     
+
       rv = ''
       while (e > 0):
          e -= 1
-         d = (i / 64**e)
+         d = math.floor(i / 64**e)
          rv += cls.base64_map[d]
          i = i % (64**e)
       return rv
-     
+
    @classmethod
    def dict_entry_write(cls, file_index, file_data, key, entry, linesep='\n'):
       """Write a single dict entry for <key> to index and data files"""
@@ -240,7 +241,7 @@ original version.\n\n
       entry_len = len(entry)
       file_index.write('%s\t%s\t%s%s' % (key, cls.base64_encode(entry_start),
             cls.base64_encode(entry_len), linesep))
-     
+
    def dict_generate(self, file_index, file_data):
       file_index.seek(0)
       file_data.seek(0)
@@ -261,8 +262,8 @@ original version.\n\n
       self.dict_entry_write(file_index, file_data, '00-database-short', '00-database-short\n%s\n' % self.desc_short)
       self.dict_entry_write(file_index, file_data, '00-database-url', '00-database-url\n%s\n' % self.wn_url)
 
-     
-      words = self.word_data.keys()
+
+      words = list(self.word_data.keys())
       words.sort()
       for word in words:
          for wi in self.word_data[word]:
@@ -280,14 +281,14 @@ original version.\n\n
             else:
                continue
             break
-           
+
          outstr = ''
          for wi in self.word_data[word]:
             outstr += wi.dict_str() + '\n'
-         
+
          outstr = '%s%s%s' % (word_cs, wi.linesep, outstr)
          self.dict_entry_write(file_index, file_data, word_cs, outstr, wi.linesep)
-     
+
       file_index.truncate()
       file_data.truncate()
 
@@ -300,20 +301,20 @@ if (__name__ == '__main__'):
    op.add_option('--wn_url', dest='wn_url', default='ftp://ftp.cogsci.princeton.edu/pub/wordnet/2.0', help='URL for wordnet sources')
    op.add_option('--db_desc_short', dest='desc_short', default='     WordNet (r) 2.1 (2005)', help='short dict DB description')
    op.add_option('--db_desc_long', dest='desc_long', default='    WordNet (r): A Lexical Database for English from the\n     Cognitive Science Laboratory at Princeton University', help='long dict DB description')
-   
+
    (options, args) = op.parse_args()
-   
+
    wnd = WordnetDict(wn_url=options.wn_url, desc_short=options.desc_short, desc_long=options.desc_long)
-   
+
    for i in range(0,len(args),2):
-      print 'Opening index file %r...' % args[i]
-      file_index = file(args[i])
-      print 'Opening data file %r...' % args[i+1]
-      file_data = file(args[i+1])
-      print 'Parsing index file and data file...'
+      print('Opening index file %r...' % args[i])
+      file_index = open(args[i])
+      print('Opening data file %r...' % args[i+1])
+      file_data = open(args[i+1])
+      print('Parsing index file and data file...')
       wnd.wn_dict_add(file_index, file_data)
 
-   print 'All input files parsed. Writing output to index file %r and data file %r.' % (options.oi, options.od)
-   
-   wnd.dict_generate(file(options.oi, 'w'),file(options.od, 'w'))
-   print 'All done.' 
+   print('All input files parsed. Writing output to index file %r and data file %r.' % (options.oi, options.od))
+
+   wnd.dict_generate(open(options.oi, 'w'),open(options.od, 'w'))
+   print('All done.')