コード例 #1
0
def test_transformers_can_be_stacked():
    sh = TM.shape((1, 1))
    green = Color((0, 255, 0))
    sh.context.color = "red"
    sh.context.background = green
    sh.context.effects = TM.Effects.underline
    sh[0, 0] = "*"
    res = tuple(sh[0, 0])
    # in SVG land, from where we get the color names, 'green' is 0, 128, 0.
    green = Color((0, 255, 0))
    assert res == ("*", Color("red"), green, TM.Effects.underline)

    sh.context.transformers.append(TM.Transformer(char=lambda value: "."))
    res = tuple(sh[0, 0])
    assert res == (".", Color("red"), green, TM.Effects.underline)

    sh.context.transformers.append(
        TM.Transformer(foreground=lambda value: TM.Color(
            (value.green, value.blue, value.red))))
    res = tuple(sh[0, 0])
    assert res == (".", Color("blue"), green, TM.Effects.underline)

    sh.context.transformers.append(
        TM.Transformer(background=lambda value: TM.Color(
            (value.green, value.blue, value.red))))
    res = tuple(sh[0, 0])
    assert res == (".", Color("blue"), Color("red"), TM.Effects.underline)

    sh.context.transformers.append(
        TM.Transformer(effects=lambda value: value | TM.Effects.blink))
    res = tuple(sh[0, 0])
    assert res == (".", Color("blue"), Color("red"),
                   TM.Effects.underline | TM.Effects.blink)
コード例 #2
0
def test_transformers_stacked_are_run_in_order():
    sh = TM.shape((1,1))
    sh.context.color = "red"
    sh.context.background = "green"
    sh.context.effects = TM.Effects.underline
    sh[0,0] = "*"
    sh.context.transformers.append(TM.Transformer(char=lambda value: "."))
    sh.context.transformers.append(TM.Transformer(char=lambda value: "-" if value == "." else value))
    assert sh[0,0].value == "-"
コード例 #3
0
def test_transformers_stack_accepts_insertions():
    sh = TM.shape((1,1))
    sh.context.color = "red"
    sh.context.background = "green"
    sh.context.effects = TM.Effects.underline
    sh[0,0] = "*"
    sh.context.transformers.append(TM.Transformer(char=lambda value: "-" if value == "." else "#"))
    assert sh[0,0].value == "#"
    sh.context.transformers.insert(0, TM.Transformer(char=lambda value: "."))
    assert sh[0,0].value == "-"
コード例 #4
0
def test_transform_pixel_channel_works():
    sh = TM.shape((1,1))
    def new_pixel(value):
        return "*", TM.Color("red"), TM.Color("blue"), TM.Effects.underline

    sh.context.transformers.append(TM.Transformer(pixel=new_pixel, background=TM.Color("green")))
    assert tuple(sh[0,0]) == ("*", TM.Color("red"), TM.Color("green"), TM.Effects.underline)
コード例 #5
0
def test_transformer_dependency_injection_pixel_parameter():
    sh = TM.shape((1,1))
    sh[0,0] = "a"
    sh.context.transformers.append(TM.Transformer(effects=lambda pixel: TM.Effects.underline if pixel.value.isupper() else TM.Effects.none))
    assert sh[0,0].effects == TM.Effects.none
    sh[0,0] = "A"
    assert sh[0,0].effects == TM.Effects.underline
コード例 #6
0
def test_transformer_effects_channel_works():
    sh = TM.shape((1,1))
    sh.context.effects = TM.Effects.underline
    sh[0,0] = "*"
    assert sh[0,0].effects == TM.Effects.underline
    sh.context.transformers.append(TM.Transformer(effects=lambda value: value | TM.Effects.blink))
    assert sh[0,0].value == "*"
    assert sh[0,0].effects == TM.Effects.blink | TM.Effects.underline
コード例 #7
0
def test_transformer_background_channel_works():
    sh = TM.shape((1,1))
    sh.context.background = "red"
    sh[0,0] = "*"
    assert sh[0,0].background == Color("red")
    sh.context.transformers.append(TM.Transformer(background=lambda value: TM.Color((value.green, value.blue, value.red))))
    assert sh[0,0].value == "*"
    assert sh[0,0].background == Color("blue")
コード例 #8
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_text_transformers_inline_end_markup_dont_turn_off_location_based_mark_when_both_are_defined_as_string(
):
    sc, sh, text_plane = styled_text()
    sc.text.transformers_map["red"] = TM.Transformer(
        foreground=lambda: TM.Color("red"))
    sc.text.transformers_map["blue"] = TM.Transformer(
        background=lambda: TM.Color("blue"))
    sc.text[1].marks[3, 0] = TM.Mark(attributes={"pretransformer": "blue"})

    sc.text[1][0, 0] = "[transformer: red]012345[/transformer]6789"
    sc.update()
    yield None

    assert sc.data[0, 0].foreground == TM.Color("red")
    assert sc.data[3, 0].foreground == TM.Color("red")
    assert sc.data[3, 0].background == TM.Color("blue")
    assert sc.data[6, 0].foreground == TM.values.DEFAULT_FG
    assert sc.data[6, 0].background == TM.Color("blue")
