> Ludovic Courtès ([EMAIL PROTECTED]) and I are currently trying to
> package « Reta Vortaro », an Esperanto dictionary
[snip]
> a single .dict.dz file ... has several .index files

Great!  I think that we can handle it all by modifying dictdconfig a bit.

dictdconfig is driven by index files -- given <name>.index, it
currently looks for a database called <name>.dict.dz or <name>.dict.

I propose that given an index file <name>.<ext>.index, and failing to
find a database called <name>.<ext>.dict.dz or <name>.<ext>.dict, it
looks for <name>.dict.dz or <name>.dict.  Finding one of the latter
databases, it adds a "name @00-database-short-<ext>" directive.  So,
given the files:

  revo.cs.index
  revo.de.index
  revo.dict.dz

it will generate the following database specifications:

  database revo.cs {
    data  /usr/share/dictd/revo.dict.dz
    index /usr/share/dictd/revo.cs.index
    name @00-database-short-cs
  }
  database revo.de {
    data  /usr/share/dictd/revo.dict.dz
    index /usr/share/dictd/revo.de.index
    name @00-database-short-de
  }

You will need to add the desired database names to the database as
definitions for 00-database-short-cs and 00-database-short-de.

Does that work for you?


Here is a diff of an experimental version of dictdconfig that
implements the above behavior.  If this satisfies your needs I will
include something like it in a new unstable release.  How soon do you
hope to upload?

Kirk

$ md5sum dictdconfig
9a26ea71b7fc9b92be8f927a8dfd5a45  dictdconfig
$ diff -u dictdconfig_1.9.15-1 dictdconfig
------------------------------ 8< ------------------------------
--- dictdconfig_1.9.15-1        2005-09-06 22:35:44.000000000 -0400
+++ dictdconfig 2005-09-07 00:21:03.000000000 -0400
@@ -166,12 +166,13 @@
 exit 0;
 
 sub AddEntry {
-    my ( $name, $datafile, $indexfile, $suffixfile, $wordfile ) = @_;
+    my ( $name, $datafile, $indexfile, $suffixfile, $wordfile, $short ) = @_;
     $output .= "database $name {\n" .
                "  data  $datafile\n" .
                "  index $indexfile\n" .
                ( $suffixfile ? "  index_suffix $suffixfile\n" : "" ) .
                ( $wordfile ? "  index_word $wordfile\n" : "" ) .
+               ( $short ? "  name $short\n" : "" ) .
                "}\n";
     ++$db_entered{ $name };
 }
@@ -179,6 +180,7 @@
 sub AliasName {
     my ( $name ) = @_;
     if ( -x $alias_script ) { $name = `echo $name | $alias_script` }
+    chomp $name;
     return $name;
 }
 
@@ -189,19 +191,26 @@
     my $indexfile;
     my $suffixfile;
     my $wordfile;
+    my $short;
     if ( $base_name =~ m#.*/(.*)# ) { $name = $1 }
     else { $name = $base_name }
-    $name = AliasName( $name );
     $base_name = "$db_dir/$base_name" unless $base_name =~ m#^/#;
     $datafile = "$base_name.dict.dz";
     $datafile =~ s/\.dz$// unless -f $datafile;
+    if (! -f $datafile && $name =~ /^.+\.(\w+)$/) {
+        $short = '@00-database-short-' . $1;
+        $datafile =~ s/\.\w+\.dict$/.dict.dz/;
+        $datafile =~ s/\.dz$// unless -f $datafile;
+    }
     $indexfile = "$base_name.index";
     $suffixfile = "$base_name.suffix";
     $wordfile = "$base_name.word";
+    $name = AliasName( $name );
     if ( ! $db_entered{ $name } && -f $datafile && -f $indexfile ) {
         undef $suffixfile unless -f $suffixfile;
         undef $wordfile unless -f $wordfile;
-        AddEntry( $name, $datafile, $indexfile, $suffixfile, $wordfile );
+        AddEntry( $name, $datafile, $indexfile,
+                  $suffixfile, $wordfile, $short );
     }
 }
------------------------------ >8 ------------------------------

Reply via email to