parse-wormedit: open output file for format override
authorMischa Poslawsky <wormy@shiar.org>
Mon, 26 Oct 2020 21:57:51 +0000 (22:57 +0100)
committerMischa Poslawsky <wormy@shiar.org>
Mon, 26 Oct 2020 22:35:50 +0000 (23:35 +0100)
Respect given format, but omit image type if unspecified.

parse-wormedit

index aa220513657bfdaf49507b9311e97ea627334025..77bfc8e75b90c6991f2c50695803bb0d5478c557 100755 (executable)
@@ -52,24 +52,27 @@ else {
        die "Unrecognised file type\n";
 }
 
+my $format = $opt{format};  # override distinct from image fallback
 if ($opt{output}) {{
        # derive format from file extension
-       if ($opt{output} =~ /\.(yaml|json|txt)$/) {
-               $opt{format} //= $1
+       $format //= $1 if $opt{output} =~ /\.([^.]+)$/;
+
+       if ($format ~~ [qw{ yaml json txt }]) {
+               # redirect standard output to given file
+               open my $output, '>', $opt{output}
+                       or die "Cannot output to '$opt{output}': $!";
+               select $output;
        }
        else {
                # images are written directly to file
-               last;
        }
-
-       # redirect standard output to given file
-       open my $output, '>', $opt{output}
-               or die "Cannot output to '$opt{output}': $!";
-       select $output;
 }}
+else {
+       $format //= 'txt';
+}
 
 # output with user-preferred formatting
-given ($opt{format}) {
+given ($format) {
 when ('json') {
        require JSON;
        say JSON->new->encode($data);
@@ -166,13 +169,13 @@ default {
        my $img = Games::Wormy::Render->composite(
                map { $data->{levels}->[$_] } @request
        ) or die "empty result for levels\n";
-       if ($opt{format} ~~ 'pbm') {
+       if ($format ~~ 'pbm') {
                $img = $img->to_paletted({make_colors => 'mono'});
                $opt{format} = 'pnm';
        }
        $img->write(
                $opt{output} ? (file => $opt{output}) : (fh => \*STDOUT),
-               type => $opt{format} // 'pnm',
+               type => $opt{format},
        ) or die $img->errstr;
 }
 }