# Update b4_copyright invocations or b4_copyright_years definitions to
# include the current year.
-# Copyright (C) 2009 Free Software Foundation, Inc.
-#
+# Copyright (C) 2009-2014 Free Software Foundation, Inc.
+
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
(?:
,\s*
(
- \[\s* (?:\d{4}(,\s*|-))* (\d{4}) \s*]
+ \[\s* (?:\d{4}(?:,\s*|-))* (\d{4}) \s*]
)
)?
\)
my $start = pos() - length ($1);
my $b4_copyright_line = $2;
my $year_lines = $3;
- my $sep = $4 ? $4 : "";
- my $final_year = $5;
+ my $final_year = $4;
$year_lines .= ')';
# If there was a second argument, it contains years, so update them.
if ($final_year != $this_year)
{
# Update the year.
- if ($sep eq '-' && $final_year + 1 == $this_year)
- {
- $year_lines =~ s/$final_year/$this_year/;
- }
- elsif ($sep ne '-' && $final_year + 1 == $this_year)
- {
- $year_lines =~ s/$final_year/$final_year-$this_year/;
- }
- else
- {
- $year_lines =~ s/$final_year/$final_year, $this_year/;
- }
+ $year_lines =~ s/$final_year/$final_year, $this_year/;
}
# Normalize all whitespace.
# Put spaces after commas.
$year_lines =~ s/, ?/, /g;
+ # Compress to intervals.
+ $year_lines =~
+ s/
+ (\d{4})
+ (?:
+ (,\ |-)
+ ((??{
+ if ($2 eq '-') { '\d{4}'; }
+ elsif (!$3) { $1 + 1; }
+ else { $3 + 1; }
+ }))
+ )+
+ /$1-$3/gx;
+
# Format within margin.
my $year_lines_new;
my $indent = index ($b4_copyright_line, '[');
while (/(\bb4_copyright\()/g)
{
- my $pos = pos ();
- pos () -= length ($1);
+ my $start = pos () - length ($1);
+ my $end = pos ();
my $re = $old_re;
+ pos () = $start;
$re =~ s/\#BEFORE/\\G/;
if (!/$re/x)
{
+ my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
print STDERR
- "$ARGV: warning: failed to update a b4_copyright before char"
- . " $pos\n";
+ "$ARGV:$line: warning: failed to update a b4_copyright\n";
}
- pos () = $pos;
+ pos () = $end;
}
-while (/\[b4_copyright_years]/g)
+while (/(\[b4_copyright_years])/g)
{
- my $pos = pos ();
+ my $start = pos () - length ($1);
+ my $end = pos ();
my $re = $old_re;
$re =~ s/\#AFTER/\\G/;
if (!/$re/x)
{
+ # The substr operation blows away pos (), so restoring pos ()
+ # at the end is necessary.
+ my $line = (substr ($_, 0, $start) =~ s/\n/\n/g) + 1;
print STDERR
- "$ARGV: warning: failed to update a b4_copyright_years before"
- . " char $pos\n";
+ "$ARGV:$line: warning: failed to update a"
+ . " b4_copyright_years\n";
}
- pos () = $pos;
+ pos () = $end;
}