chiark / gitweb /
doctests: Improve entry description filter
[subdirmk.git] / tests / filter / extract-doctest
index 1bcd473..40cf4f5 100755 (executable)
@@ -56,8 +56,13 @@ while (<>) {
            $e->{OutTop} = $1 eq 'nothing' ? '' : $1;
        } elsif (# parse: expect other wordish things to be comments
                 m{^(?!or\b)\w{2,} }) {
+       } elsif (m/^$/) {
+       } else {
+           confess "unk rhs $_ ?";
        }
        $e->{CQ} = $in_changequote;
+       # adhoc: rely on this specific section title
+       $e->{DD} = $csection =~ m{^while dollar[- ]doubling}i;
     } else {
        confess "$_ ?";
     }
@@ -105,16 +110,16 @@ sub write_permode ($$$$$;$$) {
        $rubric =~ s/\&/AMP /g;
        $rubric =~ s/\$/DOLLAR /g;
        $rubric =~ s/NEWQUOTE/NEW_QUOTE /g;
-       my $f = $e->{In} =~ m/\n/
-               ? "\n# %s:\n%s\n\n"
-               : "%-30s: %s.\n";
+       my ($f,$prubric) = $rubric =~ m/^(.*)\n/
+               ? ("\n# %s:\n%s\n\n", $1)
+               : ("%-30s: %s .\n", $rubric);
        my $o;
        $o = $e->{OutTop} if $dir_prefix eq '';
        $o //= $e->{Out};
        $o =~ s{/sub/dir}{} if $dir_prefix eq '' && !defined $e->{OutTop};
        $o = $omap->($o, $e);
-       oi sprintf $f, $rubric, $e->{In};
-       oo sprintf $f, $rubric, $o;
+       oi sprintf $f, $prubric, $e->{In};
+       oo sprintf $f, $prubric, $o;
     }
     oi $end;
     oh "${senl}# ----- $what ends -----\n";
@@ -127,7 +132,26 @@ sub writeout ($) {
     oh "# doctest starts $dir_prefix\n";
     write_permode($dir_prefix,
                  '','','', 'normal',
-                sub { !$_[0]{CQ} } );
+                sub { !$_[0]{DD} && !$_[0]{CQ} } );
+    write_permode($dir_prefix,
+                 '&$+', '&$-', "\n",
+                 'dollar doubling',
+                 sub {
+                     my ($e) = @_;
+                     return 0 if $e->{CQ};
+                     return $e->{DD} || !grep {
+                         # If there are two entries with the same In,
+                         # use only the one from the `while dollar
+                         # doubling' section.  So entries there override
+                         # entries in the rest o the file.
+                         $_ ne $e && $_->{In} eq $e->{In}
+                     } @exp;
+                 },
+                 sub {
+                     $_=$_[0];
+                     s/\$/\$\$/g unless $_[1]{DD};
+                     $_;
+                 } );
     write_permode($dir_prefix,
                  "&:changequote NEWQUOTE\n",
                  "NEWQUOTE:changequote &\n",