mirror of
https://github.com/erkin/ponysay.git
synced 2025-02-07 13:36:43 +01:00
misc
This commit is contained in:
parent
ee4f95db90
commit
7f1e5535b3
3 changed files with 108 additions and 64 deletions
23
ponysay
23
ponysay
|
@ -1,25 +1,4 @@
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
INSTALLDIR="$(dirname $( cd -P "$( dirname "${BASH_SOURCE[0]}" )" && pwd ))"
|
|
||||||
LIBDIR="$INSTALLDIR/lib/ponysay"
|
|
||||||
|
|
||||||
# The truncater executable
|
|
||||||
truncatercmd="$LIBDIR/truncater"
|
|
||||||
|
|
||||||
# Screen width
|
|
||||||
scrw=`(stty size <&2 || echo 0 0) | cut -d ' ' -f 2`
|
|
||||||
|
|
||||||
# Output trunction on width
|
|
||||||
function wtrunc {
|
|
||||||
if [[ "$PONYSAY_FULL_WIDTH" = 'yes' ]] || [[ "$PONYSAY_FULL_WIDTH" = 'y' ]] || [[ "$PONYSAY_FULL_WIDTH" = '1' ]] || [[ ! -f $truncatercmd ]]; then
|
|
||||||
cat
|
|
||||||
else
|
|
||||||
$truncatercmd $scrw
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# Ponies use UTF-8 drawing characters. Prevent a Perl warning.
|
|
||||||
export PERL_UNICODE=S
|
|
||||||
|
|
||||||
# Run ponysay
|
# Run ponysay
|
||||||
"$0.py" "$@" | wtrunc
|
"$0.py" "$@"
|
||||||
|
|
145
ponysay.py
145
ponysay.py
|
@ -389,7 +389,12 @@ class Ponysay():
|
||||||
if linuxvt:
|
if linuxvt:
|
||||||
print('\033[H\033[2J', end='')
|
print('\033[H\033[2J', end='')
|
||||||
|
|
||||||
proc = Backend(message = msg, ponyfile = pony, wrapcolumn = int(args.opts['-W']) if args.opts['-W'] is not None else None, width = self.__gettermsize()[1]) # Popen(cmd, stdout=PIPE, stdin=sys.stderr)
|
env_width = os.environ['PONYSAY_FULL_WIDTH'] if 'PONYSAY_FULL_WIDTH' in os.environ else None
|
||||||
|
if env_width is None: env_width = ''
|
||||||
|
widthtruncation = self.__gettermsize()[1] if env_width not in ('yes', 'y', '1') else None
|
||||||
|
messagewrap = int(args.opts['-W']) if args.opts['-W'] is not None else None
|
||||||
|
|
||||||
|
proc = Backend(message = msg, ponyfile = pony, wrapcolumn = messagewrap if messagewrap is not None else 40, width = widthtruncation) # Popen(cmd, stdout=PIPE, stdin=sys.stderr)
|
||||||
exit_value = 0
|
exit_value = 0
|
||||||
try:
|
try:
|
||||||
proc.parse()
|
proc.parse()
|
||||||
|
@ -782,24 +787,58 @@ class Backend():
|
||||||
'''
|
'''
|
||||||
def __init__(self, message, ponyfile, wrapcolumn, width):
|
def __init__(self, message, ponyfile, wrapcolumn, width):
|
||||||
self.message = message
|
self.message = message
|
||||||
|
self.ponyfile = ponyfile
|
||||||
self.wrapcolumn = wrapcolumn
|
self.wrapcolumn = wrapcolumn
|
||||||
self.width = width
|
self.width = width
|
||||||
self.output = None
|
|
||||||
self.link = {'\\' : '\\', '/' : '/'} if not isthink else {'\\' : 'o', '/' : 'o'}
|
self.link = {'\\' : '\\', '/' : '/'} if not isthink else {'\\' : 'o', '/' : 'o'}
|
||||||
|
|
||||||
ponystream = None
|
self.output = None
|
||||||
try:
|
self.pony = None
|
||||||
ponystream = open(ponyfile, 'r')
|
|
||||||
self.pony = ''.join(ponystream.readlines())
|
|
||||||
finally:
|
|
||||||
if ponystream is not None:
|
|
||||||
ponystream.close()
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Process all data
|
Process all data
|
||||||
'''
|
'''
|
||||||
def parse(self):
|
def parse(self):
|
||||||
|
self.__loadFile()
|
||||||
|
self.__processPony()
|
||||||
|
self.__truncate()
|
||||||
|
|
||||||
|
|
||||||
|
def __loadFile(self):
|
||||||
|
ponystream = None
|
||||||
|
try:
|
||||||
|
ponystream = open(self.ponyfile, 'r')
|
||||||
|
self.pony = ''.join(ponystream.readlines())
|
||||||
|
finally:
|
||||||
|
if ponystream is not None:
|
||||||
|
ponystream.close()
|
||||||
|
|
||||||
|
|
||||||
|
def __truncate(self):
|
||||||
|
if self.width is None:
|
||||||
|
return
|
||||||
|
lines = self.output.split('\n')
|
||||||
|
self.output = ''
|
||||||
|
for line in lines:
|
||||||
|
(i, n, x) = (0, len(line), 0)
|
||||||
|
while i < n:
|
||||||
|
c = line[i]
|
||||||
|
i += 1
|
||||||
|
if c == '\033':
|
||||||
|
colour = self.__getcolour(line, i - 1)
|
||||||
|
i += len(colour) - 1
|
||||||
|
self.output += colour
|
||||||
|
else:
|
||||||
|
if x < self.width:
|
||||||
|
self.output += c
|
||||||
|
x += 1
|
||||||
|
self.output += '\n'
|
||||||
|
self.output = self.output[:-1]
|
||||||
|
|
||||||
|
|
||||||
|
def __processPony(self):
|
||||||
self.output = ''
|
self.output = ''
|
||||||
|
|
||||||
variables = {'' : '$'}
|
variables = {'' : '$'}
|
||||||
|
@ -835,11 +874,8 @@ class Backend():
|
||||||
else:
|
else:
|
||||||
indent = 0
|
indent = 0
|
||||||
self.output = '\n'
|
self.output = '\n'
|
||||||
oldindent = indent
|
self.output += line
|
||||||
indent += len(line)
|
indent += len(line)
|
||||||
if self.width is None: self.output += line
|
|
||||||
elif indent < self.width: self.output += line
|
|
||||||
elif oldindent < self.width: self.output += line[self.width - indent]
|
|
||||||
else:
|
else:
|
||||||
(w, h) = (0, 0)
|
(w, h) = (0, 0)
|
||||||
props = dollar[7:]
|
props = dollar[7:]
|
||||||
|
@ -850,7 +886,12 @@ class Backend():
|
||||||
h = int(props[props.index(',') + 1:])
|
h = int(props[props.index(',') + 1:])
|
||||||
else:
|
else:
|
||||||
w = int(props)
|
w = int(props)
|
||||||
#balloon.print(w, h, indent);
|
balloon = self.__getballoon(w, h, indent).split('\n')
|
||||||
|
balloonpre = '\n' + (' ' * indent)
|
||||||
|
self.output += balloon[0]
|
||||||
|
for line in balloon[1:]:
|
||||||
|
self.output += balloonpre;
|
||||||
|
self.output += line;
|
||||||
indent = 0
|
indent = 0
|
||||||
dollar = None
|
dollar = None
|
||||||
else:
|
else:
|
||||||
|
@ -861,40 +902,64 @@ class Backend():
|
||||||
i += 1
|
i += 1
|
||||||
dollar += c
|
dollar += c
|
||||||
elif c == '\033':
|
elif c == '\033':
|
||||||
self.output += c
|
colour = self.__getcolour(self.pony, i - 1)
|
||||||
if i == n: break
|
self.output += colour
|
||||||
c = self.pony[i]
|
i += len(colour) - 1
|
||||||
i += 1
|
|
||||||
self.output += c
|
|
||||||
|
|
||||||
if c == ']':
|
|
||||||
if i == n: break
|
|
||||||
c = self.pony[i]
|
|
||||||
i += 1
|
|
||||||
self.output += c
|
|
||||||
if c == 'P':
|
|
||||||
di = 0
|
|
||||||
while (di < 7) and (i < n):
|
|
||||||
c = self.pony[i]
|
|
||||||
i += 1
|
|
||||||
di += 1
|
|
||||||
self.output = c
|
|
||||||
elif c == '[':
|
|
||||||
while i < n:
|
|
||||||
c = self.pony[i]
|
|
||||||
i += 1
|
|
||||||
self.output += c
|
|
||||||
if (c == '~') or (('a' <= c) and (c <= 'z')) or (('A' <= c) and (c <= 'Z')):
|
|
||||||
break
|
|
||||||
elif c == '\n':
|
elif c == '\n':
|
||||||
self.output += c
|
self.output += c
|
||||||
indent = 0
|
indent = 0
|
||||||
else:
|
else:
|
||||||
if (self.width is None) or (indent < self.width):
|
|
||||||
self.output += c
|
self.output += c
|
||||||
indent += 1
|
indent += 1
|
||||||
|
|
||||||
|
|
||||||
|
def __getcolour(self, input, offset):
|
||||||
|
(i, n) = (offset, len(input))
|
||||||
|
rc = input[i]
|
||||||
|
i += 1
|
||||||
|
if i == n: return rc
|
||||||
|
c = input[i]
|
||||||
|
i += 1
|
||||||
|
rc += c
|
||||||
|
|
||||||
|
if c == ']':
|
||||||
|
if i == n: return rc
|
||||||
|
c = input[i]
|
||||||
|
i += 1
|
||||||
|
rc += c
|
||||||
|
if c == 'P':
|
||||||
|
di = 0
|
||||||
|
while (di < 7) and (i < n):
|
||||||
|
c = input[i]
|
||||||
|
i += 1
|
||||||
|
di += 1
|
||||||
|
rc += c
|
||||||
|
elif c == '[':
|
||||||
|
while i < n:
|
||||||
|
c = input[i]
|
||||||
|
i += 1
|
||||||
|
rc += c
|
||||||
|
if (c == '~') or (('a' <= c) and (c <= 'z')) or (('A' <= c) and (c <= 'Z')):
|
||||||
|
break
|
||||||
|
|
||||||
|
return rc
|
||||||
|
|
||||||
|
|
||||||
|
def __getballoon(self, width, height, left):
|
||||||
|
wrap = None
|
||||||
|
if self.wrapcolumn is not None:
|
||||||
|
wrap = self.wrapcolumn - left
|
||||||
|
|
||||||
|
w = 6
|
||||||
|
h = 5
|
||||||
|
if w < width: w = width
|
||||||
|
if h < height: h = height
|
||||||
|
|
||||||
|
rc = (('X' * w) + '\n') * h
|
||||||
|
|
||||||
|
return rc[:-1]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
'''
|
'''
|
||||||
Start the program from ponysay.__init__ if this is the executed file
|
Start the program from ponysay.__init__ if this is the executed file
|
||||||
|
|
2
testpony
2
testpony
|
@ -1,4 +1,4 @@
|
||||||
$balloon15$[0m
|
indent $balloon15$[0m
|
||||||
$\$
|
$\$
|
||||||
$\$
|
$\$
|
||||||
$\$
|
$\$
|
||||||
|
|
Loading…
Reference in a new issue