diff options
author | jaseg <s@jaseg.de> | 2013-04-01 01:51:53 +0200 |
---|---|---|
committer | jaseg <s@jaseg.de> | 2013-04-01 01:51:53 +0200 |
commit | b2cee466b12ac237a55c8dfbe7503249a6647968 (patch) | |
tree | 782adf35d0dcd60f3d251986c28c8f7b38945058 | |
parent | 60e6b776253cd8120cde44638043c45a51ed27ad (diff) | |
download | ponysay-b2cee466b12ac237a55c8dfbe7503249a6647968.tar.gz ponysay-b2cee466b12ac237a55c8dfbe7503249a6647968.tar.bz2 ponysay-b2cee466b12ac237a55c8dfbe7503249a6647968.zip |
Made it installable. Also: Fixes!
* Added a Makefile for installing/uninstalling
* Made it center one-line texts within speech bubbles
* Made it importable
* Added a funny test script
* Added proper *think support
* Fixed chrysalis' quotes file
* Fixed a bug wrongly cropping the output
-rw-r--r-- | .gitignore | 50 | ||||
-rw-r--r-- | Makefile | 22 | ||||
-rw-r--r-- | ponies/chrysalis.quotes | 1 | ||||
-rwxr-xr-x | ponysay.py | 73 | ||||
-rwxr-xr-x | ponystorm.py | 11 |
5 files changed, 75 insertions, 82 deletions
@@ -1,49 +1,3 @@ -## Private workspace directory - -/_/ -/*.pony - - -## Backup files - -*~ -\#*\# -.\#* +*.swo *.swp -*.bak - - -## Compile files - -/completion/*-completion-think.* -/manuals/manpage.*.gz -/ponysay.info -/ponysay.info.gz -/truncater -*.install -/Makefile -/quotes/ - - -## Texinfo manual stuff - -/ponysay.aux -/ponysay.cp -/ponysay.cps -/ponysay.fn -/ponysay.ky -/ponysay.log -/ponysay.pg -/ponysay.toc -/ponysay.tp -/ponysay.vr -/ponysay.op -/ponysay.ops -/ponysay.pgs -/ponysay.vrs - -## Python cache files -## For a misterious force, Those has ben created here - -__pycache__/ -*.pyc +__pycache__ diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7279fbc --- /dev/null +++ b/Makefile @@ -0,0 +1,22 @@ + +prefix=/usr + +install: + install -m 0755 ponysay.py $(prefix)/bin + ln -s $(prefix)/bin/ponysay.py $(prefix)/bin/ponysay + ln -s $(prefix)/bin/ponysay.py $(prefix)/bin/ponythink + install -m 0755 -d $(prefix)/share/ponysay + install -m 0755 -t $(prefix)/share/ponysay ponies/* + install -m 0755 -d $(prefix)/share/doc/ponysay + install -m 0755 -t $(prefix)/share/doc/ponysay COPYING + install -m 0755 -t $(prefix)/share/doc/ponysay README.md + +uninstall: + rm $(prefix)/bin/ponysay + rm $(prefix)/bin/ponythink + rm $(prefix)/bin/ponysay.py + rm $(prefix)/share/ponysay/* + rmdir $(prefix)/share/ponysay + rm $(prefix)/share/doc/ponysay/* + rmdir $(prefix)/share/doc/ponysay + diff --git a/ponies/chrysalis.quotes b/ponies/chrysalis.quotes index 1b24bb5..fb09aa6 100644 --- a/ponies/chrysalis.quotes +++ b/ponies/chrysalis.quotes @@ -3,4 +3,3 @@ The kind of day I've dreamed since I was small Everypony I'll soon control Every Stallion, mare and foal Who says a girl can't really have it all? - @@ -12,14 +12,14 @@ except: # (left, right) # (top, middle, bottom) balloonstyles= {'cowsay': (((' ', '', '< '), (' ', '', '> ')), ((' /', '|', '\\ '), (' \\', '|', '/ ')), '-', '_', '\\', '/'), - 'cowthink': (((' ', '', '( '), (' ', '', ') ')), ((' (', '(', '( '), (' )', ')', ') ')), '-', '_', 'o', 'o'), + 'cowsay.think': (((' ', '', '( '), (' ', '', ') ')), ((' (', '(', '( '), (' )', ')', ') ')), '-', '_', 'o', 'o'), 'ascii': (((' /|', '', '\\ '), (' \\|', '', '/ ')), ((' /|', '|', '|\\'), (' \\|', '|', '|/')), '_', '_', 'o', 'o'), - 'asciithink': (((' ((', '', '( '), (' ))', '', ') ')), ((' ((', '(', '(('), (' ))', ')', '))')), '_', '_', 'o', 'o'), + 'ascii.think': (((' ((', '', '( '), (' ))', '', ') ')), ((' ((', '(', '(('), (' ))', ')', '))')), '_', '_', 'o', 'o'), 'unicode': ((('┌││', '', '│└ '), ('┐││', '', '│┘ ')), (('┌││', '│', '││└'), ('┐││', '│', '││┘')), '─', '─', '╲', '╱'), 'round': ((('╭││', '', '│╰ '), ('╮││', '', '│╯ ')), (('╭││', '│', '││╰'), ('╮││', '│', '││╯')), '─', '─', '╲', '╱'), 'linux-vt': ((('┌││', '', '│└ '), ('┐││', '', '│┘ ')), (('┌││', '│', '││└'), ('┐││', '│', '││┘')), '─', '─', '\\', '/')} -ponypath = realpath(dirname(__file__)+'/../share/ponies') +ponypath = realpath(dirname(__file__)+'/../share/ponysay') if not exists(ponypath): ponypath=realpath(dirname(__file__)+'/ponies') termwidth = 80 @@ -49,7 +49,7 @@ def render_balloon(text, balloonstyle, minwidth=0, maxwidth=40, pad=str.center): if text is None: return [] (oneline, multiline, bottom, top, linkl, linkr) = balloonstyle - lines = [ ' '+wrapline+' ' for textline in text.split('\n') for wrapline in textwrap.wrap(textline, maxwidth) ] + lines = [ ' '+wrapline+' ' for textline in text.center(minwidth).split('\n') for wrapline in textwrap.wrap(textline, maxwidth) ] width = max([ len(line) for line in lines ]+[minwidth]) def side(top, middle, bottom): return top + middle*(len(lines)-2) + bottom @@ -82,36 +82,43 @@ def render_pony(name, text, balloonstyle, width=80, center=False, centertext=Fal if center: ponywidth = max([ len(re.sub(r'\x1B\[[0-9;]+m|\$.*\$', '', line)) for line in pony ]) indent = ' '*int((width-ponywidth)/2) - wre = re.compile('((\x1B\[[0-9;]+m)?.){0,%s}' % width) + wre = re.compile('((\x1B\[[0-9;]+m)*.){0,%s}' % width) return ''.join([ indent+wre.search(line).group()+'\n[49m' for line in pony ]) -parser = argparse.ArgumentParser(description='Cowsay with ponies') -parser.add_argument('-p', '--pony', type=str, default='random', help='The name of the pony to be used. Use "-p list" to list all ponies, "-p random" (default) to use a random pony.') -parser.add_argument('-q', '--quote', action='store_true', help='Use a random quote of the pony being displayed as text') -parser.add_argument('-c', '--center', action='store_true', help='Use a random quote of the pony being displayed as text') -parser.add_argument('-C', '--center-text', action='store_true', help='Center the text in the bubble') -parser.add_argument('-w', '--width', type=int, default=termwidth, help='Terminal width. Use 0 for unlimited width. Default: autodetect') -parser.add_argument('-b', '--balloon', type=str, default='cowsay', help='Balloon style to use. Use "-b list" to list available styles.') -parser.add_argument('text', type=str, nargs='*', help='The text to be placed in the speech bubble') -args = parser.parse_args() +if __name__ == '__main__': + parser = argparse.ArgumentParser(description='Cowsay with ponies') + parser.add_argument('-p', '--pony', type=str, default='random', help='The name of the pony to be used. Use "-p list" to list all ponies, "-p random" (default) to use a random pony.') + parser.add_argument('-q', '--quote', action='store_true', help='Use a random quote of the pony being displayed as text') + parser.add_argument('-c', '--center', action='store_true', help='Use a random quote of the pony being displayed as text') + parser.add_argument('-C', '--center-text', action='store_true', help='Center the text in the bubble') + parser.add_argument('-w', '--width', type=int, default=termwidth, help='Terminal width. Use 0 for unlimited width. Default: autodetect') + parser.add_argument('-b', '--balloon', type=str, default='cowsay', help='Balloon style to use. Use "-b list" to list available styles.') + parser.add_argument('text', type=str, nargs='*', help='The text to be placed in the speech bubble') + args = parser.parse_args() -if args.pony == "list": - print('\n'.join(sorted(list_ponies(True)))) - sys.exit() -if args.balloon == 'list': - print('\n'.join(balloonstyles.keys())) - sys.exit() -pony = args.pony -if pony == "random": - pony = random.choice(list_ponies() if not args.quote else list_ponies_with_quotes()) -text = ' '.join(args.text) or None -if text == '-': - text = '\n'.join(sys.stdin.readlines()) -if args.quote: - text = random_quote(pony) + if args.pony == "list": + print('\n'.join(sorted(list_ponies(True)))) + sys.exit() + if args.balloon == 'list': + print('\n'.join(balloonstyles.keys())) + sys.exit() + pony = args.pony + if pony == "random": + pony = random.choice(list_ponies() if not args.quote else list_ponies_with_quotes()) + text = ' '.join(args.text) or None + if text == '-': + text = '\n'.join(sys.stdin.readlines()) + if args.quote: + text = random_quote(pony) -print(render_pony(pony, text, - balloonstyle=balloonstyles[args.balloon], - width=args.width or sys.maxint, - center=args.center, - centertext=args.center_text)) + balloonstyle = None + if sys.argv[0].endswith('think'): + balloonstyle = balloonstyles[args.balloon+'.think'] + else: + balloonstyle = balloonstyles[args.balloon] + + print(render_pony(pony, text, + balloonstyle=balloonstyle, + width=args.width or sys.maxint, + center=args.center, + centertext=args.center_text)) diff --git a/ponystorm.py b/ponystorm.py new file mode 100755 index 0000000..dd93b42 --- /dev/null +++ b/ponystorm.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python3 +import random +import ponysay + +for i in range(0, 1000): + pony = random.choice(ponysay.list_ponies_with_quotes()) + print(ponysay.render_pony(pony, ponysay.random_quote(pony), + balloonstyle=ponysay.balloonstyles['cowsay'], + width=ponysay.termwidth, + center=True, + centertext=False)) |