Files
fenrir/src/fenrirscreenreader/utils/mark_utils.py

68 lines
2.0 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
def get_text_between_marks(firstMark, secondMark, in_text):
if in_text is None:
return ''
if not isinstance(in_text, list):
in_text = in_text.split('\n')
if len(in_text) < 1:
return ''
if firstMark is None:
return ''
if secondMark is None:
return ''
if (firstMark['y'] + 1) * (firstMark['x'] +
1) <= (secondMark['y'] + 1) * (secondMark['x'] + 1):
start_mark = firstMark.copy()
end_mark = secondMark.copy()
else:
end_mark = firstMark.copy()
start_mark = secondMark.copy()
text_part = ''
if start_mark['y'] == end_mark['y']:
text_part += in_text[start_mark['y']][start_mark['x']:end_mark['x'] + 1]
else:
curr_y = start_mark['y']
while curr_y <= end_mark['y']:
if curr_y < end_mark['y']:
if curr_y == start_mark['y']:
text_part += in_text[curr_y][start_mark['x']:]
else:
text_part += in_text[curr_y]
if len(in_text[curr_y].strip()) != 0:
if len(text_part) - len(text_part.rstrip()) > 0:
text_part = text_part[:len(text_part.rstrip())] + "\n"
else:
text_part += '\n'
else:
text_part += in_text[curr_y][:end_mark['x'] + 1]
curr_y += 1
return text_part
def get_text_before_mark(mark, in_text):
if in_text is None:
return ''
if mark is None:
return ''
return get_text_between_marks({'x': 0, 'y': 0}, mark, in_text)
def get_text_after_mark(mark, in_text):
if in_text is None:
return ''
if mark is None:
return ''
in_text = in_text.split('\n')
return get_text_between_marks(
mark, {
'x': len(
in_text[0]) - 1, 'y': len(in_text) - 1}, in_text)