Updated 2012-07-29 12:24:55 by RLE

A simplistic set of functions for justifying a string within a field.
 Download from: http://vectorstream.com/tcl/packages/
 License: BSD style
 Author: [JMN]

 package require overtype

 overtype::left ?-overflow [1|0]? ?-elipsis [1|0]? ?-ellipsistext ...? undertext overtext
 overtype::centre ?-bias [left|right]? ?-overflow [1|0]? undertext overtext
 overtype::right ?-overflow [1|0]? undertext overtext

overtype::center is equivalent to overtype::centre

 %overtype::left [string repeat - 10] title
 %overtype::centre [string repeat - 10] title
 %overtype::centre -bias right [string repeat - 10] title
 %overtype::right [string repeat - 10] title

 set pad [string repeat - 10]
 %overtype::left $pad stringdoesn'tfit
 %overtype::left -overflow 1 $pad stringdoesn'tfit
 %overtype::left -overflow 0 -ellipsis 1 $pad stringdoesn'tfit
 %overtype::left -overflow 0 -ellipsis 1 -ellipsistext +++ $pad stringdoesn'tfit

There may well be alternative ways of doing this sort of thing. e.g '[format "%-*s" 10 blah]' seems to be equivalent to '[overtype::left [string repeat " " 10] blah]'

I just find it easier to remember how to use the overtype functions. (actually I don't need to remember much at all.. typing 'overtype::left' without args for example gives an error reporting the usage string shown above)

Note the lack of ellipsis support for overtype::right & overtype::center. If someone cares enough to add it, I'll be happy to incorporate it in the package. (should truncation in a left-right language such as English always occur on the right.. or should there be an option?)

I'd also be interested to see it generalised to support languages that read right to left.. but I haven't given it enough thought to see how exactly that would work.

See also format