コード例 #9
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_text_push_context_sequence_attribute():
    from copy import copy
    seq = StyledSequence("", {})
    seq._enter_iteration()
    tr1 = TM.Transformer(foreground="red")
    tr2 = TM.Transformer(background="yellow")

    assert tr1 not in seq.context.pretransformers
    original = copy(seq.context.pretransformers)
    seq._context_push({"pretransformer": tr1}, {}, "sequence", 0)
    assert seq.context.pretransformers[-1].foreground == tr1.foreground
    seq._context_push({"pretransformer": tr2}, {}, "sequence", 0)
    assert seq.context.pretransformers[-1].background == tr2.background
    assert seq.context.pretransformers[-2].foreground == tr1.foreground
    seq._context_push({}, {"pretransformer": None}, "sequence", 0)
    assert seq.context.pretransformers[-1].foreground == tr1.foreground
    seq._context_push({}, {"pretransformer": None}, "sequence", 0)
    assert seq.context.pretransformers == original
コード例 #10
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_sequence_retrieves_transformers_from_text_plane_transformers_map(
):
    sc, sh, text_plane = styled_text()
    text_plane.transformers_map["asteriscs"] = TM.Transformer(char="*")
    text_plane[0, 5] = "012[transformer: asteriscs]345[/transformer]6789"
    sc.update()
    yield None
    assert sc.data[2, 5].value == "2"
    for i in range(3, 6):
        assert sc.data[i, 5].value == "*"
    assert sc.data[6, 5].value == "6"
コード例 #11
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_text_transformers_inline_end_markup_turn_off_just_last_transformer(
):
    sc, sh, text_plane = styled_text()
    sc.text.transformers_map["red"] = TM.Transformer(
        foreground=lambda: TM.Color("red"))
    sc.text.transformers_map["blue"] = TM.Transformer(
        background=lambda: TM.Color("blue"))

    sc.text[1][
        0,
        0] = "[transformer: red]012[transformer: blue]345[/transformer]67[/transformer]89"
    sc.update()
    yield None

    assert sc.data[0, 0].foreground == TM.Color("red")
    assert sc.data[3, 0].foreground == TM.Color("red")
    assert sc.data[3, 0].background == TM.Color("blue")
    assert sc.data[6, 0].foreground == TM.Color("red")
    assert sc.data[6, 0].background == TM.values.DEFAULT_BG
    assert sc.data[8, 0].foreground == TM.values.DEFAULT_FG
    assert sc.data[8, 0].background == TM.values.DEFAULT_BG
コード例 #12
0
def text():
    global sc
    sc.update()
    # TM.pause()

    entry1 = W.Text(sc,
                    size=(4, 3),
                    pos=(0, 2),
                    text_plane=4,
                    cancellable=True,
                    border=True)
    entry2 = W.Entry(sc,
                     width=10,
                     pos=(0, 17),
                     enter_callback=done,
                     text_plane=1,
                     border=True)
    #sh = TM.shape(TM.V2(8,5)*4)
    #sshaped_area(sh, 4)
    #sp = TM.Sprite(sh)

    #sh.draw.fill(color="white")
    #sp.active = True
    #sp.pos = (0, 10)
    #entry = W.Text(sc, sprite=sp, pos=(0, 5),esc_callback=done, text_plane=4)
    entry1.shape.context.color = "red"
    entry2.shape.context.color = "red"
    entry2.shape.context.background = (128, 128, 0)
    #entry2.shape.draw.fill(char=" ")
    entry1.sprite.transformers.append(
        TM.Transformer(background=lambda: (0, 0, 0)
                       if not entry1.focus else (90, 90, 90)))
    TM.context.fps = 15

    menu1 = W.ScreenMenu(
        sc,
        {
            "1": (lambda: sc.draw.rect(
                (30, 0, 38, 4), fill=True, color="red"), "vermelho"),
            "2": (lambda: sc.draw.rect(
                (30, 0, 38, 4), fill=True, color="yellow"), "amarelo"),
            "3": ("toggle", "Liga/desliga menu"),
            "4": ({
                "1": (lambda: sc.draw.rect(
                    (30, 0, 38, 4), fill=True, color="blue"), "azul"),
                "5": (lambda: sc.draw.rect(
                    (30, 0, 38, 4), fill=True, color="green"), "verde"),
            }, "mais cores"),
            "f": (file_selector, "escolher arquivo")
        },
        columns=3,
    )
