Prettier::Table
Name
Prettier::Table, a simple Raku module to make it quick and easy to represent tabular data in visually appealing ASCII tables.
This is a fork of Luis F Uceta's Prettier::Table which is itself a port of the Kane Blueriver's PTable library for Python. I (masukomi) have modifed it to use ASCII Box drawing characters so as to make it "prettier".
Synopsis
Example 1:
use Prettier::Table;
my $table = Prettier::Table.new:
title => "Australian Cities",
field-names => ["City name", "Area", "Population", "Annual Rainfall"],
sort-by => 'Area',
align => %('City name' => 'l'),
;
given $table {
.add-row: ["Adelaide", 1295, 1158259, 600.5 ];
.add-row: ["Brisbane", 5905, 1857594, 1146.4];
.add-row: ["Darwin", 112, 120900, 1714.7];
.add-row: ["Hobart", 1357, 205556, 619.5 ];
.add-row: ["Sydney", 2058, 4336374, 1214.8];
.add-row: ["Melbourne", 1566, 3806092, 646.9 ];
.add-row: ["Perth", 5386, 1554769, 869.4 ];
}
say $table;Output:
(GitHub displays the raw text incorrectly)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Australian Cities ā
āāāāāāāāāāāāā¬āāāāāāā¬āāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāā¤
ā City name ā Area ā Population ā Annual Rainfall ā
āāāāāāāāāāāāā¼āāāāāāā¼āāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāā¤
ā Darwin ā 112 ā 120900 ā 1714.7 ā
ā Adelaide ā 1295 ā 1158259 ā 600.5 ā
ā Hobart ā 1357 ā 205556 ā 619.5 ā
ā Melbourne ā 1566 ā 3806092 ā 646.9 ā
ā Sydney ā 2058 ā 4336374 ā 1214.8 ā
ā Perth ā 5386 ā 1554769 ā 869.4 ā
ā Brisbane ā 5905 ā 1857594 ā 1146.4 ā
āāāāāāāāāāāāā“āāāāāāā“āāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāExample 2:
use Prettier::Table;
my $table = Prettier::Table.new;
given $table {
.add-column('Planet', ['Earth', 'Mercury', 'Venus', 'Mars', 'Jupiter', 'Saturn', 'Uranus', 'Neptune']);
.add-column('Position', [3, 1, 2, 4, 5, 6, 7, 8])
.add-column('Known Satellites', [1, 0, 0, 2, 79, 82, 27, 14]);
.add-column('Orbital period (days)', [365.256, 87.969, 224.701, 686.971, 4332.59, 10_759.22, 30_688.5, 60_182.0]);
.add-column('Surface gravity (m/s)', [9.806, 3.7, 8.87, 3.721, 24.79, 10.44, 8.69, 11.15]);
}
$table.title('Planets in the Solar System');
$table.align(%(:Planet<l>));
$table.float-format(%('Orbital period (days)' => '-10.3f', 'Surface gravity (m/s)' => '-5.3f'));
$table.sort-by('Position');
# If you wish to change any of the characters used in the border
# you could do something like this.
# $table.junction-char('*');
put $table;Output:
(GitHub displays the raw text incorrectly)
āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
ā Planets in the Solar System ā
āāāāāāāāāāā¬āāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāā¬āāāāāāāāāāāāāāāāāāāāāāāā¤
ā Planet ā Position ā Orbital period (days) ā Surface gravity (m/s) ā
āāāāāāāāāāā¼āāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāā¼āāāāāāāāāāāāāāāāāāāāāāāā¤
ā Earth ā 3 ā 365.256 ā 9.806 ā
ā Mercury ā 1 ā 87.969 ā 3.7 ā
ā Venus ā 2 ā 224.701 ā 8.87 ā
ā Mars ā 4 ā 686.971 ā 3.721 ā
ā Jupiter ā 5 ā 4332.59 ā 24.79 ā
ā Saturn ā 6 ā 10759.22 ā 10.44 ā
ā Uranus ā 7 ā 30688.5 ā 8.69 ā
ā Neptune ā 8 ā 60182 ā 11.15 ā
āāāāāāāāāāā“āāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāā“āāāāāāāāāāāāāāāāāāāāāāāāInstallation
Using zef:
zef install Prettier::TableFrom source:
$ git clone
$ cd raku-pretty-table
$ zef install .Quickstart
Prettier::Table supports two kinds of usage:
As a module
use Prettier::Table;
my $x = Prettier::Table.new;Check out the attributes in Prettier::Table to see the full list of things that can be set / configured. Most notably the *-char attributes, used to control the look of the border. Additionally, the named parameters in the get-string method.
AUTHORS
LICENSE
MIT. See LICENSE file.
Methods
Getter and Setter Methods
NOTE: These methods's names are the same as their respective attributes. To set a specific attribute during the instantiation of a Prettier::Table object, use its method's name. For instance, to set title, Prettier::Table.new(title => "Table's title"). Thus, all methods listed here have an associated attribute that can be set during object construction.
multi method field-names
multi method field-names() returns ArrayReturn a list of field names.
multi method field-names
multi method field-names(
@values
) returns NilSet a list of field names.
multi method align
multi method align() returns HashReturn how the alignment of fields is controlled.
multi method align
multi method align(
$val
) returns NilSet how the alignment of fields is controlled. Either an alignment string (l, c, or r) or a hash of field-to-alignment pairs.
multi method valign
multi method valign() returns HashReturn how the vertical alignment of fields is controlled.
multi method valign
multi method valign(
$val
) returns NilSet how the vertical alignment of fields is controlled. Either an alignment string (t, m, or b) or a hash of field-to-alignment pairs.
multi method max-width
multi method max-width() returns Prettier::Table::Constrains::NonNegReturn the maximum width of fields.
multi method max-width
multi method max-width(
$val where { ... }
) returns NilSet the maximum width of fields.
multi method min-width
multi method min-width() returns HashReturn the minimum width of fields.
multi method min-width
multi method min-width(
$val
) returns NilSet the minimum width of fields.
multi method min-table-width
multi method min-table-width() returns Prettier::Table::Constrains::NonNegReturn the minimum desired table width, in characters.
multi method min-table-width
multi method min-table-width(
$val where { ... }
) returns MuSet the minimum desired table width, in characters.
multi method max-table-width
multi method max-table-width() returns MuReturn the maximum desired table width, in characters.
multi method max-table-width
multi method max-table-width(
$val where { ... }
) returns MuSet the minimum desired table width, in characters.
multi method fields
multi method fields() returns ArrayReturn the list of field names to include in displays.
multi method fields
multi method fields(
@values
) returns MuReturn the list of field names to include in displays.
multi method title
multi method title() returns StrReturn the table title (if existent).
multi method title
multi method title(
Str $val
) returns MuSet the table title.
multi method start
multi method start() returns Prettier::Table::Constrains::NonNegReturn the start index of the range of rows to print.
multi method start
multi method start(
$val where { ... }
) returns MuSet the start index of the range of rows to print.
multi method end
multi method end() returns MuReturn the end index of the range of rows to print.
multi method end
multi method end(
$val
) returns MuSet the end index of the range of rows to print.
multi method sort-by
multi method sort-by() returns MuReturn the name of field by which to sort rows.
multi method sort-by
multi method sort-by(
Str $val where { ... }
) returns MuSet the name of field by which to sort rows.
multi method reverse-sort
multi method reverse-sort() returns BoolReturn the direction of sorting, ascending (False) vs descending (True).
multi method reverse-sort
multi method reverse-sort(
Bool $val
) returns NilSet the direction of sorting (ascending (False) vs descending (True).
multi method sort-key
multi method sort-key() returns CallableReturn the sorting key function, applied to data points before sorting.
multi method sort-key
multi method sort-key(
&val
) returns NilSet the sorting key function, applied to data points before sorting.
multi method header
multi method header() returns BoolReturn whether the table has a heading showing the field names.
multi method header
multi method header(
Bool $val
) returns NilSet whether the table has a heading showing the field names.
multi method header-style
multi method header-style() returns Prettier::Table::Constrains::HeaderStyleReturn style to apply to field names in header ("cap", "title", "upper", or "lower").
multi method header-style
multi method header-style(
$val where { ... }
) returns MuSet style to apply to field names in header ("cap", "title", "upper", or "lower").
multi method border
multi method border() returns BoolReturn whether a border is printed around table.
multi method border
multi method border(
Bool $val
) returns MuSet whether a border is printed around table.
multi method hrules
multi method hrules() returns Prettier::Table::Constrains::HorizontalRuleReturn how horizontal rules are printed after rows.
multi method hrules
multi method hrules(
$val where { ... }
) returns MuSet how horizontal rules are printed after rows. Allowed values: FRAME, ALL, HEADER, NONE
multi method vrules
multi method vrules() returns Prettier::Table::Constrains::VerticalRuleReturn how vertical rules are printed between columns.
multi method vrules
multi method vrules(
$val where { ... }
) returns MuSet how vertical rules are printed between columns. Allowed values: FRAME, ALL, NONE
multi method int-format
multi method int-format() returns MuReturn how the integer data is formatted.
multi method int-format
multi method int-format(
$val
) returns NilSet how the integer data is formatted. The value can either be a string or a hash of field-to-format pairs.
multi method float-format
multi method float-format() returns MuReturn how the integer data is formatted.
multi method float-format
multi method float-format(
$val
) returns Nilmulti method padding-width
multi method padding-width() returns Prettier::Table::Constrains::NonNegReturn the number of empty spaces between a column's edge and its content.
multi method padding-width
multi method padding-width(
$val where { ... }
) returns NilSet the number of empty spaces between a column's edge and its content.
multi method left-padding-width
multi method left-padding-width() returns Prettier::Table::Constrains::NonNegReturn the number of empty spaces between a column's left edge and its content.
multi method left-padding-width
multi method left-padding-width(
$val where { ... }
) returns NilSet the number of empty spaces between a column's left edge and its content.
multi method right-padding-width
multi method right-padding-width() returns Prettier::Table::Constrains::NonNegReturn the number of empty spaces between a column's right edge and its content.
multi method right-padding-width
multi method right-padding-width(
$val where { ... }
) returns NilSet the number of empty spaces between a column's right edge and its content.
multi method vertical-char
multi method vertical-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw vertical lines.
multi method vertical-char
multi method vertical-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw vertical lines.
multi method horizontal-char
multi method horizontal-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw horizontal lines.
multi method horizontal-char
multi method horizontal-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw horizontal lines.
multi method junction-char
multi method junction-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw mid-line junctions.
multi method junction-char
multi method junction-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw mid-line junctions.
multi method left-junction-char
multi method left-junction-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw left-edge line junctions.
multi method left-junction-char
multi method left-junction-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw left-edge line junctions.
multi method right-junction-char
multi method right-junction-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw right-edge line junctions.
multi method right-junction-char
multi method right-junction-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw right-edge line junctions.
multi method top-junction-char
multi method top-junction-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw top edge mid-line junctions.
multi method top-junction-char
multi method top-junction-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw top edge mid-line junctions.
multi method bottom-junction-char
multi method bottom-junction-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw bottom edge mid-line junctions.
multi method bottom-junction-char
multi method bottom-junction-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw bottom edge mid-line junctions.
multi method bottom-left-corner-char
multi method bottom-left-corner-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw bottem edge left corners.
multi method bottom-left-corner-char
multi method bottom-left-corner-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw bottom edge left corners.
multi method bottom-right-corner-char
multi method bottom-right-corner-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw bottom right corners.
multi method bottom-right-corner-char
multi method bottom-right-corner-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw bottom right corners.
multi method top-left-corner-char
multi method top-left-corner-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to draw top left corners.
multi method top-left-corner-char
multi method top-left-corner-char(
$val where { ... }
) returns NilSet character used when printing table borders to top left corners.
multi method top-right-corner-char
multi method top-right-corner-char() returns Prettier::Table::Constrains::CharReturn character used when printing table borders to top right corners.
multi method top-right-corner-char
multi method top-right-corner-char(
$val where { ... }
) returns NilSet character used when printing table borders to draw top right corners.
multi method format
multi method format() returns BoolReturn whether or not HTML tables are formatted to match styling options.
multi method format
multi method format(
Bool $val
) returns NilSet whether or not HTML tables are formatted to match styling options.
multi method print-empty
multi method print-empty() returns BoolReturn whether or not empty tables produce a header and frame or just an empty string.
multi method print-empty
multi method print-empty(
Bool $val
) returns NilSet whether or not empty tables produce a header and frame or just an empty string.
multi method old-sort-slice
multi method old-sort-slice() returns BoolReturn whether to slice rows before sorting in the "old style".
multi method old-sort-slice
multi method old-sort-slice(
Bool $val
) returns NilReturn whether to slice rows before sorting in the "old style".
Style of Table
method set-style
method set-style(
TableStyle $style
) returns NilSet the style to be used for the table. Allowed values: DEFAULT: Show header and border, hrules and vrules are FRAME and ALL respectively, paddings are 1, vert. char is |, hor. char is -, and junction char is +. MSWORD-FRIENDLY: Show header and border, hrules is NONE, paddings are 1, and vert. char is | PLAIN-COLUMNS: Show header and hide border, hrules is NONE, padding is 1, left padding is 0, and right padding is 8 RANDOM: random style
method set-default-style
method set-default-style() returns NilSingle character string used to draw vertical lines. Single character string used to draw horizontal lines. Single character string used to draw line junctions.
Data Input Methods
method add-row
method add-row(
@row
) returns NilAdd a row to the table.
class Mu $
Row of data, should be a list with as many elements as the table has fields.
method del-row
method del-row(
Int $row-index
) returns NilDelete a row from the table.
class Mu $
Index of the row to delete (0-based index).
method add-column
method add-column(
Str $fieldname,
@column,
$align where { ... } = "c",
$valign where { ... } = "m"
) returns NilAdd a column to the table.
class Mu $
Name of the field to contain the new column of data.
class Mu $
Column of data, should be a list with as many elements as the table has rows.
class Mu $
Desired alignment for this column - "l" (left), "c" (center), and "r" (right).
class Mu $
Desired vertical alignment for new columns - "t" (top), "m" (middle), and "b" (bottom).
method clear-rows
method clear-rows() returns NilDelete all rows from the table but keep the current field names.
method clear
method clear() returns NilDelete all rows and field names from the table, maintaining nothing but styling options.
Plain Text String methods
method get-string
method get-string(
Str :$title = Str,
:$start where { ... } = Prettier::Table::Constrains::NonNeg,
:$end where { ... } = Prettier::Table::Constrains::NonNeg,
:@fields,
Bool :$header = Bool,
Bool :$border = Bool,
:$hrules where { ... } = Prettier::Table::Constrains::HorizontalRule,
:$vrules where { ... } = Prettier::Table::Constrains::VerticalRule,
Str :$int-format = Str,
Str :$float-format = Str,
:$padding-width where { ... } = Prettier::Table::Constrains::NonNeg,
:$left-padding-width where { ... } = Prettier::Table::Constrains::NonNeg,
:$right-padding-width where { ... } = Prettier::Table::Constrains::NonNeg,
:$vertical-char where { ... } = Prettier::Table::Constrains::Char,
:$horizontal-char where { ... } = Prettier::Table::Constrains::Char,
:$junction-char where { ... } = Prettier::Table::Constrains::Char,
:$left-junction-char where { ... } = Prettier::Table::Constrains::Char,
:$right-junction-char where { ... } = Prettier::Table::Constrains::Char,
:$top-junction-char where { ... } = Prettier::Table::Constrains::Char,
:$bottom-junction-char where { ... } = Prettier::Table::Constrains::Char,
:$bottom-left-corner-char where { ... } = Prettier::Table::Constrains::Char,
:$bottom-right-corner-char where { ... } = Prettier::Table::Constrains::Char,
:$top-left-corner-char where { ... } = Prettier::Table::Constrains::Char,
:$top-right-corner-char where { ... } = Prettier::Table::Constrains::Char,
Str :$sort-by = Str,
:&sort-key,
Bool :$reverse-sort = Bool,
Bool :$old-sort-slice = Bool,
Bool :$print-empty = Bool
) returns StrReturn string representation of table in current state.
class Mu $
See method title
class Mu $
See method start
class Mu $
See method end
class Mu $
See method fields
class Mu $
See method header
class Mu $
See method border
class Mu $
See method hrules
class Mu $
See method vrules
class Mu $
See method int-format
class Mu $
See method float-format
class Mu $
See method padding-width
class Mu $
See method left-padding-width
class Mu $
See method right-padding-width
class Mu $
See method vertical-char
class Mu $
See method horizontal-char
class Mu $
See method junction-char
class Mu $
See method junction-char
class Mu $
See method right-junction-char
class Mu $
See method top-junction-char
class Mu $
See method bottom-junction-char
class Mu $
See method bottom-left-corner-char
class Mu $
See method bottom-right-corner-char
class Mu $
See method top-left-corner-char
class Mu $
See method top-right-corner-char
class Mu $
See method sort-by
class Mu $
See method sort-key
class Mu $
See method reverse-sort
class Mu $
see method old-sort-slice
class Mu $
See method print-empty
Miscellaneous Methods
method row-count
method row-count() returns IntReturn the number of rows.
method col-count
method col-count() returns IntReturn the number of columns.
method slice
method slice(
*@indices
) returns Prettier::TableReturn a sliced-off new Prettier::Table. The indices must between 0 and the table's number of rows (exclusive). Alternatively, the postcircumfix operator [] can be used.