App-optex-pingu
view release on metacpan or search on metacpan
lib/App/optex/pingu.pm view on Meta::CPAN
package App::optex::pingu;
my $VERSION = '1.03';
use v5.24;
use warnings;
use utf8;
use Carp;
use open IO => 'utf8', ':std';
use Data::Dumper;
=encoding utf8
=head1 NAME
pingu - optex make-everything-pingu filter
=head1 VERSION
Version 1.03
=head1 SYNOPSIS
B<optex> -Mpingu [ options -- ] I<command>
=head1 DESCRIPTION
This B<optex> module is greatly inspired by L<pingu(1)> command and
make every command pingu not only L<ping(1)>. As for original
command, see L</SEE ALSO> section. All honor for this idea should go
to the original author.
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu4-light.png">
=end html
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu4-dark.png">
=end html
This module is a quite good example to demonstrate L<optex(1)> command
features.
=head1 OPTION
=over 7
=item B<-->[B<no->]B<pingu>
Produce images. Enabled by default.
=item B<--image>=I<file>
Set image file. File is searched at current directory and module
directory. Standard B<pingu> image is stored as F<pingu.asc2>. If
string C<pingu> is specified, module search the file in the following
order.
./pingu
./pingu.asc4
./pingu.asc2
./pingu.asc
module-dir/pingu
module-dir/pingu.asc4
module-dir/pingu.asc2
module-dir/pingu.asc
=begin comment
=item B<--char>=I<c>
Specify replacement character. Default is Unicode C<FULL BLOCK>
(U+2588: â).
=end comment
=item B<--interval>=I<sec>
Specifies the interval time in seconds between outputting each line.
Default is 0.1 seconds.
=back
=head1 IMAGE FILE FORMAT
=over 4
=item ASCII (C<.asc>)
Each [C<RGBCMYWKrgbcmywk>] character is converted to specified letter
with color which the character itself describe. Upper-case character
represent normal ANSI color and lower-case means high-intensity color.
R r Red
G g Green
B b Blue
C c Cyan
M m Magenta
Y y Yellow
K k Black
W w White
Line start with C<#> is treated as a comment.
C<pingu.asc>:
... . ... .. .. .........
... .... .. .. ... ..... .. ..
... ....... ... ... . ..... kkkkkkk
..... ........ .kkkkkkkkkkkkkkk..... ... kkkkkkkkkk. .
.... ........kkkkkkkkkkkkkkkkkkkkk. ... kkkkkkkkkkk
....... kkwwwwkkkkkkkkkkkkkkkk.... kkkkkkkkkkkk
. . .... kkwwkkwwkkkkkkkkkkwwwwkk... kkkkkkkkkkk
.. ....kkkkwwwwkkrrrrrrkkwwkkwwk.. .kkkkkkkkkkk
. kkkkkkkkrrrrrrrrrrkwwwwkk. .kkkkkkkkkk
.... .kkkkkkkkrrrrrrrrkkkkkkkk. kkkkkkkk
..... . kkkkkkkkkkkkkkkkkkkk. kkkkkkk.
...... .. . kkkkkkkkkkkkkkkkkk . . .kkkkkkk
...... kkkkkkkkkkkkkkkkkkkkk . .kkkkkkk
...... .kkkkkkkkkkkkkkkkkkyywwkkkkk .. kkkkkkk
... . kkkkkkkkkkkkkkkkywwwwwwwwwkkkkkkkkkkkkkk.
kkkkkkkkkkkkkkkkywwwwwwwwwwwwwkkkkkkkkk .
kkkkkkkkkkkkkkkywwwwwwwwwwwwwwwwkk .
kkkkkkkkkkkkkkkywwwwwwwwwwwwwwwwwww ........
.kkkkkkkkkkkkkkkkywwwwwwwwwwwwwwwwwwww .........
.kkkkkkkkkkkkkkkkywwwwwwwwwwwwwwwwwwwwww .... . .
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu-light.png">
=end html
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu-dark.png">
=end html
=item ASCII2 (C<.asc2>)
Each pixel is represented by two blocks, one in the upper half and one
in the lower half, with each color represented by two lines of data.
C<pingu.asc2>:
... ....... ... ... . ..... kkkkk
... ....... kkkkkkk ... . ..... kkkkkkk
..... ........ . kkkkkkkkkkkkk ..... ... kkkkkkkkk. .
..... ........ kkkkkkkkkkkkkkkkk.... ... kkkkkkkkkk. .
.... ........ kkkkkkkkkkkkkkkkkkk . ... kkkkkkkkkkkk
.... ........kkkkkkkkkkkkkkkkkkkkk. ... kkkkkkkkkkkk
....... kkkwwkkkkkkkkkkkkkkkkk.... kkkkkkkkkkkkk
.......kkkwwwwkkkkkkkkkkkkkkkk.... kkkkkkkkkkkk
. . .... kkwwKKwwkkkkkkkkkkkwwkkk...kkkkkkkkkkkkk
. . ....kkkwwKKwwkkkkkkkkkkwwwwkk...kkkkkkkkkkkkk
.. ....kkkkwwwwkkkkkkkkkkwwKKwwkk. .kkkkkkkkkkkk
.. ....kkkkkwwkkkkrrrrkkkwwKKwwkk. .kkkkkkkkkkk
. kkkkkkkkkrrrrrrrrkkwwwwkkk .kkkkkkkkkk
. kkkkkkkrrrrrrrrrrkkwwkkkk . kkkkkkkkk
.... .kkkkkkkrrrrrrrrrrkkkkkkk. kkkkkkkk
.... . kkkkkkkrrrrrrrrkkkkkkkk. kkkkkkkk
..... . kkkkkkkkrrrrkkkkkkkkk. kkkkkkk.
..... . kkkkkkkkkkkkkkkkkkkk. kkkkkkk.
...... .. . kkkkkkkkkkkkkkkkkk. . .kkkkkkk
...... .. . kkkkkkkkkkkkkkkkk . . .kkkkkk
...... kkkkkkkkkkkkkkkkkkkk . .kkkkkkk
...... kkkkkkkkkkkkkkkkkkkkkkk . .kkkkkkk
...... . kkkkkkkkkkkkkkkkkyyykkkkk .. kkkkkkk
...... .kkkkkkkkkkkkkkkkyyyWWWWkkkk .. kkkkkkkk
... . kkkkkkkkkkkkkkkkyyWWWWWWWkkkkk kkkkkkkk.
... .kkkkkkkkkkkkkkkkyyWWWWWWWWWkkkkkkkkkkkkk .
kkkkkkkkkkkkkkkkyyWWWWWWWWWWWkkkkkkkkkk .
kkkkkkkkkkkkkkkyyWWWWWWWWWWWWWkkkkkkkk .
kkkkkkkkkkkkkkkyyWWWWWWWWWWWWWWWkkkkk .
kkkkkkkkkkkkkkkkyWWWWWWWWWWWWWWWWWkk .
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu2-light.png">
=end html
=begin html
<p><img width="750" src="https://raw.githubusercontent.com/kaz-utashiro/optex-pingu/refs/heads/main/images/pingu2-dark.png">
=end html
=item ASCII4 (C<.asc4>)
Each pixel is made by four blocks, with each color represented by 2x2
characters.
C<pingu.asc4>:
............ kkkkkkkkkkkkkk ...... .. .......... k
............ .. kkkkkkkkkkkkkkkkkkkkkkkkkk .......... ...... kkkk
............ kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk........ ...... kkkkkk
.......... kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. ...... kkkkkkkk
..........kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk.. ...... kkkkkkkkk
........ kkkkkkwwwwwwkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk........ kkkkkkkkkk
........kkkkkwwwwwwwwwwkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk....... kkkkkkkkkkk
...... kkkkkwwwwKKKKwwwwkkkkkkkkkkkkkkkkkkkkkwwwwwwkkkkk......kkkkkkkkkkkk
......kkkkkkwwwwKKKKwwwwkkkkkkkkkkkkkkkkkkkwwwwwwwwwwkkkk.....kkkkkkkkkkkk
......kkkkkkkwwwwwwwwwwkkkkkkkkkkkkkkkkkkkwwwwKKKKwwwwkkk .. .kkkkkkkkkkk
......kkkkkkkkkwwwwwwkkkkkkkrrrrrrrrkkkkkkwwwwKKKKwwwwkkkk.. ..kkkkkkkkkk
kkkkkkkkkkkkkkkkkrrrrrrrrrrrrrrrrkkkwwwwwwwwwwkkkkk ..kkkkkkkk
kkkkkkkkkkkkkkkrrrrrrrrrrrrrrrrrrrrkkkwwwwwwkkkkkkk .. kkkkkk
..kkkkkkkkkkkkkkrrrrrrrrrrrrrrrrrrrrkkkkkkkkkkkkkkk. kkkkk
.. kkkkkkkkkkkkkkrrrrrrrrrrrrrrrrkkkkkkkkkkkkkkkk.. kkkk
.. kkkkkkkkkkkkkkkkrrrrrrrrkkkkkkkkkkkkkkkkkkk. kkk
.. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. kk
.... .. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. .. ..kk
.... .. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. .. .kkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. .. kkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk .. ..kkkk
.. kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkyyyyyykkkkkkkkkk .... kkkkk
..kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkyyyyyyWWWWWWWWkkkkkkkkk .... kkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkyyyyWWWWWWWWWWWWWWkkkkkkkkkk kkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkyyyyWWWWWWWWWWWWWWWWWWkkkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkkkyyyyWWWWWWWWWWWWWWWWWWWWWWkkkkkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkkyyyyWWWWWWWWWWWWWWWWWWWWWWWWWWkkkkkkkkkkkkkkkk
kkkkkkkkkkkkkkkkkkkkkkkkkyyyWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWkkkkkkkkkkk ..
kkkkkkkkkkkkkkkkkkkkkkkkyyyWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWkkkkkk ..
kkkkkkkkkkkkkkkkkkkkkkkyyyWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWkkk ........
=back
Coloring is done by L<Term::ANSIColor::Concise> module. See its
document for detail.
=head1 INSTALL
Use L<cpanminus(1)> command:
cpanm App::optex::pingu
=head1 PINGU ALIAS
You can set shell alias B<pingu> to call L<ping(1)> command through
B<optex>.
alias pingu='optex -Mpingu --pingu ping'
However, there is more sophisticated way to use B<optex> alias
( run in 2.952 seconds using v1.01-cache-2.11-cpan-788537b7465 )