#!/usr/bin/env perl
# xwinfonts - Displays simplified font list for old X11 font system
# Revision: 060406

#---------------------------------------------------------------------
#                            module setup
#---------------------------------------------------------------------

require 5.6.1;
use strict;
use Carp;
use warnings;
                                # Trap warnings
$SIG {__WARN__} = sub { die @_; };

#---------------------------------------------------------------------
#                           basic constants
#---------------------------------------------------------------------

use constant ZERO  => 0;        # Zero
use constant ONE   => 1;        # One

use constant FALSE => 0;        # Boolean FALSE
use constant TRUE  => 1;        # Boolean TRUE

#---------------------------------------------------------------------
#                            main routine
#---------------------------------------------------------------------

sub Main
{
    my $list;
    my %list = ();

#---------------------------------------------------------------------
# Initial setup.

    $list = `xlsfonts 2>/dev/null`;
    $list = "" if !defined $list;

    my @Variations = qw
    (
        bold bolditalic demibold extralight italic medium regular
    );

    my $Variations = join '|', @Variations;

#---------------------------------------------------------------------
# Build simplified font list.

    for (split (/\s*\n\s*/, $list))
    {
        s@^\s+@@;
        s@\s+\z@@;
        s@^-+@@;
        s@-($Variations)-.*\z@@io;
        s@-normal-.*\z@@;
        s@-+\z@@;
        s@---.*\z@@;
        s@^misc-@@i;
        s@^(bitstream)-bitstream\b@$1@i;
        s@-\d+\z@@;
        s@^([a-z&]+)-@$1 @i;

        next unless length;
        $list {$_} = 1;
    }

#---------------------------------------------------------------------
# Print simplified font list.

    for (sort keys (%list))
    {
        print "$_\n";
    }

    undef;
}

#---------------------------------------------------------------------
#                            main program
#---------------------------------------------------------------------

&Main();                        # Call the main routine
exit ZERO;                      # Normal exit
