view release on metacpan or search on metacpan
0.010 2021-07-26 Released-By: PERLANCAR; Urgency: medium
- [doc] Add (generated) POD section to show the sample output of
(some of the) modules.
- Add description for Text::Table::Sprintf.
0.009 2021-02-20 Released-By: PERLANCAR; Urgency: medium
- Add features: column_width, per_column_width, row_height,
per_row_height, pad, vpad.
- Add entries: Text::Table::Any, Text::Table::More,
Text::Table::Manifold, Text::UnicodeBox::Table.
- [doc] Mention Acme::CPANModules::HTMLTable.
- Add datasets that contain color & wide char.
0.008 2021-02-15 Released-By: PERLANCAR; Urgency: medium
- Rename feature: color -> color_data.
- Add features: custom_border, custom_color, color_theme, align_cell,
align_column, rowspan, colspan.
- Add participants: Text::Table::TinyBorderStyle,
Text::Table::Span.
0.007 2021-01-31 Released-By: PERLANCAR; Urgency: high
- Merge releases 0.006 & 0.006.1.
0.006.1 2021-01-25 Released-By: PERLANCAR; Urgency: medium; Cancelled: yes
- Add feature: multiline_data.
- UPDATE 2021-01-31: rename version from 0.006 to 0.006.1 to avoid
conflict.
0.006 2020-09-13 Released-By: PERLANCAR; Urgency: medium
- Note that Text::Table::Tiny (1.01_01) can now handle wide
characters.
Text::SimpleTable
Author: MRAMBERG <https://metacpan.org/author/MRAMBERG>
As its name implies, a simple table-generating module with minimal
documentation and a few choices or border characters. You have to
set the width of all columns manually.
Text::UnicodeBox::Table
Author: EWATERS <https://metacpan.org/author/EWATERS>
The main feature of this module is the various border style it
provides drawn using Unicode box-drawing characters. It allows
per-row style. The rendering speed is particularly slow compared to
other modules.
Text::Table::Manifold
Author: RSAVAGE <https://metacpan.org/author/RSAVAGE>
Two main features of this module is per-column aligning and wide
character support. This module, aside from doing its rendering, can
also be told to pass rendering to HTML, CSV, or other text table
module like Text::UnicodeBox::Table); so in this way it is similar
to Text::Table::Any.
Text::ANSITable
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
This 2013 project was my take in creating a text table module that
can handle color, multiline text, wide characters. I also threw in
various formatting options, e.g. per-column/row/cell
align/valign/pad/vpad, conditional formatting, and so on. I even
added a couple of features I never used: hiding rows and specifying
columns to display which can be in different order from the original
specified columns or can contain the same original columns multiple
times. I think this module offers the most formatting options on
CPAN.
In early 2021, I needed colspan/rowspan and I implemented this in a
new module: Text::Table::Span (later renamed to Text::Table::More).
I plan to add this feature too to Text::ANSITable, but in the
meantime I'm also adding more formatting options which I need to
Text::Table::More.
Text::ASCIITable
Author: LUNATIC <https://metacpan.org/author/LUNATIC>
Text::FormatTable
Author: TREY <https://metacpan.org/author/TREY>
Text::MarkdownTable
row. This module started my personal experiments creating other
table-generating modules (at last count I've created no fewer than
15 of them!).
Text::Table::TinyBorderStyle
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
Text::Table::More
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
A module I wrote in early 2021. Main distinguishing feature is
support for rowspan/clospan. I plan to add more features to this
module on an as-needed basic. This module is now preferred to
Text::ANSITable, although currently it does not offer nearly as many
formatting options as Text::ANSITable.
Text::Table::Sprintf
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
A performant (see benchmark result) and lightweight (a page of code,
no use of modules at all), but with minimal extra features.
Text::Table::TinyColor
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
Text::Table::TinyColorWide
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
Text::Table::TinyWide
Author: PERLANCAR <https://metacpan.org/author/PERLANCAR>
required beyond that are considered a bug and can be reported to me.
COPYRIGHT AND LICENSE
This software is copyright (c) 2023, 2021, 2020, 2019 by perlancar
<perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
BUGS
Please report any bugs or feature requests on the bugtracker website
<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModules-Text
Table>
When submitting a bug or request, please include a test-file or a patch
to an existing test-file that illustrates the bug or desired feature.
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
our $LIST = {
summary => 'List of modules that generate text tables',
description => <<'_',
Currently excluded from this list are:
- <pm:Text::SimpleTable::AutoWidth> (wrapper to <pm:Text::SimpleTable>);
- <pm:Text::ASCIITable::EasyTable> (wrapper to <pm:Text::ASCIITable>);
_
entry_features => {
wide_char => {summary => 'Whether the use of wide characters (e.g. Kanji) in cells does not cause the table to be misaligned'},
color_data => {summary => 'Whether module supports ANSI colors (i.e. text with ANSI color codes can still be aligned properly)'},
multiline_data => {summary => 'Whether module supports aligning data cells that contain newlines'},
box_char => {summary => 'Whether module can utilize box-drawing characters'},
custom_border => {summary => 'Whether module allows customizing border in some way'},
align_row => {summary => "Whether module supports aligning text horizontally in a row (left/right/middle)"},
align_column => {summary => "Whether module supports aligning text horizontally in a column (left/right/middle)"},
align_cell => {summary => "Whether module supports aligning text horizontally in individual cells (left/right/middle)"},
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
This is a frontend for many text table modules as backends. The interface is
dead simple, following <pm:Text::Table::Tiny>. The main drawback is that it
currently does not allow passing (some, any) options to each backend.
_
bench_code => sub {
my ($table) = @_;
Text::Table::Any::table(rows=>$table, header_row=>1);
},
features => {
align_cell => {value=>undef, summary=>"Depends on backend"},
align_column => {value=>undef, summary=>"Depends on backend"},
align_row => {value=>undef, summary=>"Depends on backend"},
box_char => {value=>undef, summary=>"Depends on backend"},
color_data => {value=>undef, summary=>"Depends on backend"},
color_theme => {value=>undef, summary=>"Depends on backend"},
colspan => {value=>undef, summary=>"Depends on backend"},
custom_border => {value=>undef, summary=>"Depends on backend"},
custom_color => {value=>undef, summary=>"Depends on backend"},
multiline_data => {value=>undef, summary=>"Depends on backend"},
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
manually.
_
bench_code => sub {
my ($table) = @_;
my @colspec = map {[9, $_]} @{ $table->[0] };
my $ts = Text::SimpleTable->new(@colspec);
for (1 .. $#{$table}) { $ts->row(@{ $table->[$_] }) }
$ts->draw;
},
features => {
align_cell => {value=>0},
align_column => {value=>0},
align_row => {value=>0},
box_char => {value=>0},
color_data => {value=>0},
color_theme => {value=>0},
colspan => {value=>0},
custom_border => {value=>1, summary=>"Limited choice of 1 ASCII style and 1 UTF style"},
custom_color => {value=>0},
multiline_data => {value=>0},
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
valign_column => {value=>0},
valign_row => {value=>0},
wide_char_data => {value=>0},
},
},
{
module => 'Text::UnicodeBox::Table',
description => <<'_',
The main feature of this module is the various border style it provides drawn
using Unicode box-drawing characters. It allows per-row style. The rendering
speed is particularly slow compared to other modules.
_
bench_code => sub {
my ($table) = @_;
my $t = Text::UnicodeBox::Table->new;
$t->add_header(@{ $table->[0] });
$t->add_row(@{ $table->[$_] }) for 1..$#{$table};
$t->render;
},
features => {
align_cell => 0,
align_column => 1,
box_char => 0,
color_data => 1,
color_theme => 0,
colspan => 0,
custom_border => 1,
custom_color => 0,
multiline_data => 0,
rowspan => 0,
wide_char_data => 1,
speed => "slow",
},
},
{
module => 'Text::Table::Manifold',
description => <<'_',
Two main features of this module is per-column aligning and wide character
support. This module, aside from doing its rendering, can also be told to pass
rendering to HTML, CSV, or other text table module like
<pm:Text::UnicodeBox::Table>); so in this way it is similar to
<pm:Text::Table::Any>.
_
bench_code => sub {
my ($table) = @_;
my $t = Text::Table::Manifold->new;
$t->headers($table->[0]);
$t->data([ @{$table}[1 .. $#{$table}] ]);
join("\n", @{$t->render(padding => 1)}) . "\n";
},
features => {
align_cell => 0,
align_column => 1,
box_char => undef, # ?
color_data => 1,
color_theme => 0,
colspan => 0,
custom_border => {value=>0, summary=>"But this module can pass rendering to other module like Text::UnicodeBox::Table"},
custom_color => 0,
multiline_data => 0,
rowspan => 0,
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
},
},
{
module => 'Text::ANSITable',
description => <<'_',
This 2013 project was my take in creating a text table module that can handle
color, multiline text, wide characters. I also threw in various formatting
options, e.g. per-column/row/cell align/valign/pad/vpad, conditional formatting,
and so on. I even added a couple of features I never used: hiding rows and
specifying columns to display which can be in different order from the original
specified columns or can contain the same original columns multiple times. I
think this module offers the most formatting options on CPAN.
In early 2021, I needed colspan/rowspan and I implemented this in a new module:
<pm:Text::Table::Span> (later renamed to <pm:Text::Table::More>). I plan to add
this feature too to Text::ANSITable, but in the meantime I'm also adding more
formatting options which I need to Text::Table::More.
_
bench_code => sub {
my ($table) = @_;
my $t = Text::ANSITable->new(
use_utf8 => 0,
use_box_chars => 0,
use_color => 0,
columns => $table->[0],
border_style => 'ASCII::SingleLine',
);
$t->add_row($table->[$_]) for 1..@$table-1;
$t->draw;
},
features => {
align_cell => 1,
align_column => 1,
align_row => 1,
box_char => 1,
color_data => 1,
color_theme => 1,
colspan => 0,
column_width => 1,
custom_border => 1,
custom_color => 1,
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
{
module => 'Text::ASCIITable',
bench_code => sub {
my ($table) = @_;
my $t = Text::ASCIITable->new();
$t->setCols(@{ $table->[0] });
$t->addRow(@{ $table->[$_] }) for 1..@$table-1;
"$t";
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => 0,
multiline_data => 1,
},
},
{
module => 'Text::FormatTable',
bench_code => sub {
my ($table) = @_;
my $t = Text::FormatTable->new(join('|', ('l') x @{ $table->[0] }));
$t->head(@{ $table->[0] });
$t->row(@{ $table->[$_] }) for 1..@$table-1;
$t->render;
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => 0,
multiline_data => 1,
},
},
{
module => 'Text::MarkdownTable',
bench_code => sub {
my ($table) = @_;
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
my $fields = $table->[0];
foreach (1..@$table-1) {
my $row = $table->[$_];
$t->add( {
map { $fields->[$_] => $row->[$_] } 0..@$fields-1
});
}
$t->done;
$out;
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => 0,
multiline_data => {value=>0, summary=>'Newlines stripped'},
},
},
{
module => 'Text::Table',
bench_code => sub {
my ($table) = @_;
my $t = Text::Table->new(@{ $table->[0] });
$t->load(@{ $table }[1..@$table-1]);
$t;
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => {value=>undef, summary=>'Does not draw borders'},
multiline_data => 1,
},
},
{
module => 'Text::Table::Tiny',
description => <<'_',
The simple and tiny table-generating module which I liked back in 2012 (v0.03).
It employs an sprintf() trick to generate a single row. This module started my
personal experiments creating other table-generating modules (at last count I've
created no fewer than 15 of them!).
_
bench_code => sub {
my ($table) = @_;
Text::Table::Tiny::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => 1,
box_char => 1,
multiline_data => 0,
},
},
{
module => 'Text::Table::TinyBorderStyle',
bench_code => sub {
my ($table) = @_;
Text::Table::TinyBorderStyle::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => 1,
multiline_data => 0,
},
},
{
module => 'Text::Table::More',
description => <<'_',
A module I wrote in early 2021. Main distinguishing feature is support for
rowspan/clospan. I plan to add more features to this module on an as-needed
basic. This module is now preferred to <pm:Text::ANSITable>, although currently
it does not offer nearly as many formatting options as Text::ANSITable.
_
bench_code => sub {
my ($table) = @_;
Text::Table::More::generate_table(rows=>$table, header_row=>1);
},
features => {
align_cell => 1,
align_column => 1,
align_row => 1,
box_char => 1,
color_data => 1,
color_theme => 0,
colspan => 1,
custom_border => 1,
custom_color => 0,
multiline_data => 1,
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
per_row_height => 0, # todo
pad => 0, # todo
vpad => 0, # todo
},
},
{
module => 'Text::Table::Sprintf',
description => <<'_',
A performant (see benchmark result) and lightweight (a page of code, no use of
modules at all), but with minimal extra features.
_
bench_code => sub {
my ($table) = @_;
Text::Table::Sprintf::table(rows=>$table, header_row=>1);
},
features => {
box_char => 0,
color_data => 0,
multiline_data => 0,
speed => {value=>"fast", summary=>"The fastest among the others in this list"},
wide_char_data => 0,
},
},
{
module => 'Text::Table::TinyColor',
bench_code => sub {
my ($table) = @_;
Text::Table::TinyColor::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 0,
color_data => 1,
box_char => 0,
multiline_data => 0,
},
},
{
module => 'Text::Table::TinyColorWide',
bench_code => sub {
my ($table) = @_;
Text::Table::TinyColorWide::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => 1,
box_char => 0,
multiline_data => 0,
},
},
{
module => 'Text::Table::TinyWide',
bench_code => sub {
my ($table) = @_;
Text::Table::TinyWide::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => 0,
box_char => 0,
},
},
{
module => 'Text::Table::Org',
bench_code => sub {
my ($table) = @_;
Text::Table::Org::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 0,
color_data => 0,
box_char => 0,
multiline_data => 0,
},
},
{
module => 'Text::Table::CSV',
bench_code => sub {
my ($table) = @_;
Text::Table::CSV::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => 0,
box_char => {value=>undef, summary=>"Irrelevant"},
multiline_data => {value=>1, summary=>"But make sure your CSV parser can handle multiline cell"},
},
},
{
module => 'Text::Table::HTML',
bench_code => sub {
my ($table) = @_;
Text::Table::HTML::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => {value=>0, summary=>'Not converted to HTML color elements'},
box_char => 0,
multiline_data => 1,
},
},
{
module => 'Text::Table::HTML::DataTables',
bench_code => sub {
my ($table) = @_;
Text::Table::HTML::DataTables::table(rows=>$table, header_row=>1);
},
features => {
wide_char_data => 1,
color_data => {value=>0, summary=>'Not converted to HTML color elements'},
box_char => 0,
multiline_data => 1,
},
},
{
module => 'Text::TabularDisplay',
bench_code => sub {
my ($table) = @_;
my $t = Text::TabularDisplay->new(@{ $table->[0] });
$t->add(@{ $table->[$_] }) for 1..@$table-1;
$t->render; # doesn't add newline
},
features => {
wide_char_data => 1,
color_data => 0,
box_char => {value=>undef, summary=>"Irrelevant"},
multiline_data => 1,
},
},
],
bench_datasets => [
{name=>'tiny (1x1)' , argv => [_make_table( 1, 1)],},
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
As its name implies, a simple table-generating module with minimal documentation
and a few choices or border characters. You have to set the width of all columns
manually.
=item L<Text::UnicodeBox::Table>
Author: L<EWATERS|https://metacpan.org/author/EWATERS>
The main feature of this module is the various border style it provides drawn
using Unicode box-drawing characters. It allows per-row style. The rendering
speed is particularly slow compared to other modules.
=item L<Text::Table::Manifold>
Author: L<RSAVAGE|https://metacpan.org/author/RSAVAGE>
Two main features of this module is per-column aligning and wide character
support. This module, aside from doing its rendering, can also be told to pass
rendering to HTML, CSV, or other text table module like
L<Text::UnicodeBox::Table>); so in this way it is similar to
L<Text::Table::Any>.
=item L<Text::ANSITable>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
This 2013 project was my take in creating a text table module that can handle
color, multiline text, wide characters. I also threw in various formatting
options, e.g. per-column/row/cell align/valign/pad/vpad, conditional formatting,
and so on. I even added a couple of features I never used: hiding rows and
specifying columns to display which can be in different order from the original
specified columns or can contain the same original columns multiple times. I
think this module offers the most formatting options on CPAN.
In early 2021, I needed colspan/rowspan and I implemented this in a new module:
L<Text::Table::Span> (later renamed to L<Text::Table::More>). I plan to add
this feature too to Text::ANSITable, but in the meantime I'm also adding more
formatting options which I need to Text::Table::More.
=item L<Text::ASCIITable>
Author: L<LUNATIC|https://metacpan.org/author/LUNATIC>
=item L<Text::FormatTable>
Author: L<TREY|https://metacpan.org/author/TREY>
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
=item L<Text::Table::TinyBorderStyle>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
=item L<Text::Table::More>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
A module I wrote in early 2021. Main distinguishing feature is support for
rowspan/clospan. I plan to add more features to this module on an as-needed
basic. This module is now preferred to L<Text::ANSITable>, although currently
it does not offer nearly as many formatting options as Text::ANSITable.
=item L<Text::Table::Sprintf>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
A performant (see benchmark result) and lightweight (a page of code, no use of
modules at all), but with minimal extra features.
=item L<Text::Table::TinyColor>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
=item L<Text::Table::TinyColorWide>
Author: L<PERLANCAR|https://metacpan.org/author/PERLANCAR>
lib/Acme/CPANModules/TextTable.pm view on Meta::CPAN
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2023, 2021, 2020, 2019 by perlancar <perlancar@cpan.org>.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=head1 BUGS
Please report any bugs or feature requests on the bugtracker website L<https://rt.cpan.org/Public/Dist/Display.html?Name=Acme-CPANModules-TextTable>
When submitting a bug or request, please include a test-file or a
patch to an existing test-file that illustrates the bug or desired
feature.
=cut
lib/Acme/CPANModules_ScenarioR/TextTable.pm view on Meta::CPAN
## no critic
package Acme::CPANModules_ScenarioR::TextTable;
our $VERSION = 0.016; # VERSION
our $results = do{my$var=[[200,"OK",[{_name=>"participant=Text::UnicodeBox::Table",_succinct_name=>"Text::UnicodeBox::Table",errors=>0.0024,participant=>"Text::UnicodeBox::Table",pct_faster_vs_slowest=>0,pct_slower_vs_fastest=>365.666666666667,rate=>...
1;
# ABSTRACT: List of modules that generate text tables
=head1 DESCRIPTION
This module is automatically generated by Pod::Weaver::Plugin::Bencher::Scenario during distribution build.
A Acme::CPANModules_ScenarioR::* module contains the raw result of sample benchmark and might be useful for some stuffs later.