1#!/usr/bin/perl 2 3use strict; 4use warnings; 5 6sub header { 7 my $file = shift; 8 open my $input, "<", $file or die "Couldn't open '$file':$!"; 9 my @file = <$input>; 10 close $file; 11 return toc(@file); 12} 13 14sub toc { 15 my @lines = @_; 16 for( @lines ) { 17 if( /^\s*$/s ) { $_ = qq{"\\n"\n}; next; } 18 if( /^\s*#/ ) { $_ = qq{"\\n"\n}; next; } 19 s/\\/\\\\/g; # double the number of \'s 20 s/"/\\"/g; 21 s/^\s*/"/; 22 s/\n/\\n"\n/; 23 } 24 return @lines; 25} 26 27for my $files ( 28 [ "hexchat.pm.h", # output file 29 "lib/HexChat.pm", # input files 30 "lib/Xchat.pm", 31 "lib/HexChat/Embed.pm", 32 "lib/HexChat/List/Network.pm", 33 "lib/HexChat/List/Network/Entry.pm", 34 "lib/HexChat/List/Network/AutoJoin.pm", 35 ], 36 [ "irc.pm.h", # output file 37 "lib/IRC.pm" # input file 38 ] 39) { 40 my ($output,@inputs) = @$files; 41 42 open my $header, ">", $output or die "Couldn't open '$output': $!"; 43 44 print $header qq["BEGIN {\\n"\n]; 45 for my $input ( @inputs ) { 46 (my $trimmed = $input) =~ s{^lib/}{}; 47 print $header qq["\$INC{'$trimmed'} = 'Compiled into the plugin.';\\n"\n]; 48 } 49 print $header qq["}\\n"\n]; 50 51 for my $input ( @inputs ) { 52 print $header qq["{\\n"\n]; 53 print $header qq{"#line 1 \\"$input\\"\\n"\n}; 54 print $header header( $input ); 55 print $header qq["}\\n"\n]; 56 } 57 close $header; 58} 59