BBS-Universal

 view release on metacpan or  search on metacpan

lib/BBS/Universal/SysOp.pm  view on Meta::CPAN

        $new = '[% FAINT %][% ITALIC %] count     [% RESET %]';
        $text =~ s/ count     /$new/gs;

        $new = ' [% RED %][% ITALIC %]red[% RESET %],[% GREEN %][% ITALIC %]green[% RESET %],[% BLUE %][% ITALIC %]blue[% RESET %]';
        $text =~ s/ red,green,blue/$new/gs;

        $new = ' [% FAINT %][% ITALIC %]column[% RESET %],[% FAINT %][% ITALIC %]row[% RESET %] ';
        $text =~ s/ column,row /$new/gs;

        $new = ' [% FAINT %][% ITALIC %]color[% RESET %],[% FAINT %][% ITALIC %]column[% RESET %],[% FAINT %][% ITALIC %]row[% RESET %],[% FAINT %][% ITALIC %]width[% RESET %],[% FAINT %][% ITALIC %]height[% RESET %],[% FAINT %][% ITALIC %]type[% RES...
        $text =~ s/ color,column,row,width,height,type /$new/gs;
    }

    return $text;
} ## end sub _render_ansi_catalog

sub sysop_list_commands {
    my $self = shift;
    my $mode = shift;

    $self->{'debug'}->DEBUG(['Start SysOp List Commands']);

    my ($wsize, $hsize, $wpixels, $hpixels) = GetTerminalSize();
    my $size = ($hsize - ($self->{'CACHE'}->get('START_ROW') + $self->{'CACHE'}->get('ROW_ADJUST')));
    my $srow = $size - 5;

    my $text = '';

    if ($mode && $mode eq 'ASCII') {
        my @asctkn = (sort(keys %{ $self->{'ascii_meta'} }), 'HORIZONTAL RULE');
        my $asc    = 12;
        foreach my $cell (@asctkn) { $asc = max(length($cell), $asc); }
        my $table = Text::SimpleTable->new($asc, 25);
        $table->row('ASCII TOKENS', 'DESCRIPTION');
        $table->hr();
        while (scalar(@asctkn)) {
            my $ascii_tokens = shift(@asctkn);
            $table->row($ascii_tokens, $self->{'ascii_meta'}->{$ascii_tokens}->{'desc'});
        }
        $text = $self->center($table->twin('ORANGE')->draw(), $wsize);

    } elsif ($mode && $mode eq 'ANSI') {

        # Use refactored dedicated ANSI builder while preserving original output
        $text = _render_ansi_catalog($self, $wsize);

    } elsif ($mode && $mode eq 'ATASCII') {
        my @atatkn = (sort(keys %{ $self->{'atascii_meta'} }));

        $text  = '[% ORANGE %]╔' . '═' x 86 . '╗[% RESET %]' . "\n";
        $text .= "[% ORANGE %]║[% YELLOW  %]    ## ## ##          [% BRIGHT BLUE %]╔═══╗ ╒═╦═╕ ╔═══╗ ╔═══╗ ╔═══╕ ╒═╦═╕ ╒═╦═╕       [% YELLOW  %]    ## ## ##    [% ORANGE %]║[% ...
        $text .= "[% ORANGE %]║[% GREEN   %]    ## ## ##          [% BRIGHT BLUE %]║   ║   ║   ║   ║ ║   ╜ ║       ║     ║         [% GREEN   %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]║[% CYAN    %]    ## ## ##          [% BRIGHT BLUE %]╠═══╣   ║   ╠═══╣ ╚═══╗ ║       ║     ║         [% CYAN    %]    ## ## ##    [% ORANGE %]║[% RESET %]\n";
        $text .= "[% ORANGE %]â•‘[% BLUE    %]  ###  ##  ###        [% BRIGHT BLUE %]â•‘   â•‘   â•‘   â•‘   â•‘ â•“   â•‘ â•‘       â•‘     â•‘         [% BLUE    %]  ###  ##  ###  [% ORANGE %]â•‘[% RESET %]\n";
        $text .= "[% ORANGE %]║[% MAGENTA %] ###   ##   ###       [% BRIGHT BLUE %]╜   ╙   ╙   ╜   ╙ ╚═══╝ ╚═══╛ ╘═╩═╛ ╘═╩═╛       [% MAGENTA %] ###   ##   ### [% ORANGE %]║[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╦' . '═' x 39 . '╦' . '═' x 39 . '╣[% RESET %]' . "\n";
        $text .= "[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] ATASCII TOKENS                        [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                           [% ORANGE %]â•‘[% RESET %]\n";
        $text .= '[% ORANGE %]╠══════╬' . '═' x 39 . '╬' . '═' x 39 . '╣[% RESET %]' . "\n";

        foreach my $name (@atatkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'atascii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'atascii_meta'}->{$name}->{'desc'}, '[%...
        }
		$text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-37s %s %-37s %s', 'HORIZONTAL RULE', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule', '[% ORANGE %]â•‘[% RESET %]') . "\n";

        $text .= "[% ORANGE %]╚══════╩═══════════════════════════════════════╩═════════════════════════â...

    } elsif ($mode && $mode eq 'PETSCII') {
        # ─ ━ │ ┃ ┄ ┅ ┆ ┇ ┈ ┉ ┊ ┋ ┌ ┍ ┎ ┏ ┐ ┑ ┒ ┓ └ ┕ ┖ ┗ ┘ ┙ ┚ ┛ ├ ┝ ┞ ┟ ┠ ┡ ┢ ┣ ┤ ┥ ┦ ┧ ┨ ┩ ┪ ┫ ┬ ┭ ┮ ┯ ┰ ┱ ┲ ┳ ┴ ┵ ┶ ┷ ┸ ┹ ┺ ┻ ...
		# 🬀 🬁 🬂 🬃 🬄 🬅 🬆 🬇 🬈 🬉 🬊 🬋 🬌 🬍 🬎 🬏 🬐 🬑 🬒 🬓 🬔 🬕 🬖 🬗 🬘 🬙 🬚 🬛 🬜 🬝 🬞 🬟 🬠 🬡 🬢 🬣 🬤 🬥 🬦 🬧 🬨 🬩 🬪 🬫 🬬 🬭 🬮 🬯 🬰 ð...
		#  🭰 🭱 🭲 🭳 🭴 🭵 🭶 🭷 🭸 🭹 🭺 🭻 🭼 🭽 🭾 🭿 🮀 🮁 🮂 🮃 🮄 🮅 🮆 🮇 🮈 🮉 🮊 🮋 🮌 🮍 🮎 🮏 🮐 🮑 🮒 🮔 🮕 🮖 🮗 🮘 🮙 🮚 🮛 🮜 🮝 🮞 🮟 🮠 🮡 ...

        my @pettkn = sort(keys %{ $self->{'petscii_meta'} });

        $text  = '[% ORANGE %]╔' . '═' x 108 . '╗[% RESET %]' . "\n";
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %] .o88b. [% RESET                                           %][% BRIGHT WHITE %]                          8""""8 8"""" ""8"" 8""""8 8""""8 8  8                        [% BLUE %] .o88b. [% RESET %]...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]d8P  Y8 [% RESET                                           %][% BRIGHT WHITE %]                          8    8 8       8   8      8    " 8  8                        [% BLUE %]d8P  Y8 [% RESET %]...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8P     🮅🮅🮅🭚[% RESET                                           %][% BRIGHT WHITE %]                       8eeee8 8eeee   8e  8eeeee 8e     8e 8e                       [% BLUE %]8P     ...
        $text .= '[% ORANGE %]║[% RESET %] [% BLUE %]8b     [% RED %][% REVERSE %]🮂🮂🮂[% RESET %][% RED %]🬿[% RESET %][% BRIGHT WHITE %]                       88     88      88      88 88     88 88                       [% BLUE %]8b     ...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]Y8b  d8 [% RESET                                           %][% BRIGHT WHITE %]                          88     88      88  e   88 88   e 88 88                       [% BLUE %]Y8b  d8 [% RESET %]...
        $text .= '[% ORANGE %]â•‘[% RESET %] [% BLUE %]' . " `Y88P'" . '[% RESET                                 %][% BRIGHT WHITE %]                           88     88eee   88  8eee88 88eee8 88 88                       ' . "[% BLUE %] `Y88P'" . '[%...
        $text .= '[% ORANGE %]╠══════╦' . '═' x 50 . '╦' . '═' x 50 . '╣[% RESET %]' . "\n";
        $text .= '[% ORANGE %]â•‘[% BRIGHT YELLOW %] CHAR [% ORANGE %]â•‘[% BRIGHT YELLOW %] PETSCII TOKENS                                   [% ORANGE %]â•‘[% BRIGHT YELLOW %] DESCRIPTION                                      [% ORANGE %]â•‘[% RESET ...
        $text .= '[% ORANGE %]╠══════╬' . '═' x 50 . '╬' . '═' x 50 . '╣[% RESET %]' . "\n";

        foreach my $name (@pettkn) {
            $text .= '[% ORANGE %]â•‘[% RESET %]  ' . $self->{'petscii_meta'}->{$name}->{'unicode'} . '   [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', $name, '[% ORANGE %]â•‘[% RESET %]', $self->{'petscii_meta'}->{$name}->{'desc'}, '[%...
        }
        $text .= '[% ORANGE %]â•‘[% RESET %] ' . '[% HORIZONTAL BAR %]' x 4 . ' [% ORANGE %]â•‘[% RESET %] ' . sprintf('%-48s %s %-48s %s', 'HORIZONTAL RULE color', '[% ORANGE %]â•‘[% RESET %]', 'Horizontal rule in specified color', '[% ORANGE %]â•‘[...

        $text .= '[% ORANGE %]╚══════╩' . '═' x 50 . '╩' . '═' x 50 . '╝[% RESET %]' . "\n";

        $text =~ s/│ (WHITE)/│ \[\% BRIGHT WHITE \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (YELLOW)/│ \[\% YELLOW \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (CYAN)/│ \[\% CYAN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (GREEN)/│ \[\% GREEN \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (PINK)/│ \[\% PINK \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (BLUE)/│ \[\% BLUE \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (RED)/│ \[\% RED \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (PURPLE)/│ \[\% COLOR 127 \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (DARK PURPLE)/│ \[\% COLOR 53 \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (GRAY)/│ \[\% GRAY 9 \%\]$1\[\% RESET \%\]/g;
        $text =~ s/│ (BROWN)/│ \[\% COLOR 94 \%\]$1\[\% RESET \%\]/g;

    } elsif ($mode && $mode eq 'USER') {
        my @usr = (sort(keys %{ $self->{'COMMANDS'} }));
        my @tkn = (sort(keys %{ $self->{'TOKENS'} }, 'JUSTIFIED text ENDJUSTIFIED', 'WRAP text ENDWRAP'));
        my $y   = 1;
        my $z   = 1;
        foreach my $cell (@usr) { $y = max(length($cell), $y); }
        foreach my $cell (@tkn) { $z = max(length($cell), $z); }
        my $table = Text::SimpleTable->new($y, $z);
        $table->row('USER MENU COMMANDS', 'USER TOKENS');
        $table->hr();
        my ($user_names, $token_names);
        my $count = 0;

        while (scalar(@usr) || scalar(@tkn)) {
            $user_names  = scalar(@usr) ? shift(@usr) : ' ';
            $token_names = scalar(@tkn) ? shift(@tkn) : ' ';
            $table->row($user_names, $token_names);
            $count++;
            if ($count > $srow) {
                $count = 0;
                $table->hr();
                $table->row('USER MENU COMMANDS', 'USER TOKENS');
                $table->hr();
            } ## end if ($count > $srow)
        } ## end while (scalar(@usr) || scalar...)
        $text = $self->center($table->twin('ORANGE')->draw(), $wsize);
        foreach my $name (qw(color text)) {
            my $ch = '[% ITALIC %][% FAINT %]' . $name . '[% RESET %]';
            $text =~ s/$name/$ch/gs;
        }

    } elsif ($mode && $mode eq 'SYSOP') {
        my @sys  = (sort(keys %{$main::SYSOP_COMMANDS}));
        my @stkn = (sort(keys %{ $self->{'sysop_tokens'} }, 'JUSTIFIED text ENDJUSTIFIED', 'WRAP text ENDWRAP'));
        my $x    = 1;
        my $xt   = 1;
        foreach my $cell (@sys)  { $x  = max(length($cell), $x); }
        foreach my $cell (@stkn) { $xt = max(length($cell), $xt); }
        my $table = Text::SimpleTable->new($x, $xt);
        $table->row('SYSOP MENU COMMANDS', 'SYSOP TOKENS');
        $table->hr();
        my ($sysop_names, $sysop_tokens);
        my $count = 0;



( run in 0.548 second using v1.01-cache-2.11-cpan-cdf2f3d4e48 )