コード例 #13
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_text_transformers_spam_based_index_attribute_and_deactivation(
):
    sc, sh, text_plane = styled_text()
    sc.text.transformers_map["red"] = TM.Transformer(
        foreground=lambda: TM.Color("red"))
    sc.text.transformers_map["deg1"] = TM.Transformer(
        background=lambda sequence_index: TM.Color(
            (0, 25 * sequence_index, 255 - 25 * sequence_index)))

    sc.text[1][
        0,
        0] = "[transformer: red 5]abc[transformer: deg1 10]defghijklmnopqrstyz"
    sc.update()
    yield None
    for i in range(0, 20):
        assert sc.data[i, 0].foreground == (TM.Color("red")
                                            if i < 5 else TM.values.DEFAULT_FG)
        if i < 3 or 13 <= i:
            assert sc.data[i, 0].background == TM.values.DEFAULT_BG
        else:
            assert sc.data[i, 0].background == TM.Color(
                (0, 25 * (i - 3), 255 - 25 * (i - 3)))
コード例 #14
0
ファイル: test_text_style.py プロジェクト: GinLuc/terminedia
def test_styled_sequence_can_handle_pretransformers():
    sc, sh, text_plane = styled_text()
    msg = "0123456789"
    tt = TM.Transformer(
        foreground=lambda pos: TM.Color((pos[0] * 25 % 256, 0, 0)),
        background=lambda pos: TM.Color((0, 0, (255 - pos[0] * 25) % 256)),
    )
    aa = StyledSequence(msg, {0: TM.Mark(attributes={"pretransformer": tt})},
                        text_plane)
    aa.render()
    sc.update()
    yield None
    assert sc.data[0, 0].foreground == TM.Color((0, 0, 0))
    assert sc.data[0, 0].background == TM.Color((0, 0, 255))
    assert sc.data[9, 0].foreground == TM.Color((225, 0, 0))
    assert sc.data[9, 0].background == TM.Color((0, 0, 30))
コード例 #15
0
def test_transformer_character_channel_works_with_static_transform():
    sh = TM.shape((1, 1))
    sh[0, 0] = "*"
    assert sh[0, 0].value == "*"
    sh.context.transformers.append(TM.Transformer(char="."))
    assert sh[0, 0].value == "."
コード例 #16
0
ファイル: shapes.py プロジェクト: GinLuc/terminedia
def main(shape, resolution=None, clear=False, cycle=False):
    """Quick example to navigate an string-defined shape through
    the terminal using the arrow keys! Press <ESC> to exit.


    Usage example:
    $ terminedia-shapes --custom="     \\n *** \\n * * \\n *** "

    """
    # Work around apparent bug in click:
    if shape is None:
        shape = shape1
    if "\\n" in shape:
        shape = shape.replace("\\n", "\n")
    original_shape = shape
    shape = TM.shape(
        original_shape,
        **({
            "color_map": c_map
        } if original_shape == shape2 else {}))

    shape = TM.FullShape.promote(shape, resolution=resolution)

    last_frame = time.time()
    time_acumulator = 0
    counter = 0

    def cycle_color(foreground, tick):
        if foreground != TM.DEFAULT_FG:
            return foreground
        return TM.Color(["red", "blue", "yellow", "lime"][tick % 4])

    try:

        with keyboard(), Screen(clear_screen=clear) as scr:
            # with Screen(clear_screen=True) as scr:

            x = scr.get_size()[0] // 2 - 6
            y = 0
            pos = V2(x, y)
            sprite = scr.data.sprites.add(shape, pos, active=True)
            if cycle:
                sprite.transformers.append(
                    TM.Transformer(foreground=cycle_color))

            while True:
                key = inkey()
                if key in (K.ESC, "q"):
                    break
                if not clear and key in (K.RIGHT, K.LEFT, K.UP, K.DOWN):
                    scr.data.draw.rect(sprite.rect, erase=True)
                sprite.pos += (
                    ((key == K.RIGHT) - (key == K.LEFT)),
                    ((key == K.DOWN) - (key == K.UP)),
                )

                scr.update()
                current = time.time()
                ellapsed = current - last_frame
                time_acumulator += ellapsed
                counter += 1
                pause_time = max(FRAME_DELAY - ellapsed, 0)
                time.sleep(pause_time)
                last_frame = time.time()
    finally:
        print(
            f"\nTotal frames: {counter}\nAverage time per frame: {time_acumulator / (counter or 1):.04f}"
        )
コード例 #17
0
import sys
import terminedia as TM

sc = TM.Screen()

b1 = TM.shape(sys.argv[1] if len(sys.argv) > 2 else "butterfly.jpg", size=(60,30))
b2 = TM.FullShape.promote(b1)
sc.data.sprites.append(b2)
sc.data.sprites[0].active=True

def pixel(pixel):
    fg = TM.Color(pixel.foreground)
    char = "#*o.  "[int((1 - fg.value) * 5)]
    fg.value = 1
    return char, fg, pixel.background, pixel.effects

sc.data.sprites[0].transformers.append(TM.Transformer(pixel=pixel))
sc.update()