143 lines
4.4 KiB
Python
Executable File
143 lines
4.4 KiB
Python
Executable File
#!/bin/python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
# Fenrir TTY screen reader
|
|
# By Chrys, Storm Dragon, and contributers.
|
|
|
|
#from core import debug
|
|
import string
|
|
# X Y Word END BREAK
|
|
# -1, -1, '', True False
|
|
def getPrevWord(currX,currY, currText):
|
|
lineBreak = False
|
|
endOfScreen = False
|
|
if currText == '':
|
|
return -1, -1, '', endOfScreen, lineBreak
|
|
if currText.strip(string.punctuation +"§ " + string.whitespace) == '':
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
x, y, currWord, endOfScreen, lineBreakCurrWord = getCurrentWord(currX,currY,currText)
|
|
if endOfScreen:
|
|
return x, y, currWord, endOfScreen, lineBreak
|
|
wrappedLines = currText.split('\n')
|
|
currLine = wrappedLines[y]
|
|
if x - 1 < 0:
|
|
if y - 1 < 0:
|
|
lineBreak = False
|
|
endOfScreen = True
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
else:
|
|
y -= 1
|
|
currLine = wrappedLines[y]
|
|
x = len( wrappedLines[y]) - 1
|
|
lineBreak = True
|
|
else:
|
|
x -= 1
|
|
lineBreakCurrWord = lineBreak or lineBreakCurrWord
|
|
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,currText)
|
|
lineBreak = lineBreak or lineBreakCurrWord
|
|
return x, y, currWord, endOfScreen, lineBreak
|
|
|
|
def getCurrentWord(currX,currY, currText):
|
|
lineBreak = False
|
|
endOfScreen = False
|
|
if currText == '':
|
|
return -1, -1, '', endOfScreen, lineBreak
|
|
if currText.strip(string.punctuation +"§ " + string.whitespace) == '':
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
x = currX
|
|
y = currY
|
|
currWord = ''
|
|
wrappedLines = currText.split('\n')
|
|
currLine = wrappedLines[y]
|
|
Found = False
|
|
while(not Found):
|
|
if not currLine[x] in string.whitespace:
|
|
if x == 0:
|
|
Found = True
|
|
else:
|
|
if currLine[x - 1] in string.whitespace:
|
|
Found = True
|
|
if not Found:
|
|
if x - 1 < 0:
|
|
if y - 1 < 0:
|
|
lineBreak = False
|
|
endOfScreen = True
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
else:
|
|
y -= 1
|
|
currLine = wrappedLines[y]
|
|
x = len( wrappedLines[y]) - 1
|
|
lineBreak = True
|
|
else:
|
|
x -= 1
|
|
if Found:
|
|
currWord = currLine[x:]
|
|
for d in string.whitespace:
|
|
delimiterPos = currWord.find(d)
|
|
if delimiterPos != -1:
|
|
currWord = currWord[:delimiterPos]
|
|
|
|
return x, y, currWord, endOfScreen, lineBreak
|
|
return currX, currY, '', False, False
|
|
|
|
def getNextWord(currX,currY, currText):
|
|
lineBreak = False
|
|
endOfScreen = False
|
|
if currText == '':
|
|
return -1, -1, '', endOfScreen, lineBreak
|
|
if currText.strip(string.punctuation +"§ " + string.whitespace) == '':
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
x = currX
|
|
y = currY
|
|
currWord = ''
|
|
wrappedLines = currText.split('\n')
|
|
currLine = wrappedLines[y]
|
|
Found = False
|
|
while(not Found):
|
|
if not Found:
|
|
if x + 1 > len( currLine ) - 1:
|
|
if y + 1 > len( wrappedLines ) - 1:
|
|
lineBreak = False
|
|
endOfScreen = True
|
|
return currX, currY, '', endOfScreen, lineBreak
|
|
else:
|
|
y += 1
|
|
currLine = wrappedLines[y]
|
|
x = 0
|
|
lineBreak = True
|
|
else:
|
|
x += 1
|
|
if not currLine[x] in string.whitespace:
|
|
if x == 0:
|
|
Found = True
|
|
else:
|
|
if currLine[x - 1] in string.whitespace:
|
|
Found = True
|
|
if Found:
|
|
currWord = currLine[x:]
|
|
for d in string.whitespace:
|
|
delimiterPos = currWord.find(d)
|
|
if delimiterPos != -1:
|
|
currWord = currWord[:delimiterPos]
|
|
return x, y, currWord, endOfScreen, lineBreak
|
|
return currX, currY, '', False, False
|
|
|
|
|
|
|
|
data = """das ist ein test lol
|
|
das ist ein test l
|
|
das ist ein test
|
|
|
|
asdf asdf a
|
|
test test
|
|
te test"""
|
|
print('__DATA START__')
|
|
print(data)
|
|
print('__DATA END__\n\n')
|
|
|
|
x = 3
|
|
y = 0
|
|
x, y, currWord, endOfScreen, lineBreak = getCurrentWord(x,y,data)
|
|
print(x,y,currWord)
|
|
|