@mutetella: Ich habe mal zum Spaß die Version auf meinem Rechner umgeschrieben. Ich bekommen nun folgende Ausgabe hin:
Code: Alles auswählen
>>> print(formatter.format(range(1, 31)))
1 | 9 | 17 | 25
2 | 10 | 18 | 26
3 | 11 | 19 | 27
4 | 12 | 20 | 28
5 | 13 | 21 | 29
6 | 14 | 22 | 30
7 | 15 | 23
8 | 16 | 24
Hast du dir das so in der Art vorgestellt?
Realisiert habe ich dies durch ein `spacer`-Argument. Dafür müsste ich aber an etlichen Stellen Änderungen vornehmen, wenn man den Spacer von Anfang an übergeben könnte. Die hinzugekommene Methode sieht so aus:
Code: Alles auswählen
def make_column_separator(self, spacing):
if self.spacer:
padding = (spacing // 2) * ' '
sep = padding + self.spacer + padding
else:
sep = spacing * ' '
return sep
Diese wird verwendet in der letzten Zeile von `make_line_template()` (auf die ich bereits verwiesen hatte). Sie lautet dann:
Code: Alles auswählen
return self.make_column_separator(props.spacing).join(parts)
Du kannst dies gerne als Orientierung für den eigenen Formatter benutzen. Ich möchte bald shcol 0.3 rausbringen und aktuell keine Änderungen an der dokumentierten Schnittstelle vornehmen. Daher wird es keinen Spacer in shcol 0.3 geben.
Für Version 0.4 kannst du aber sehr wahrscheinlich damit rechnen. Dafür plane ich, die eigentliche Template-Erzeugung aus dem Formatter-Code rauszunehmen und über einen `TemplateGenerator` zu realisieren. Das ist auf Dauer flexibler sowohl für den Anwender als auch für mich und schränkt die Menge an Argumenten für eine Formatter-Instanz mithilfe der Auslagerung etwas ein. Außerdem möchte ich bis dahin die Erzeugung von Templates für modernes String-Formatting (``'{}'.format('spam')``) als Alternative zum klassischen String-Formatting anbieten. Auch dafür stelle ich mir die Implementierung mit einer gesonderten Klasse einfacher bzw sauberer vor.