Every once in a while I wish I had an ASCII ruler so I could see how
many columns wide some line of text was.  So:

#!/usr/bin/env python
"""Computes an ASCII ruler up to the specified width.

On the command-line: use -a or --ansi to specify ANSI escape s
"""

import sys, getopt

__author__ = "Kragen Sitaker <[EMAIL PROTECTED]>"
__version__ = "2"

def ruler(width, ansi=0):
    """Return an ASCII ruler for counting columns."""
    rv = ''
    for i in range(1, width+1):
        if i % 10 != 0:
            rv = rv + str(i % 10)
        else:
            digit = str((i/10)%10)
            # red foreground 33, bold 5, reset to default 0
            if ansi: rv = rv + "\033[31;5m" + digit + "\033[0m"
            else:    rv = rv + digit
    return rv + "\n"

def main(argv):
    """Command-line interface."""
    usagemsg = "%s: usage: %s [-a|--ansi] [width]\n" % (argv[0], argv[0])
    try:
        opts, args = getopt.getopt(argv[1:], "ahv",
                                   ["ansi", "help", "version"])
    except getopt.GetoptError, v:
        sys.stderr.write(str(v) + "\n")
        sys.stderr.write(usagemsg)
        sys.exit(-1)
    optnames = [ opt for (opt, arg) in opts ]
    if "--version" in optnames or "-v" in optnames:
        print "ruler version " + __version__
    elif "--help" in optnames or "-h" in optnames or len(args) > 1:
        print usagemsg,
    else:
        if len(args): width = int(args[0])
        else: width = 79
        print ruler(width, "-a" in optnames or "--ansi" in optnames),

if __name__ == "__main__": main(sys.argv)


Reply via email to