App-vcardtidy
view release on metacpan or search on metacpan
bin/vcardtidy view on Meta::CPAN
}
# Fix for multiple categories
while ( $tidy =~ s/^(CATEGORIES:.*?)\\,/$1,/mg ) { }
if ( $opts->{input} eq '-' ) {
print $tidy;
}
else {
$file->spew( { binmode => ':raw:encoding(UTF-8)' }, $tidy )
unless $opts->{do_nothing};
}
}
package App::vcardtidy;
sub run_filters {
local $_ = shift;
foreach my $filter (@_) {
eval $filter;
die qq{filter "$filter" failed:\n$@} if $@;
}
$_;
}
__END__
=head1 NAME
vcardtidy - normalize the format of VCARD files
=head1 VERSION
1.0.2 (2022-10-10)
=head1 SYNOPSIS
usage: vcardtidy [FILES...] [OPTIONS...]
Synopsis:
tidy (normalize) VCARD contact files
Arguments:
FILES Str file to tidy (default is stdin)
Options:
--filter, -f PERL Perl filter(s) to run against $_ first
--help, -h print a Help message and exit
--no-rev, -R do not update REV value
--version, -V print version information and exit
=head1 DESCRIPTION
B<vcardtidy> formats VCARD files, using L<Text::vCard::Addressbook> to
normalize field order and capitalization.
By default B<vcardtidy> acts like a filter, reading from C<stdin> and
writing to C<stdout>.
Any C<FILES...> provided as arguments are tidied up in place B<without
backup>! Users are encouraged to use a revision control system (e.g.
Git) or have secure backups.
=head1 OPTIONS
=over
=item --filter, -f PERL
Before tidying, evaluate the C<PERL> string with C<$_> set to the input
text. The modified C<$_> value then input to
L<Text::vCard::Addressbook> for tidying.
Tools like sed(1), awk(1) and of course perl(1) are obviously natively
designed to modify text, in a better way. But C<--filter> ensures that
you still have a valid VCARD afterwards, allowing you to easily iterate
while you develop your change.
To add an additional or missing category for example:
$ vcardtidy \
-f '$_ .= "\nCATEGORIES:\n" unless m/^CATEGORIES:/m' \
-f 's/^(CATEGORIES:\S+)(\s+)$/$1,$2/m' \
-f 's/^(CATEGORIES:.*)(\s+)$/${1}NewCat$2/m'
=item --help, -h
Print the full usage message and exit.
=item --no-rev, -R
By default B<vcardtidy> sets a new "REV" timestamp. Use this flag to
prevent that.
=item --version, -V
Print the version and exit.
=back
=head1 SUPPORT
This tool is managed via github:
https://github.com/mlawren/vcardtidy
=head1 SEE ALSO
L<githook-perltidy>(1), L<Text::vCard::Addressbook>
=head1 AUTHOR
Mark Lawrence E<lt>nomad@null.netE<gt>
=head1 COPYRIGHT AND LICENSE
Copyright 2022 Mark Lawrence <nomad@null.net>
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 of the License, or (at your
option) any later version.
( run in 2.859 seconds using v1.01-cache-2.11-cpan-f52f0507bed )