5 # Normalize the .xbel file for cvs(1)/diff(1) etc.
6 # Removes any variable data from the file.
7 # Reencodes the file to utf-8.
14 use File::Temp qw(tempfile);
18 # No &Getopt::Long::GetOptions as we need to distinguish '-i' and '-iext'.
20 last if $ARGV[0]!~/^-/;
22 if ($_ eq "-h" || $_ eq "--help") {
26 Syntax: $0 [-i[<extension>]] [<file.xbel>]
28 -i[<extension>] edit the file in place (makes backup if extension supplied)
39 die "Invalid argument: $_\n";
41 die "Too many files\n" if 1<@ARGV;
43 my $twig=XML::Twig->new(
44 "pretty_print"=>"indented",
45 "output_encoding"=>"utf-8",
53 "metadata"=>sub { $_->delete() if !$_->has_children(); },
54 "info" =>sub { $_->delete() if !$_->has_children(); },
55 "folder"=>sub { $_->del_att("folded"); },
56 "xbel" =>sub { $_->del_att("folded"); },
60 if (!($filename=$ARGV[0])) {
61 $twig->parse(\*STDIN);
65 $twig->parsefile($filename);
68 if (!defined $opt_replace) {
72 (undef(),$tmpname)=tempfile("DIR"=>".");
73 } elsif ($opt_replace=~/[*]/) {
74 ($tmpname=$opt_replace)=~s/[*]/$filename/g;
76 $tmpname=$filename.$opt_replace;
78 rename($filename,$tmpname) or die "Error renaming \"$filename\" to \"$tmpname\": $!";
79 open $dstfh,">",$filename or die "Error opening target file \"$filename\": $!";
82 if (defined $opt_replace) {
83 close $dstfh or die "Error closing target file \"$filename\": $!";
85 unlink $tmpname or die "Error deleting temporary file \"$tmpname\": $!";