develooper Front page | perl.modules | Postings from May 2008

[RFC] Pretty::Table

From:
Shan Leiguang
Date:
May 6, 2008 05:58
Subject:
[RFC] Pretty::Table
Hello all

I've written a new module called Pretty::Table that I'm planning to
put on CPAN. Take a look at the documentation and tell me what you think.

NAME
Pretty::Table - to print pretty text table
  --------------------------------------------------------------------------------

 Example
   use Pretty::Table;
    my $pt = Pretty::Table->new(
       data_type      => 'row',     #row mode
       data_format    => 'ucfirst', #upper char
       if_multi_lines => 1,         #enable multi-lines mode
       max_col_length => 10,        #set max_col_length to 10
   );
    my $dr = [
       ['id','name','sex','age','email'],
       ['01','tommy','male',27],
       ['02','jarry','male',26],
       ['03','shanleiguang',26,'shanleiguang@gmail.com'],
   ];
    $pt->set_data_ref($dr);
   $pt->set_title('Contacts');
   $pt->set_align('left');
   $pt->set_data_format('ucfirst');
   $pt->insert(['05','jackie','male',27,'jakie@somedoain.com']);
   $pt->insert(['04','marry','female',26], 4);
   print $pt->output();
    $pt->set_data_type('col');
   $pt->set_deco_cross('*');
   $pt->set_if_has_title(0);
   print $pt->output();
  --------------------------------------------------------------------------------

 Example Output
 +---------------------------------------------+
 | Contacts                                    |
 +----+------------+--------+-----+------------+
 | id | name       | sex    | age | email      |
 +----+------------+--------+-----+------------+
 | 01 | tommy      | male   | 27  |            |
 +----+------------+--------+-----+------------+
 | 02 | jarry      | male   | 26  |            |
 +----+------------+--------+-----+------------+
 | 03 | shanleigua | male   | 26  | shanleigua |
 |    | ng         |        |     | ng@gmail.c |
 |    |            |        |     | om         |
 +----+------------+--------+-----+------------+
 | 04 | marry      | female | 26  |            |
 +----+------------+--------+-----+------------+
 *-------*-------*-------*------------*--------*
 | id    | 01    | 02    | 03         | 04     |
 *-------*-------*-------*------------*--------*
 | name  | tommy | jarry | shanleigua | marry  |
 |       |       |       | ng         |        |
 *-------*-------*-------*------------*--------*
 | sex   | male  | male  | male       | female |
 *-------*-------*-------*------------*--------*
 | age   | 27    | 26    | 26         | 26     |
 *-------*-------*-------*------------*--------*
 | email |       |       | shanleigua |        |
 |       |       |       | ng@gmail.c |        |
 |       |       |       | om         |        |
 *-------*-------*-------*------------*--------*

Methods
Pretty::Table->set_data_type(<'row'|'col'])
   my $dr = [
       ['id','name','sex','age'],  #be a 'row' or a 'col'
       [...],
   ];
 Pretty::Table->set_data_format(<'normal'|'uc'|'lc'|'ucfirst')
   normal  - default, not format
   uc      - upper character
   lc      - lower character
   ucfirst - upper first character
Pretty::Table->set_data_ref(<$dr)
   $dr is a 2D ArrayRef
   my $dr = [
       ['id','name','sex','age'],  #be a 'row' or a 'col'
       [...],
   ];
 Pretty::Table->set_if_has_title(<1|0)
   if has table header title, default is 1
Pretty::Table->set_title(<$title)
   default is __PACKAGE__ (Pretty::Table)
Pretty::Table->set_indent(<$indent)
   default is 2
Pretty::Table->set_align(<'left'|'center'|'right')
   default is 'left'
Pretty::Table->set_margin_left(<$margin_left)
   default is 1, no need to change

=item C<Pretty::Table-E<gt>set_margin_right(<$margin_right>)
   default is 1, no need to change
Pretty::Table->set_deco_horizontal(<$deco_h)
   default is '|', no need to change
Pretty::Table->set_deco_vertical(<$deco_v)
   default is '-', no need to change
Pretty::Table->set_deco_cross(<$deco_c)
   default is '+', '*' is also pretty
Pretty::Table->set_empty_fill(<$empty_fill)
   default is ' '(space), no need to change
Pretty::Table->set_if_multi_lines(<1|0)
   default is 1, enable multi-lines mode
Pretty::Table->set_max_col_length(<$max_col_length)
   default is 40, 'if_multi_lines' must enabled
 --------------------------------------------------------------------------------

 AUTHOR Shan LeiGuang shanleiguang@gmail.com

-- 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Gmail : shanleiguang@gmail.com
MSN : shanleiguang@live.com
~~~~~~~~~~~~~~~~~~~~~~~~~~~~




Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About