From 16763d07d3296afb651adc524ded365dc3efa005 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 21 Aug 2012 14:36:01 +0200 Subject: balloon class used for balloon style customisation --- ponysay | 65 ++++++++++++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 13 deletions(-) diff --git a/ponysay b/ponysay index 1f99579..a5b6030 100755 --- a/ponysay +++ b/ponysay @@ -683,6 +683,51 @@ class ArgParser(): +''' +Balloon format class +''' +class Balloon(): + ''' + Constructor + ''' + def __init__(self, link, linkmirror, ww, ee, nw, nnw, n, nne, ne, nee, e, see, se, sse, s, ssw, sw, sww, w, nww): + (self.link, self.linkmirror) = (link, linkmirror) + (self.ww, self.ee) = (ww, ee) + (self.nw, self.ne, self.se, self.sw) = (nw, ne, se, sw) + (self.nnw, self.n, self.nne) = (nnw, n, nne) + (self.nee, self.e, self.see) = (nee, e, see) + (self.sse, self.s, self.ssw) = (sse, s, ssw) + (self.sww, self.w, self.nww) = (sww, w, nww) + + minE = len(max([ne, nee, e, see, se, ee], key = len)) + minW = len(max([nw, nww, e, sww, sw, ww], key = len)) + minN = len(max([ne, nne, n, nnw, nw], key = len)) + minS = len(max([se, sse, s, ssw, sw], key = len)) + + self.minwidth = minE + minE + self.minheight = minN + minS + + + ''' + Generates a balloon with a message + ''' + def get(self, minw, minh, lines, lencalc): + h = 4 + lencalc(lines) + w = 6 + lencalc(max(lines, key = lencalc)) + if w < minw: w = minw + if h < minh: h = minh + + rc = '/' + '-' * (w - 2) + '\\\n' + rc += '|' + ' ' * (w - 2) + '|\n' + for line in lines: + rc += '| ' + line + ' ' * (w - lencalc(line) - 6) + ' |\n' + rc += '|' + ' ' * (w - 2) + '|\n' + rc += '\\' + '-' * (w - 2) + '/' + + return rc + + + ''' Replacement for cowsay ''' @@ -697,7 +742,12 @@ class Backend(): self.wrapcolumn = wrapcolumn self.width = width - self.link = {'\\' : '\\', '/' : '/'} if not isthink else {'\\' : 'o', '/' : 'o'} + if isthink: + self.balloon = Balloon('o', 'o', '( ', ' )', [' _'], ['_'], ['_'], ['_'], ['_ '], ' )', ' )', ' )', ['- '], ['-'], ['-'], ['-'], ['- '], '( ', '( ', '( ') + else: + self.balloon = Balloon('\\', '/', '< ', ' >', [' _'], ['_'], ['_'], ['_'], ['_ '], ' \\', ' |', ' //', ['- '], ['-'], ['-'], ['-'], ['- '], '\\ ', '| ', '/ ') + + self.link = {'\\' : self.balloon.link, '/' : self.balloon.linkmirror} self.output = '' self.pony = None @@ -965,19 +1015,8 @@ class Backend(): if wrap is not None: msg = self.__wrapMessage(msg, wrap) lines = msg.split('\n') - h = 4 + len(lines) - w = 6 + len(max(lines, key = len)) - if w < width: w = width - if h < height: h = height - rc = '/' + '-' * (w - 2) + '\\\n' - rc += '|' + ' ' * (w - 2) + '|\n' - for line in lines: - rc += '| ' + line + ' ' * (w - len(line) - 6) + ' |\n' - rc += '|' + ' ' * (w - 2) + '|\n' - rc += '\\' + '-' * (w - 2) + '/' - - return rc + return self.balloon.get(width, height, lines, self.__len) ''' -- cgit From 3f137a105514d1ae12374d0b4475438c31b21983 Mon Sep 17 00:00:00 2001 From: Mattias Andrée Date: Tue, 21 Aug 2012 14:55:09 +0200 Subject: balloons are customisable (but there is not yet a way to do that) --- ponysay | 43 ++++++++++++++++++++++++++++++------------- 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/ponysay b/ponysay index a5b6030..b1fbd27 100755 --- a/ponysay +++ b/ponysay @@ -699,8 +699,13 @@ class Balloon(): (self.sse, self.s, self.ssw) = (sse, s, ssw) (self.sww, self.w, self.nww) = (sww, w, nww) - minE = len(max([ne, nee, e, see, se, ee], key = len)) - minW = len(max([nw, nww, e, sww, sw, ww], key = len)) + _ne = max(ne, key = len) + _nw = max(nw, key = len) + _se = max(se, key = len) + _sw = max(sw, key = len) + + minE = len(max([_ne, nee, e, see, _se, ee], key = len)) + minW = len(max([_nw, nww, e, sww, _sw, ww], key = len)) minN = len(max([ne, nne, n, nnw, nw], key = len)) minS = len(max([se, sse, s, ssw, sw], key = len)) @@ -712,19 +717,31 @@ class Balloon(): Generates a balloon with a message ''' def get(self, minw, minh, lines, lencalc): - h = 4 + lencalc(lines) - w = 6 + lencalc(max(lines, key = lencalc)) + h = self.minheight + len(lines) + w = self.minwidth + lencalc(max(lines, key = lencalc)) if w < minw: w = minw if h < minh: h = minh - rc = '/' + '-' * (w - 2) + '\\\n' - rc += '|' + ' ' * (w - 2) + '|\n' - for line in lines: - rc += '| ' + line + ' ' * (w - lencalc(line) - 6) + ' |\n' - rc += '|' + ' ' * (w - 2) + '|\n' - rc += '\\' + '-' * (w - 2) + '/' + rc = [] - return rc + for j in range(0, len(self.n)): + rc.append(self.nw[j] + self.n[j] * (w - len(self.nw[j]) - len(self.ne[j])) + self.ne[j]) + + if len(lines) > 1: + (ws, es) = ({0 : self.nww, len(lines) - 1 : self.sww}, {0 : self.nee, len(lines) - 1 : self.see}) + for j in range(1, len(lines) - 1): + ws[j] = self.w + es[j] = self.e + else: + (ws, es) = ({0 : self.ww}, {0 : self.ee}) + + for j in range(0, len(lines)): + rc.append(ws[j] + lines[j] + ' ' * (w - lencalc(lines[j]) - len(self.w) - len(self.e)) + es[j]) + + for j in range(0, len(self.s)): + rc.append(self.sw[j] + self.s[j] * (w - len(self.sw[j]) - len(self.se[j])) + self.se[j]) + + return '\n'.join(rc) @@ -743,9 +760,9 @@ class Backend(): self.width = width if isthink: - self.balloon = Balloon('o', 'o', '( ', ' )', [' _'], ['_'], ['_'], ['_'], ['_ '], ' )', ' )', ' )', ['- '], ['-'], ['-'], ['-'], ['- '], '( ', '( ', '( ') + self.balloon = Balloon('o', 'o', '( ', ' )', [' _'], ['_'], ['_'], ['_'], ['_ '], ' )', ' )', ' )', ['- '], ['-'], ['-'], ['-'], [' -'], '( ', '( ', '( ') else: - self.balloon = Balloon('\\', '/', '< ', ' >', [' _'], ['_'], ['_'], ['_'], ['_ '], ' \\', ' |', ' //', ['- '], ['-'], ['-'], ['-'], ['- '], '\\ ', '| ', '/ ') + self.balloon = Balloon('\\', '/', '< ', ' >', [' _'], ['_'], ['_'], ['_'], ['_ '], ' \\', ' |', ' /', ['- '], ['-'], ['-'], ['-'], [' -'], '\\ ', '| ', '/ ') self.link = {'\\' : self.balloon.link, '/' : self.balloon.linkmirror} -- cgit