warping error with combining characters

This commit is contained in:
Mattias Andrée 2012-08-22 01:55:50 +02:00
parent 08fb7cc7e6
commit 22d7318624

15
ponysay
View file

@ -995,19 +995,19 @@ class Balloon():
rc = [] rc = []
for j in range(0, len(self.n)): for j in range(0, len(self.n)):
outer = len(self.nw[j]) + len(self.ne[j]) outer = UCS.dispLen(self.nw[j]) + UCS.dispLen(self.ne[j])
inner = len(self.nnw[j]) + len(self.nne[j]) inner = UCS.dispLen(self.nnw[j]) + UCS.dispLen(self.nne[j])
if outer + inner >= w: if outer + inner >= w:
rc.append(self.nw[j] + self.nnw[j] + self.n[j] * (w - outer - inner) + self.nne[j] + self.ne[j]) rc.append(self.nw[j] + self.nnw[j] + self.n[j] * (w - outer - inner) + self.nne[j] + self.ne[j])
else: else:
rc.append(self.nw[j] + self.n[j] * (w - outer) + self.ne[j]) rc.append(self.nw[j] + self.n[j] * (w - outer) + self.ne[j])
for j in range(0, len(lines)): 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]) rc.append(ws[j] + lines[j] + ' ' * (w - lencalc(lines[j]) - UCS.dispLen(self.w) - UCS.dispLen(self.e)) + es[j])
for j in range(0, len(self.s)): for j in range(0, len(self.s)):
outer = len(self.sw[j]) + len(self.se[j]) outer = UCS.dispLen(self.sw[j]) + UCS.dispLen(self.se[j])
inner = len(self.ssw[j]) + len(self.sse[j]) inner = UCS.dispLen(self.ssw[j]) + UCS.dispLen(self.sse[j])
if outer + inner >= w: if outer + inner >= w:
rc.append(self.sw[j] + self.ssw[j] + self.s[j] * (w - outer - inner) + self.sse[j] + self.se[j]) rc.append(self.sw[j] + self.ssw[j] + self.s[j] * (w - outer - inner) + self.sse[j] + self.se[j])
else: else:
@ -1069,6 +1069,7 @@ class Backend():
x += nx x += nx
else: else:
buf += c buf += c
if not UCS.isCombining(c):
x += 1 x += 1
buf += '\n' buf += '\n'
self.message = buf[:-1] self.message = buf[:-1]
@ -1107,6 +1108,7 @@ class Backend():
else: else:
if x < self.width: if x < self.width:
self.output += c self.output += c
if not UCS.isCombining(c):
x += 1 x += 1
self.output += '\n' self.output += '\n'
self.output = self.output[:-1] self.output = self.output[:-1]
@ -1222,6 +1224,7 @@ class Backend():
if nonskip > 0: if nonskip > 0:
nonskip -= 1 nonskip -= 1
self.output += c + colourstack.feed(c); self.output += c + colourstack.feed(c);
if not UCS.isCombining(c):
indent += 1 indent += 1
else: else:
skip -= 1 skip -= 1
@ -1302,7 +1305,7 @@ class Backend():
msg = self.__wrapMessage(msg, wrap) msg = self.__wrapMessage(msg, wrap)
lines = msg.split('\n') lines = msg.split('\n')
return self.balloon.get(width, height, lines, self.__len) return self.balloon.get(width, height, lines, lambda text : self.__len(text) - UCS.countCombining(text))
''' '''