diff --git a/asciiWriter/__pycache__/__init__.cpython-37.pyc b/asciiWriter/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000..0d61401 Binary files /dev/null and b/asciiWriter/__pycache__/__init__.cpython-37.pyc differ diff --git a/asciiWriter/__pycache__/marks.cpython-37.pyc b/asciiWriter/__pycache__/marks.cpython-37.pyc new file mode 100644 index 0000000..6978a3f Binary files /dev/null and b/asciiWriter/__pycache__/marks.cpython-37.pyc differ diff --git a/asciiWriter/__pycache__/text.cpython-37.pyc b/asciiWriter/__pycache__/text.cpython-37.pyc new file mode 100644 index 0000000..33f1f9f Binary files /dev/null and b/asciiWriter/__pycache__/text.cpython-37.pyc differ diff --git a/asciiWriter/__pycache__/utils.cpython-37.pyc b/asciiWriter/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000..a93222b Binary files /dev/null and b/asciiWriter/__pycache__/utils.cpython-37.pyc differ diff --git a/asciiWriter/__pycache__/wrap_single_line.cpython-37.pyc b/asciiWriter/__pycache__/wrap_single_line.cpython-37.pyc new file mode 100644 index 0000000..88096e5 Binary files /dev/null and b/asciiWriter/__pycache__/wrap_single_line.cpython-37.pyc differ diff --git a/asciiWriter/text.py b/asciiWriter/text.py index e596127..5fa330b 100644 --- a/asciiWriter/text.py +++ b/asciiWriter/text.py @@ -1,30 +1,55 @@ # -*- coding: utf-8 -*- from .wrap_single_line import wrap_single_line +from .utils import translate, merge -def make_column(text, linewidth=50, height=200, use_hyphenator=None): +def make_column(text, line_width=50, height=200, use_hyphenator=None, line_offset=0): - lines = [] - remaining = text + lines = [] + remaining = text - while remaining and len(lines) < height: - # print('remaining:', remaining) + while remaining and len(lines) < height: - if callable(linewidth): - width = linewidth(len(lines), height) - else: - width = linewidth + if callable(line_width): + width = line_width(len(lines), height) + else: + width = line_width - line, remaining = wrap_single_line(remaining, width, use_hyphenator=use_hyphenator, replace_whitespace=False) - lines.append(line) - - return lines, remaining + if callable(line_offset): + offset = line_offset(len(lines), height) + else: + offset = line_offset + + line, remaining = wrap_single_line(remaining, width, use_hyphenator=use_hyphenator, replace_whitespace=False, drop_whitespace=True) + + line = list(line) + + if offset != 0: + line = [None for _ in range(offset)] + line + + lines.append(line) + + return lines, remaining -# def position_column(column_count, width, text): -# def f (x, y, width, height, mark, blank): -# for i in range(column_count): -# lines, remaining = make_column(linewidth, height, text) +def make_multi_column(text, height=200, column_width=40, column_count=2, column_gap=5, use_hyphenator=None, space_char=None): + # todo: vertical offset? -# return f + remaining = text + i = 0 + + columns = [] + + while remaining and i < column_count: + column, remaining = make_column(remaining, line_width=column_width, height=height, use_hyphenator=use_hyphenator) + if i > 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)