Re: [PATCH 2/24] Documentation: Add variable-substitution script

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Jul 26, 2010 at 21:17, Jakub Narebski <jnareb@xxxxxxxxx> wrote:

Well caught. Those were on me, here's the fixed up version (in my
branch, which Thomas can pull in to his):

#!/usr/bin/perl
use 5.006002;
use strict;
use warnings;
use Getopt::Long;

Getopt::Long::Configure qw/ pass_through /;

my $rc = GetOptions(
	"varlist=s" => \my $varlist,
	"input=s"	=> \my $input,
	"output=s"	=> \my $output,
);

if (!$rc or (!-r $varlist or !-r $input)) {
	print "$0 --varlist=<varlist> --input=<in> --output=<out>\n";
	exit 1;
}

my $vars = read_varlist($varlist);
substitute_variables($vars, $input, $output);
exit 0;

sub read_varlist {
	my ($file) = @_;

	open my $fh, "<", $file or die "Can't open $file: $!";
	my %vars;

	my ($v, $last_v);
	my $in_block = 0;
	while (<$fh>) {
		if (/^(\S+)::/) {
			$v = lc $1;
			$in_block = 0;
			push @{$vars{$v}}, $_;
		} elsif (/^$/ && !$in_block) {
			if (defined $last_v && !$#{$vars{$last_v}}) {
				$vars{$last_v} = $vars{$v};
			}
			$last_v = $v;
		} elsif (defined $v) {
			push @{$vars{$v}}, $_;
			$in_block = !$in_block if /^--$/;
		}
	}

	close $fh or die "Closing $file failed: $!";

	return \%vars
}

sub substitute_variables {
	my ($varlist, $in, $out) = @_;

	open my $infh, "<", $in or die "Can't open $in: $!";
	open my $outfh, ">", $out or die "Can't open $out: $!";

	while (<$infh>) {
		if (/^\@\@CONFIG\((\S+)\)\@\@$/) {
			my $v = lc $1;
			die "Key $v not documented" unless exists $varlist->{$v};
			print $outfh @{$varlist->{$v}};
			print $outfh "\n";
		} else {
			print $outfh $_;
		}
	}

	close $infh or die "Closing $in failed: $!";
	close $outfh or die "Closing $out failed: $!";

	return;
}
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]