]> the.earth.li Git - htag.git/blob - plugins/22reformat
Change to debhelper compat level 10
[htag.git] / plugins / 22reformat
1 #!/usr/bin/perl -w
2
3 # Copyright (C) 2000-2003 Simon Huggins
4 # reformats longer lengths after the substitutions have taken place
5
6 # This program is free software; you can redistribute it and/or modify it
7 # under the terms of the GNU General Public License as published by the Free
8 # Software Foundation; either version 2 of the License, or (at your option)
9 # any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
13 # or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14 # for more details.
15 #
16 # You should have received a copy of the GNU General Public License along
17 # with this program; if not, write to the Free Software Foundation, Inc., 59
18 # Temple Place, Suite 330, Boston, MA 02111-1307  USA
19
20 use strict;
21 use vars qw($nomod);
22
23 BEGIN {
24         unless (eval "use Text::Balanced qw(gen_extract_tagged);1;") {
25                 print STDERR "Text::Balanced not available, reformat plugin will not work\n";
26                 $nomod=1;
27         }
28 }
29 return if $nomod;
30
31 sub remove_space($) {
32         my $text=shift;
33
34 # Remove whitespace at the end of lines but not newlines themselves.
35 # And don't remove the space if it comes directly after a -- which is
36 # anchored at the beginning of a line.
37
38         $text =~ s/(?<!^--)[    ]*$//mg;
39
40 # Remove any newlines from the very end of the string.
41         $text =~ s/\n*$//;
42         return $text;
43 }
44
45 sub reformat ($) {
46         my $text = shift;
47         my ($ext,$end,$beg,$otag,$ctag,$stuff);
48         my $process = gen_extract_tagged('<(?:CENTER|RIGHT|LEFT)\d+>',
49                         undef,
50                         '(?s).*(?=<(?:CENTER|RIGHT|LEFT)\d+>)',
51                         {reject => ['<(?:CENTER|RIGHT|LEFT)\d+>']} );
52         while (1) {
53                 ($stuff, $end, $beg, $otag, $ext, $ctag) = &$process($text);
54                 if (not defined $stuff) {
55                         if ($text =~ /<(?:CENTER|RIGHT|LEFT)\d+>/) {
56                                 nicedie($@->{'error'});
57                         }
58                 }
59                 last if !$stuff;
60
61                 my $size = $otag;
62                 $size =~ s/<(?:CENTER|RIGHT|LEFT)//;
63                 $size =~ s/>//;
64
65                 my $align = $otag;
66                 $align =~ s/^.(.).*$/$1/;
67
68                 my $c = chunksizealign($ext, $size, $align);
69
70                 $stuff=quotemeta($stuff);
71                 $text =~ s/$stuff/$c/;
72         }
73         return $text;
74 }
75
76 my ($tag,$sig,$newsig);
77 open(SIG, "<$cfg{'tmpsigfile'}")
78         or htagdie "$0: Could not open $cfg{'tmpsigfile'}: $!\n";
79 while(<SIG>) {
80         $sig .= $_;
81 }
82 close(SIG);
83 if (defined $sig) {
84         $sig = reformat($sig);
85         $sig = remove_space($sig);
86         if (defined $sig) {
87                 open(SIG, ">$cfg{'tmpsigfile'}")
88                         or htagdie
89                         "$0: Could not open $cfg{'tmpsigfile'}: $!\n";
90                 print SIG $sig;
91                 close(SIG);
92                 return;
93         } else {
94                 return(10);
95         }
96 }