Die Funktion soll mit einer gegeben Breite die Positionen der Wörter so berechnen, dass sich eine Blocksatzformatierung ergibt. Allerdings hat die Funktion eine Endlosschleife, deren Existenz ich mir nicht erklären kann. Ich habe bei meinen Untersuchungen herausgefunden, dass die Variable n, die für das Ende der while-Schleife ja maßgeblich ist, immer wieder 0 wird. Außerdem habe ich print-Statements eingebaut um den Verlauf zu verfolgen, dabei wurde ein print-Statement, das in der Funktion ÜBER der while-Schleife ist, regelmäßig wieder aufgerufen, NACHDEM schon Code in der while-Schleife ausgeführt wurde. Auch das ist mir unerklärlich.
Das ist die Funktion, dabei ist textblock[1] der zu formatierende String.
Code: Alles auswählen
def formattextblock(self, textblock, y0, size):
x = self.vtext[3]
y = y0
n = 0
w = 0
shortstring = ""
longstring = ""
textfont = pygame.font.SysFont("georgia", size)
wordlist = textblock[1].split(" ")
lines = []
length = len(wordlist)
while n < length:
longstring = shortstring + wordlist[n]
testlong = textfont.render(longstring, True, (0,0,0))
if (testlong.get_width() + self.vtext[8]*(w-1) <= self.vtext[2]) and n < length - 1:
shortstring = longstring
w += 1
n += 1
else:
if n == length - 1:
w += 1
testshort = textfont.render(shortstring, True, (0,0,0))
if w > 1:
actualinter = (self.vtext[2]-testshort.get_width())/(w-1)
else:
actualinter = 0
line = []
nstart = n - w
while nstart < n:
word = [x, y, wordlist[nstart]]
line.append(word)
testword = textfont.render(wordlist[nstart], True, (0,0,0))
x += (testword.get_width() + actualinter)
nstart += 1
lines.append(line)
x = self.vtext[3]
if n < length - 1:
y += (size + self.vtext[5])
else:
y += (size + self.vtext[9])
longstring = ""
shortstring = ""
w = 0
return lines, y