tools: validate utf8 encoding in stdin/out
[sheet.git] / tools / mkwordlist
index 9076a09546bc6c80e5b267b915099b7de70731b3..78e36b6adb5d652e258ec1ad10a9df255d6da9e9 100755 (executable)
@@ -4,14 +4,23 @@ use warnings;
 
 BEGIN { push @INC, '.' }
 use Shiar_Sheet::DB;
-use open ':std' => ':utf8';
+use open ':std' => ':encoding(utf-8)';
 my $db = Shiar_Sheet::DB->connect;
 
 say 'use utf8;';
 
 use Data::Dump 'pp';
+my %rows;
 if (my $lang = shift @ARGV) {
-       say pp({ $db->select(word => "coalesce(ref, id), exportform(row(form,alt,lang,cat,ref,prio,source,thumb,wptitle,created,updated,CASE WHEN source IS NULL THEN ref ELSE id END,cover,grade,creator))", {lang => $lang})->map }) =~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger;
+       my %filter = (lang => $lang);
+       my $cols = "ref, array_to_string(form || alt, '/'), prio + coalesce(grade, 90) / 100::float, id, cat";
+       %rows = $db->select(_word_ref => $cols, \%filter)->map_arrays;
+       say pp \%rows
+               =~ s/\\x\{([0-9A-F]+)\}/chr hex $1/ger;
        exit;
 }
-say pp { $db->select(_cat_words => "coalesce(id::text, ''), forms")->map };
+else {
+       %rows = $db->select(_cat_words => "coalesce(id::text, ''), forms")->map;
+       $_ = [ map { [split /:/, $_, 3] } @{$_} ] for values %rows;
+       say pp \%rows;
+}