fenrir/src/fenrirscreenreader/utils/char_utils.py

122 lines
3.4 KiB
Python
Raw Normal View History

#!/bin/python
# -*- coding: utf-8 -*-
# Fenrir TTY screen reader
# By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug
def getPrevChar(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
wrappedLines = currText.split('\n')
x = currX
y = currY
if x - 1 < 0:
if y - 1 >= 0:
y -= 1
x = len(wrappedLines[y]) - 1
lineBreak = True
else:
lineBreak = False
endOfScreen = True
else:
x -= 1
currChar = ''
if not endOfScreen:
currChar = wrappedLines[y][x]
return x, y, currChar, endOfScreen, lineBreak
def getCurrentChar(currX,currY, currText):
if currText == '':
return -1, -1, ''
wrappedLines = currText.split('\n')
currChar = wrappedLines[currY][currX]
return currX, currY, currChar
def getUpChar(currX,currY, currText):
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen
wrappedLines = currText.split('\n')
currY -= 1
if currY < 0:
currY = 0
else:
endOfScreen = True
currChar = ''
if not endOfScreen:
currChar = wrappedLines[currY][currX]
return currX, currY, currChar, endOfScreen
def getDownChar(currX,currY, currText):
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen
wrappedLines = currText.split('\n')
currY += 1
if currY >= len(wrappedLines):
currY = len(wrappedLines) -1
else:
endOfScreen = True
currChar = ''
if not endOfScreen:
currChar = wrappedLines[currY][currX]
return currX, currY, currChar, endOfScreen
def getLastCharInLine(currY, currText):
endOfScreen = False
if currText == '':
return -1, -1, ''
wrappedLines = currText.split('\n')
currX = len(wrappedLines[currY].rstrip())-1
if currX < 0:
currX = 0
currChar = wrappedLines[currY][currX]
return currX, currY, currChar
def getNextChar(currX,currY, currText):
lineBreak = False
endOfScreen = False
if currText == '':
return -1, -1, '', endOfScreen, lineBreak
wrappedLines = currText.split('\n')
x = currX
y = currY
if x + 1 == len(wrappedLines[y]):
if y + 1 < len(wrappedLines) - 1:
y += 1
x = 0
lineBreak = True
else:
lineBreak = False
endOfScreen = True
else:
x += 1
currChar = ''
if not endOfScreen:
currChar = wrappedLines[y][x]
return x, y, currChar, endOfScreen, lineBreak
def getPhonetic(currChar):
if len(currChar) != 1:
return currChar
phoneticsDict = {
"A":"alpha", "B":"bravo", "C":"charlie", "D":"delta", "E":"echo",
"F":"foxtrot", "G":"golf", "H":"hotel", "I":"india", "J":"juliet",
"K":"kilo", "L":"lima", "M":"mike", "N":"november", "O":"oscar",
"P":"papa", "Q":"quebec", "R":"romeo", "S":"sierra", "T":"tango",
"U":"uniform", "V":"victor", "W":"whisky", "X":"x ray",
"Y":"yankee", "Z":"zulu"
}
try:
phonChar = phoneticsDict[currChar.upper()]
if currChar.isupper():
phonChar = phonChar[0].upper() + phonChar[1:]
return phonChar
except:
return currChar