chiark / gitweb /
commitid: introduce $polys local in parsefont() (nfc)
[reprap-play.git] / commitid.scad.pl
index 68bd4cebf441b09ad4c66edc9e09746e9e7229eb..e75143b46ca91b49697670d54a1ddbd2620d1cd8 100755 (executable)
 # starts abcdeffedbcaabcdef...  In the examples `_' shows where a
 # space would be printed.
 #
-#   Small2 Small3 ... Small10
+#   Small2 Small3 ... Small9 Small10 Small12 Small14 Small16
 #       A single line containing as much of the count will fit, eg:
 #            Small5    3456*
 #            Small8    _*123456
 #       will fit without makign the output ambiguous:
 #            Small9    ab*123456
 #
-#   Small2S Small4S ... Small10S
-#   Small3T Small9T
+#   Small2S Small4S ... Small16S
+#   Small3T Small9T Small12T
 #       Same as Small but split into two lines (S)
 #       or three lines (T).  Eg:
 #            Small4S    *4       Small6T   _*
 #                       56                 34
 #                                          56
-#   Git2 Git3 ... Git10
-#   Git4S Git6S ... Git10S
-#   Git6T Git9T
+#   Git2 Git3 ... Git9 Git10 Git12 Git14 Git16
+#   Git4S Git6S ... Git16S
+#   Git6T Git9T Git12T
 #       Just the commit object hash, in one, two (S) or three (T)
 #       lines.  E.g.:
 #            Git5    abcd*
 #   Full4 Full6 ... Full20:
 #       The commit object hash plus the commit count, on
 #       separate lines, eg:
-#            Full6    abcdef     Full8     abcdeffe
+#            Full12   abcdef     Full16    abcdeffe
 #                     *23456               _*123456
 #
 #   Full6T Full9T ... Full30T
@@ -261,8 +261,17 @@ use strict;
 
 $SIG{__WARN__} = sub { die @_; };
 
+our $debug=0;
+
+if (@ARGV && $ARGV[0] =~ m/^-(D+)$/) {
+    $debug = length $1;
+    shift @ARGV;
+}
+
 sub p { print @_ or die $!; }
 
+sub p_debug { print STDERR @_ if $debug; }
+
 p <<'END';
 // *** AUTOGENERATED - DO NOT EDIT *** //
 function Commitid_pixelsz() =
@@ -362,6 +371,8 @@ sub parsefont () {
        $cellmap{$1} = $_;
     }
     my %chrpolys;
