X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=bin%2Fbin%2Fdocstringer.pl;h=1b08be3e04dc9a642b96d4f6050ef68ff437a884;hb=HEAD;hp=95def27cae3354487d1cb366d393347306658d4c;hpb=80a027c326192db6a29e2307ea4c33e89a446372;p=dotfiles.git diff --git a/bin/bin/docstringer.pl b/bin/bin/docstringer.pl index 95def27..1b08be3 100755 --- a/bin/bin/docstringer.pl +++ b/bin/bin/docstringer.pl @@ -1,7 +1,7 @@ #!/usr/bin/env perl # Simple script for substitute placeholders in Texinfo files with # docstring values found in source code. -# Copyright (C) 2020 Sergey Matveev (stargrave@stargrave.org) +# Copyright (C) 2020-2024 Sergey Matveev (stargrave@stargrave.org) # # If you C source code contains: # @@ -23,10 +23,11 @@ my $verbose = 0; if ($ARGV[0] eq "-v") { $verbose = 1; shift @ARGV; -}; -my @srcDirs = split / /, $ARGV[0]; -my $docDir = $ARGV[1]; -my $docBuildDir = $ARGV[2]; +} +my $outDir = $ARGV[0]; +my @srcDirs = split /:/, $ARGV[1]; +my @docDirs = split /:/, $ARGV[2]; +my @exts = split / /, (defined $ENV{EXTS}) ? $ENV{EXTS} : "c h h.in"; my %docstrings; @@ -34,47 +35,52 @@ foreach my $srcDir (@srcDirs) { print "src: $srcDir\n" if $verbose; opendir(my $dir, $srcDir) or die "can not open $srcDir"; foreach my $fn (readdir $dir) { - next unless $fn =~ /\.[ch]$/; + next unless grep { $fn =~ /\.$_$/ } @exts; open(my $src, "<:encoding(UTF-8)", "$srcDir/$fn") or die "can not open $srcDir/$fn"; my $curEntry; - while(<$src>) { + while (<$src>) { chomp; if (not /^\/\//) { if (defined $curEntry) { undef $curEntry; - }; + } next; - }; + } s/^\/\/ ?//; if (/^TEXINFO: (.*)$/) { $curEntry = $1; $docstrings{$curEntry} = ""; print "\t$fn: $curEntry\n" if $verbose; next; - }; - ( $docstrings{$curEntry} .= "$_\n" ) if defined $curEntry; - }; + } + ($docstrings{$curEntry} .= "$_\n") if defined $curEntry; + } close $src; - }; + } closedir $dir; -}; +} -print "doc: $docDir\n" if $verbose; -opendir(my $dir, $docDir) or die "can not open $docDir"; -foreach my $fn (readdir $dir) { - next unless $fn =~ /\.texi$/; - open(my $src, "<:encoding(UTF-8)", "$docDir/$fn") or - die "can not open $docDir/$fn"; - open(my $dst, ">:encoding(UTF-8)", "$docBuildDir/$fn") or - die "can not open $docBuildDir/$fn"; - while(<$src>) { - ( print($dst $_) and next ) unless /^\s*\@DOCSTRING (.*)\@$/; - print "\t$fn: $1\n" if $verbose; - die "unable to find docstring: $1" unless defined $docstrings{$1}; - print $dst $docstrings{$1}; - }; - close $src; - close $dst; -}; -closedir $dir; +foreach my $docDir (@docDirs) { + print "doc: $docDir\n" if $verbose; + opendir(my $dir, $docDir) or die "can not open $docDir"; + ($docDir .= "/") unless $docDir =~ /\/$/; + ($docDir = "") if $docDir eq "./"; + foreach my $fn (readdir $dir) { + next unless $fn =~ /\.texi$/; + $fn = $docDir . $fn; + open(my $src, "<:encoding(UTF-8)", $fn) or die "can not open $fn"; + mkdir "$outDir/$docDir"; + open(my $dst, ">:encoding(UTF-8)", "$outDir/$fn") or + die "can not open $outDir/$fn"; + while (<$src>) { + (print($dst $_) and next) unless /^\s*\@DOCSTRING (.*)\@$/; + print "\t$fn: $1\n" if $verbose; + die "unable to find docstring: $1" unless defined $docstrings{$1}; + print $dst $docstrings{$1}; + } + close $src; + close $dst; + } + closedir $dir; +}