From 8723ac945f14363581c849a2fc8b41bcd58f0af9 Mon Sep 17 00:00:00 2001 From: manetta Date: Mon, 23 Dec 2019 19:14:25 +0100 Subject: [PATCH] added a make_multi_column and variable column shape functiongit add single_column_page.py --- .../__pycache__/__init__.cpython-37.pyc | Bin 0 -> 180 bytes asciiWriter/__pycache__/marks.cpython-37.pyc | Bin 0 -> 1047 bytes asciiWriter/__pycache__/text.cpython-37.pyc | Bin 0 -> 1459 bytes asciiWriter/__pycache__/utils.cpython-37.pyc | Bin 0 -> 2933 bytes .../wrap_single_line.cpython-37.pyc | Bin 0 -> 2805 bytes asciiWriter/text.py | 63 ++++++++++++------ asciiWriter/utils.py | 6 +- asciiWriter/wrap_single_line.py | 13 +--- single_column_page.py | 33 ++++++--- 9 files changed, 72 insertions(+), 43 deletions(-) create mode 100644 asciiWriter/__pycache__/__init__.cpython-37.pyc create mode 100644 asciiWriter/__pycache__/marks.cpython-37.pyc create mode 100644 asciiWriter/__pycache__/text.cpython-37.pyc create mode 100644 asciiWriter/__pycache__/utils.cpython-37.pyc create mode 100644 asciiWriter/__pycache__/wrap_single_line.cpython-37.pyc diff --git a/asciiWriter/__pycache__/__init__.cpython-37.pyc b/asciiWriter/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0d61401254692a6ca13a2b477f9eebb802dbf8c3 GIT binary patch literal 180 zcmZ?b<>g`kf=P`GaS}lKF^B^Lj6jA15Erumi4=xl22Do4l?+87VFd9jRzD*@H&s73 zN#7+uximL5ucTN%J10M{B(*3rFFiF+zo00;B)_DxAhlROu{b$1Q#Y}wL^r9lM7KP% xBty3}FEcqmB^4qSUX%&crXL@lnU`4-AFo$Xd5gm)H$SB`C)EyQ?Pnln008wYFv9=< literal 0 HcmV?d00001 diff --git a/asciiWriter/__pycache__/marks.cpython-37.pyc b/asciiWriter/__pycache__/marks.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6978a3f556f3fc7731abd646fdb0a79c4cc5f09a GIT binary patch literal 1047 zcma)5v2NQi5WSORMRn|;X$rJsR}Hq-4na_)oxK!j0S^Tfl8J>#qCnDU6F5Ur19jJa zK{NK3w07z*Wa=FixgLU|G)NuEdw2I9&!^+@5NLe=3?JShz%SnPBP8P$P5Y7-2@*@F zaE=HvxWIFip^Vlz2RV@O8s>rAlL>u8IhI4YPdAYqy@mAPH=!ZLHWmwA2-Sk1M1BOc zauS~QF)d$#!lDe;$qlZMz~M~L@pdrah^9?waj=0e?1Zxv4PX7_G=nNPm)1nIznf8~8zQc#Ah|;RAOsOKCk2TJMV;leU=b^<$b$8K;R^31jkq`v12F{6mW~+BnfgY$l8arj zC+>;;8*4?u+kQsE!!?CNL)z^vRZ_=IR!(yn=UFL3*7;f`Ws@gbc6K4vRIZzl@-Pk{})^8nc8Gl7v-*|%0E%mFgh4YeVZoCzJO5jfa zh=A38WgGubc=ToP9C9(v1%t=CldrxDt!}hvWIVgBXR=ImrJ{W$>pV$iyqslPHZ`cx zu25BdXG7s@Q>+~h2GfH13}&+jVoD78$!n<~zp+aWSJBDe1S-l-KJ93%d~oT->mSCm zs*vO2eEhUZ7lkZ!GoI&FsilHe$Z}k(N>}>2md!Y6(kwepls-OR=;LLkXUB^&ODiEa zrsoRMRbwr$^htgFIylX}QIsdAd6g!4a|X(-Z|HPZ zF3ZjXL!O-HQej}n(V?>eh^g$Hq^@Nt!l2`LTNfZO@iG&7);TkoO=ntp7`4+Is*8(8 zLNG3x&R4QXvJ#%x+1rq<1Kd%{x5ZI|{)jvIB5uuxAPD1>vwh~#J;t~40rNn6z(!0x z1dsJ6C@}XmhNajr93ze&85W0pLYHY!7H~<&4 zE`UboTzw1s{D>IufV4Y+ZD4i)OzXyK1LMD9CP3H_%FjsaU5)^{jlTu{1Auk_r#gTx zZ--`R+#W}J(o+>$>HyMGhbXX$zzx0X=(XxURo=f&A#Q3P1xJ^Wx{o@>M1xIpH~o0C zN~=YwqhM>BCUt*y6!d(@=`2y|9f=S1rdO$ropd%X40mEPQF<3h c{&_un-f2;ZMJ~?}qXzRC0C2&>;LxN00~?lKjsO4v literal 0 HcmV?d00001 diff --git a/asciiWriter/__pycache__/utils.cpython-37.pyc b/asciiWriter/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a93222b94178c878c00aafacbc21f14c960ea65f GIT binary patch literal 2933 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 0: + offset = (column_width + column_gap) * i + column = translate(column, x=offset, y=0) + columns.append(column) + i += 1 + + width = (column_width + column_gap) * column_count + lines = merge(width, height, space_char, columns) + return lines, remaining + if __name__ == '__main__': - print(make_column('Hello world!', linewidth=25, height=10)) \ No newline at end of file + print(make_column('Hello world!', line_width=25, height=10)) \ No newline at end of file diff --git a/asciiWriter/utils.py b/asciiWriter/utils.py index 1e84a5a..ec7473b 100644 --- a/asciiWriter/utils.py +++ b/asciiWriter/utils.py @@ -17,7 +17,7 @@ def merge(width, height, space_char, layers): for layer in layers: for y in range(min(len(layer), height)): for x in range(min(len(layer[y]), width)): - if layer[y][x] != space_char: + if layer[y][x] and layer[y][x] != space_char: output[y][x] = layer[y][x] return output @@ -51,11 +51,11 @@ def print_lines (lines): for line in lines: stdout.write('{}\n'.format(''.join(line))) -def translate(shape, x=0, y=0, space_char=' '): +def translate(shape, x=0, y=0): ## TODO implement a negative translation? translated = [[] for _ in range(y)] for line in shape: - translated.append([space_char for _ in range(x)] + line) + translated.append([None for _ in range(x)] + line) return translated \ No newline at end of file diff --git a/asciiWriter/wrap_single_line.py b/asciiWriter/wrap_single_line.py index ddbe945..b06f6e4 100644 --- a/asciiWriter/wrap_single_line.py +++ b/asciiWriter/wrap_single_line.py @@ -16,8 +16,6 @@ class TextWrapper(textwrap.TextWrapper): super().__init__(*args, **kwargs) def _wrap_chunks(self, chunks): - # print(chunks) - # quit() lines = [] if (chunks): @@ -56,7 +54,7 @@ class TextWrapper(textwrap.TextWrapper): # First chunk on line is whitespace -- drop it, unless this # is the very beginning of the text (ie. no lines started yet). - if self.drop_whitespace and chunks[-1].strip() == '' and lines: + if self.drop_whitespace and chunks[-1].strip() == '' and chunks[-1][0] != '\n': # and lines: del chunks[-1] while chunks: @@ -130,15 +128,6 @@ def wrap_single_line (text, width=70, **kwargs): w = TextWrapper(width=width, **kwargs) return w.wrap(text) - - # [head, tail] = text.split('\n', 1) - # if len(head) > width: - # w = TextWrapper(width=width, **kwargs) - # line, remaining = w.wrap(text) - # return line, remaining + '\n' + tail - # else: - # return head, tail - if __name__ == '__main__': from hyphen import Hyphenator h_en = Hyphenator('en_US') diff --git a/single_column_page.py b/single_column_page.py index d07fe04..54a8caf 100644 --- a/single_column_page.py +++ b/single_column_page.py @@ -1,16 +1,16 @@ #!/usr/bin/env python3 -from asciiWriter.text import make_column -from asciiWriter.utils import merge, print_lines, make_lines +from asciiWriter.text import make_column, make_multi_column +from asciiWriter.utils import merge, print_lines, make_lines, translate from hyphen import Hyphenator +import math # Define width and height of the output width = 100 -height = 50 +height = 500 # Import a text text = open('texts/language.txt').read() -print(text) # Import a hyphenator h_en = Hyphenator('en_US') @@ -18,17 +18,32 @@ h_en = Hyphenator('en_US') # Make an empty layers list layers = [] +def sin_width (line_nr, _): + amplitude = 25 + period = 150 / (math.pi * 2) + + return 50 + math.floor(math.sin(line_nr / period) * amplitude) + +def cos_width (line_nr, _): + amplitude = 5 + period = 20 / (math.pi * 2) + half_amplitude = amplitude * .5 + + return math.floor(half_amplitude + math.cos(line_nr / period) * half_amplitude) + # Transform the text into a column -lines_column1, remaining = make_column(text, linewidth=30, height=height, use_hyphenator=h_en) -lines_column2, remaining = make_column(remaining, linewidth=30, height=height, use_hyphenator=h_en) +lines, remaining = make_column(text, height=height, use_hyphenator=h_en, line_width=sin_width, line_offset=cos_width) + +# Transform the text into multiple columns +# lines, remaining = make_multi_column(text, height=height-3, use_hyphenator=h_en) +lines = translate(lines, x=15, y=1) # Create an background -background = make_lines(width, height, '*') +background = make_lines(width, height, ' ') # Add all your layers to the layers list layers.append(background) -layers.append(lines_column1) -layers.append(lines_column2) +layers.append(lines) # Merge the layers into one layer again merged = merge(width, height, ' ', layers)