X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ian/git?a=blobdiff_plain;f=tests%2Ffilter%2Fextract-doctests;h=44a94b2a001825b61d515c4aae888c78f5186172;hb=b5855cf836b98041b44154aecc617b9c0a9b8436;hp=4357beeef07c7f08603398032331c2abe3a4a2c0;hpb=80ebf1020232f0aa081f18b3b5fc432bd81a5544;p=subdirmk.git diff --git a/tests/filter/extract-doctests b/tests/filter/extract-doctests index 4357bee..44a94b2 100755 --- a/tests/filter/extract-doctests +++ b/tests/filter/extract-doctests @@ -1,6 +1,9 @@ #!/usr/bin/perl -w -# -# script for extracting doctests from README +# subdirmk - script for extracting doctests from README +# Copyright 2019 Mark Wooding +# Copyright 2019 Ian Jackson +# SPDX-License-Identifier: LGPL-2.0-or-later +# There is NO WARRANTY. # # usage: # expand ) { next unless m{\=\>} or ($cent and m{ \.\. }); my $mapop = '=>'; # adhoc: special case NEWQUOTE here so we recognise things in changequote - if (s{^(\s*)(\&\S+|NEWQUOTE\S+|\$)\s+(\=\>|\.\.)\s+(\S+)\s+}{} || - s{^()(\&\:\w+(?: \S+)*)\s{2,}(\=\>)\s{2,}($withspcs)$}{} || - $cent && s{^()($withspcs)\s{2,}(\.\.)\s{2,}($withspcs)$}{}) { + if (s{^()(\&\:\w+(?: \S+)*)\s{2,}(\=\>)\s{2,}($withspcs)$}{} || + s{^(\s*)(\&$withspcs|NEWQUOTE\S+|\$)\s+(\=\>|\.\.)\s+($withspcs)\s+}{} || + $cent && s{^()($withspcs)\s{2,}(\.\.)\s{2,}($withspcs)$}{}) { # adhoc: expected indented iff in changequote part confess if length($1) xor $in_changequote; $mapop = $3; @@ -52,16 +55,13 @@ while (<>) { $e->{In} = $2; $e->{Out} = $4; if (# adhoc: `or ...' introduces the `at toplevel' expansion - s{^or (\S+)$}{}) { + s{^or ($withspcs)$}{}) { $e->{OutTop} = $1 eq 'nothing' ? '' : $1; } elsif (# parse: expect other wordish things to be comments m{^(?!or\b)\(?\w{2,} }) { - } elsif (# adhoc: slightly special case for $(eval $(call - m{^\$\{.*}) { - $e->{Out} .= ' '.$&; } elsif (m/^$/) { } else { - confess "unk rhs $_ ?"; + confess "unk rhs $_ (In=\"$e->{In}\" out=\"$e->{Out}\"?"; } $e->{CQ} = $in_changequote; # adhoc: rely on this specific section title @@ -144,7 +144,7 @@ sub writeout ($) { # adhoc: skip &:macro in already-doubling part return 0 if $e->{In} =~ m{^\&\:macro}; # adhoc: skip &${ ie eval in already-doubling part - return 0 if $e->{In} =~ m{^\&\$\{}; + return 0 if $e->{In} =~ m{^\&\{}; return 0 if $e->{CQ}; return $e->{DD} || !grep { # If there are two entries with the same In,