+    # $chrs{$chr}[$poly] = $poly
+    # $poly->{E} = [ "012345012345", ... ]
     while (<DATA>) {
        next unless m/\S/;
        chomp;
@@ -388,7 +399,7 @@ sub parsefont () {
                        die unless $f;
                        $f =~ s/\b\d/ sprintf '%05d', $col*2000 + $&*1025 /ge;
                        $f =~ s/\d\b/ sprintf '%05d', $row*2000 + $&*1025 /ge;
-                       push @{ $chrpolys{$chr} }, [ split / /, $f ];
+                       push @{ $chrpolys{$chr} }, { E => [ split / /, $f ] };
                    } else {
                        die "$_ ?";
                    }
@@ -401,12 +412,13 @@ sub parsefont () {
     my $demo = '';
     my $democols = 6;
     foreach my $chr (sort keys %chrpolys) {
+       my $polys = $chrpolys{$chr};
        my $mod = chrmodname $chr;
        p "module $mod () {\n";
-       foreach my $poly (@{ $chrpolys{$chr} }) {
+       foreach my $poly (@$polys) {
            p " polygon([";
            my $delim = "";
-           foreach my $pt (@$poly) {
+           foreach my $pt (@{ $poly->{E} }) {
                p $delim;
                $pt =~ s{\d{5}}{$&,};
                $pt =~ s{\b\d}{$&.}g;
@@ -428,26 +440,35 @@ our $do_git_untracked = 1;
 our $argcounter;
 
 our @forms;
+our %included; # 0 = not at all; 1 = truncated; 2 = full
 
-sub rjustt ($$;$) { # right justify and truncate (ie, pad and truncate at left)
-                    # always includes prefix
-    my ($sz, $whole, $prefix) = @_;
+sub rjustt ($$$;$) {
+    # right justify and truncate (ie, pad and truncate at left)
+    # always includes prefix
+    # sets $included{$what}
+    my ($sz, $what, $whole, $prefix) = @_;
     $prefix //= '';
     my $lw = length $whole;
     my $spare = $sz - $lw - (length $prefix);
+    $included{$what}= 1 + ($spare > 0);
     return
        ($spare > 0 ? (' ' x $spare) : '').
        $prefix.
        substr($whole, ($spare < 0 ? -$spare : 0));
 }
 
-sub ljustt ($$;$) {
-    my ($sz, $whole, $suffix) = @_;
+sub ljustt ($$$;$) {
+    my ($sz, $what, $whole, $suffix) = @_;
     $suffix //= '';
     $sz -= length $suffix;
+    $included{$what} = 1 + ($sz >= length $whole);
     return sprintf "%-${sz}.${sz}s%s", $whole, $suffix;
 }
 
+sub genform_prep() {
+    $included{$_}=0 foreach qw(Objid Count);
+}
+
 sub genform ($@) {
     my ($form, @lines) = @_;
     gentextmodule($form, @lines);
@@ -456,6 +477,7 @@ sub genform ($@) {
        Chars => (length join '', @lines),
        Lines => (scalar @lines),
        Ambiguous => ($form =~ m/Full/ && !grep { m/\W/ } @lines),
+       Included => { %included },
     };
     push @forms, $f;
 }
@@ -533,33 +555,37 @@ sub do_git () {
     print STDERR join ' ', map { $_ // '?' }
        "-- commitid", $git_object, $git_dirty, $git_count, "--\n";
 
-    foreach my $sz (2..10) {
+    foreach my $sz (2..10, qw(12 14 16)) {
        gentextmodule_demo_start_batch();
 
        if (defined($git_count)) {
-           my $smallstr = rjustt($sz, $git_count, $git_dirty);
+           genform_prep();
+           my $smallstr = rjustt($sz, 'Count', $git_count, $git_dirty);
            my $forgitobj = $sz - length($git_count) - 1;
            if (defined($git_object) && $forgitobj >= 2) {
-               $smallstr = ljustt($forgitobj, $git_object).
+               $smallstr = ljustt($forgitobj, 'Objid', $git_object).
                    ($git_dirty || ' ').
                    $git_count;
            }
            genform_plusq("Small$sz", $smallstr);
        }
 
-       genform_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty))
+       genform_prep();
+       genform_plusq("Git$sz", ljustt($sz, 'Objid', $git_object, $git_dirty))
            if defined $git_object;
 
-       if (defined $git_count && defined $git_object) {
+       if (defined $git_count && defined $git_object && $sz<=10) {
+           genform_prep();
            genform("Full".($sz*2),
-                   ljustt($sz, $git_object),
-                   rjustt($sz, $git_count, $git_dirty));
+                   ljustt($sz, 'Objid', $git_object),
+                   rjustt($sz, 'Count', $git_count, $git_dirty));
 
+           genform_prep();
            my $e = $sz;
            genform("Full".($e*3)."T",
-                   ljustt($e*2, $git_object, $git_dirty)
+                   ljustt($e*2, 'Objid', $git_object, $git_dirty)
                    =~ m/.{$e}/g,
-                   rjustt($e, $git_count));
+                   rjustt($e, 'Count', $git_count));
        }
     }
 }
@@ -576,6 +602,7 @@ sub do_some_best ($$) {
     my @do;
     foreach my $f (
         sort {
+           $b->{Included}{$bestwhat} <=> $a->{Included}{$bestwhat} or
            $b->{Chars} <=> $a->{Chars} or
            $a->{Lines} <=> $b->{Chars}
         }