Blame examples/generate-colors

Packit Service d987f3
#!/usr/bin/perl
Packit Service d987f3
#
Packit Service d987f3
# Generate 256-color test files.
Packit Service d987f3
#
Packit Service d987f3
# Takes one or more of six arguments: basic, bright, fg256 (foreground), bg256
Packit Service d987f3
# (background), grey, or ansi256.  Generates a test file for either basic ANSI
Packit Service d987f3
# colors or 256-color emulators, testing that region of colors.
Packit Service d987f3
#
Packit Service d987f3
# This script requires Term::ANSIColor 4.00 or later already be installed or
Packit Service d987f3
# that this script be run manually under Perl with flags pointing to where the
Packit Service d987f3
# module is.
Packit Service d987f3
#
Packit Service d987f3
# Copyright 2012 Kurt Starsinic <kstarsinic@gmail.com>
Packit Service d987f3
# Copyright 2012, 2014, 2016 Russ Allbery <rra@cpan.org>
Packit Service d987f3
#
Packit Service d987f3
# This program is free software; you may redistribute it and/or modify it
Packit Service d987f3
# under the same terms as Perl itself.
Packit Service d987f3
Packit Service d987f3
use 5.006;
Packit Service d987f3
use strict;
Packit Service d987f3
use warnings;
Packit Service d987f3
Packit Service d987f3
use Carp qw(croak);
Packit Service d987f3
use Term::ANSIColor 4.00 qw(color);
Packit Service d987f3
Packit Service d987f3
# Screen width for centering headings.
Packit Service d987f3
use constant SCREEN_WIDTH => 80;
Packit Service d987f3
Packit Service d987f3
# The basic attributes and eight colors.
Packit Service d987f3
use constant ATTRIBUTES => qw(bold dark italic underline blink concealed);
Packit Service d987f3
use constant COLORS     => qw(black red green yellow blue magenta cyan white);
Packit Service d987f3
Packit Service d987f3
# print and printf with error checking.  autodie unfortunately can't help us
Packit Service d987f3
# with these because they can't be prototyped and hence can't be overridden.
Packit Service d987f3
Packit Service d987f3
## no critic (Subroutines::RequireArgUnpacking)
Packit Service d987f3
sub print_checked  { print @_  or croak('print failed');  return }
Packit Service d987f3
sub printf_checked { printf @_ or croak('printf failed'); return }
Packit Service d987f3
## use critic
Packit Service d987f3
Packit Service d987f3
# The sample background or foreground colors for 256-color tests.
Packit Service d987f3
my @SAMPLES = qw(000 222 555);
Packit Service d987f3
Packit Service d987f3
# The list of all possible RGB values.
Packit Service d987f3
my @RGB;
Packit Service d987f3
for my $r (0 .. 5) {
Packit Service d987f3
    for my $g (0 .. 5) {
Packit Service d987f3
        push(@RGB, map { "$r$g$_" } 0 .. 5);
Packit Service d987f3
    }
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Center a text string with spaces.
Packit Service d987f3
#
Packit Service d987f3
# $text  - Text to center
Packit Service d987f3
# $width - Width in which to center the text
Packit Service d987f3
#
Packit Service d987f3
# Returns: Text centered within that width
Packit Service d987f3
sub center {
Packit Service d987f3
    my ($text, $width) = @_;
Packit Service d987f3
    my $padding  = $width - length($text);
Packit Service d987f3
    my $trailing = int($padding / 2);
Packit Service d987f3
    my $leading  = $padding - $trailing;
Packit Service d987f3
    return (q{ } x $leading) . $text . (q{ } x $trailing);
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that tries all the basic eight ANSI colors.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_basic_test {
Packit Service d987f3
    print_checked("Basic ANSI colors (eight-color, or dim)\n\n");
Packit Service d987f3
    for my $bg (COLORS) {
Packit Service d987f3
        printf_checked('%4s %-7s ', q{ }, $bg);
Packit Service d987f3
        for my $fg (COLORS) {
Packit Service d987f3
            print_checked(color($fg, "on_$bg"), center($fg, 8));
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
        printf_checked('%4s %-7s ', 'bold', $bg);
Packit Service d987f3
        for my $fg (COLORS) {
Packit Service d987f3
            print_checked(color($fg, 'bold', "on_$bg"), center($fg, 8));
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\nAttributes: ");
Packit Service d987f3
    for my $fg (ATTRIBUTES) {
Packit Service d987f3
        print_checked(center($fg, 10));
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\n", q{ } x 12);
Packit Service d987f3
    for my $fg (ATTRIBUTES) {
Packit Service d987f3
        print_checked(color($fg), center('testing', 10), color('reset'));
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\n\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that tries all the bright colors from the
Packit Service d987f3
# sixteen-color palette.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_bright_test {
Packit Service d987f3
    print_checked("Bright ANSI colors (sixteen-color)\n\n");
Packit Service d987f3
    for my $bg (COLORS) {
Packit Service d987f3
        printf_checked('%6s %-7s ', 'dim', $bg);
Packit Service d987f3
        for my $fg (COLORS) {
Packit Service d987f3
            my $escape = color("bright_$fg", "on_$bg");
Packit Service d987f3
            print_checked($escape, center($fg, 8));
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
        printf_checked('%6s %-7s ', 'bright', $bg);
Packit Service d987f3
        for my $fg (COLORS) {
Packit Service d987f3
            my $escape = color("bright_$fg", "on_bright_$bg");
Packit Service d987f3
            print_checked($escape, center($fg, 8));
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that tries all valid RGB foreground colors.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_fg256_test {
Packit Service d987f3
    print_checked("RGB000 - RGB555 from 256-color palette (foreground)\n");
Packit Service d987f3
    for my $bg (@SAMPLES) {
Packit Service d987f3
        for my $i (0 .. $#RGB) {
Packit Service d987f3
            if (($i % 18) == 0) {
Packit Service d987f3
                printf_checked("%s\nbg %03d %s",
Packit Service d987f3
                    color('reset'), $bg, color("on_rgb$bg"));
Packit Service d987f3
            }
Packit Service d987f3
            printf_checked('%s%03d ', color("rgb$RGB[$i]"), $RGB[$i]);
Packit Service d987f3
        }
Packit Service d987f3
    }
Packit Service d987f3
    print_checked(color('reset'), "\n\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that tries all valid RGB background colors.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_bg256_test {
Packit Service d987f3
    print_checked("RGB000 - RGB555 from 256-color palette (background)\n");
Packit Service d987f3
    for my $fg (@SAMPLES) {
Packit Service d987f3
        for my $i (0 .. $#RGB) {
Packit Service d987f3
            if (($i % 18) == 0) {
Packit Service d987f3
                printf_checked("%s\nfg %03d %s",
Packit Service d987f3
                    color('reset'), $fg, color("rgb$fg"));
Packit Service d987f3
            }
Packit Service d987f3
            printf_checked('%s%03d ', color("on_rgb$RGB[$i]"), $RGB[$i]);
Packit Service d987f3
        }
Packit Service d987f3
    }
Packit Service d987f3
    print_checked(color('reset'), "\n\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that shows all valid grey-scale colors.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_grey_test {
Packit Service d987f3
    print_checked("Grey0 - Grey23 from 256-color palette\n\n");
Packit Service d987f3
    for my $bg (0 .. 23) {
Packit Service d987f3
        printf_checked('%2d %s', $bg, color("on_grey$bg"));
Packit Service d987f3
        for my $fg (0 .. 23) {
Packit Service d987f3
            printf_checked('%s%d ', color("grey$fg"), $fg);
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Print out the test file that shows the 16 ANSI colors from the 256-color
Packit Service d987f3
# palette.
Packit Service d987f3
#
Packit Service d987f3
# Returns: undef
Packit Service d987f3
#  Throws: Text exception on I/O failure
Packit Service d987f3
sub print_ansi256_test {
Packit Service d987f3
    print_checked("ANSI colors 0 - 15 from 256-color palette\n\n");
Packit Service d987f3
    for my $bg (0 .. 15) {
Packit Service d987f3
        printf_checked('%2d %s', $bg, color("on_ansi$bg"));
Packit Service d987f3
        for my $fg (0 .. 15) {
Packit Service d987f3
            printf_checked('%s%d ', color("ansi$fg"), $fg);
Packit Service d987f3
        }
Packit Service d987f3
        print_checked(color('reset'), "\n");
Packit Service d987f3
    }
Packit Service d987f3
    print_checked("\n");
Packit Service d987f3
    return;
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
# Main routine.  Scan @ARGV for which test files to print out.
Packit Service d987f3
my %tests = (
Packit Service d987f3
    basic   => \&print_basic_test,
Packit Service d987f3
    bright  => \&print_bright_test,
Packit Service d987f3
    fg256   => \&print_fg256_test,
Packit Service d987f3
    bg256   => \&print_bg256_test,
Packit Service d987f3
    grey    => \&print_grey_test,
Packit Service d987f3
    ansi256 => \&print_ansi256_test,
Packit Service d987f3
);
Packit Service d987f3
for my $file (@ARGV) {
Packit Service d987f3
    if ($tests{$file}) {
Packit Service d987f3
        $tests{$file}->();
Packit Service d987f3
    } else {
Packit Service d987f3
        die "Unknown test file: $file\n";
Packit Service d987f3
    }
Packit Service d987f3
}
Packit Service d987f3
Packit Service d987f3
__END__
Packit Service d987f3
Packit Service d987f3
=for stopwords
Packit Service d987f3
fg256 bg256 RGB rgb000 rgb222 rgb555 ansi256 CPAN Starsinic Allbery grey
Packit Service d987f3
grey-scale
Packit Service d987f3
Packit Service d987f3
=head1 NAME
Packit Service d987f3
Packit Service d987f3
generate-colors - Generate color test patterns for ANSI terminal support
Packit Service d987f3
Packit Service d987f3
=head1 SYNOPSIS
Packit Service d987f3
Packit Service d987f3
B<generate-colors> I<type> [I<type> ...]
Packit Service d987f3
Packit Service d987f3
=head1 REQUIREMENTS
Packit Service d987f3
Packit Service d987f3
Perl 5.6 and Term::ANSIColor 4.00 or later.
Packit Service d987f3
Packit Service d987f3
=head1 DESCRIPTION
Packit Service d987f3
Packit Service d987f3
B<generate-colors> generates test and demonstration tables for ANSI color
Packit Service d987f3
and text attribute support for eight-color, sixteen-color, and 256-color
Packit Service d987f3
terminal emulators.  The I<type> command-line argument specifies a table
Packit Service d987f3
to print to standard output.  Multiple I<type> arguments can be specified,
Packit Service d987f3
and each of those tables will be printed in the order given.
Packit Service d987f3
Packit Service d987f3
The supported values of I<type> are:
Packit Service d987f3
Packit Service d987f3
=over 8
Packit Service d987f3
Packit Service d987f3
=item basic
Packit Service d987f3
Packit Service d987f3
The basic eight ANSI colors as both foreground and background, as well as
Packit Service d987f3
examples of bold for each color and a separate table of the non-color text
Packit Service d987f3
attributes supported by Term::ANSIColor.
Packit Service d987f3
Packit Service d987f3
=item bright
Packit Service d987f3
Packit Service d987f3
The "bright" ANSI colors from the sixteen-color palette (colors 8 through
Packit Service d987f3
15) on all possible color backgrounds (colors 0 through 15).
Packit Service d987f3
Packit Service d987f3
=item fg256
Packit Service d987f3
Packit Service d987f3
All of the 216 colors in the 256-color palette that are specified by three
Packit Service d987f3
RGB values (each from 0 to 5) as foreground colors, shown against three
Packit Service d987f3
possible backgrounds (rgb000, rgb222, and rgb555).
Packit Service d987f3
Packit Service d987f3
=item bg256
Packit Service d987f3
Packit Service d987f3
The same as C<fg256> except showing all of the background colors for three
Packit Service d987f3
different possible foreground colors (rgb000, rgb222, and rgb555).
Packit Service d987f3
Packit Service d987f3
=item grey
Packit Service d987f3
Packit Service d987f3
The 24 grey-scale colors in the 256-color palette, shown as both foreground
Packit Service d987f3
and background.
Packit Service d987f3
Packit Service d987f3
=item ansi256
Packit Service d987f3
Packit Service d987f3
The 256-color palette devotes the lowest 16 colors to duplicating the colors
Packit Service d987f3
from the sixteen-color palette.  This test table shows all sixteen as both
Packit Service d987f3
foreground and background colors, but using the 256-color escape sequence
Packit Service d987f3
format to specify them.  It's possible that this test will not work with
Packit Service d987f3
some emulators that support C<basic> and C<bright> if 256-color support is
Packit Service d987f3
not implemented.
Packit Service d987f3
Packit Service d987f3
=back
Packit Service d987f3
Packit Service d987f3
=head1 SEE ALSO
Packit Service d987f3
Packit Service d987f3
L<Term::ANSIColor>
Packit Service d987f3
Packit Service d987f3
This script is an example in the Term::ANSIColor distribution, available
Packit Service d987f3
from its web site at L<https://www.eyrie.org/~eagle/software/ansicolor/>
Packit Service d987f3
or from CPAN.
Packit Service d987f3
Packit Service d987f3
=head1 AUTHORS
Packit Service d987f3
Packit Service d987f3
Original script written by Kurt Starsinic.  It was restructured and updated
Packit Service d987f3
by Russ Allbery to add the C<basic> and C<bright> test tables.
Packit Service d987f3
Packit Service d987f3
=head1 COPYRIGHT AND LICENSE
Packit Service d987f3
Packit Service d987f3
Copyright 2012 Russ Allbery <rra@cpan.org>.  Copyright 2012 Kurt Starsinic
Packit Service d987f3
<kstarsinic@gmail.com>.  This program is free software; you may
Packit Service d987f3
redistribute it and/or modify it under the same terms as Perl itself.
Packit Service d987f3
Packit Service d987f3
=cut