X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=reprap-play.git;a=blobdiff_plain;f=commitid.scad.pl;h=cfb31f849f85c005f6214d8527a120b4b8a52da8;hp=053bcc32f91fe6f7d5051cd26edfb4fed785df08;hb=0d888a41733926d881c0668f1f5075b19c4e2844;hpb=d9f979afb3faa0ba92f86d5c5221a59f0dd8a89f diff --git a/commitid.scad.pl b/commitid.scad.pl index 053bcc3..cfb31f8 100755 --- a/commitid.scad.pl +++ b/commitid.scad.pl @@ -34,6 +34,7 @@ $SIG{__WARN__} = sub { die @_; }; # $Commitid_scale if not set, we use 1.0 } together # $Commitid_depth if not set, we use xy pixel size from above / 2 # $Commitid_depth_scale if not set, we use 1.0 (multiplies depth above) +# $Commitid_max_best_scale if not set, we use 2.0 (max mult of xy in Best) # # For each form we have # @@ -65,6 +66,9 @@ $SIG{__WARN__} = sub { die @_; }; # eg if the count is 123456 # Small5 3456* # Small8 __123456 (where _ are spaces) +# the git objectid is included if it will fit +# unambiguously and usefully eg +# Small9 ab*123456 # # Small2S Small4S ... Small10S: # Small3T Small9T: @@ -80,9 +84,10 @@ $SIG{__WARN__} = sub { die @_; }; # eg if the commitid is abcdef0123... # Git5 abcd* -# Full4 Full6 ... Full10: +# Full4 Full6 ... Full20: # git-rev-list --first-parent --count HEAD # git-rev-parse HEAD +# (all on two lines) # eg # Full6 abcdef Full8 abcdef01 # 23456* _123456* @@ -247,6 +252,8 @@ our $do_git; # contains may chars 'c' (count) and/or 'o' (object) our $do_git_untracked = 1; our $argcounter; +our @forms; + sub rjustt ($$;$) { # right justify and truncate (ie, pad and truncate at left) # always includes prefix my ($sz, $whole, $prefix) = @_; @@ -266,7 +273,19 @@ sub ljustt ($$;$) { return sprintf "%-${sz}.${sz}s%s", $whole, $suffix; } -sub gentextmodule_q ($$$) { +sub genform ($@) { + my ($form, @lines) = @_; + gentextmodule($form, @lines); + my $f = { + Form => $form, + Chars => (length join '', @lines), + Lines => (scalar @lines), + Ambiguous => ($form =~ m/Full/ && !grep { m/\W/ } @lines), + }; + push @forms, $f; +} + +sub genform_q ($$$) { my ($form, $s, $lines) = @_; $gtm_demo_j++; my $l = length $s; @@ -274,14 +293,14 @@ sub gentextmodule_q ($$$) { my $e = $l/$lines; return if $e < 2; $gtm_demo_j--; - gentextmodule($form, $s =~ m/.{$e}/g); + genform($form, $s =~ m/.{$e}/g); } -sub gentextmodule_plusq ($$) { +sub genform_plusq ($$) { my ($form, $s) = @_; - gentextmodule($form, $s); - gentextmodule_q("${form}S", $s, 2); - gentextmodule_q("${form}T", $s, 3); + genform($form, $s); + genform_q("${form}S", $s, 2); + genform_q("${form}T", $s, 3); } our @gcmd; @@ -340,25 +359,94 @@ sub do_git () { foreach my $sz (2..10) { gentextmodule_demo_start_batch(); - gentextmodule_plusq("Small$sz", rjustt($sz, $git_count, $git_dirty)) - if defined $git_count; + if (defined($git_count)) { + my $smallstr = rjustt($sz, $git_count, $git_dirty); + if (defined($git_object) && $sz >= length($git_count) + 3) { + $smallstr = $git_object; + $smallstr .= ($git_dirty || ' '); + $smallstr .= $git_count; + $smallstr = rjustt($sz, $smallstr); + } + genform_plusq("Small$sz", $smallstr); + } - gentextmodule_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty)) + genform_plusq("Git$sz", ljustt($sz, $git_object, $git_dirty)) if defined $git_object; if (defined $git_count && defined $git_object) { - gentextmodule("Full$sz", - ljustt($sz, $git_object), - rjustt($sz, $git_count, $git_dirty)); + genform("Full".($sz*2), + ljustt($sz, $git_object), + rjustt($sz, $git_count, $git_dirty)); my $e = $sz; - gentextmodule("Full".($e*3)."T", - ljustt($e*2, $git_object, $git_dirty) - =~ m/.{$e}/g, - rjustt($e, $git_count)); + genform("Full".($e*3)."T", + ljustt($e*2, $git_object, $git_dirty) + =~ m/.{$e}/g, + rjustt($e, $git_count)); } } -} +} + +sub do_some_best ($$) { + my ($modname, $formre) = @_; + my $fullmodname = "Commitid_${modname}_2D"; + p "module $fullmodname(max_sz) {\n"; + p ' sc_max = $Commitid_max_best_scale ? $Commitid_max_best_scale : 2;'."\n"; + my @do; + foreach my $f ( + sort { + $b->{Chars} <=> $a->{Chars} or + $a->{Lines} <=> $b->{Chars} + } + grep { + $_->{Form} =~ m/$formre/ && + !$_->{Ambiguous} + } + @forms + ) { + my $form = $f->{Form}; + p " sz_$form = Commitid_${form}_sz();\n"; + foreach my $rot (qw(0 1)) { + my $id = "${form}_r${rot}"; + p " sc_$id = min(sc_max"; + foreach my $xy (qw(0 1)) { + p ",max_sz[$xy]/sz_$form","[",(($xy xor $rot)+0),"]"; + } + p ");\n"; + push @do, " if (sc_$id >= 1.0) {\n"; + push @do, " scale(sc_$id)\n"; + push @do, " rotate(90) translate([0,-sz_$form"."[1]])\n" if $rot; + push @do, " Commitid_${form}_2D();\n"; + push @do, " } else"; + } + } + push @do, <