Announcing uni-table - a Unicode text table renderer with ECMA-48 SGR support

Could you, please, write more details about the type of data being rendered? As I am preparing for 0.8, I actually started streamlining some of the code and turns out that even with contracts and no futures it can perform nicely. I tried 10 columns x 23000 rows table for testing and on i7-1160G7 got:

cpu time: 15916 real time: 17002 gc time: 808

Not bad for a start.

I would appreciate to know:

  • the number of columns in your test-case
  • their minimum, maximum, and average widths
  • whether there are multi-line cells used

I'd like to replicate that and see for myself what can be done before focusing on lazy evaluation and parallel processing (which is definitely post-0.8 feature).

Also the cell clipping/wrapping/re-flowing and the ability to specify fixed column widths is already there. That should help too.

I've just released 0.8.2 which computes certain values (like column widths) more efficiently.

@jtp - could you give it a try with that 23k rows table and share results? Also if you could provide me with more details about that test case I would really appreciate that.

You can also specify fixed column widths and wrapping/clipping/re-flowing of cell contents:

┏━━━━━━━━━━┳━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━━━━┳━━━━┳━━━━┳━━━━┳━━━━━━━━━━━━━━━━━━━━┓
┃          ┃r0c1┃r0c2┃r0c3┃r0c4┃   r0c5    ┃r0c6┃r0c7┃r0c8┃        r0c9        ┃
┣━━━━━━━━━━╋━━━━╇━━━━╇━━━━╇━━━━╇━━━━━━━━━━━╇━━━━╇━━━━╇━━━━╇━━━━━━━━━━━━━━━━━━━━┫
┃          ┃    β•Ž    β•Ž    β•Žr1c4β•Ž       r1c5β•Žr1c6β•Žr1c7β•Žr1c8β•Ž   Lorem ipsum dolor┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž           sit amet,┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž         consectetur┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Žadipiscing elit, sed┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž   do eiusmod tempor┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Žincididunt ut labore┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž     et dolore magna┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž  aliqua. Ut enim ad┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž  minim veniam, quis┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Žnostrud exercitation┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Žullamco laboris nisi┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž    ut aliquip ex ea┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž  commodo consequat.┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž     Duis aute irure┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž            dolor in┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž    reprehenderit in┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Žvoluptate velit esse┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž    cillum dolore eu┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž        fugiat nulla┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž pariatur. Excepteur┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž       sint occaecat┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž       cupidatat non┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž   proident, sunt in┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž   culpa qui officia┃
┃          ┃    β•Ž    β•Ž    β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ždeserunt mollit anim┃
┃      r1c0┃r1c1β•Žr1c2β•Žr1c3β•Ž    β•Ž           β•Ž    β•Ž    β•Ž    β•Ž     id est laborum.┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃      r2c0┃r2c1β•Žr2c2β•Žr2c3β•Žr2c4β•Ž       r2c5β•Žr2c6β•Žr2c7β•Žr2c8β•Ž                r2c9┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃      r3c0┃r3c1β•Žr3c2β•Žr3c3β•Žr3c4β•Ž       r3c5β•Žr3c6β•Žr3c7β•Žr3c8β•Ž                r3c9┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃          ┃    β•Ž    β•Ž    β•Žbig β•Žbig        β•Žr4c6β•Žr4c7β•Žr4c8β•Žr4c9                ┃
┃          ┃    β•Ž    β•Ž    β•Žbiggβ•Žbigger     β•Ž    β•Ž    β•Ž    β•Ž                    ┃
┃          ┃    β•Ž    β•Ž    β•Žer  β•Žthe biggestβ•Ž    β•Ž    β•Ž    β•Ž                    ┃
┃          ┃    β•Ž    β•Ž    β•Žthe β•Ž           β•Ž    β•Ž    β•Ž    β•Ž                    ┃
┃          ┃    β•Ž    β•Ž    β•Žbiggβ•Ž           β•Ž    β•Ž    β•Ž    β•Ž                    ┃
┃r4c0      ┃r4c1β•Žr4c2β•Žr4c3β•Žest β•Ž           β•Ž    β•Ž    β•Ž    β•Ž                    ┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃r5c0      ┃r5c1β•Žr5c2β•Žr5c3β•Žr5c4β•Žr5c5       β•Žr5c6β•Žr5c7β•Žr5c8β•Žr5c9                ┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃r6c0      ┃r6c1β•Žr6c2β•Žr6c3β•Žr6c4β•Žr6c5       β•Žr6c6β•Žr6c7β•Žr6c8β•Žr6c9                ┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃r7c0      ┃r7c1β•Žr7c2β•Žr7c3β•Žr7c4β•Žr7c5       β•Žr7c6β•Žr7c7β•Žr7c8β•Žr7c9                ┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃r8c0      ┃r8c1β•Žr8c2β•Žr8c3β•Žr8c4β•Žr8c5       β•Žr8c6β•Žr8c7β•Žr8c8β•Žr8c9                ┃
β”£β”β”β”β”β”β”β”β”β”β”β•‰β•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ”Όβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ•Œβ”¨
┃r9c0      ┃r9c1β•Žr9c2β•Žr9c3β•Žr9c4β•Žr9c5       β•Žr9c6β•Žr9c7β•Žr9c8β•Žr9c9                ┃
┗━━━━━━━━━━┻━━━━┷━━━━┷━━━━┷━━━━┷━━━━━━━━━━━┷━━━━┷━━━━┷━━━━┷━━━━━━━━━━━━━━━━━━━━┛
1 Like