68 lines
2.0 KiB
Python
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)
|