From c2e293636167747063a15965f9c09b87fd477af5 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sat, 11 May 2019 15:00:17 +0200 Subject: [PATCH 1/9] Abandon line events in favor of complete frames --- termtosvg/anim.py | 12 +-- termtosvg/main.py | 78 +++++++++------- termtosvg/term.py | 116 +++++------------------- termtosvg/tests/test_term.py | 166 +++++++++++------------------------ 4 files changed, 120 insertions(+), 252 deletions(-) diff --git a/termtosvg/anim.py b/termtosvg/anim.py index a25fa80..bdd7f7e 100644 --- a/termtosvg/anim.py +++ b/termtosvg/anim.py @@ -132,16 +132,16 @@ def __call__(self, arg): return self.group_index, key_attributes -def render_animation(records, filename, template, cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): - def group_by_time(records): - def time_and_duration(record): - return record.time, record.duration - for record_group in records: +def render_animation(frames, filename, template, cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): + def group_by_time(frames): + def time_and_duration(frame): + return frame.time, frame.duration + for record_group in frames: with_duration = [r for r in record_group if r.duration is not None] sorted_group = sorted(with_duration, key=time_and_duration) yield from groupby(sorted_group, key=time_and_duration) - event_records, root = _render_preparation(records, template, cell_width, + event_records, root = _render_preparation(frames, template, cell_width, cell_height) root = _render_animation(group_by_time(event_records), root, cell_width, diff --git a/termtosvg/main.py b/termtosvg/main.py index 5646166..c7deb7d 100644 --- a/termtosvg/main.py +++ b/termtosvg/main.py @@ -32,19 +32,23 @@ def integral_duration(duration): raise ValueError('duration must be an integer greater than 0') -def parse(args, templates, default_template, default_geometry, default_min_dur, default_max_dur, - default_cmd): +def parse(args, templates, default_template, default_geometry, default_min_dur, + default_max_dur, default_cmd): """Parse command line arguments :param args: Arguments to parse :param templates: Mapping between template names and templates :param default_template: Name of the default template :param default_geometry: Default geometry of the screen - :param default_min_dur: Default minimal duration between frames in milliseconds - :param default_max_dur: Default maximal duration between frames in milliseconds - :param default_max_dur: Default maximal duration between frames in milliseconds + :param default_min_dur: Default minimal duration between frames in + milliseconds + :param default_max_dur: Default maximal duration between frames in + milliseconds + :param default_max_dur: Default maximal duration between frames in + milliseconds :param default_cmd: Default program (with argument list) recorded - :return: Tuple made of the subcommand called (None, 'render' or 'record') and all parsed + :return: Tuple made of the subcommand called (None, 'render' or 'record') + and all parsed arguments """ command_parser = argparse.ArgumentParser(add_help=False) @@ -120,8 +124,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, nargs='?', help='optional filename of the SVG animation. If --still-frame is ' 'specified, output_path should be the path of the directory where ' - 'still frames will be stored. If missing, a random path will be ' - 'automatically generated.', + 'still frames will be stored. If missing, a random path ' + 'will be automatically generated.', metavar='output_path' ) if args: @@ -143,8 +147,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, if args[0] == 'render': parser = argparse.ArgumentParser( description='render an asciicast recording as an SVG animation', - parents=[template_parser, min_duration_parser, max_duration_parser, - still_frames_parser], + parents=[template_parser, min_duration_parser, + max_duration_parser, still_frames_parser], usage=RENDER_USAGE ) parser.add_argument( @@ -156,8 +160,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, nargs='?', help='optional filename of the SVG animation. If --still-frame ' 'is specified, output_path should be the path of the ' - 'directory where still frames will be stored. If missing, ' - 'a random path will be automatically generated.', + 'directory where still frames will be stored. If ' + 'missing, a random path will be automatically generated.', metavar='output_path' ) return args[0], parser.parse_args(args[1:]) @@ -165,7 +169,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, return None, parser.parse_args(args) -def record_subcommand(process_args, geometry, input_fileno, output_fileno, cast_filename): +def record_subcommand(process_args, geometry, input_fileno, output_fileno, + cast_filename): """Save a terminal session as an asciicast recording""" from termtosvg.term import get_terminal_size, TerminalMode, record logger.info('Recording started, enter "exit" command or Control-D to end') @@ -185,33 +190,34 @@ def record_subcommand(process_args, geometry, input_fileno, output_fileno, cast_ logger.info('Recording ended, cast file is {}'.format(cast_filename)) -def render_subcommand(still, template, cast_filename, output_path, min_frame_duration, - max_frame_duration): +def render_subcommand(still, template, cast_filename, output_path, + min_frame_duration, max_frame_duration): """Render the animation from an asciicast recording""" from termtosvg.asciicast import read_records - from termtosvg.term import screen_events + from termtosvg.term import timed_frames logger.info('Rendering started') asciicast_records = read_records(cast_filename) - replayed_records = screen_events(asciicast_records, min_frame_duration, - max_frame_duration) + frames = timed_frames(asciicast_records, min_frame_duration, + max_frame_duration) if still: - termtosvg.anim.render_still_frames(records=replayed_records, + termtosvg.anim.render_still_frames(records=frames, directory=output_path, template=template) logger.info('Rendering ended, SVG frames are located at {}' .format(output_path)) else: - termtosvg.anim.render_animation(records=replayed_records, + termtosvg.anim.render_animation(records=frames, filename=output_path, template=template) logger.info('Rendering ended, SVG animation is {}'.format(output_path)) -def record_render_subcommand(process_args, still, template, geometry, input_fileno, output_fileno, - output_path, min_frame_duration, max_frame_duration): +def record_render_subcommand(process_args, still, template, geometry, + input_fileno, output_fileno, output_path, + min_frame_duration, max_frame_duration): """Record and render the animation on the fly""" - from termtosvg.term import get_terminal_size, TerminalMode, record, screen_events + from termtosvg.term import get_terminal_size, TerminalMode, record, timed_frames logger.info('Recording started, enter "exit" command or Control-D to end') if geometry is None: @@ -224,14 +230,14 @@ def record_render_subcommand(process_args, still, template, geometry, input_file # do not want two processes writing to the same terminal. asciicast_records = record(process_args, columns, lines, input_fileno, output_fileno) - events = screen_events(asciicast_records, min_frame_duration, - max_frame_duration) + frames = timed_frames(asciicast_records, min_frame_duration, + max_frame_duration) if still: - termtosvg.anim.render_still_frames(events, output_path, template) + termtosvg.anim.render_still_frames(frames, output_path, template) end_msg = 'Rendering ended, SVG frames are located at {}' else: - termtosvg.anim.render_animation(events, output_path, template) + termtosvg.anim.render_animation(frames, output_path, template) end_msg = 'Rendering ended, SVG animation is {}' logger.info(end_msg.format(output_path)) @@ -255,7 +261,8 @@ def main(args=None, input_fileno=None, output_fileno=None): templates = termtosvg.config.default_templates() default_template = 'gjm8' if 'gjm8' in templates else sorted(templates)[0] default_cmd = os.environ.get('SHELL', 'sh') - command, args = parse(args[1:], templates, default_template, None, 1, None, default_cmd) + command, args = parse(args[1:], templates, default_template, None, 1, + None, default_cmd) if command == 'record': if args.output_path is None: @@ -264,8 +271,8 @@ def main(args=None, input_fileno=None, output_fileno=None): else: cast_filename = args.output_path process_args = shlex.split(args.command) - record_subcommand(process_args, args.screen_geometry, input_fileno, output_fileno, - cast_filename) + record_subcommand(process_args, args.screen_geometry, input_fileno, + output_fileno, cast_filename) elif command == 'render': if args.output_path is None: if args.still_frames: @@ -282,8 +289,9 @@ def main(args=None, input_fileno=None, output_fileno=None): if not os.path.isdir(output_path): raise - render_subcommand(args.still_frames, args.template, args.input_file, output_path, - args.min_frame_duration, args.max_frame_duration) + render_subcommand(args.still_frames, args.template, args.input_file, + output_path, args.min_frame_duration, + args.max_frame_duration) else: if args.output_path is None: if args.still_frames: @@ -302,8 +310,10 @@ def main(args=None, input_fileno=None, output_fileno=None): process_args = shlex.split(args.command) record_render_subcommand(process_args, args.still_frames, args.template, - args.screen_geometry, input_fileno, output_fileno, output_path, - args.min_frame_duration, args.max_frame_duration) + args.screen_geometry, input_fileno, + output_fileno, output_path, + args.min_frame_duration, + args.max_frame_duration) for handler in logger.handlers: handler.close() diff --git a/termtosvg/term.py b/termtosvg/term.py index 82d5140..5fd096d 100644 --- a/termtosvg/term.py +++ b/termtosvg/term.py @@ -2,8 +2,8 @@ This module exposes functions for - recording the output of a shell process in asciicast v2 format (`record`) - - reporting updates made to the screen during a terminal session that - was recorded (`screen_events`) + - producing frames (2D array of CharacterCell) from the raw output of + `record` (`timed_frames`) A context manager named `TerminalMode` is also provided and is to be used with the `record` function to ensure that the terminal state is always properly @@ -20,7 +20,6 @@ import struct import termios import tty -from copy import copy from collections import defaultdict, namedtuple from typing import Iterator @@ -30,17 +29,8 @@ from termtosvg import anim from termtosvg.asciicast import AsciiCastV2Event, AsciiCastV2Header - -def _cursor___eq__(self, other): - # TODO: See if upstream is interested in incorparating this - attributes = ['x', 'y', 'hidden'] - return (isinstance(other, self.__class__) and - all(self.__getattribute__(a) == other.__getattribute__(a) - for a in attributes)) - - -# Monkey patch equality operator so that we can detect changes of a cursor -pyte.screens.Cursor.__eq__ = _cursor___eq__ +TimedFrame = namedtuple('TimedFrame', ['time', 'duration', 'buffer', 'width', + 'height']) class TerminalMode: @@ -220,11 +210,6 @@ def _group_by_time(event_records, min_rec_duration, max_rec_duration, last_rec_d yield accumulator_event -Configuration = namedtuple('Configuration', ['width', 'height']) -DisplayLine = namedtuple('DisplayLine', ['row', 'line', 'time', 'duration']) -DisplayLine.__new__.__defaults__ = (None,) - - def record(process_args, columns, lines, input_fileno, output_fileno): """Record a process in asciicast v2 format @@ -263,22 +248,14 @@ def record(process_args, columns, lines, input_fileno, output_fileno): duration=None) -def screen_events(records, min_frame_dur=1, max_frame_dur=None, last_frame_dur=1000): - """Yields events describing updates to the screen for this recording +def timed_frames(records, min_frame_dur=1, max_frame_dur=None, last_frame_dur=1000): + """Return instances of TimedFrame computed from asciicast records - The first event yielded is an instance of Configuration which - describes the geometry of the screen. - All following events are instances of DisplayLine. Those - events describe the appearance of a line on the screen (if the duration - of the event is set to None) or the erasure of a line (if the duration - of the event is an integer). + Asciicast records are first coalesced so that the mininum duration between + two frames is at least `min_frame_dur` milliseconds. Events with a duration + greater than `max_frame_dur` will see their duration reduced to that value. - Before updates to the screen are reported to the caller they will be - coalesced so that the mininum duration between two updates is at least - `min_frame_dur` milliseconds. Events with a duration greater than - `max_frame_dur` will see their duration reduced to that value. - - The duration of all events lasting until the end of the animation + The duration of all frames lasting until the end of the animation will be adjusted so that the last frame of the animation lasts `last_frame_dur` @@ -298,61 +275,35 @@ def screen_events(records, min_frame_dur=1, max_frame_dur=None, last_frame_dur=1 if not max_frame_dur and header.idle_time_limit: max_frame_dur = int(header.idle_time_limit * 1000) - yield Configuration(header.width, header.height) screen = pyte.Screen(header.width, header.height) stream = pyte.Stream(screen) timed_records = _group_by_time(records, min_frame_dur, max_frame_dur, last_frame_dur) - last_cursor = None - display_events = {} - time = 0 + for record_ in timed_records: assert isinstance(record_, AsciiCastV2Event) for char in record_.event_data: stream.feed(char) - redraw_buffer, last_cursor = _redraw_buffer(screen, last_cursor) - display_events, events = _feed(redraw_buffer, display_events, time) - if events: - yield events - screen.dirty.clear() - time += int(1000 * record_.duration) - - events = [] - for row in list(display_events): - event_without_duration = display_events.pop(row) - duration = time - event_without_duration.time - events.append(event_without_duration._replace(duration=duration)) - - if events: - yield events + yield TimedFrame(int(1000 * record_.time), + int(1000 * record_.duration), + _screen_buffer(screen), + header.width, + header.height) -def _redraw_buffer(screen, last_cursor): - """Return lines of the screen to be redrawn and the current cursor - - Most of the work is done by Pyte through Screen.dirty. We just - need to monitor updates to the cursor. - """ +def _screen_buffer(screen): assert isinstance(screen, pyte.Screen) - assert isinstance(last_cursor, (type(None), pyte.screens.Cursor)) - - rows_changed = set(screen.dirty) - if screen.cursor != last_cursor: - if not screen.cursor.hidden: - rows_changed.add(screen.cursor.y) - if last_cursor is not None and not last_cursor.hidden: - rows_changed.add(last_cursor.y) buffer = defaultdict(dict) - for row in rows_changed: + for row in range(screen.lines): buffer[row] = { column: anim.CharacterCell.from_pyte(screen.buffer[row][column]) for column in screen.buffer[row] } - if screen.cursor != last_cursor and not screen.cursor.hidden: + if not screen.cursor.hidden: row, column = screen.cursor.y, screen.cursor.x try: data = screen.buffer[row][column].data @@ -364,34 +315,7 @@ def _redraw_buffer(screen, last_cursor): bg=screen.cursor.attrs.bg, reverse=True) buffer[row][column] = anim.CharacterCell.from_pyte(cursor_char) - - current_cursor = copy(screen.cursor) - return buffer, current_cursor - - -def _feed(redraw_buffer, display_events, time): - """Return events based on the lines to redraw and the lines on screen - - Warning: display_events is updated in place (and also returned) - """ - events = [] - - # Send TerminalDisplayDuration event for old lines that were - # displayed on the screen and need to be redrawn - for row in list(display_events): - if row in redraw_buffer: - event_without_duration = display_events.pop(row) - duration = time - event_without_duration.time - events.append(event_without_duration._replace(duration=duration)) - - # Send TerminalDisplayLine event for non empty new (or updated) lines - for row in redraw_buffer: - if redraw_buffer[row]: - display_events[row] = DisplayLine(row, redraw_buffer[row], time, - None) - events.append(display_events[row]) - - return display_events, events + return buffer def get_terminal_size(fileno): diff --git a/termtosvg/tests/test_term.py b/termtosvg/tests/test_term.py index 3f89f38..9861200 100644 --- a/termtosvg/tests/test_term.py +++ b/termtosvg/tests/test_term.py @@ -84,18 +84,20 @@ def test__buffer_simple_events(self): escape_sequences = ['{}\r\n'.format(i) for i in range(5)] screen = pyte.Screen(80, 24) - screen.dirty.clear() stream = pyte.Stream(screen) - last_cursor = None for count, escape_sequence in enumerate(escape_sequences): with self.subTest(case='Simple events (record #{})'.format(count)): stream.feed(escape_sequence) - buffer, last_cursor = term._redraw_buffer(screen, last_cursor) - screen.dirty.clear() - expected_buffer = { - count: {0: anim.CharacterCell(str(count))}, - (count+1): {0: CURSOR_CHAR}, - } + buffer = term._screen_buffer(screen) + expected_buffer = {} + for i in range(screen.lines): + if i <= count: + expected_buffer[i] = {0: anim.CharacterCell(str(i))} + elif i == count+1: + expected_buffer[i] = {0: CURSOR_CHAR} + else: + expected_buffer[i] = {} + self.assertEqual(expected_buffer, buffer) def test__buffer_hidden_cursor(self): @@ -112,127 +114,60 @@ def test__buffer_hidden_cursor(self): screen = pyte.Screen(80, 24) stream = pyte.Stream(screen) - def hidden_cursor(x, y): - c = pyte.screens.Cursor(x, y) - c.hidden = True - return c - expected_cursors = [ - pyte.screens.Cursor(1, 0), - hidden_cursor(1, 1), - pyte.screens.Cursor(1, 2), + ((1, 0), True), + ((1, 1), False), + ((1, 2), True), ] z = itertools.zip_longest(expected_cursors, escape_sequences) - cursor = None - for count, (expected_cursor, escape_sequence) in enumerate(z): + for count, ((cursor_pos, cursor_visible), escape_sequence) in enumerate(z): with self.subTest(case='Hidden cursor - item #{}'.format(count)): stream.feed(escape_sequence) - buffer, cursor = term._redraw_buffer(screen, cursor) - self.assertEqual(expected_cursor, cursor) + buffer = term._screen_buffer(screen) + column, line = cursor_pos + if cursor_visible: + self.assertEqual(buffer[line][column], CURSOR_CHAR) # Ensure old cursors are deleted for row in buffer: for column in buffer[row]: if buffer[row][column].text == ' ': - self.assertEqual((column, row), - (cursor.x, cursor.y)) - - def test__feed(self): - redraw_buffers = [ - { - 0: {0: anim.CharacterCell('1')}, - 1: {0: CURSOR_CHAR}, - }, - { - 1: {0: anim.CharacterCell('2')}, - 2: {0: CURSOR_CHAR}, - } - ] + self.assertEqual((column, row), cursor_pos) - all_expected_events = [ - [ - term.DisplayLine(0, {0: anim.CharacterCell('1')}, 0), - term.DisplayLine(1, {0: CURSOR_CHAR}, 0), - ], - [ - term.DisplayLine(1, {0: CURSOR_CHAR}, 0, 1000), - term.DisplayLine(1, {0: anim.CharacterCell('2')}, 1000), - term.DisplayLine(2, {0: CURSOR_CHAR}, 1000), - ] - ] - - display_events = {} - time = 0 - z = itertools.zip_longest(redraw_buffers, all_expected_events) - for buffer, expected_events in z: - display_events, events = term._feed(buffer, display_events, time) - with self.subTest(time=time): - self.assertEqual(expected_events, events) - time += 1000 - - def test_screen_events_simple_events(self): + def test_timed_frames_simple_events(self): records = [AsciiCastV2Header(version=2, width=80, height=24, theme=THEME)] + \ [AsciiCastV2Event(time=i, event_type='o', event_data='{}\r\n'.format(i), duration=None) for i in range(0, 2)] - events = term.screen_events(records, 1, None, 42) - list_events = [next(events)] - list_events.extend([list(le) for le in events]) - - expected_events = [ - term.Configuration(80, 24), - [ - term.DisplayLine(0, {0: anim.CharacterCell('0')}, 0), - term.DisplayLine(1, {0: CURSOR_CHAR}, 0), - ], - [ - term.DisplayLine(1, {0: CURSOR_CHAR}, 0, 1000), - term.DisplayLine(1, {0: anim.CharacterCell('1')}, 1000), - term.DisplayLine(2, {0: CURSOR_CHAR}, 1000), - ], - [ - term.DisplayLine(0, {0: anim.CharacterCell('0')}, 0, 1042), - term.DisplayLine(1, {0: anim.CharacterCell('1')}, 1000, 42), - term.DisplayLine(2, {0: CURSOR_CHAR}, 1000, 42), - ], - ] + frames = list(term.timed_frames(records, 1, None, 42)) - z = itertools.zip_longest(expected_events, list_events) - for count, (expected_item, item) in enumerate(z): - with self.subTest(case='Simple events - item #{}'.format(count)): - self.assertEqual(expected_item, item) - - def test_screen_events_empty_groups(self): - """screen_events should never return an empty group of events""" - records = [ - AsciiCastV2Header(version=2, width=80, height=24, theme=THEME), - AsciiCastV2Event(0, 'o', 'i', None), - AsciiCastV2Event(1, 'o', '', None), - AsciiCastV2Event(2, 'o', '', None), - AsciiCastV2Event(3, 'o', '', None), - ] - expected_events = [ - term.Configuration(80, 24), - [ - term.DisplayLine(0, {0: anim.CharacterCell('i'), 1: CURSOR_CHAR}, 0), - ], - [ - term.DisplayLine(0, {0: anim.CharacterCell('i'), 1: CURSOR_CHAR}, 0, 4000), - ] + expected_frames = [ + term.TimedFrame(0, 1000, { + 0: {0: anim.CharacterCell('0')}, + 1: {0: CURSOR_CHAR}, + }, 80, 24), + term.TimedFrame(1000, 42, { + 0: {0: anim.CharacterCell('0')}, + 1: {0: anim.CharacterCell('1')}, + 2: {0: CURSOR_CHAR}, + }, 80, 24) ] - events = term.screen_events(records, 1, None, last_frame_dur=1000) - - list_events = [next(events)] - list_events.extend([le for le in events]) - - z = itertools.zip_longest(expected_events, list_events) - for count, (expected_item, item) in enumerate(z): - with self.subTest(case='No empty group - item #{}'.format(count)): - self.assertEqual(expected_item, item) - - def test_screen_events_unprintable_chars(self): + z = itertools.zip_longest(expected_frames, frames) + for (expected_frame, frame) in z: + self.assertEqual(expected_frame.time, frame.time) + self.assertEqual(expected_frame.duration, frame.duration) + self.assertEqual(expected_frame.width, frame.width) + self.assertEqual(expected_frame.height, frame.height) + for row in frame.buffer: + if row in expected_frame.buffer: + self.assertEqual(expected_frame.buffer[row], + frame.buffer[row]) + else: + self.assertEqual({}, frame.buffer[row]) + + def test_timed_frames_unprintable_chars(self): # Ensure zero width characters in terminal output does not result # in Pyte dropping all following data # Issue https://github.com/nbedos/termtosvg/issues/89 @@ -248,16 +183,15 @@ def test_screen_events_unprintable_chars(self): AsciiCastV2Header(version=2, width=80, height=24, theme=THEME), AsciiCastV2Event(0, 'o', test_text, None), ] - events = term.screen_events(records, 1, None, last_frame_dur=1000) + events = term.timed_frames(records, 1, None, last_frame_dur=1000) - # Skip configuration event - next(events) + frame = next(events) + characters = ''.join(frame.buffer[0][col].text + for col in frame.buffer[0]) - characters = next(events)[0].line - line_text = ''.join(characters[c].text for c in sorted(characters)) # Ensure data following sleuth emoji wasn't ignored # (rstrip() removes blank cursor character at end of line) - self.assertEqual(line_text.rstrip()[-1], test_text[-1]) + self.assertEqual(characters.rstrip()[-1], test_text[-1]) def test_get_terminal_size(self): with self.subTest(case='Successful get_terminal_size call'): From a77aaeba48a248af567f636f2a6dd2a2ad39a086 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 12 May 2019 14:01:43 +0200 Subject: [PATCH 2/9] Switch to CSS animations --- termtosvg/anim.py | 226 +++++++++++++++-------------------- termtosvg/main.py | 18 +-- termtosvg/term.py | 36 +++--- termtosvg/tests/test_anim.py | 129 ++++++++++++-------- termtosvg/tests/test_term.py | 12 +- 5 files changed, 209 insertions(+), 212 deletions(-) diff --git a/termtosvg/anim.py b/termtosvg/anim.py index bdd7f7e..c906144 100644 --- a/termtosvg/anim.py +++ b/termtosvg/anim.py @@ -4,14 +4,11 @@ import pkgutil from collections import namedtuple from itertools import groupby -from typing import Iterator import pyte.graphics import pyte.screens from lxml import etree -from termtosvg import term - # Ugliest hack: Replace the first 16 colors rgb values by their names so that # termtosvg can distinguish FG_BG_256[0] (which defaults to black #000000 but # can be styled with themes) from FG_BG_256[16] (which is also black #000000 @@ -132,43 +129,30 @@ def __call__(self, arg): return self.group_index, key_attributes -def render_animation(frames, filename, template, cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): - def group_by_time(frames): - def time_and_duration(frame): - return frame.time, frame.duration - for record_group in frames: - with_duration = [r for r in record_group if r.duration is not None] - sorted_group = sorted(with_duration, key=time_and_duration) - yield from groupby(sorted_group, key=time_and_duration) - - event_records, root = _render_preparation(frames, template, cell_width, - cell_height) +def render_animation(frames, geometry, filename, template, + cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): + root = _render_preparation(geometry, template, cell_width, cell_height) + _, screen_height = geometry + root = _render_animation(screen_height, frames, root, cell_width, cell_height) - root = _render_animation(group_by_time(event_records), root, cell_width, - cell_height) with open(filename, 'wb') as output_file: output_file.write(etree.tostring(root)) -def render_still_frames(records, directory, template, cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): - event_records, root = _render_preparation(records, template, cell_width, cell_height) +def render_still_frames(frames, geometry, directory, template, + cell_width=CELL_WIDTH, cell_height=CELL_HEIGHT): + root = _render_preparation(geometry, template, cell_width, cell_height) - frame_generator = _render_still_frames(event_records, root, cell_width, cell_height) + frame_generator = _render_still_frames(frames, root, cell_width, cell_height) for frame_count, frame_root in enumerate(frame_generator): filename = os.path.join(directory, 'termtosvg_{:05}.svg'.format(frame_count)) with open(filename, 'wb') as output_file: output_file.write(etree.tostring(frame_root)) -def _render_preparation(records, template, cell_width, cell_height): +def _render_preparation(geometry, template, cell_width, cell_height): # Read header record and add the corresponding information to the SVG - if not isinstance(records, Iterator): - records = iter(records) - header = next(records) - assert isinstance(header, term.Configuration) - - root = resize_template(template, header.width, header.height, cell_width, cell_height) - + root = resize_template(template, geometry, cell_width, cell_height) svg_screen_tag = root.find('.//{{{namespace}}}svg[@id="screen"]' .format(namespace=SVG_NS)) if svg_screen_tag is None: @@ -178,26 +162,18 @@ def _render_preparation(records, template, cell_width, cell_height): svg_screen_tag.remove(child) svg_screen_tag.append(BG_RECT_TAG) - return records, root + return root -def _render_still_frames(grouped_records, root, cell_width, cell_height): - screen = {} - for record_group in grouped_records: - for record in record_group: - assert isinstance(record, term.DisplayLine) - if record.duration is None: - assert record.row not in screen - screen[record.row] = record - else: - del screen[record.row] - - frame_group, frame_definitions = _make_frame_group(records=screen.values(), - time=None, - duration=None, - cell_height=cell_height, - cell_width=cell_width, - definitions={}) +def _render_still_frames(frames, root, cell_width, cell_height): + for frame in frames: + frame_group, frame_definitions = _render_timed_frame( + offset=0, + buffer=frame.buffer, + cell_height=cell_height, + cell_width=cell_width, + definitions={} + ) frame_root = copy.deepcopy(root) svg_screen_tag = frame_root.find('.//{{{namespace}}}svg[@id="screen"]' .format(namespace=SVG_NS)) @@ -212,108 +188,80 @@ def _render_still_frames(grouped_records, root, cell_width, cell_height): yield frame_root -def _render_animation(grouped_records, root, cell_width, cell_height): +def _render_animation(screen_height, frames, root, cell_width, cell_height): svg_screen_tag = root.find('.//{{{namespace}}}svg[@id="screen"]' .format(namespace=SVG_NS)) if svg_screen_tag is None: raise ValueError('Missing tag: ...') + screen_view = etree.Element('g', attrib={'id': 'screen_view'}) + definitions = {} - last_animated_group = None + timings = {} animation_duration = None - for (line_time, line_duration), record_group in grouped_records: - animated_group, group_definitions = _make_frame_group(records=record_group, - time=line_time, - duration=line_duration, - cell_height=cell_height, - cell_width=cell_width, - definitions=definitions) - - svg_screen_tag.append(animated_group) - last_animated_group = animated_group - animation_duration = line_time + line_duration - definitions.update(group_definitions) + for frame_count, frame in enumerate(frames): + offset = frame_count * screen_height * cell_height + frame_group, frame_definitions = _render_timed_frame( + offset=offset, + buffer=frame.buffer, + cell_height=cell_height, + cell_width=cell_width, + definitions=definitions + ) + + screen_view.append(frame_group) + animation_duration = frame.time + frame.duration + timings[frame.time] = -offset + definitions.update(frame_definitions ) tree_defs = etree.SubElement(svg_screen_tag, 'defs') for definition in definitions.values(): tree_defs.append(definition) - # Add id attribute to the last 'animate' tag so that it can be referred to - # by the first animations (enables animation looping) - if last_animated_group is not None: - animate_tags = last_animated_group.findall('animate') - assert len(animate_tags) == 1 - animate_tags.pop().attrib['id'] = LAST_ANIMATION_ID - - _embed_css(root, animation_duration) + svg_screen_tag.append(screen_view) + _embed_css(root, timings, animation_duration) return root -def _make_frame_group(records, time, duration, cell_height, cell_width, definitions): - """Return a group element containing an SVG version of the provided records. +def _render_timed_frame(offset, buffer, cell_height, cell_width, definitions): + """Return a group element containing an SVG version of the provided frame. This group is animated, that is to say displayed then removed according to the timing arguments. - :param records: List of lines that should be included in the group - :param time: Time the group should appear on the screen (milliseconds) - :param duration: Duration of the appearance on the screen (milliseconds) + :param buffer: 2D array of CharacterCells :param cell_height: Height of a character cell in pixels :param cell_width: Width of a character cell in pixels :param definitions: Existing definitions (updated in place) :return: A tuple consisting of the animated group and the new definitions """ - if time is None: - frame_group_tag = etree.Element('g') - else: - frame_group_tag = etree.Element('g', attrib={'display': 'none'}) + frame_group_tag = etree.Element('g') group_definitions = {} - for line_event in records: - current_definitions = {**definitions, **group_definitions} - tags, new_definitions = _render_line_event(line_event, - cell_height, - cell_width, - current_definitions) - for tag in tags: - frame_group_tag.append(tag) - group_definitions.update(new_definitions) - - # Finally, add an animation tag so that the whole group goes from - # 'display: none' to 'display: inline' at the time the line should - # appear on the screen - if time is not None: - if time == 0: - # Animations starting at 0ms should also start when the last - # animation ends (looping) - begin_time = '0ms; {id}.end'.format(id=LAST_ANIMATION_ID) - else: - begin_time = ('{time}ms; {id}.end+{time}ms' - .format(time=time, id=LAST_ANIMATION_ID)) - attributes = { - 'attributeName': 'display', - 'from': 'inline', - 'to': 'inline', - 'begin': begin_time, - 'dur': '{}ms'.format(duration) - } - - animation = etree.Element('animate', attributes) - frame_group_tag.append(animation) + for row_number in buffer: + if buffer[row_number]: + current_definitions = {**definitions, **group_definitions} + tags, new_definitions = _render_line(offset, + row_number, + buffer[row_number], + cell_height, + cell_width, + current_definitions) + for tag in tags: + frame_group_tag.append(tag) + group_definitions.update(new_definitions) return frame_group_tag, group_definitions -def _render_line_event(record, cell_height, cell_width, definitions): - assert isinstance(record, term.DisplayLine) - - tags = _render_line_bg_colors(screen_line=record.line, - height=record.row * cell_height, +def _render_line(offset, row_number, row, cell_height, cell_width, definitions): + tags = _render_line_bg_colors(screen_line=row, + height=offset + row_number * cell_height, cell_height=cell_height, cell_width=cell_width) # Group text elements for the current line into text_group_tag text_group_tag = etree.Element('g') - text_tags = _render_characters(record.line, cell_width) + text_tags = _render_characters(row, cell_width) for tag in text_tags: text_group_tag.append(tag) @@ -331,7 +279,7 @@ def _render_line_event(record, cell_height, cell_width, definitions): # Add a reference to the definition of text_group_tag with a 'use' tag use_attributes = { '{{{}}}href'.format(XLINK_NS): '#{}'.format(group_id), - 'y': str(record.row * cell_height), + 'y': str(offset + row_number * cell_height), } tags.append(etree.Element('use', use_attributes)) @@ -426,7 +374,7 @@ def _render_characters(screen_line, cell_width): return text_tags -def resize_template(template, columns, rows, cell_width, cell_height): +def resize_template(template, geometry, cell_width, cell_height): """Resize template based on the number of rows and columns of the terminal""" def scale(element, template_columns, template_rows, columns, rows): """Resize viewbox based on the number of rows and columns of the terminal""" @@ -467,23 +415,25 @@ def scale(element, template_columns, template_rows, columns, rows): if settings is None: raise TemplateError('Missing "template_settings" element in definitions') - geometry = settings.find('{{{}}}screen_geometry[@columns][@rows]' + svg_geometry = settings.find('{{{}}}screen_geometry[@columns][@rows]' .format(TERMTOSVG_NS)) - if geometry is None: + if svg_geometry is None: raise TemplateError('Missing "screen_geometry" element in "template_settings"') attributes_err_msg = ('Missing or invalid "columns" or "rows" attribute ' 'for element "screen_geometry": expected positive ' 'integers') try: - template_columns = int(geometry.attrib['columns']) - template_rows = int(geometry.attrib['rows']) + template_columns = int(svg_geometry.attrib['columns']) + template_rows = int(svg_geometry.attrib['rows']) except (KeyError, ValueError) as exc: raise TemplateError(attributes_err_msg) from exc # Update settings with real columns and rows values to preserve the scale # in case the animation serves as a template - geometry.attrib['columns'], geometry.attrib['rows'] = str(columns), str(rows) + columns, rows = geometry + svg_geometry.attrib['columns'], svg_geometry.attrib['rows'] = (str(columns), + str(rows)) if template_rows <= 0 or template_columns <= 0: raise TemplateError(attributes_err_msg) @@ -513,7 +463,7 @@ def validate_template(name, templates): raise TemplateError('Invalid template') from exc -def _embed_css(root, animation_duration=None): +def _embed_css(root, timings=None, animation_duration=None): try: style = root.find('.//{{{ns}}}defs/{{{ns}}}style[@id="generated-style"]' .format(ns=SVG_NS)) @@ -524,12 +474,6 @@ def _embed_css(root, animation_duration=None): raise TemplateError('Missing + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: 27349ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: 27349ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +4.635%{transform:translateY(-323px)} +6.208%{transform:translateY(-646px)} +6.752%{transform:translateY(-969px)} +6.904%{transform:translateY(-1292px)} +7.327%{transform:translateY(-1615px)} +7.811%{transform:translateY(-1938px)} +8.023%{transform:translateY(-2261px)} +8.537%{transform:translateY(-2584px)} +9.626%{transform:translateY(-2907px)} +10.049%{transform:translateY(-3230px)} +10.503%{transform:translateY(-3553px)} +10.991%{transform:translateY(-3876px)} +11.112%{transform:translateY(-4199px)} +13.739%{transform:translateY(-4522px)} +14.949%{transform:translateY(-4845px)} +15.705%{transform:translateY(-5168px)} +16.586%{transform:translateY(-5491px)} +17.766%{transform:translateY(-5814px)} +21.543%{transform:translateY(-6137px)} +21.565%{transform:translateY(-6460px)} +21.569%{transform:translateY(-6783px)} +21.573%{transform:translateY(-7106px)} +21.577%{transform:translateY(-7429px)} +21.580%{transform:translateY(-7752px)} +21.584%{transform:translateY(-8075px)} +28.802%{transform:translateY(-8398px)} +30.011%{transform:translateY(-8721px)} +30.495%{transform:translateY(-9044px)} +30.832%{transform:translateY(-9367px)} +31.161%{transform:translateY(-9690px)} +31.524%{transform:translateY(-10013px)} +31.826%{transform:translateY(-10336px)} +32.314%{transform:translateY(-10659px)} +40.113%{transform:translateY(-10982px)} +40.386%{transform:translateY(-11305px)} +40.960%{transform:translateY(-11628px)} +41.478%{transform:translateY(-11951px)} +45.618%{transform:translateY(-12274px)} +46.132%{transform:translateY(-12597px)} +46.737%{transform:translateY(-12920px)} +51.365%{transform:translateY(-13243px)} +51.388%{transform:translateY(-13566px)} +51.391%{transform:translateY(-13889px)} +58.049%{transform:translateY(-14212px)} +58.533%{transform:translateY(-14535px)} +58.775%{transform:translateY(-14858px)} +59.410%{transform:translateY(-15181px)} +59.894%{transform:translateY(-15504px)} +61.800%{transform:translateY(-15827px)} +63.040%{transform:translateY(-16150px)} +63.675%{transform:translateY(-16473px)} +63.887%{transform:translateY(-16796px)} +65.410%{transform:translateY(-17119px)} +68.363%{transform:translateY(-17442px)} +69.089%{transform:translateY(-17765px)} +69.512%{transform:translateY(-18088px)} +70.299%{transform:translateY(-18411px)} +70.752%{transform:translateY(-18734px)} +71.418%{transform:translateY(-19057px)} +71.629%{transform:translateY(-19380px)} +72.507%{transform:translateY(-19703px)} +74.110%{transform:translateY(-20026px)} +76.287%{transform:translateY(-20349px)} +77.134%{transform:translateY(-20672px)} +77.467%{transform:translateY(-20995px)} +78.132%{transform:translateY(-21318px)} +78.344%{transform:translateY(-21641px)} +79.887%{transform:translateY(-21964px)} +80.371%{transform:translateY(-22287px)} +80.945%{transform:translateY(-22610px)} +81.308%{transform:translateY(-22933px)} +81.520%{transform:translateY(-23256px)} +82.064%{transform:translateY(-23579px)} +82.790%{transform:translateY(-23902px)} +83.796%{transform:translateY(-24225px)} +83.800%{transform:translateY(-24548px)} +83.803%{transform:translateY(-24871px)} +83.807%{transform:translateY(-25194px)} +83.811%{transform:translateY(-25517px)} +83.815%{transform:translateY(-25840px)} +83.819%{transform:translateY(-26163px)} +83.822%{transform:translateY(-26486px)} +83.826%{transform:translateY(-26809px)} +83.830%{transform:translateY(-27132px)} +83.834%{transform:translateY(-27455px)} +83.837%{transform:translateY(-27778px)} +83.841%{transform:translateY(-28101px)} +83.845%{transform:translateY(-28424px)} +83.853%{transform:translateY(-28747px)} +83.856%{transform:translateY(-29070px)} +83.860%{transform:translateY(-29393px)} +83.864%{transform:translateY(-29716px)} +83.871%{transform:translateY(-30039px)} +83.875%{transform:translateY(-30362px)} +83.879%{transform:translateY(-30685px)} +83.883%{transform:translateY(-31008px)} +83.887%{transform:translateY(-31331px)} +83.894%{transform:translateY(-31654px)} +83.898%{transform:translateY(-31977px)} +83.917%{transform:translateY(-32300px)} +93.709%{transform:translateY(-32623px)} +94.465%{transform:translateY(-32946px)} +94.858%{transform:translateY(-33269px)} +95.433%{transform:translateY(-33592px)} +96.219%{transform:translateY(-33915px)} + } + + #screen_view { + animation-duration: 26450ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +0.808%{transform:translateY(-323px)} +11.741%{transform:translateY(-646px)} +12.016%{transform:translateY(-969px)} +14.094%{transform:translateY(-1292px)} +15.941%{transform:translateY(-1615px)} +17.904%{transform:translateY(-1938px)} +19.463%{transform:translateY(-2261px)} +20.964%{transform:translateY(-2584px)} +22.407%{transform:translateY(-2907px)} +24.370%{transform:translateY(-3230px)} +25.871%{transform:translateY(-3553px)} +27.315%{transform:translateY(-3876px)} +28.816%{transform:translateY(-4199px)} +30.605%{transform:translateY(-4522px)} +32.280%{transform:translateY(-4845px)} +34.127%{transform:translateY(-5168px)} +36.025%{transform:translateY(-5491px)} +37.591%{transform:translateY(-5814px)} +39.265%{transform:translateY(-6137px)} +44.981%{transform:translateY(-6460px)} +46.309%{transform:translateY(-6783px)} +47.622%{transform:translateY(-7106px)} +48.676%{transform:translateY(-7429px)} +49.830%{transform:translateY(-7752px)} +51.043%{transform:translateY(-8075px)} +52.255%{transform:translateY(-8398px)} +53.468%{transform:translateY(-8721px)} +54.622%{transform:translateY(-9044px)} +55.892%{transform:translateY(-9367px)} +57.220%{transform:translateY(-9690px)} +58.656%{transform:translateY(-10013px)} +59.934%{transform:translateY(-10336px)} +61.319%{transform:translateY(-10659px)} +63.167%{transform:translateY(-10982px)} +64.899%{transform:translateY(-11305px)} +67.670%{transform:translateY(-11628px)} +70.831%{transform:translateY(-11951px)} +74.251%{transform:translateY(-12274px)} +75.579%{transform:translateY(-12597px)} +77.022%{transform:translateY(-12920px)} +78.350%{transform:translateY(-13243px)} +79.736%{transform:translateY(-13566px)} +84.910%{transform:translateY(-13889px)} +92.783%{transform:translateY(-14212px)} + } + + #screen_view { + animation-duration: 13857ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - 1 [|||||||||||||||||||||||||100.0%] Tasks: 33; 1 running2 [0.0%] Load average: 0.49 0.50 0.54 3 [0.0%] Uptime: 02:00:224 [0.0%]Mem[||||||||||||||||||||1.50G/7.74G]5842 nico20 0 4678M 494M 31912 S 0.0 6.2 1:02.83 │ └─ java -classpa11016 nico20 0 12504 4100 3432 R 0.0 0.1 0:00.03 │ └─ htop 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py5842 nico20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa3 [||||7.2%] Uptime: 02:00:23 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa5883 nico20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier1245 nico20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 11015 nico20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho3 [||||7.2%] Uptime: 02:00:2411015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1 [|| 4.7%] Tasks: 33; 1 running2 [||||7.1%] Load average: 0.49 0.50 0.54 3 [||||7.2%] Uptime: 02:00:254 [|||5.9%]Mem[||||||||||||||||||||1.50G/7.74G] 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1242 nico20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1 [||| 6.3%] Tasks: 33; 1 running2 [||| 6.2%] Load average: 0.45 0.49 0.53 3 [||| 6.2%] Uptime: 02:00:254 [|||5.7%]Mem[||||||||||||||||||||1.49G/7.74G]Swp[0K/0K] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5842 nico 20 0 4678M 494M 31912 S 0.6 6.2 1:02.85 │ └─ java -classpa 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 11015 nico 20 0 37848 21668 12488 S 0.6 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.1 0.1 0:00.06 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux F1Help F2Setup F3SearchF4FilterF5SortedF6CollapF7Nice -F8Nice +F9Kill F10Quit 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont3 [||| 6.2%] Uptime: 02:00:26 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 0.6 2.3 0:49.60 │ ├─ firefox -cont 1 [||| 5.6%] Tasks: 33; 2 running2 [||| 6.7%] Load average: 0.45 0.49 0.53 3 [||||8.6%] Uptime: 02:00:264 [|||6.7%]11016 nico 20 0 12504 4100 3432 R 1.2 0.1 0:00.08 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.6 0.2 0:00.65 ├─ urxvt -e tmux 786 nico 20 0 1978M 364M 163M S 6.8 4.6 12:51.24 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.5 0.4 0:46.30 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 17.3 3.7 5:58.06 │ ├─ firefox -cont960 nico20 0 1547M 183M 122M S 0.0 2.3 0:49.60 │ ├─ firefox -cont 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont3 [||||8.6%] Uptime: 02:00:27 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 3 [||||8.6%] Uptime: 02:00:28 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai3 [||||7.4%] Uptime: 02:00:28 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 1 [||| 6.7%] Tasks: 33; 1 running2 [|| 4.4%] Load average: 0.45 0.49 0.53 3 [||||7.4%] Uptime: 02:00:294 [|| 3.8%] 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1 [|||| 6.5%] Tasks: 33; 1 running2 [||||6.5%] Load average: 0.45 0.49 0.53 3 [||| 5.2%] Uptime: 02:00:304 [|||5.3%]11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.3 0.1 0:00.11 │ └─ htop 786 nico 20 0 1978M 364M 163M S 5.9 4.6 12:51.43 ├─ firefox 1852 nico 20 0 277M 33400 25400 S 2.6 0.4 0:46.37 │ ├─ plugin-contai 1662 nico 20 0 1739M 292M 99M S 15.6 3.7 5:58.54 │ ├─ firefox -cont2 [||||6.5%] Load average: 0.41 0.49 0.53 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa3 [||| 5.2%] Uptime: 02:00:313 [|| 4.8%] Uptime: 02:00:31 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 1 [||| 6.5%] Tasks: 33; 1 running2 [||| 5.9%] Load average: 0.41 0.49 0.53 3 [|| 4.8%] Uptime: 02:00:324 [|||6.4%]11016 nico 20 0 12504 4100 3432 R 1.8 0.1 0:00.14 │ └─ htop 1 [||| 5.6%] Tasks: 33; 1 running2 [|| 5.1%] Load average: 0.41 0.49 0.53 3 [||| 6.6%] Uptime: 02:00:334 [|| 6.1%] 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.73 ├─ tmux 11016 nico 20 0 12504 4100 3432 R 0.0 0.1 0:00.14 │ └─ htop + 1 [|||||||||||||||||||||||||100.0%] Tasks: 33; 1 running2 [0.0%] Load average: 0.49 0.50 0.54 3 [0.0%] Uptime: 02:00:224 [0.0%]Mem[||||||||||||||||||||1.50G/7.74G]Swp[0K/0K] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py5842 nico20 0 4678M 494M 31912 S 0.0 6.2 1:02.83 │ └─ java -classpa5883 nico20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier1245 nico20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash11015 nico20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico20 0 12504 4100 3432 R 0.0 0.1 0:00.03 │ └─ htop 1242 nico20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmuxF1Help F2Setup F3SearchF4FilterF5SortedF6CollapF7Nice -F8Nice +F9Kill F10Quit 1 [|| 4.7%] Tasks: 33; 1 running2 [||||7.1%] Load average: 0.49 0.50 0.54 3 [||||7.2%] Uptime: 02:00:234 [|||5.9%]Mem[||||||||||||||||||||1.50G/7.74G]5842 nico20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa11016 nico20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa3 [||||7.2%] Uptime: 02:00:24 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho3 [||||7.2%] Uptime: 02:00:2511015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1 [||| 6.3%] Tasks: 33; 1 running2 [||| 6.2%] Load average: 0.45 0.49 0.53 3 [||| 6.2%] Uptime: 02:00:254 [|||5.7%]Mem[||||||||||||||||||||1.49G/7.74G] 5842 nico 20 0 4678M 494M 31912 S 0.6 6.2 1:02.85 │ └─ java -classpa11015 nico 20 0 37848 21668 12488 S 0.6 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.1 0.1 0:00.06 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont3 [||| 6.2%] Uptime: 02:00:26 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 0.6 2.3 0:49.60 │ ├─ firefox -cont 1 [||| 5.6%] Tasks: 33; 2 running2 [||| 6.7%] Load average: 0.45 0.49 0.53 3 [||||8.6%] Uptime: 02:00:264 [|||6.7%]11016 nico 20 0 12504 4100 3432 R 1.2 0.1 0:00.08 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.6 0.2 0:00.65 ├─ urxvt -e tmux 786 nico 20 0 1978M 364M 163M S 6.8 4.6 12:51.24 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.5 0.4 0:46.30 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 17.3 3.7 5:58.06 │ ├─ firefox -cont960 nico20 0 1547M 183M 122M S 0.0 2.3 0:49.60 │ ├─ firefox -cont 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont3 [||||8.6%] Uptime: 02:00:27 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 3 [||||8.6%] Uptime: 02:00:28 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 1 [||| 6.7%] Tasks: 33; 1 running2 [|| 4.4%] Load average: 0.45 0.49 0.53 3 [||||7.4%] Uptime: 02:00:284 [|| 3.8%] 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont3 [||||7.4%] Uptime: 02:00:29 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1 [|||| 6.5%] Tasks: 33; 1 running2 [||||6.5%] Load average: 0.45 0.49 0.53 3 [||| 5.2%] Uptime: 02:00:304 [|||5.3%]11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.3 0.1 0:00.11 │ └─ htop 786 nico 20 0 1978M 364M 163M S 5.9 4.6 12:51.43 ├─ firefox 1852 nico 20 0 277M 33400 25400 S 2.6 0.4 0:46.37 │ ├─ plugin-contai 1662 nico 20 0 1739M 292M 99M S 15.6 3.7 5:58.54 │ ├─ firefox -cont2 [||||6.5%] Load average: 0.41 0.49 0.53 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa3 [||| 5.2%] Uptime: 02:00:31 1 [||| 6.5%] Tasks: 33; 1 running2 [||| 5.9%] Load average: 0.41 0.49 0.53 3 [|| 4.8%] Uptime: 02:00:314 [|||6.4%] 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 11016 nico 20 0 12504 4100 3432 R 1.8 0.1 0:00.14 │ └─ htop 3 [|| 4.8%] Uptime: 02:00:32 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 1 [||| 5.6%] Tasks: 33; 1 running2 [|| 5.1%] Load average: 0.41 0.49 0.53 3 [||| 6.6%] Uptime: 02:00:334 [|| 6.1%] 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.73 ├─ tmux 11016 nico 20 0 12504 4100 3432 R 0.0 0.1 0:00.14 │ └─ htop \ No newline at end of file diff --git a/docs/examples/ipython_window_frame.svg b/docs/examples/ipython_window_frame.svg index 67d2ad1..853e18b 100644 --- a/docs/examples/ipython_window_frame.svg +++ b/docs/examples/ipython_window_frame.svg @@ -3,11 +3,7 @@ - + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +0.003%{transform:translateY(-408px)} +0.033%{transform:translateY(-816px)} +0.080%{transform:translateY(-1224px)} +1.935%{transform:translateY(-1632px)} +1.949%{transform:translateY(-2040px)} +2.224%{transform:translateY(-2448px)} +2.234%{transform:translateY(-2856px)} +2.834%{transform:translateY(-3264px)} +2.847%{transform:translateY(-3672px)} +3.152%{transform:translateY(-4080px)} +3.168%{transform:translateY(-4488px)} +3.311%{transform:translateY(-4896px)} +3.331%{transform:translateY(-5304px)} +3.629%{transform:translateY(-5712px)} +3.646%{transform:translateY(-6120px)} +3.977%{transform:translateY(-6528px)} +3.994%{transform:translateY(-6936px)} +4.398%{transform:translateY(-7344px)} +4.414%{transform:translateY(-7752px)} +4.739%{transform:translateY(-8160px)} +4.756%{transform:translateY(-8568px)} +4.951%{transform:translateY(-8976px)} +4.968%{transform:translateY(-9384px)} +5.299%{transform:translateY(-9792px)} +5.313%{transform:translateY(-10200px)} +5.876%{transform:translateY(-10608px)} +5.886%{transform:translateY(-11016px)} +5.899%{transform:translateY(-11424px)} +5.916%{transform:translateY(-11832px)} +7.848%{transform:translateY(-12240px)} +7.861%{transform:translateY(-12648px)} +8.292%{transform:translateY(-13056px)} +8.308%{transform:translateY(-13464px)} +8.666%{transform:translateY(-13872px)} +8.683%{transform:translateY(-14280px)} +9.008%{transform:translateY(-14688px)} +9.021%{transform:translateY(-15096px)} +9.485%{transform:translateY(-15504px)} +9.502%{transform:translateY(-15912px)} +10.015%{transform:translateY(-16320px)} +10.032%{transform:translateY(-16728px)} +10.519%{transform:translateY(-17136px)} +10.536%{transform:translateY(-17544px)} +10.791%{transform:translateY(-17952px)} +10.804%{transform:translateY(-18360px)} +11.155%{transform:translateY(-18768px)} +11.172%{transform:translateY(-19176px)} +12.773%{transform:translateY(-19584px)} +12.786%{transform:translateY(-19992px)} +13.406%{transform:translateY(-20400px)} +13.419%{transform:translateY(-20808px)} +13.710%{transform:translateY(-21216px)} +13.724%{transform:translateY(-21624px)} +13.986%{transform:translateY(-22032px)} +13.995%{transform:translateY(-22440px)} +14.330%{transform:translateY(-22848px)} +14.337%{transform:translateY(-23256px)} +14.688%{transform:translateY(-23664px)} +14.695%{transform:translateY(-24072px)} +14.870%{transform:translateY(-24480px)} +14.887%{transform:translateY(-24888px)} +15.427%{transform:translateY(-25296px)} +15.440%{transform:translateY(-25704px)} +16.700%{transform:translateY(-26112px)} +16.710%{transform:translateY(-26520px)} +17.015%{transform:translateY(-26928px)} +17.025%{transform:translateY(-27336px)} +18.947%{transform:translateY(-27744px)} +18.957%{transform:translateY(-28152px)} +21.843%{transform:translateY(-28560px)} +21.857%{transform:translateY(-28968px)} +22.380%{transform:translateY(-29376px)} +22.393%{transform:translateY(-29784px)} +25.714%{transform:translateY(-30192px)} +25.731%{transform:translateY(-30600px)} +26.112%{transform:translateY(-31008px)} +26.132%{transform:translateY(-31416px)} +26.430%{transform:translateY(-31824px)} +26.447%{transform:translateY(-32232px)} +26.695%{transform:translateY(-32640px)} +26.712%{transform:translateY(-33048px)} +26.907%{transform:translateY(-33456px)} +26.927%{transform:translateY(-33864px)} +27.600%{transform:translateY(-34272px)} +27.616%{transform:translateY(-34680px)} +29.618%{transform:translateY(-35088px)} +29.631%{transform:translateY(-35496px)} +30.039%{transform:translateY(-35904px)} +30.056%{transform:translateY(-36312px)} +30.354%{transform:translateY(-36720px)} +30.377%{transform:translateY(-37128px)} +31.709%{transform:translateY(-37536px)} +31.726%{transform:translateY(-37944px)} +34.013%{transform:translateY(-38352px)} +34.033%{transform:translateY(-38760px)} +34.649%{transform:translateY(-39168px)} +34.666%{transform:translateY(-39576px)} +35.209%{transform:translateY(-39984px)} +35.229%{transform:translateY(-40392px)} +35.418%{transform:translateY(-40800px)} +35.434%{transform:translateY(-41208px)} +36.213%{transform:translateY(-41616px)} +36.233%{transform:translateY(-42024px)} +37.592%{transform:translateY(-42432px)} +37.612%{transform:translateY(-42840px)} +38.682%{transform:translateY(-43248px)} +38.696%{transform:translateY(-43656px)} +39.766%{transform:translateY(-44064px)} +39.786%{transform:translateY(-44472px)} +40.525%{transform:translateY(-44880px)} +40.535%{transform:translateY(-45288px)} +41.029%{transform:translateY(-45696px)} +41.042%{transform:translateY(-46104px)} +42.073%{transform:translateY(-46512px)} +42.093%{transform:translateY(-46920px)} +45.546%{transform:translateY(-47328px)} +45.566%{transform:translateY(-47736px)} +45.894%{transform:translateY(-48144px)} +45.910%{transform:translateY(-48552px)} +46.825%{transform:translateY(-48960px)} +46.842%{transform:translateY(-49368px)} +48.727%{transform:translateY(-49776px)} +48.744%{transform:translateY(-50184px)} +49.125%{transform:translateY(-50592px)} +49.145%{transform:translateY(-51000px)} +50.583%{transform:translateY(-51408px)} +50.600%{transform:translateY(-51816px)} +51.170%{transform:translateY(-52224px)} +51.186%{transform:translateY(-52632px)} +53.768%{transform:translateY(-53040px)} +53.785%{transform:translateY(-53448px)} +54.322%{transform:translateY(-53856px)} +54.335%{transform:translateY(-54264px)} +56.920%{transform:translateY(-54672px)} +56.940%{transform:translateY(-55080px)} +57.212%{transform:translateY(-55488px)} +57.231%{transform:translateY(-55896px)} +58.507%{transform:translateY(-56304px)} +58.521%{transform:translateY(-56712px)} +60.857%{transform:translateY(-57120px)} +60.880%{transform:translateY(-57528px)} +63.628%{transform:translateY(-57936px)} +63.648%{transform:translateY(-58344px)} +63.840%{transform:translateY(-58752px)} +63.856%{transform:translateY(-59160px)} +64.049%{transform:translateY(-59568px)} +64.058%{transform:translateY(-59976px)} +64.506%{transform:translateY(-60384px)} +64.529%{transform:translateY(-60792px)} +65.013%{transform:translateY(-61200px)} +65.029%{transform:translateY(-61608px)} +65.440%{transform:translateY(-62016px)} +65.460%{transform:translateY(-62424px)} +65.782%{transform:translateY(-62832px)} +65.798%{transform:translateY(-63240px)} +66.309%{transform:translateY(-63648px)} +66.329%{transform:translateY(-64056px)} +66.882%{transform:translateY(-64464px)} +66.895%{transform:translateY(-64872px)} +67.184%{transform:translateY(-65280px)} +67.207%{transform:translateY(-65688px)} +67.661%{transform:translateY(-66096px)} +67.684%{transform:translateY(-66504px)} +69.305%{transform:translateY(-66912px)} +69.325%{transform:translateY(-67320px)} +69.626%{transform:translateY(-67728px)} +69.646%{transform:translateY(-68136px)} +70.233%{transform:translateY(-68544px)} +70.249%{transform:translateY(-68952px)} +71.900%{transform:translateY(-69360px)} +71.920%{transform:translateY(-69768px)} +73.669%{transform:translateY(-70176px)} +73.693%{transform:translateY(-70584px)} +75.678%{transform:translateY(-70992px)} +75.694%{transform:translateY(-71400px)} +76.026%{transform:translateY(-71808px)} +76.357%{transform:translateY(-72216px)} +76.689%{transform:translateY(-72624px)} +77.020%{transform:translateY(-73032px)} +77.355%{transform:translateY(-73440px)} +77.686%{transform:translateY(-73848px)} +78.017%{transform:translateY(-74256px)} +78.349%{transform:translateY(-74664px)} +78.680%{transform:translateY(-75072px)} +79.015%{transform:translateY(-75480px)} +79.346%{transform:translateY(-75888px)} +79.678%{transform:translateY(-76296px)} +80.009%{transform:translateY(-76704px)} +80.341%{transform:translateY(-77112px)} +80.675%{transform:translateY(-77520px)} +81.007%{transform:translateY(-77928px)} +81.338%{transform:translateY(-78336px)} +81.670%{transform:translateY(-78744px)} +82.001%{transform:translateY(-79152px)} +82.336%{transform:translateY(-79560px)} +82.667%{transform:translateY(-79968px)} +82.999%{transform:translateY(-80376px)} +83.330%{transform:translateY(-80784px)} +83.661%{transform:translateY(-81192px)} +83.996%{transform:translateY(-81600px)} +84.328%{transform:translateY(-82008px)} +84.659%{transform:translateY(-82416px)} +84.990%{transform:translateY(-82824px)} +85.322%{transform:translateY(-83232px)} +85.657%{transform:translateY(-83640px)} +85.988%{transform:translateY(-84048px)} +86.319%{transform:translateY(-84456px)} +86.651%{transform:translateY(-84864px)} +86.982%{transform:translateY(-85272px)} +87.317%{transform:translateY(-85680px)} +87.648%{transform:translateY(-86088px)} +87.980%{transform:translateY(-86496px)} +88.311%{transform:translateY(-86904px)} +88.643%{transform:translateY(-87312px)} +88.977%{transform:translateY(-87720px)} +88.981%{transform:translateY(-88128px)} +88.994%{transform:translateY(-88536px)} +89.007%{transform:translateY(-88944px)} +92.016%{transform:translateY(-89352px)} +92.033%{transform:translateY(-89760px)} +92.368%{transform:translateY(-90168px)} +92.384%{transform:translateY(-90576px)} +92.951%{transform:translateY(-90984px)} +92.967%{transform:translateY(-91392px)} +93.504%{transform:translateY(-91800px)} +93.521%{transform:translateY(-92208px)} +96.686%{transform:translateY(-92616px)} + } + + #screen_view { + animation-duration: 30174ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + } + @keyframes roll { + 0.000%{transform:translateY(0px)} +5.080%{transform:translateY(-323px)} +5.719%{transform:translateY(-646px)} +6.357%{transform:translateY(-969px)} +6.950%{transform:translateY(-1292px)} +7.543%{transform:translateY(-1615px)} +8.364%{transform:translateY(-1938px)} +8.866%{transform:translateY(-2261px)} +9.961%{transform:translateY(-2584px)} +10.873%{transform:translateY(-2907px)} +11.511%{transform:translateY(-3230px)} +16.939%{transform:translateY(-3553px)} +16.956%{transform:translateY(-3876px)} +16.979%{transform:translateY(-4199px)} +18.861%{transform:translateY(-4522px)} +23.086%{transform:translateY(-4845px)} +23.325%{transform:translateY(-5168px)} +23.536%{transform:translateY(-5491px)} +23.758%{transform:translateY(-5814px)} +25.155%{transform:translateY(-6137px)} +25.497%{transform:translateY(-6460px)} +25.925%{transform:translateY(-6783px)} +26.239%{transform:translateY(-7106px)} +26.501%{transform:translateY(-7429px)} +26.923%{transform:translateY(-7752px)} +27.453%{transform:translateY(-8075px)} +27.755%{transform:translateY(-8398px)} +28.177%{transform:translateY(-8721px)} +28.417%{transform:translateY(-9044px)} +28.747%{transform:translateY(-9367px)} +28.970%{transform:translateY(-9690px)} +29.278%{transform:translateY(-10013px)} +29.557%{transform:translateY(-10336px)} +29.563%{transform:translateY(-10659px)} +29.580%{transform:translateY(-10982px)} +29.585%{transform:translateY(-11305px)} +31.553%{transform:translateY(-11628px)} +31.706%{transform:translateY(-11951px)} +32.031%{transform:translateY(-12274px)} +34.033%{transform:translateY(-12597px)} +34.244%{transform:translateY(-12920px)} +36.370%{transform:translateY(-13243px)} +36.399%{transform:translateY(-13566px)} +39.466%{transform:translateY(-13889px)} +39.871%{transform:translateY(-14212px)} +42.916%{transform:translateY(-14535px)} +43.303%{transform:translateY(-14858px)} +44.598%{transform:translateY(-15181px)} +44.621%{transform:translateY(-15504px)} +45.955%{transform:translateY(-15827px)} +45.978%{transform:translateY(-16150px)} +47.260%{transform:translateY(-16473px)} +47.277%{transform:translateY(-16796px)} +47.300%{transform:translateY(-17119px)} +50.955%{transform:translateY(-17442px)} +50.978%{transform:translateY(-17765px)} +50.989%{transform:translateY(-18088px)} +54.769%{transform:translateY(-18411px)} +54.792%{transform:translateY(-18734px)} +54.804%{transform:translateY(-19057px)} +58.567%{transform:translateY(-19380px)} +58.658%{transform:translateY(-19703px)} +58.664%{transform:translateY(-20026px)} +58.743%{transform:translateY(-20349px)} +58.755%{transform:translateY(-20672px)} +58.823%{transform:translateY(-20995px)} +62.267%{transform:translateY(-21318px)} +62.278%{transform:translateY(-21641px)} +62.330%{transform:translateY(-21964px)} +65.773%{transform:translateY(-22287px)} +65.808%{transform:translateY(-22610px)} +67.090%{transform:translateY(-22933px)} +68.311%{transform:translateY(-23256px)} +88.323%{transform:translateY(-23579px)} +89.418%{transform:translateY(-23902px)} +90.324%{transform:translateY(-24225px)} +90.969%{transform:translateY(-24548px)} +94.298%{transform:translateY(-24871px)} + } + + #screen_view { + animation-duration: 17539ms; + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~/termtosvg $ nico ~/termtosvg $ m nico ~/termtosvg $ ma nico ~/termtosvg $ mak nico ~/termtosvg $ make nico ~/termtosvg $ make nico ~/termtosvg $ make t nico ~/termtosvg $ make te nico ~/termtosvg $ make tes nico ~/termtosvg $ make test nico ~/termtosvg $ make tests nico ~/termtosvg $ make tests(test -d .venv || python -m venv .venv). .venv/bin/activate && \ pip install -U -e .[dev]Obtaining file:///home/nico/termtosvgRequirement already up-to-date: setuptools in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: pyte in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: python-xlib in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: svgwrite in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: coverage in ./.venv/lib/python3.6/site-packages (fRequirement already up-to-date: twine in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: wheel in ./.venv/lib/python3.6/site-packages (fromRequirement already up-to-date: wcwidth in ./.venv/lib/python3.6/site-packages (from pyte->termtosvg==0.1.0)Requirement already up-to-date: six>=1.10.0 in ./.venv/lib/python3.6/site-packages (from python-xlib->termtosvg==0.1.0)Requirement already up-to-date: pyparsing>=2.0.1 in ./.venv/lib/python3.6/site-packages (from svgwrite->termtosvg==0.1.0)Requirement already up-to-date: requests!=2.15,!=2.16,>=2.5.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: requests-toolbelt>=0.8.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: tqdm>=4.14 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: pkginfo>=1.4.2 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: certifi>=2017.4.17 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: idna<2.8,>=2.5 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: urllib3<1.24,>=1.21.1 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: chardet<3.1.0,>=3.0.2 in ./.venv/lib/python3.6/sitInstalling collected packages: termtosvg Found existing installation: termtosvg 0.1.0 Uninstalling termtosvg-0.1.0: Successfully uninstalled termtosvg-0.1.0 Running setup.py develop for termtosvgSuccessfully installed termtosvgYou are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrading via the 'pip install --upgrade pip' command. pip freeze && \ coverage run --branch --source termtosvg -m unittest -v && \ coverage report && \ coverage htmlpython-xlib==0.23pytz==2018.4requests==2.19.1requests-toolbelt==0.8.0rsa==3.4.2six==1.11.0svgwrite==1.1.12-e git+git@github.com:nbedos/termtosvg.git@dab7f522c126e9938e896d023d8be453f0dcf1b9#egg=termtosvgtinydb==3.9.0.post1tinyrecord==0.1.5tox==3.0.0tqdm==4.23.4twine==1.11.0urllib3==1.23virtualenv==16.0.0wcwidth==0.1.7wrapt==1.10.11test_main (tests.test___main__.TestMain) ... test_main (tests.test___main__.TestMain) ... Recording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_3vqhnplh.castRecording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_s7tgsv75.castRendering startedRendering ended, SVG animation is /tmp/termtosvg_wts11qev.svgRendering ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgRendering ended, SVG animation is /tmp/termtosvg_i8zp1z7w.svgLogging to /tmp/termtosvg.logRecording ended, SVG animation is /tmp/termtosvg_fkz0r2vk.svgRecording ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgoktest_parse (tests.test___main__.TestMain) ... test_parse (tests.test___main__.TestMain) ... oktest__render_characters (tests.test_anim.TestAnim) ... oktest__render_line_bg_colors (tests.test_anim.TestAnim) ... test__render_line_bg_colors (tests.test_anim.TestAnim) ... oktest_from_pyte (tests.test_anim.TestAnim) ... oktest_render_animation (tests.test_anim.TestAnim) ... test_render_animation (tests.test_anim.TestAnim) ... oktest_serialize_css_dict (tests.test_anim.TestAnim) ... oktest_AsciiCastEvent (tests.test_asciicast.TestAsciicast) ... oktest_AsciiCastHeader (tests.test_asciicast.TestAsciicast) ... oktest_from_json (tests.test_asciicast.TestAsciicast) ... test_from_json (tests.test_asciicast.TestAsciicast) ... oktest_from_xresources (tests.test_asciicast.TestAsciicast) ... test_from_xresources (tests.test_asciicast.TestAsciicast) ... oktest_to_json (tests.test_asciicast.TestAsciicast) ... oktest__group_by_time (tests.test_term.TestTerm) ... oktest__record (tests.test_term.TestTerm) ... test__record (tests.test_term.TestTerm) ... oktest_default_themes (tests.test_term.TestTerm) ... test_default_themes (tests.test_term.TestTerm) ... oktest_get_configuration (tests.test_term.TestTerm) ... test_get_configuration (tests.test_term.TestTerm) ... oktest_record (tests.test_term.TestTerm) ... test_record (tests.test_term.TestTerm) ... oktest_replay (tests.test_term.TestTerm) ... test_replay (tests.test_term.TestTerm) ... ok----------------------------------------------------------------------Ran 18 tests in 5.164sOKnico ~/termtosvg $ e nico ~/termtosvg $ ex nico ~/termtosvg $ exi Name Stmts Miss Branch BrPart Cover----------------------------------------------------------termtosvg/__init__.py 0 0 0 0 100%termtosvg/__main__.py 106 4 38 4 94%termtosvg/anim.py 146 3 60 3 97%termtosvg/asciicast.py 93 6 38 3 93%termtosvg/term.py 192 13 66 8 91%TOTAL 537 26 202 18 94%nico ~/termtosvg $ exit nico ~/termtosvg $ exitexit + nico ~/termtosvg $ nico ~/termtosvg $ m nico ~/termtosvg $ ma nico ~/termtosvg $ mak nico ~/termtosvg $ make nico ~/termtosvg $ make nico ~/termtosvg $ make t nico ~/termtosvg $ make te nico ~/termtosvg $ make tes nico ~/termtosvg $ make test nico ~/termtosvg $ make tests nico ~/termtosvg $ make tests (test -d .venv || python -m venv .venv). .venv/bin/activate && \ pip install -U -e .[dev]Obtaining file:///home/nico/termtosvgRequirement already up-to-date: setuptools in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: pyte in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: python-xlib in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: svgwrite in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: coverage in ./.venv/lib/python3.6/site-packages (fRequirement already up-to-date: twine in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: wheel in ./.venv/lib/python3.6/site-packages (fromRequirement already up-to-date: wcwidth in ./.venv/lib/python3.6/site-packages (from pyte->termtosvg==0.1.0)Requirement already up-to-date: six>=1.10.0 in ./.venv/lib/python3.6/site-packages (from python-xlib->termtosvg==0.1.0)Requirement already up-to-date: pyparsing>=2.0.1 in ./.venv/lib/python3.6/site-packages (from svgwrite->termtosvg==0.1.0)Requirement already up-to-date: requests!=2.15,!=2.16,>=2.5.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: requests-toolbelt>=0.8.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: tqdm>=4.14 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: pkginfo>=1.4.2 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: certifi>=2017.4.17 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: idna<2.8,>=2.5 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: urllib3<1.24,>=1.21.1 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: chardet<3.1.0,>=3.0.2 in ./.venv/lib/python3.6/sitInstalling collected packages: termtosvg Found existing installation: termtosvg 0.1.0 Uninstalling termtosvg-0.1.0: Successfully uninstalled termtosvg-0.1.0 Running setup.py develop for termtosvgSuccessfully installed termtosvgYou are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrading via the 'pip install --upgrade pip' command. pip freeze && \ coverage run --branch --source termtosvg -m unittest -v && \ coverage report && \ coverage htmlpython-xlib==0.23pytz==2018.4requests==2.19.1requests-toolbelt==0.8.0rsa==3.4.2six==1.11.0svgwrite==1.1.12-e git+git@github.com:nbedos/termtosvg.git@dab7f522c126e9938e896d023d8be453f0dcf1b9#egg=termtosvgtinydb==3.9.0.post1tinyrecord==0.1.5tox==3.0.0tqdm==4.23.4twine==1.11.0urllib3==1.23virtualenv==16.0.0wcwidth==0.1.7wrapt==1.10.11test_main (tests.test___main__.TestMain) ... test_main (tests.test___main__.TestMain) ... Recording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_3vqhnplh.castRecording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_s7tgsv75.castRendering startedRendering ended, SVG animation is /tmp/termtosvg_wts11qev.svgRendering ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgRendering ended, SVG animation is /tmp/termtosvg_i8zp1z7w.svgLogging to /tmp/termtosvg.logRecording ended, SVG animation is /tmp/termtosvg_fkz0r2vk.svgRecording ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgoktest_parse (tests.test___main__.TestMain) ... test_parse (tests.test___main__.TestMain) ... oktest__render_characters (tests.test_anim.TestAnim) ... oktest__render_line_bg_colors (tests.test_anim.TestAnim) ... test__render_line_bg_colors (tests.test_anim.TestAnim) ... oktest_from_pyte (tests.test_anim.TestAnim) ... oktest_render_animation (tests.test_anim.TestAnim) ... test_render_animation (tests.test_anim.TestAnim) ... oktest_serialize_css_dict (tests.test_anim.TestAnim) ... oktest_AsciiCastEvent (tests.test_asciicast.TestAsciicast) ... oktest_AsciiCastHeader (tests.test_asciicast.TestAsciicast) ... oktest_from_json (tests.test_asciicast.TestAsciicast) ... test_from_json (tests.test_asciicast.TestAsciicast) ... oktest_from_xresources (tests.test_asciicast.TestAsciicast) ... test_from_xresources (tests.test_asciicast.TestAsciicast) ... oktest_to_json (tests.test_asciicast.TestAsciicast) ... oktest__group_by_time (tests.test_term.TestTerm) ... oktest__record (tests.test_term.TestTerm) ... test__record (tests.test_term.TestTerm) ... oktest_default_themes (tests.test_term.TestTerm) ... test_default_themes (tests.test_term.TestTerm) ... oktest_get_configuration (tests.test_term.TestTerm) ... test_get_configuration (tests.test_term.TestTerm) ... oktest_record (tests.test_term.TestTerm) ... test_record (tests.test_term.TestTerm) ... oktest_replay (tests.test_term.TestTerm) ... test_replay (tests.test_term.TestTerm) ... ok----------------------------------------------------------------------Ran 18 tests in 5.164sOKName Stmts Miss Branch BrPart Cover----------------------------------------------------------termtosvg/__init__.py 0 0 0 0 100%termtosvg/__main__.py 106 4 38 4 94%termtosvg/anim.py 146 3 60 3 97%termtosvg/asciicast.py 93 6 38 3 93%termtosvg/term.py 192 13 66 8 91%TOTAL 537 26 202 18 94%nico ~/termtosvg $ e nico ~/termtosvg $ ex nico ~/termtosvg $ exi nico ~/termtosvg $ exit nico ~/termtosvg $ exitexit \ No newline at end of file diff --git a/docs/templates/base16_default_dark.svg b/docs/templates/base16_default_dark.svg new file mode 100644 index 0000000..a8d8ecf --- /dev/null +++ b/docs/templates/base16_default_dark.svg @@ -0,0 +1,43 @@ + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + diff --git a/docs/templates/dracula.svg b/docs/templates/dracula.svg new file mode 100644 index 0000000..68bf4c4 --- /dev/null +++ b/docs/templates/dracula.svg @@ -0,0 +1,43 @@ + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/gjm8.svg b/docs/templates/gjm8.svg new file mode 100644 index 0000000..a95600e --- /dev/null +++ b/docs/templates/gjm8.svg @@ -0,0 +1,43 @@ + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/gjm8_play.svg b/docs/templates/gjm8_play.svg new file mode 100644 index 0000000..9724c05 --- /dev/null +++ b/docs/templates/gjm8_play.svg @@ -0,0 +1,68 @@ + + + + + + + + + + + foregound + background + color0 + color1 + color2 + color3 + color4 + color5 + color6 + color7 + color8 + color9 + color10 + color11 + color12 + color13 + color14 + color15 + + + + + + + \ No newline at end of file diff --git a/docs/templates/progress_bar.svg b/docs/templates/progress_bar.svg new file mode 100644 index 0000000..80ce2f6 --- /dev/null +++ b/docs/templates/progress_bar.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + + \ No newline at end of file diff --git a/docs/templates/solarized_dark.svg b/docs/templates/solarized_dark.svg new file mode 100644 index 0000000..79eed9a --- /dev/null +++ b/docs/templates/solarized_dark.svg @@ -0,0 +1,42 @@ + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/solarized_light.svg b/docs/templates/solarized_light.svg new file mode 100644 index 0000000..8078e36 --- /dev/null +++ b/docs/templates/solarized_light.svg @@ -0,0 +1,42 @@ + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/window_frame.svg b/docs/templates/window_frame.svg new file mode 100644 index 0000000..2cb6e9b --- /dev/null +++ b/docs/templates/window_frame.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/window_frame_js.svg b/docs/templates/window_frame_js.svg new file mode 100644 index 0000000..6e144c7 --- /dev/null +++ b/docs/templates/window_frame_js.svg @@ -0,0 +1,198 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + 0:00/0:00 + + + + + + + + + + + \ No newline at end of file From f7aa7c16ed6836d74e2e434df07c1c71efb34f1c Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 16 Jun 2019 09:25:11 +0200 Subject: [PATCH 4/9] Use relative link to SVG animation --- README.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/README.md b/README.md index 4f9d1dd..276d6bf 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,7 @@ termtosvg is a Unix terminal recorder written in Python that renders your command line sessions as standalone SVG animations. -

- -

+![Example](./docs/examples/awesome_window_frame.svg) * [Gallery of examples](https://nbedos.github.io/termtosvg/pages/examples.html) * [Gallery of templates](https://nbedos.github.io/termtosvg/pages/templates.html) From c40d4a3de8b7728111af1a63fe425e313d67c317 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 16 Jun 2019 12:34:39 +0200 Subject: [PATCH 5/9] Update screen element of templates --- docs/examples/awesome_window_frame.svg | 2 +- docs/examples/awesome_window_frame_js.svg | 2 +- docs/examples/colors_progress_bar.svg | 2 +- docs/examples/htop_gjm8.svg | 2 +- docs/examples/ipython_window_frame.svg | 2 +- docs/examples/unittest_solarized_dark.svg | 2 +- docs/templates/base16_default_dark.svg | 2 +- docs/templates/dracula.svg | 2 +- docs/templates/gjm8.svg | 2 +- docs/templates/gjm8_play.svg | 2 +- docs/templates/progress_bar.svg | 2 +- docs/templates/solarized_dark.svg | 2 +- docs/templates/solarized_light.svg | 2 +- docs/templates/window_frame.svg | 2 +- docs/templates/window_frame_js.svg | 2 +- termtosvg/data/templates/base16_default_dark.svg | 2 +- termtosvg/data/templates/dracula.svg | 2 +- termtosvg/data/templates/gjm8.svg | 2 +- termtosvg/data/templates/gjm8_play.svg | 2 +- termtosvg/data/templates/progress_bar.svg | 2 +- termtosvg/data/templates/solarized_dark.svg | 2 +- termtosvg/data/templates/solarized_light.svg | 2 +- termtosvg/data/templates/window_frame.svg | 2 +- termtosvg/data/templates/window_frame_js.svg | 2 +- 24 files changed, 24 insertions(+), 24 deletions(-) diff --git a/docs/examples/awesome_window_frame.svg b/docs/examples/awesome_window_frame.svg index 01a3eb4..d637fbc 100644 --- a/docs/examples/awesome_window_frame.svg +++ b/docs/examples/awesome_window_frame.svg @@ -141,6 +141,6 @@ - + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/examples/awesome_window_frame_js.svg b/docs/examples/awesome_window_frame_js.svg index 5b8fa89..dc5f6d5 100644 --- a/docs/examples/awesome_window_frame_js.svg +++ b/docs/examples/awesome_window_frame_js.svg @@ -174,7 +174,7 @@ - + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg 0:00/0:00 diff --git a/docs/examples/colors_progress_bar.svg b/docs/examples/colors_progress_bar.svg index 7348cdb..0bde67e 100644 --- a/docs/examples/colors_progress_bar.svg +++ b/docs/examples/colors_progress_bar.svg @@ -168,7 +168,7 @@ - + nico ~ $ nico ~ $ ~ nico ~ $ ~/ nico ~ $ ~/s nico ~ $ ~/sc nico ~ $ ~/scr nico ~ $ ~/scri nico ~ $ ~/scrip nico ~ $ ~/scripts/ nico ~ $ ~/scripts/c nico ~ $ ~/scripts/co nico ~ $ ~/scripts/col nico ~ $ ~/scripts/colo nico ~ $ ~/scripts/colors nico ~ $ ~/scripts/colors_ nico ~ $ ~/scripts/colors_2 nico ~ $ ~/scripts/colors_25 nico ~ $ ~/scripts/colors_256 nico ~ $ ~/scripts/colors_256.sh nico ~ $ ~/scripts/colors_256.sh nico ~ $ ~/scripts/t nico ~ $ ~/scripts/tr nico ~ $ ~/scripts/tru nico ~ $ ~/scripts/true_colors. nico ~ $ ~/scripts/true_colors.s nico ~ $ ~/scripts/true_colors.sh nico ~ $ ~/scripts/true_colors.sh nico ~ $ ~/scripts/true_colors.sh nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termm nico ~ $ termmt nico ~ $ termm nico ~ $ term nico ~ $ termt nico ~ $ termtosvg nico ~ $ termtosvg nico ~ $ termtosvg - nico ~ $ termtosvg -- nico ~ $ termtosvg --h nico ~ $ termtosvg --he nico ~ $ termtosvg --hel nico ~ $ termtosvg --help nico ~ $ termtosvg --help nico ~ $ termtosvg --help | nico ~ $ termtosvg --help | nico ~ $ termtosvg --help | l nico ~ $ termtosvg --help | lo nico ~ $ termtosvg --help | loc nico ~ $ termtosvg --help | locl nico ~ $ termtosvg --help | lol nico ~ $ termtosvg --help | lolc nico ~ $ termtosvg --help | lolca nico ~ $ termtosvg --help | lolcat nico ~ $ termtosvg --help | lolcat usage: termtosvg [output_file] [-- usage: termtosvg [output_file] [--theme THEME] [--help usage: termtosvg [output_file] [--theme THEME] [--help] [--verbose]Record a ter Record a terminal session and render an SVG anim Record a terminal session and render an SVG animation on the flypositional positional arguments: output_file optiona output_file optional filename of the SVG animation; if missi output_file optional filename of the SVG animation; if missing, a random filename will be automatically gene filename will be automatically generatedoptional arguments: -h, --help show this help -h, --help show this help message and exit --theme THEME color theme used to render the te --theme THEME color theme used to render the terminal session (circus, classic-dark, clas classic-dark, classic-light, dracula, classic-dark, classic-light, dracula, isotope, marrakesh, material, monokai, solari material, monokai, solarized-dark, solarized-light, zenburn) material, monokai, solarized-dark, solarized-light, zenburn) -v, --verbose increase log mess -v, --verbose increase log messages verbositySee also 'termtosvg re See also 'termtosvg record --help' and 'termtosvg See also 'termtosvg record --help' and 'termtosvg render --help'nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexit \ No newline at end of file diff --git a/docs/examples/htop_gjm8.svg b/docs/examples/htop_gjm8.svg index a607713..8a4301a 100644 --- a/docs/examples/htop_gjm8.svg +++ b/docs/examples/htop_gjm8.svg @@ -90,6 +90,6 @@ .color15 {fill: #e5e5e5;} - + 1 [|||||||||||||||||||||||||100.0%] Tasks: 33; 1 running2 [0.0%] Load average: 0.49 0.50 0.54 3 [0.0%] Uptime: 02:00:224 [0.0%]Mem[||||||||||||||||||||1.50G/7.74G]Swp[0K/0K] PID USER PRI NI VIRT RES SHR S CPU% MEM% TIME+ Command 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py5842 nico20 0 4678M 494M 31912 S 0.0 6.2 1:02.83 │ └─ java -classpa5883 nico20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier1245 nico20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash11015 nico20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico20 0 12504 4100 3432 R 0.0 0.1 0:00.03 │ └─ htop 1242 nico20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmuxF1Help F2Setup F3SearchF4FilterF5SortedF6CollapF7Nice -F8Nice +F9Kill F10Quit 1 [|| 4.7%] Tasks: 33; 1 running2 [||||7.1%] Load average: 0.49 0.50 0.54 3 [||||7.2%] Uptime: 02:00:234 [|||5.9%]Mem[||||||||||||||||||||1.50G/7.74G]5842 nico20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa11016 nico20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1 root 20 0 189M 8836 6728 S 0.0 0.1 0:01.61 init 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5803 nico 20 0 9104 3332 2860 S 0.0 0.0 0:00.01 ├─ sh /usr/share/py 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa3 [||||7.2%] Uptime: 02:00:24 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.84 │ └─ java -classpa 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 5883 nico 20 0 6800 1636 1440 S 0.0 0.0 0:00.11 │ └─ fsnotifier 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.72 ├─ tmux 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 1246 nico 20 0 9452 4276 3508 S 0.0 0.1 0:00.05 │ └─ -bash 11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho3 [||||7.2%] Uptime: 02:00:2511015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.06 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.7 0.1 0:00.04 │ └─ htop 1 [||| 6.3%] Tasks: 33; 1 running2 [||| 6.2%] Load average: 0.45 0.49 0.53 3 [||| 6.2%] Uptime: 02:00:254 [|||5.7%]Mem[||||||||||||||||||||1.49G/7.74G] 5842 nico 20 0 4678M 494M 31912 S 0.6 6.2 1:02.85 │ └─ java -classpa11015 nico 20 0 37848 21668 12488 S 0.6 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.1 0.1 0:00.06 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.64 ├─ urxvt -e tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 1243 nico 20 0 12012 4208 3592 S 0.0 0.1 0:00.00 │ └─ tmux 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 786 nico 20 0 1978M 364M 163M S 5.7 4.6 12:51.13 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont3 [||| 6.2%] Uptime: 02:00:26 9809 nico 20 0 1406M 151M 106M S 1.7 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1852 nico 20 0 277M 33400 25400 S 2.3 0.4 0:46.26 │ ├─ plugin-contai 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 1662 nico 20 0 1738M 290M 99M S 15.4 3.7 5:57.78 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 0.6 2.3 0:49.60 │ ├─ firefox -cont 1 [||| 5.6%] Tasks: 33; 2 running2 [||| 6.7%] Load average: 0.45 0.49 0.53 3 [||||8.6%] Uptime: 02:00:264 [|||6.7%]11016 nico 20 0 12504 4100 3432 R 1.2 0.1 0:00.08 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.6 0.2 0:00.65 ├─ urxvt -e tmux 786 nico 20 0 1978M 364M 163M S 6.8 4.6 12:51.24 ├─ firefox 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 2.5 0.4 0:46.30 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 17.3 3.7 5:58.06 │ ├─ firefox -cont960 nico20 0 1547M 183M 122M S 0.0 2.3 0:49.60 │ ├─ firefox -cont 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont3 [||||8.6%] Uptime: 02:00:27 907 nico 20 0 1470M 184M 78736 S 0.0 2.3 0:13.08 │ ├─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 861 nico 20 0 2102M 239M 122M S 0.0 3.0 5:01.45 │ └─ firefox -cont 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 3 [||||8.6%] Uptime: 02:00:28 735 nico 20 0 38556 7700 6560 S 0.0 0.1 0:00.03 ├─ systemd --user 1 [||| 6.7%] Tasks: 33; 1 running2 [|| 4.4%] Load average: 0.45 0.49 0.53 3 [||||7.4%] Uptime: 02:00:284 [|| 3.8%] 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 1662 nico 20 0 1739M 291M 99M S 14.9 3.7 5:58.30 │ ├─ firefox -cont 960 nico 20 0 1547M 183M 122M S 1.2 2.3 0:49.62 │ ├─ firefox -cont 1852 nico 20 0 277M 33400 25400 S 1.9 0.4 0:46.33 │ ├─ plugin-contai 9809 nico 20 0 1406M 151M 106M S 0.0 1.9 0:13.84 │ ├─ firefox -cont3 [||||7.4%] Uptime: 02:00:29 786 nico 20 0 1978M 364M 163M S 6.2 4.6 12:51.34 ├─ firefox 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1242 nico 20 0 54960 17792 12296 S 0.0 0.2 0:00.65 ├─ urxvt -e tmux 11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 0.6 0.1 0:00.09 │ └─ htop 1 [|||| 6.5%] Tasks: 33; 1 running2 [||||6.5%] Load average: 0.45 0.49 0.53 3 [||| 5.2%] Uptime: 02:00:304 [|||5.3%]11015 nico 20 0 37848 21668 12488 S 0.0 0.3 0:00.07 │ └─ python /ho11016 nico 20 0 12504 4100 3432 R 1.3 0.1 0:00.11 │ └─ htop 786 nico 20 0 1978M 364M 163M S 5.9 4.6 12:51.43 ├─ firefox 1852 nico 20 0 277M 33400 25400 S 2.6 0.4 0:46.37 │ ├─ plugin-contai 1662 nico 20 0 1739M 292M 99M S 15.6 3.7 5:58.54 │ ├─ firefox -cont2 [||||6.5%] Load average: 0.41 0.49 0.53 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa 5842 nico 20 0 4678M 494M 31912 S 0.7 6.2 1:02.86 │ └─ java -classpa3 [||| 5.2%] Uptime: 02:00:31 1 [||| 6.5%] Tasks: 33; 1 running2 [||| 5.9%] Load average: 0.41 0.49 0.53 3 [|| 4.8%] Uptime: 02:00:314 [|||6.4%] 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 11016 nico 20 0 12504 4100 3432 R 1.8 0.1 0:00.14 │ └─ htop 3 [|| 4.8%] Uptime: 02:00:32 5842 nico 20 0 4678M 494M 31912 S 0.0 6.2 1:02.86 │ └─ java -classpa 1245 nico 20 0 13092 4812 3140 S 0.6 0.1 0:00.73 ├─ tmux 1 [||| 5.6%] Tasks: 33; 1 running2 [|| 5.1%] Load average: 0.41 0.49 0.53 3 [||| 6.6%] Uptime: 02:00:334 [|| 6.1%] 1245 nico 20 0 13092 4812 3140 S 0.0 0.1 0:00.73 ├─ tmux 11016 nico 20 0 12504 4100 3432 R 0.0 0.1 0:00.14 │ └─ htop \ No newline at end of file diff --git a/docs/examples/ipython_window_frame.svg b/docs/examples/ipython_window_frame.svg index 853e18b..78095dd 100644 --- a/docs/examples/ipython_window_frame.svg +++ b/docs/examples/ipython_window_frame.svg @@ -277,6 +277,6 @@ - + Python 3.7.1 (default, Oct 22 2018, 10:41:28) Type 'copyright', 'credits' or 'license' for more informationIPython 7.2.0 -- An enhanced Interactive Python. Type '?' for help. In [1]: In [1]: i In [1]: im In [1]: imp In [1]: impo In [1]: impor In [1]: import In [1]: import In [1]: import t In [1]: import ti In [1]: import tim In [1]: import time In [1]: import time In [2]: In [2]: f In [2]: fo In [2]: for In [2]: for In [2]: for i In [2]: for i In [2]: for i i In [2]: for i in In [2]: for i inr In [2]: for i in In [2]: for i in r In [2]: for i in ra In [2]: for i in ran In [2]: for i in rang In [2]: for i in range In [2]: for i in range( In [2]: for i in range(4 In [2]: for i in range(40 In [2]: for i in range(40) In [2]: for i in range(40): In [2]: for i in range(40): ...: ...: p ...: pr ...: pri ...: prin ...: print ...: print( ...: print(' ...: print('= ...: print('=' ...: print('='* ...: print('='*i ...: print('='*i ...: print('='*i + ...: print('='*i + ...: print('='*i + ' ...: print('='*i + '+ ...: print('='*i + '+' ...: print('='*i + '+' ...: print('='*i + '+' + ...: print('='*i + '+' + ...: print('='*i + '+' + ( ...: print('='*i + '+' + (4 ...: print('='*i + '+' + (40 ...: print('='*i + '+' + (40- ...: print('='*i + '+' + (40-i ...: print('='*i + '+' + (40-i' ...: print('='*i + '+' + (40-i) ...: print('='*i + '+' + (40-i)* ...: print('='*i + '+' + (40-i)*' ...: print('='*i + '+' + (40-i)*'= ...: print('='*i + '+' + (40-i)*'=' ...: print('='*i + '+' + (40-i)*'=') ...: print('='*i + '+' + (40-i)*'=') ...: t ...: ti ...: tim ...: time ...: time. ...: time.s ...: time.sl ...: time.sle ...: time.slee ...: time.sleep ...: time.sleep( ...: time.sleep(0 ...: time.sleep(0. ...: time.sleep(0.1 ...: time.sleep(0.1) ...: time.sleep(0.1) ...: +======================================== =+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=========================================+=In [3]: In [3]: e In [3]: ex In [3]: exi In [3]: exit In [3]: exit \ No newline at end of file diff --git a/docs/examples/unittest_solarized_dark.svg b/docs/examples/unittest_solarized_dark.svg index b3da9cb..59a768f 100644 --- a/docs/examples/unittest_solarized_dark.svg +++ b/docs/examples/unittest_solarized_dark.svg @@ -123,6 +123,6 @@ .color15 {fill: #fdf6e3;} - + nico ~/termtosvg $ nico ~/termtosvg $ m nico ~/termtosvg $ ma nico ~/termtosvg $ mak nico ~/termtosvg $ make nico ~/termtosvg $ make nico ~/termtosvg $ make t nico ~/termtosvg $ make te nico ~/termtosvg $ make tes nico ~/termtosvg $ make test nico ~/termtosvg $ make tests nico ~/termtosvg $ make tests (test -d .venv || python -m venv .venv). .venv/bin/activate && \ pip install -U -e .[dev]Obtaining file:///home/nico/termtosvgRequirement already up-to-date: setuptools in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: pyte in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: python-xlib in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: svgwrite in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: coverage in ./.venv/lib/python3.6/site-packages (fRequirement already up-to-date: twine in ./.venv/lib/python3.6/site-packages (from termtosvg==0.1.0)Requirement already up-to-date: wheel in ./.venv/lib/python3.6/site-packages (fromRequirement already up-to-date: wcwidth in ./.venv/lib/python3.6/site-packages (from pyte->termtosvg==0.1.0)Requirement already up-to-date: six>=1.10.0 in ./.venv/lib/python3.6/site-packages (from python-xlib->termtosvg==0.1.0)Requirement already up-to-date: pyparsing>=2.0.1 in ./.venv/lib/python3.6/site-packages (from svgwrite->termtosvg==0.1.0)Requirement already up-to-date: requests!=2.15,!=2.16,>=2.5.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: requests-toolbelt>=0.8.0 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: tqdm>=4.14 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: pkginfo>=1.4.2 in ./.venv/lib/python3.6/site-packages (from twine->termtosvg==0.1.0)Requirement already up-to-date: certifi>=2017.4.17 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: idna<2.8,>=2.5 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: urllib3<1.24,>=1.21.1 in ./.venv/lib/python3.6/site-packages (from requests!=2.15,!=2.16,>=2.5.0->twine->termtosvg==0.1.0)Requirement already up-to-date: chardet<3.1.0,>=3.0.2 in ./.venv/lib/python3.6/sitInstalling collected packages: termtosvg Found existing installation: termtosvg 0.1.0 Uninstalling termtosvg-0.1.0: Successfully uninstalled termtosvg-0.1.0 Running setup.py develop for termtosvgSuccessfully installed termtosvgYou are using pip version 9.0.3, however version 10.0.1 is available.You should consider upgrading via the 'pip install --upgrade pip' command. pip freeze && \ coverage run --branch --source termtosvg -m unittest -v && \ coverage report && \ coverage htmlpython-xlib==0.23pytz==2018.4requests==2.19.1requests-toolbelt==0.8.0rsa==3.4.2six==1.11.0svgwrite==1.1.12-e git+git@github.com:nbedos/termtosvg.git@dab7f522c126e9938e896d023d8be453f0dcf1b9#egg=termtosvgtinydb==3.9.0.post1tinyrecord==0.1.5tox==3.0.0tqdm==4.23.4twine==1.11.0urllib3==1.23virtualenv==16.0.0wcwidth==0.1.7wrapt==1.10.11test_main (tests.test___main__.TestMain) ... test_main (tests.test___main__.TestMain) ... Recording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_3vqhnplh.castRecording started, enter "exit" command or Control-D to endRecording ended, cast file is /tmp/termtosvg_s7tgsv75.castRendering startedRendering ended, SVG animation is /tmp/termtosvg_wts11qev.svgRendering ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgRendering ended, SVG animation is /tmp/termtosvg_i8zp1z7w.svgLogging to /tmp/termtosvg.logRecording ended, SVG animation is /tmp/termtosvg_fkz0r2vk.svgRecording ended, SVG animation is /tmp/termtosvg_s7tgsv75.svgoktest_parse (tests.test___main__.TestMain) ... test_parse (tests.test___main__.TestMain) ... oktest__render_characters (tests.test_anim.TestAnim) ... oktest__render_line_bg_colors (tests.test_anim.TestAnim) ... test__render_line_bg_colors (tests.test_anim.TestAnim) ... oktest_from_pyte (tests.test_anim.TestAnim) ... oktest_render_animation (tests.test_anim.TestAnim) ... test_render_animation (tests.test_anim.TestAnim) ... oktest_serialize_css_dict (tests.test_anim.TestAnim) ... oktest_AsciiCastEvent (tests.test_asciicast.TestAsciicast) ... oktest_AsciiCastHeader (tests.test_asciicast.TestAsciicast) ... oktest_from_json (tests.test_asciicast.TestAsciicast) ... test_from_json (tests.test_asciicast.TestAsciicast) ... oktest_from_xresources (tests.test_asciicast.TestAsciicast) ... test_from_xresources (tests.test_asciicast.TestAsciicast) ... oktest_to_json (tests.test_asciicast.TestAsciicast) ... oktest__group_by_time (tests.test_term.TestTerm) ... oktest__record (tests.test_term.TestTerm) ... test__record (tests.test_term.TestTerm) ... oktest_default_themes (tests.test_term.TestTerm) ... test_default_themes (tests.test_term.TestTerm) ... oktest_get_configuration (tests.test_term.TestTerm) ... test_get_configuration (tests.test_term.TestTerm) ... oktest_record (tests.test_term.TestTerm) ... test_record (tests.test_term.TestTerm) ... oktest_replay (tests.test_term.TestTerm) ... test_replay (tests.test_term.TestTerm) ... ok----------------------------------------------------------------------Ran 18 tests in 5.164sOKName Stmts Miss Branch BrPart Cover----------------------------------------------------------termtosvg/__init__.py 0 0 0 0 100%termtosvg/__main__.py 106 4 38 4 94%termtosvg/anim.py 146 3 60 3 97%termtosvg/asciicast.py 93 6 38 3 93%termtosvg/term.py 192 13 66 8 91%TOTAL 537 26 202 18 94%nico ~/termtosvg $ e nico ~/termtosvg $ ex nico ~/termtosvg $ exi nico ~/termtosvg $ exit nico ~/termtosvg $ exitexit \ No newline at end of file diff --git a/docs/templates/base16_default_dark.svg b/docs/templates/base16_default_dark.svg index a8d8ecf..d6c2fe6 100644 --- a/docs/templates/base16_default_dark.svg +++ b/docs/templates/base16_default_dark.svg @@ -38,6 +38,6 @@ .color15 {fill: #f8f8f8;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg diff --git a/docs/templates/dracula.svg b/docs/templates/dracula.svg index 68bf4c4..b4a5962 100644 --- a/docs/templates/dracula.svg +++ b/docs/templates/dracula.svg @@ -38,6 +38,6 @@ .color15 {fill: #f7f7fb;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/gjm8.svg b/docs/templates/gjm8.svg index a95600e..c6ef951 100644 --- a/docs/templates/gjm8.svg +++ b/docs/templates/gjm8.svg @@ -38,6 +38,6 @@ .color15 {fill: #e5e5e5;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/gjm8_play.svg b/docs/templates/gjm8_play.svg index 9724c05..6c37c76 100644 --- a/docs/templates/gjm8_play.svg +++ b/docs/templates/gjm8_play.svg @@ -39,7 +39,7 @@ .color15 {fill: #e5e5e5;} - + foregound background diff --git a/docs/templates/progress_bar.svg b/docs/templates/progress_bar.svg index 80ce2f6..6accf9e 100644 --- a/docs/templates/progress_bar.svg +++ b/docs/templates/progress_bar.svg @@ -55,7 +55,7 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/solarized_dark.svg b/docs/templates/solarized_dark.svg index 79eed9a..ac86696 100644 --- a/docs/templates/solarized_dark.svg +++ b/docs/templates/solarized_dark.svg @@ -37,6 +37,6 @@ .color15 {fill: #fdf6e3;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/solarized_light.svg b/docs/templates/solarized_light.svg index 8078e36..dc86b8b 100644 --- a/docs/templates/solarized_light.svg +++ b/docs/templates/solarized_light.svg @@ -37,6 +37,6 @@ .color15 {fill: #002b36;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/window_frame.svg b/docs/templates/window_frame.svg index 2cb6e9b..25633aa 100644 --- a/docs/templates/window_frame.svg +++ b/docs/templates/window_frame.svg @@ -42,6 +42,6 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/window_frame_js.svg b/docs/templates/window_frame_js.svg index 6e144c7..c09f587 100644 --- a/docs/templates/window_frame_js.svg +++ b/docs/templates/window_frame_js.svg @@ -74,7 +74,7 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg 0:00/0:00 diff --git a/termtosvg/data/templates/base16_default_dark.svg b/termtosvg/data/templates/base16_default_dark.svg index a8d8ecf..d6c2fe6 100644 --- a/termtosvg/data/templates/base16_default_dark.svg +++ b/termtosvg/data/templates/base16_default_dark.svg @@ -38,6 +38,6 @@ .color15 {fill: #f8f8f8;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg diff --git a/termtosvg/data/templates/dracula.svg b/termtosvg/data/templates/dracula.svg index 68bf4c4..b4a5962 100644 --- a/termtosvg/data/templates/dracula.svg +++ b/termtosvg/data/templates/dracula.svg @@ -38,6 +38,6 @@ .color15 {fill: #f7f7fb;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/gjm8.svg b/termtosvg/data/templates/gjm8.svg index a95600e..c6ef951 100644 --- a/termtosvg/data/templates/gjm8.svg +++ b/termtosvg/data/templates/gjm8.svg @@ -38,6 +38,6 @@ .color15 {fill: #e5e5e5;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/gjm8_play.svg b/termtosvg/data/templates/gjm8_play.svg index 9724c05..6c37c76 100644 --- a/termtosvg/data/templates/gjm8_play.svg +++ b/termtosvg/data/templates/gjm8_play.svg @@ -39,7 +39,7 @@ .color15 {fill: #e5e5e5;} - + foregound background diff --git a/termtosvg/data/templates/progress_bar.svg b/termtosvg/data/templates/progress_bar.svg index 80ce2f6..6accf9e 100644 --- a/termtosvg/data/templates/progress_bar.svg +++ b/termtosvg/data/templates/progress_bar.svg @@ -55,7 +55,7 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/solarized_dark.svg b/termtosvg/data/templates/solarized_dark.svg index 79eed9a..ac86696 100644 --- a/termtosvg/data/templates/solarized_dark.svg +++ b/termtosvg/data/templates/solarized_dark.svg @@ -37,6 +37,6 @@ .color15 {fill: #fdf6e3;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/solarized_light.svg b/termtosvg/data/templates/solarized_light.svg index 8078e36..dc86b8b 100644 --- a/termtosvg/data/templates/solarized_light.svg +++ b/termtosvg/data/templates/solarized_light.svg @@ -37,6 +37,6 @@ .color15 {fill: #002b36;} - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/window_frame.svg b/termtosvg/data/templates/window_frame.svg index 2cb6e9b..25633aa 100644 --- a/termtosvg/data/templates/window_frame.svg +++ b/termtosvg/data/templates/window_frame.svg @@ -42,6 +42,6 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/window_frame_js.svg b/termtosvg/data/templates/window_frame_js.svg index 6e144c7..c09f587 100644 --- a/termtosvg/data/templates/window_frame_js.svg +++ b/termtosvg/data/templates/window_frame_js.svg @@ -74,7 +74,7 @@ - + nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg 0:00/0:00 From 7f06b96b4bc8f60300d793bd1ba42e2b8def3536 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 16 Jun 2019 13:43:07 +0200 Subject: [PATCH 6/9] Fix CSS progress bar --- docs/examples/awesome_window_frame.svg | 11 ++++++++--- docs/examples/awesome_window_frame_js.svg | 11 ++++++++--- docs/examples/colors_progress_bar.svg | 11 ++++++++--- docs/examples/htop_gjm8.svg | 11 ++++++++--- docs/examples/ipython_window_frame.svg | 11 ++++++++--- docs/examples/unittest_solarized_dark.svg | 11 ++++++++--- termtosvg/anim.py | 13 +++++++++---- 7 files changed, 57 insertions(+), 22 deletions(-) diff --git a/docs/examples/awesome_window_frame.svg b/docs/examples/awesome_window_frame.svg index d637fbc..14e6dd4 100644 --- a/docs/examples/awesome_window_frame.svg +++ b/docs/examples/awesome_window_frame.svg @@ -13,7 +13,12 @@ dominant-baseline: text-before-edge; white-space: pre; } - @keyframes roll { + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { 0.000%{transform:translateY(0px)} 1.426%{transform:translateY(-323px)} 1.953%{transform:translateY(-646px)} @@ -109,11 +114,11 @@ } #screen_view { - animation-duration: 27349ms; + animation-duration: var(--animation-duration); animation-iteration-count:infinite; animation-name:roll; animation-timing-function: steps(1,end); - } + } ]]> \ No newline at end of file diff --git a/docs/examples/colors_progress_bar.svg b/docs/examples/colors_progress_bar.svg index 5c7c5fc..ce3e87a 100644 --- a/docs/examples/colors_progress_bar.svg +++ b/docs/examples/colors_progress_bar.svg @@ -2,6 +2,7 @@ + + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/docs/templates/dracula.svg b/docs/templates/dracula.svg index b4a5962..d7ee60e 100644 --- a/docs/templates/dracula.svg +++ b/docs/templates/dracula.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/gjm8.svg b/docs/templates/gjm8.svg index c6ef951..2ae3b47 100644 --- a/docs/templates/gjm8.svg +++ b/docs/templates/gjm8.svg @@ -2,20 +2,127 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} +100%{transform:translateY(-29393px)} + } + + #screen_view { + animation-fill-mode: forwards; + animation-duration: var(--animation-duration); + animation-iteration-count:1; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/gjm8_play.svg b/docs/templates/gjm8_play.svg index 6c37c76..f3ae051 100644 --- a/docs/templates/gjm8_play.svg +++ b/docs/templates/gjm8_play.svg @@ -1,22 +1,126 @@ - + + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - - foregound - background - color0 - color1 - color2 - color3 - color4 - color5 - color6 - color7 - color8 - color9 - color10 - color11 - color12 - color13 - color14 - color15 - - + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg diff --git a/docs/templates/progress_bar.svg b/docs/templates/progress_bar.svg index 6accf9e..2072dcf 100644 --- a/docs/templates/progress_bar.svg +++ b/docs/templates/progress_bar.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/solarized_dark.svg b/docs/templates/solarized_dark.svg index ac86696..259a288 100644 --- a/docs/templates/solarized_dark.svg +++ b/docs/templates/solarized_dark.svg @@ -2,19 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/solarized_light.svg b/docs/templates/solarized_light.svg index dc86b8b..a9a834a 100644 --- a/docs/templates/solarized_light.svg +++ b/docs/templates/solarized_light.svg @@ -2,19 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/docs/templates/window_frame.svg b/docs/templates/window_frame.svg index 25633aa..a0b37e0 100644 --- a/docs/templates/window_frame.svg +++ b/docs/templates/window_frame.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + white-space: pre; + } + ]]> @@ -75,82 +76,178 @@ - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg 0:00/0:00 - - - + - + \ No newline at end of file diff --git a/docs/templates/window_frame_waapi.svg b/docs/templates/window_frame_waapi.svg new file mode 100644 index 0000000..7d0a44e --- /dev/null +++ b/docs/templates/window_frame_waapi.svg @@ -0,0 +1,224 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 [||||||||||||||||||||||||100.0%] Tasks: 37; 2 running2 [0.0%] Load average: 1.05 1.08 0.86 3 [|||||||||||||||50.0%] Uptime: 01:01:384 [||||||||||||||||||||||||100.0%]Mem[|||||||||||||||||| 3.17G/7.74G]Swp[0K/0K] PID USER S CPU% MEM% TIME+ Command 1 root S 0.0 0.1 0:01.78 init 1843 nicoS 0.0 0.1 0:00.42 ├─ tmux 1844 nicoS 0.0 0.1 0:00.07 │ └─ -bash10206 nicoS 0.0 0.3 0:00.06 │ └─ python /home/nico/termtosvg/.venv/10207 nicoR 0.0 0.1 0:00.03 │ └─ htop 1840 nicoS 0.0 0.2 0:00.36 ├─ urxvt -e tmux 1841 nicoS 0.0 0.0 0:00.00 │ └─ tmux 1022 nicoS 0.0 0.0 0:00.00 ├─ sh /usr/share/pycharm/bin/pycharm.sh 1061 nicoS 0.0 22.5 15:41.75 │ └─ java -classpath /usr/share/pycharm/li1091 nicoS 0.0 0.0 0:00.31 │ └─ fsnotifier64692 nicoS 0.0 5.2 4:09.08 ├─ firefox 9552 nicoS 0.0 0.9 0:00.18 │ ├─ firefox -contentproc -childID 20 -isF9165 nicoS 0.0 2.3 0:14.26 │ ├─ firefox -contentproc -childID 19 -isF9012 nicoS 133. 2.5 0:53.45 │ ├─ firefox -contentproc -childID 18 -isFF1Help F2Setup F3SearchF4FilterF5SortedF6CollapF7Nice -F8Nice +F9Kill F10Quit 1 root S 0.0 0.1 0:01.78 init 1843 nico S 0.0 0.1 0:00.42 ├─ tmux 3 [|||||||||||||||50.0%] Uptime: 01:01:39 1843 nico S 0.0 0.1 0:00.42 ├─ tmux 1844 nico S 0.0 0.1 0:00.07 │ └─ -bash 1844 nico S 0.0 0.1 0:00.07 │ └─ -bash 10206 nico S 0.0 0.3 0:00.06 │ └─ python /home/nico/termtosvg/.venv/10206 nico S 0.0 0.3 0:00.06 │ └─ python /home/nico/termtosvg/.venv/10207 nico R 0.0 0.1 0:00.03 │ └─ htop 10207 nico R 0.0 0.1 0:00.03 │ └─ htop 1840 nico S 0.0 0.2 0:00.36 ├─ urxvt -e tmux 1 [||||| 13.3%] Tasks: 37; 1 running2 [||||11.0%] Load average: 1.05 1.08 0.86 3 [|||| 10.3%] Uptime: 01:01:404 [||||||| 17.8%]Mem[|||||||||||||||||| 3.11G/7.74G]10206 nico S 5.2 0.3 0:00.15 │ └─ python /home/nico/termtosvg/.venv/10207 nico R 1.7 0.1 0:00.06 │ └─ htop 1840 nico S 0.0 0.2 0:00.36 ├─ urxvt -e tmux 1841 nico S 0.0 0.0 0:00.00 │ └─ tmux 692 nicoS 8.6 5.2 4:09.23 ├─ firefox9165 nicoS 1.7 2.3 0:14.29 │ ├─ firefox -contentproc -childID 19 -isF9012 nicoS 9.2 2.5 0:53.61 │ ├─ firefox -contentproc -childID 18 -isF 1841 nico S 0.0 0.0 0:00.00 │ └─ tmux 1022 nico S 0.0 0.0 0:00.00 ├─ sh /usr/share/pycharm/bin/pycharm.sh 1022 nico S 0.0 0.0 0:00.00 ├─ sh /usr/share/pycharm/bin/pycharm.sh 1061 nico S 0.0 22.5 15:41.75 │ └─ java -classpath /usr/share/pycharm/li 1061 nico S 0.0 22.5 15:41.75 │ └─ java -classpath /usr/share/pycharm/li 1091 nico S 0.0 0.0 0:00.31 │ └─ fsnotifier64 3 [|||| 10.3%] Uptime: 01:01:41 1091 nico S 0.0 0.0 0:00.31 │ └─ fsnotifier64 692 nico S 8.6 5.2 4:09.23 ├─ firefox 692 nico S 8.6 5.2 4:09.23 ├─ firefox 9552 nico S 0.0 0.9 0:00.18 │ ├─ firefox -contentproc -childID 20 -isF 1 [|||||| 15.3%] Tasks: 37; 1 running2 [||||11.6%] Load average: 1.05 1.08 0.86 3 [|||| 9.9%] Uptime: 01:01:414 [|||||| 15.0%] 1843 nico S 0.6 0.1 0:00.43 ├─ tmux 10206 nico S 6.4 0.3 0:00.26 │ └─ python /home/nico/termtosvg/.venv/10207 nico R 1.2 0.1 0:00.08 │ └─ htop 1061 nico S 0.6 22.5 15:41.76 │ └─ java -classpath /usr/share/pycharm/li 692 nico S 9.3 5.2 4:09.39 ├─ firefox 9552 nico S 0.0 0.9 0:00.18 │ ├─ firefox -contentproc -childID 20 -isF 9165 nico S 0.0 2.3 0:14.29 │ ├─ firefox -contentproc -childID 19 -isF9012 nicoS 13.9 2.5 0:53.85 │ ├─ firefox -contentproc -childID 18 -isF3 [|||| 9.9%] Uptime: 01:01:42 9165 nico S 0.0 2.3 0:14.29 │ ├─ firefox -contentproc -childID 19 -isF 9012 nico S 13.9 2.5 0:53.85 │ ├─ firefox -contentproc -childID 18 -isF + 0:00/0:00 + + + + + + + + + + \ No newline at end of file diff --git a/termtosvg/anim.py b/termtosvg/anim.py index 34d3c31..6ce1501 100644 --- a/termtosvg/anim.py +++ b/termtosvg/anim.py @@ -212,27 +212,48 @@ def _render_animation(screen_height, frames, root, cell_width, cell_height): screen_view.append(frame_group) animation_duration = frame.time + frame.duration timings[frame.time] = -offset - definitions.update(frame_definitions ) + definitions.update(frame_definitions) tree_defs = etree.SubElement(svg_screen_tag, 'defs') for definition in definitions.values(): tree_defs.append(definition) svg_screen_tag.append(screen_view) - _embed_css(root, timings, animation_duration) + _add_animation(root, timings, animation_duration) return root +def _add_animation(root, timings, animation_duration): + animators = { + 'css': _embed_css, + 'waapi': _embed_waapi, + } + + settings = root.find('.//{{{}}}defs/{{{}}}template_settings' + .format(SVG_NS, TERMTOSVG_NS)) + if settings is None: + raise TemplateError('Missing "template_settings" element in definitions') + + animation = settings.find('{{{}}}animation[@type]'.format(TERMTOSVG_NS)) + if animation is None: + raise TemplateError('Missing or invalid "animation" element in "template_settings"') + + f = animators.get(animation.attrib['type'].lower()) + if f is None: + raise TemplateError("Attribute 'type' of element 'animation' must be one of {}" + .format(', '.join(animators.keys()))) + + f(root, timings, animation_duration) + + def _render_timed_frame(offset, buffer, cell_height, cell_width, definitions): """Return a group element containing an SVG version of the provided frame. - This group is animated, that is to say displayed then removed according to - the timing arguments. :param buffer: 2D array of CharacterCells :param cell_height: Height of a character cell in pixels :param cell_width: Width of a character cell in pixels :param definitions: Existing definitions (updated in place) - :return: A tuple consisting of the animated group and the new definitions + :return: A tuple consisting of a group element and new definitions """ frame_group_tag = etree.Element('g') @@ -416,7 +437,7 @@ def scale(element, template_columns, template_rows, columns, rows): raise TemplateError('Missing "template_settings" element in definitions') svg_geometry = settings.find('{{{}}}screen_geometry[@columns][@rows]' - .format(TERMTOSVG_NS)) + .format(TERMTOSVG_NS)) if svg_geometry is None: raise TemplateError('Missing "screen_geometry" element in "template_settings"') @@ -492,11 +513,22 @@ def _embed_css(root, timings=None, animation_duration=None): if animation_duration == 0: raise ValueError('Animation duration must be greater than 0') - transforms = os.linesep.join( - "{time:.3f}%{{transform:translateY({offset}px)}}" - .format(time=100.0 * time/animation_duration, offset=offset) - for (time, offset) in sorted(timings.items()) - ) + transforms = [] + last_offset = None + transform_format = "{time:.3f}%{{transform:translateY({offset}px)}}" + for time, offset in sorted(timings.items()): + transforms.append( + transform_format.format( + time=100.0 * time/animation_duration, + offset=offset + ) + ) + last_offset = offset + + if last_offset is not None: + transforms.append( + transform_format.format(time=100, offset=last_offset) + ) css_animation = """ :root {{ @@ -512,14 +544,92 @@ def _embed_css(root, timings=None, animation_duration=None): animation-iteration-count:infinite; animation-name:roll; animation-timing-function: steps(1,end); + animation-fill-mode: forwards; }} - """.format(duration=animation_duration, transforms=transforms) + """.format( + duration=animation_duration, + transforms=os.linesep.join(transforms) + ) style.text = etree.CDATA(css_body + css_animation) return root +def _embed_waapi(root, timings=None, animation_duration=None): + try: + style = root.find('.//{{{ns}}}defs/{{{ns}}}style[@id="generated-style"]' + .format(ns=SVG_NS)) + except etree.Error as exc: + raise TemplateError('Invalid template') from exc + + if style is None: + raise TemplateError('Missing + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg - + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/termtosvg/data/templates/dracula.svg b/termtosvg/data/templates/dracula.svg index b4a5962..d7ee60e 100644 --- a/termtosvg/data/templates/dracula.svg +++ b/termtosvg/data/templates/dracula.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/gjm8.svg b/termtosvg/data/templates/gjm8.svg index c6ef951..2ae3b47 100644 --- a/termtosvg/data/templates/gjm8.svg +++ b/termtosvg/data/templates/gjm8.svg @@ -2,20 +2,127 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} +100%{transform:translateY(-29393px)} + } + + #screen_view { + animation-fill-mode: forwards; + animation-duration: var(--animation-duration); + animation-iteration-count:1; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/gjm8_play.svg b/termtosvg/data/templates/gjm8_play.svg index 6c37c76..f3ae051 100644 --- a/termtosvg/data/templates/gjm8_play.svg +++ b/termtosvg/data/templates/gjm8_play.svg @@ -1,22 +1,126 @@ - + + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - - foregound - background - color0 - color1 - color2 - color3 - color4 - color5 - color6 - color7 - color8 - color9 - color10 - color11 - color12 - color13 - color14 - color15 - - + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg diff --git a/termtosvg/data/templates/progress_bar.svg b/termtosvg/data/templates/progress_bar.svg index 6accf9e..2072dcf 100644 --- a/termtosvg/data/templates/progress_bar.svg +++ b/termtosvg/data/templates/progress_bar.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/solarized_dark.svg b/termtosvg/data/templates/solarized_dark.svg index ac86696..259a288 100644 --- a/termtosvg/data/templates/solarized_dark.svg +++ b/termtosvg/data/templates/solarized_dark.svg @@ -2,19 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/solarized_light.svg b/termtosvg/data/templates/solarized_light.svg index dc86b8b..a9a834a 100644 --- a/termtosvg/data/templates/solarized_light.svg +++ b/termtosvg/data/templates/solarized_light.svg @@ -2,19 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg \ No newline at end of file diff --git a/termtosvg/data/templates/window_frame.svg b/termtosvg/data/templates/window_frame.svg index 25633aa..a0b37e0 100644 --- a/termtosvg/data/templates/window_frame.svg +++ b/termtosvg/data/templates/window_frame.svg @@ -2,20 +2,125 @@ + - + white-space: pre; + } + + :root { + --animation-duration: 27349ms; + } + + @keyframes roll { + 0.000%{transform:translateY(0px)} +1.426%{transform:translateY(-323px)} +1.953%{transform:translateY(-646px)} +2.216%{transform:translateY(-969px)} +2.596%{transform:translateY(-1292px)} +3.942%{transform:translateY(-1615px)} +4.348%{transform:translateY(-1938px)} +5.609%{transform:translateY(-2261px)} +6.136%{transform:translateY(-2584px)} +6.746%{transform:translateY(-2907px)} +7.477%{transform:translateY(-3230px)} +8.454%{transform:translateY(-3553px)} +8.538%{transform:translateY(-3876px)} +10.673%{transform:translateY(-4199px)} +11.178%{transform:translateY(-4522px)} +11.540%{transform:translateY(-4845px)} +12.172%{transform:translateY(-5168px)} +13.957%{transform:translateY(-5491px)} +15.010%{transform:translateY(-5814px)} +15.741%{transform:translateY(-6137px)} +16.092%{transform:translateY(-6460px)} +17.087%{transform:translateY(-6783px)} +18.666%{transform:translateY(-7106px)} +19.807%{transform:translateY(-7429px)} +20.684%{transform:translateY(-7752px)} +21.153%{transform:translateY(-8075px)} +21.708%{transform:translateY(-8398px)} +25.218%{transform:translateY(-8721px)} +26.272%{transform:translateY(-9044px)} +28.612%{transform:translateY(-9367px)} +29.698%{transform:translateY(-9690px)} +30.074%{transform:translateY(-10013px)} +30.454%{transform:translateY(-10336px)} +32.561%{transform:translateY(-10659px)} +32.575%{transform:translateY(-10982px)} +34.517%{transform:translateY(-11305px)} +35.252%{transform:translateY(-11628px)} +35.687%{transform:translateY(-11951px)} +36.009%{transform:translateY(-12274px)} +36.773%{transform:translateY(-12597px)} +37.208%{transform:translateY(-12920px)} +38.378%{transform:translateY(-13243px)} +38.963%{transform:translateY(-13566px)} +39.168%{transform:translateY(-13889px)} +39.639%{transform:translateY(-14212px)} +40.107%{transform:translateY(-14535px)} +40.543%{transform:translateY(-14858px)} +40.952%{transform:translateY(-15181px)} +41.596%{transform:translateY(-15504px)} +42.272%{transform:translateY(-15827px)} +42.740%{transform:translateY(-16150px)} +43.292%{transform:translateY(-16473px)} +43.702%{transform:translateY(-16796px)} +44.144%{transform:translateY(-17119px)} +44.667%{transform:translateY(-17442px)} +45.398%{transform:translateY(-17765px)} +46.130%{transform:translateY(-18088px)} +48.090%{transform:translateY(-18411px)} +48.499%{transform:translateY(-18734px)} +48.707%{transform:translateY(-19057px)} +49.406%{transform:translateY(-19380px)} +49.991%{transform:translateY(-19703px)} +51.307%{transform:translateY(-20026px)} +55.845%{transform:translateY(-20349px)} +55.852%{transform:translateY(-20672px)} +58.415%{transform:translateY(-20995px)} +58.766%{transform:translateY(-21318px)} +58.971%{transform:translateY(-21641px)} +59.498%{transform:translateY(-21964px)} +60.437%{transform:translateY(-22287px)} +62.511%{transform:translateY(-22610px)} +63.359%{transform:translateY(-22933px)} +64.350%{transform:translateY(-23256px)} +64.591%{transform:translateY(-23579px)} +65.289%{transform:translateY(-23902px)} +65.757%{transform:translateY(-24225px)} +66.050%{transform:translateY(-24548px)} +66.810%{transform:translateY(-24871px)} +70.262%{transform:translateY(-25194px)} +70.595%{transform:translateY(-25517px)} +70.599%{transform:translateY(-25840px)} +70.613%{transform:translateY(-26163px)} +70.620%{transform:translateY(-26486px)} +70.639%{transform:translateY(-26809px)} +70.653%{transform:translateY(-27132px)} +82.233%{transform:translateY(-27455px)} +83.136%{transform:translateY(-27778px)} +83.692%{transform:translateY(-28101px)} +84.131%{transform:translateY(-28424px)} +86.881%{transform:translateY(-28747px)} +87.155%{transform:translateY(-29070px)} +96.344%{transform:translateY(-29393px)} + } + + #screen_view { + animation-duration: var(--animation-duration); + animation-iteration-count:infinite; + animation-name:roll; + animation-timing-function: steps(1,end); + } + ]]> + white-space: pre; + } + ]]> @@ -75,82 +76,178 @@ - nico ~ $  nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg  nico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for  nico ~ $ for i nico ~ $ for i  nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in  nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10};  nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do  > e > ec > ech > echo > echo  > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg  > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is  > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > d > do > don > done > done  > done | > done |  > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat term termtosvg is awes termtosvg is aweso termtosvg is awe nico ~ $ termtosvgRecording started, enter "exit" command or Control-D to endnico ~ $ for i in {0..10}; do> echo "termtosvg is awesome!"> done | lolcattermtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg iawesome!termtosvis awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is  nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit termtosvg is awesome!termtosvg is awesome!nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg 0:00/0:00 - - - + - + \ No newline at end of file From 9738cbb212537d266eb3e10c2cee2e6e6a33e573 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 30 Jun 2019 12:09:34 +0200 Subject: [PATCH 8/9] Expose loop delay duration --- termtosvg/main.py | 54 ++++++++++++++++++++++----------- termtosvg/tests/test_main.py | 58 +++++++++++++++++++++--------------- 2 files changed, 71 insertions(+), 41 deletions(-) diff --git a/termtosvg/main.py b/termtosvg/main.py index a609813..84d58a9 100644 --- a/termtosvg/main.py +++ b/termtosvg/main.py @@ -12,18 +12,20 @@ logger = logging.getLogger('termtosvg') -USAGE = """termtosvg [output_path] [-c COMMAND] [-g GEOMETRY] [-m MIN_DURATION] - [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h] +DEFAULT_LOOP_DELAY = 1000 + +USAGE = """termtosvg [output_path] [-c COMMAND] [-D DELAY] [-g GEOMETRY] + [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h] Record a terminal session and render an SVG animation on the fly """ EPILOG = "See also 'termtosvg record --help' and 'termtosvg render --help'" RECORD_USAGE = "termtosvg record [output_path] [-c COMMAND] [-g GEOMETRY] [-h]" -RENDER_USAGE = """termtosvg render input_file [output_path] [-m MIN_DURATION] - [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h]""" +RENDER_USAGE = """termtosvg render input_file [output_path] [-D DELAY] + [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h]""" -def integral_duration(duration): +def integral_duration_validation(duration): if duration.lower().endswith('ms'): duration = duration[:-len('ms')] @@ -33,7 +35,7 @@ def integral_duration(duration): def parse(args, templates, default_template, default_geometry, default_min_dur, - default_max_dur, default_cmd): + default_max_dur, default_cmd, default_loop_delay): """Parse command line arguments :param args: Arguments to parse @@ -47,6 +49,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, :param default_max_dur: Default maximal duration between frames in milliseconds :param default_cmd: Default program (with argument list) recorded + :param default_loop_delay: Duration of the pause between two consecutive + loops of the animation in milliseconds :return: Tuple made of the subcommand called (None, 'render' or 'record') and all parsed arguments @@ -91,7 +95,7 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, min_duration_parser = argparse.ArgumentParser(add_help=False) min_duration_parser.add_argument( '-m', '--min-frame-duration', - type=integral_duration, + type=integral_duration_validation, metavar='MIN_DURATION', default=default_min_dur, help=('minimum duration of a frame in milliseconds (default: {}ms)' @@ -106,16 +110,29 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, max_duration_parser = argparse.ArgumentParser(add_help=False) max_duration_parser.add_argument( '-M', '--max-frame-duration', - type=integral_duration, + type=integral_duration_validation, metavar='MAX_DURATION', default=default_max_dur, help=('maximum duration of a frame in milliseconds (default: {})' .format(default_max_dur_label)) ) + + loop_delay_parser = argparse.ArgumentParser(add_help=False) + loop_delay_parser.add_argument( + '-D', '--loop-delay', + type=integral_duration_validation, + metavar='DELAY', + default=default_loop_delay, + help=(('duration in milliseconds of the pause between two consecutive ' + 'loops of the animation (default: {}ms)') + .format(default_loop_delay)) + ) + parser = argparse.ArgumentParser( prog='termtosvg', parents=[command_parser, geometry_parser, min_duration_parser, - max_duration_parser, still_frames_parser, template_parser], + max_duration_parser, still_frames_parser, template_parser, + loop_delay_parser], usage=USAGE, epilog=EPILOG ) @@ -148,7 +165,8 @@ def parse(args, templates, default_template, default_geometry, default_min_dur, parser = argparse.ArgumentParser( description='render an asciicast recording as an SVG animation', parents=[template_parser, min_duration_parser, - max_duration_parser, still_frames_parser], + max_duration_parser, still_frames_parser, + loop_delay_parser], usage=RENDER_USAGE ) parser.add_argument( @@ -191,7 +209,7 @@ def record_subcommand(process_args, geometry, input_fileno, output_fileno, def render_subcommand(still, template, cast_filename, output_path, - min_frame_duration, max_frame_duration): + min_frame_duration, max_frame_duration, loop_delay): """Render the animation from an asciicast recording""" from termtosvg.asciicast import read_records from termtosvg.term import timed_frames @@ -199,7 +217,7 @@ def render_subcommand(still, template, cast_filename, output_path, logger.info('Rendering started') asciicast_records = read_records(cast_filename) geometry, frames = timed_frames(asciicast_records, min_frame_duration, - max_frame_duration) + max_frame_duration, loop_delay) if still: termtosvg.anim.render_still_frames(frames=frames, geometry=geometry, @@ -217,7 +235,8 @@ def render_subcommand(still, template, cast_filename, output_path, def record_render_subcommand(process_args, still, template, geometry, input_fileno, output_fileno, output_path, - min_frame_duration, max_frame_duration): + min_frame_duration, max_frame_duration, + loop_delay): """Record and render the animation on the fly""" from termtosvg.term import get_terminal_size, TerminalMode, record, timed_frames @@ -233,7 +252,7 @@ def record_render_subcommand(process_args, still, template, geometry, asciicast_records = record(process_args, columns, lines, input_fileno, output_fileno) geometry, frames = timed_frames(asciicast_records, min_frame_duration, - max_frame_duration) + max_frame_duration, loop_delay) if still: termtosvg.anim.render_still_frames(frames, geometry, output_path, @@ -266,7 +285,7 @@ def main(args=None, input_fileno=None, output_fileno=None): default_template = 'gjm8' if 'gjm8' in templates else sorted(templates)[0] default_cmd = os.environ.get('SHELL', 'sh') command, args = parse(args[1:], templates, default_template, None, 1, - None, default_cmd) + None, default_cmd, DEFAULT_LOOP_DELAY) if command == 'record': if args.output_path is None: @@ -295,7 +314,7 @@ def main(args=None, input_fileno=None, output_fileno=None): render_subcommand(args.still_frames, args.template, args.input_file, output_path, args.min_frame_duration, - args.max_frame_duration) + args.max_frame_duration, args.loop_delay) else: if args.output_path is None: if args.still_frames: @@ -317,7 +336,8 @@ def main(args=None, input_fileno=None, output_fileno=None): args.screen_geometry, input_fileno, output_fileno, output_path, args.min_frame_duration, - args.max_frame_duration) + args.max_frame_duration, + args.loop_delay) for handler in logger.handlers: handler.close() diff --git a/termtosvg/tests/test_main.py b/termtosvg/tests/test_main.py index 8095145..3a3afe2 100644 --- a/termtosvg/tests/test_main.py +++ b/termtosvg/tests/test_main.py @@ -31,6 +31,8 @@ class TestMain(unittest.TestCase): [], ['-c', 'sh'], ['--screen-geometry', '82x19'], + ['-D', '1234'], + ['--loop-delay', '1234'], ['-g', '82x19'], ['--template', 'plain'], ['-t', 'plain'], @@ -59,13 +61,16 @@ class TestMain(unittest.TestCase): def test_parse(self): for args in self.test_cases: with self.subTest(case=args): - cmd, parsed_args = termtosvg.main.parse(args=args, - templates={'plain': b''}, - default_template='plain', - default_geometry='48x95', - default_min_dur=2, - default_max_dur=None, - default_cmd='sh') + cmd, parsed_args = termtosvg.main.parse( + args=args, + templates={'plain': b''}, + default_template='plain', + default_geometry='48x95', + default_min_dur=2, + default_max_dur=None, + default_cmd='sh', + default_loop_delay=1000 + ) @staticmethod def run_main(args, process_input): @@ -115,8 +120,8 @@ def test_main(self): args = ['termtosvg', 'render', cast_filename, svg_filename] TestMain.run_main(args, []) - with self.subTest(case='render (with geometry)'): - args = ['termtosvg', 'render', cast_filename] + with self.subTest(case='render (with delay)'): + args = ['termtosvg', 'render', cast_filename, '-D', '1234'] TestMain.run_main(args, []) with self.subTest(case='render (with template)'): @@ -150,20 +155,22 @@ def test_main(self): args = ['termtosvg', svg_filename, '--template', 'window_frame'] TestMain.run_main(args, SHELL_INPUT) - cast_v1_data = '\r\n'.join(['{', - ' "version": 1,', - ' "width": 80,', - ' "height": 32,', - ' "duration": 10,', - ' "command": "/bin/zsh",', - ' "title": "",', - ' "env": {},', - ' "stdout": [', - ' [0.010303, "\\u001b[1;31mnico \\u001b[0;34m~\\u001b[0m"],', - ' [1.136094, "❤ ☀ ☆ ☂ ☻ ♞ ☯ ☭ ☢ € →"],', - ' [0.853603, "\\r\\n"]', - ' ]', - '}']) + cast_v1_data = '\r\n'.join([ + '{', + ' "version": 1,', + ' "width": 80,', + ' "height": 32,', + ' "duration": 10,', + ' "command": "/bin/zsh",', + ' "title": "",', + ' "env": {},', + ' "stdout": [', + ' [0.010303, "\\u001b[1;31mnico \\u001b[0;34m~\\u001b[0m"],', + ' [1.136094, "❤ ☀ ☆ ☂ ☻ ♞ ☯ ☭ ☢ € →"],', + ' [0.853603, "\\r\\n"]', + ' ]', + '}', + ]) with self.subTest(case='render v1 cast file'): _, cast_filename_v1 = tempfile.mkstemp(prefix='termtosvg_', suffix='.cast') @@ -181,5 +188,8 @@ def test_integral_duration(self): ] for case in test_cases: with self.subTest(case=case): - self.assertEqual(termtosvg.main.integral_duration(case), 100) + self.assertEqual( + termtosvg.main.integral_duration_validation(case), + 100 + ) From 7b6aaf90f98048835093b8b62af74bc09a183b11 Mon Sep 17 00:00:00 2001 From: nbedos Date: Sun, 30 Jun 2019 14:05:03 +0200 Subject: [PATCH 9/9] Update documentation --- docs/templates/gjm8.svg | 2 +- docs/templates/gjm8_single_loop.svg | 154 ++++++++++++++++++ man/termtosvg-templates.md | 91 ++++++++++- man/termtosvg.md | 12 +- termtosvg/config.py | 1 + termtosvg/data/templates/gjm8.svg | 2 +- termtosvg/data/templates/gjm8_single_loop.svg | 154 ++++++++++++++++++ 7 files changed, 410 insertions(+), 6 deletions(-) create mode 100644 docs/templates/gjm8_single_loop.svg create mode 100644 termtosvg/data/templates/gjm8_single_loop.svg diff --git a/docs/templates/gjm8.svg b/docs/templates/gjm8.svg index 2ae3b47..4a2e7a1 100644 --- a/docs/templates/gjm8.svg +++ b/docs/templates/gjm8.svg @@ -118,7 +118,7 @@ #screen_view { animation-fill-mode: forwards; animation-duration: var(--animation-duration); - animation-iteration-count:1; + animation-iteration-count:infinite; animation-name:roll; animation-timing-function: steps(1,end); } diff --git a/docs/templates/gjm8_single_loop.svg b/docs/templates/gjm8_single_loop.svg new file mode 100644 index 0000000..e7bc2cd --- /dev/null +++ b/docs/templates/gjm8_single_loop.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file diff --git a/man/termtosvg-templates.md b/man/termtosvg-templates.md index 37104cf..1778653 100644 --- a/man/termtosvg-templates.md +++ b/man/termtosvg-templates.md @@ -9,7 +9,8 @@ templates are SVG files in which termtosvg embeds animations. Using templates ma * Add a terminal UI or window frame to the animation * Have interactive animations (for example play/pause buttons) -See [here](https://nbedos.github.io/termtosvg/pages/templates.html) for a gallery of the templates included with termtosvg +See [here](https://nbedos.github.io/termtosvg/pages/templates.html) for a gallery of the templates +included with termtosvg ## TEMPLATE STRUCTURE @@ -21,6 +22,7 @@ Here is the basic structure of a template: + +``` + +CSS animations makes it a little bit harder to add interactivity using JS code but have a better +chance to be displayed as is by online platforms. + +#### Web Animations API +When using Web Animations API, termtosvg defines an object `termtosvg_vars` with two attributes +named `transforms` and `timings` as shown below. +```SVG + +``` +These two attributes should be used in another user-defined script element to create an animation +for the element with id "screen_view". Here is an abridged example taken from the window_frame_js +template. + +```SVG + +``` ## TEMPLATE CUSTOMIZATION @@ -96,6 +172,17 @@ Just add your code in a new `script` element. Complete example here: [window_frame_js](../termtosvg/data/templates/window_frame_js.svg) +### Restricting the animation to a single loop +For a template using CSS, simple add a custom style element specifying the number of loops like so: +```SVG + +``` +Complete example here: [window_frame_js](../termtosvg/data/templates/gjm8_single_loop.svg) + ## termtosvg internal template usage In order to produce the final animation, termtosvg will modify the template in a number of ways. diff --git a/man/termtosvg.md b/man/termtosvg.md index b923db1..5804b91 100644 --- a/man/termtosvg.md +++ b/man/termtosvg.md @@ -3,11 +3,11 @@ % December 2018 ## SYNOPSIS -**termtosvg** [output_path] [-c COMMAND] [-g GEOMETRY] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [--help] +**termtosvg** [output_path] [-c COMMAND] [-D DELAY] [-g GEOMETRY] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [--help] **termtosvg record** [output_path] [-c COMMAND] [-g GEOMETRY] [-h] -**termtosvg render** *input_file* [output_path] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h] +**termtosvg render** *input_file* [output_path] [-D DELAY] [-m MIN_DURATION] [-M MAX_DURATION] [-s] [-t TEMPLATE] [-h] ### DESCRIPTION termtosvg makes recordings of terminal sessions in animated SVG format. If no output @@ -36,6 +36,9 @@ program to execute together will all arguments to be made available to the progr option is not set, termtosvg will record the program specified by the $SHELL environment variable or `/bin/sh`. +#### -D, --loop-delay=DELAY +Duration of the delay between two consecutive loops of the animation in milliseconds. + ##### -g, --screen-geometry=GEOMETRY geometry of the terminal screen used for rendering the animation. The geometry must be given as the number of columns and the number of rows on the screen separated by @@ -117,6 +120,11 @@ Enforce both minimal and maximal frame durations termtosvg -m 17 -M 2000 ``` +Specify a 2 seconds delay between animation loops +``` +termtosvg -D 2000 +``` + Render still frames instead of an animated SVG using a specific template ``` termtosvg -s -t gjm8_play diff --git a/termtosvg/config.py b/termtosvg/config.py index 3cf8071..895282a 100644 --- a/termtosvg/config.py +++ b/termtosvg/config.py @@ -8,6 +8,7 @@ DEFAULT_TEMPLATES_NAMES = [ 'gjm8.svg', 'gjm8_play.svg', + 'gjm8_single_loop.svg', 'dracula.svg', 'solarized_dark.svg', 'solarized_light.svg', diff --git a/termtosvg/data/templates/gjm8.svg b/termtosvg/data/templates/gjm8.svg index 2ae3b47..4a2e7a1 100644 --- a/termtosvg/data/templates/gjm8.svg +++ b/termtosvg/data/templates/gjm8.svg @@ -118,7 +118,7 @@ #screen_view { animation-fill-mode: forwards; animation-duration: var(--animation-duration); - animation-iteration-count:1; + animation-iteration-count:infinite; animation-name:roll; animation-timing-function: steps(1,end); } diff --git a/termtosvg/data/templates/gjm8_single_loop.svg b/termtosvg/data/templates/gjm8_single_loop.svg new file mode 100644 index 0000000..e7bc2cd --- /dev/null +++ b/termtosvg/data/templates/gjm8_single_loop.svg @@ -0,0 +1,154 @@ + + + + + + + + + + + nico ~ $ nico ~ $ t nico ~ $ te nico ~ $ ter nico ~ $ term nico ~ $ termt nico ~ $ termto nico ~ $ termtos nico ~ $ termtosv nico ~ $ termtosvg nico ~ $ termtosvg Recording started, enter "exit" command or Control-D to endnico ~ $ f nico ~ $ fo nico ~ $ for nico ~ $ for nico ~ $ for i nico ~ $ for i nico ~ $ for i i nico ~ $ for i in nico ~ $ for i in nico ~ $ for i in { nico ~ $ for i in {0 nico ~ $ for i in {0. nico ~ $ for i in {0.. nico ~ $ for i in {0..1 nico ~ $ for i in {0..10 nico ~ $ for i in {0..10} nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; nico ~ $ for i in {0..10}; d nico ~ $ for i in {0..10}; do nico ~ $ for i in {0..10}; do> > e > ec > ech > echo > echo > echo " > echo "t > echo "te > echo "ter > echo "term > echo "termt > echo "termto > echo "termtos > echo "termtosv > echo "termtosvg > echo "termtosvg > echo "termtosvg i > echo "termtosvg is > echo "termtosvg is > echo "termtosvg is a > echo "termtosvg is aw > echo "termtosvg is awe > echo "termtosvg is awes > echo "termtosvg is aweso > echo "termtosvg is awesom > echo "termtosvg is awesome > echo "termtosvg is awesome! > echo "termtosvg is awesome!" > echo "termtosvg is awesome!"> d > do > don > done > done > done | > done | > done | l > done | lo > done | lol > done | lolc > done | lolca > done | lolcat > done | lolcattermtosvg is awesome!termtosvg is awesome!term termtosvg is awesome!termtosvg is awes termtosvg is aweso termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is awe termtosvg is awesome!termtosvg is awesome!termtosvg is awesome!termtosvg is termtosvg is awesome!termtosvg is awesome!nico ~ $ e nico ~ $ ex nico ~ $ exi nico ~ $ exit nico ~ $ exitexitRecording ended, SVG animation is /tmp/termtosvg__20rwx67.svg + \ No newline at end of file