Печать встроенного модуля Pod в виде форматированного текста с escape-символами termcap

Я пытаюсь вывести встроенный Pod в виде текста ANSI на терминал. В Perl 5 я могу использовать Pod::Text::Termcap:

use strict;
use warnings;
use Pod::Text::Termcap;

my $str = do {local $/; <DATA>};
my $parser = Pod::Text::Termcap->new();
$parser->parse_string_document( $str, \*STDERR );

__DATA__

=head1 SYNOPSIS

my_test_command I<filename> [OPTIONS]

=head1 ARGUMENTS

=over 4

=item I<filename>

File name to test

=back

=head1 OPTIONS

=over 4

=item B<--help>

Prints help

=back

=head1 DESCRIPTION

A sample test command with embedded Pod

Вывод:

введите описание изображения здесь

Я пытался добиться того же в Perl 6:

use v6;

%*ENV<POD_TO_TEXT_ANSI> = 1;
my @lines;
for $=pod -> $pod-block {
    for $pod-block.contents -> $pod-item {
        use Pod::To::Text;
        push @lines, pod2text($pod-item);
    }
}
say @lines.join("\n\n");

=begin pod

=head1 SYNOPSIS

my_test_command I<filename> [OPTIONS]

=head1 ARGUMENTS

=item I<filename>

File name to test

=head1 OPTIONS

=item B<--help>

Prints help

=head1 DESCRIPTION

A sample test command with embedded Pod

=end pod

Вывод:

введите описание изображения здесь

Как видно, в выходных данных Perl 6 отсутствуют escape-последовательности ANSI termcap. Как мне получить в Perl 6 такие функции ANSI, как полужирный шрифт и подчеркнутый текст?


person Håkon Hægland    schedule 18.04.2019    source источник
comment
Я не уверен, что POD_TO_TEXT_ANSI применим (несмотря на его название) к Pod :: To :: Text. В документации говорится, что это применимо к p6doc, что действительно так. Мне пришлось бы проверить источник, чтобы узнать, делает ли он то, что вы хотите, но в принципе нет ничего, что говорит, что он делает.   -  person jjmerelo    schedule 18.04.2019
comment
Во-первых, вы можете сказать «pod2text» (= pod); результат будет такой же. Глядя на источник, кажется, что POD_TO_TEXT_ANSI влияет только на formatting_to_text (который использует colored из Terminal :: ANSIColor). Это требует кода. Но даже если я добавлю код, это не сработает. Дело в том, что он не работает и с perl6 --doc, то есть без цвета. Так что я боюсь, что ты здесь сам по себе ...   -  person jjmerelo    schedule 18.04.2019


Ответы (2)


Pod :: To :: Text принимает переменную окружения POD_TO_TEXT_ANSI, которая включает это. Однако установка этой переменной env внутри DOC phaser может быть слишком поздно, если выбранный модуль Pod::To загружается до того, как будет проанализирован код perl 6.

person timotimo    schedule 19.04.2019

По поводу вашего вопроса:

Как мне получить в Perl 6 такие функции ANSI, как полужирный шрифт и подчеркнутый текст?

Вы можете попробовать Terminal::ANSIColor, но вам нужно будет добавить escape-коды ANSI самостоятельно; он не будет работать автоматически на POD

person jjmerelo    schedule 18.04.2019