very basic initial hilight tracking

This commit is contained in:
chrys 2018-05-27 14:31:00 +02:00
parent 287cd4fcb5
commit ceed614b9a
3 changed files with 43 additions and 83 deletions

View File

@ -5,6 +5,7 @@
# By Chrys, Storm Dragon, and contributers. # By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug from fenrirscreenreader.core import debug
from collections import Counter
class attributeManager(): class attributeManager():
def __init__(self): def __init__(self):
@ -155,3 +156,43 @@ class attributeManager():
attributeFormatString = attributeFormatString.replace('fenrirFont', _('default')) attributeFormatString = attributeFormatString.replace('fenrirFont', _('default'))
return attributeFormatString return attributeFormatString
def trackHighlights(self, oldAttr, newAttr, text, lenght):
result = ''
currCursor = None
if oldAttr == newAttr:
return result, currCursor
if len(newAttr) == 0:
return result, currCursor
if len(oldAttr) != len(newAttr):
return result, currCursor
textLines = text.split('\n')
if len(textLines) - 1 != len(newAttr):
return result, currCursor
background = []
try:
bgStat = Counter(newAttr).most_common(3)
#for i in bgStat:
# print(i)
#background.append(bgStat[0][0])
# if there is a third color add a secondary background (for dialogs for example)
#if len(bgStat) > 2:
# if bgStat[1][1] > 40:
# background.append(bgStat[1][0])
except Exception as e:
print(e)
#background.append((7,7,0,0,0,0))
for line in range(len(newAttr)):
if oldAttr[line] != newAttr[line]:
for column in range(len(newAttr[line])):
if oldAttr[line][column] != newAttr[line][column]:
if not self.isDefaultAttribute(newAttr[line][column]):
if not currCursor:
currCursor = {}
currCursor['x'] = column
currCursor['y'] = line
result += textLines[line][column]
result += ' '
return result, currCursor

View File

@ -159,8 +159,9 @@ class screenManager():
try: try:
if self.env['screen']['oldContentAttrib'] != self.env['screen']['newContentAttrib']: if self.env['screen']['oldContentAttrib'] != self.env['screen']['newContentAttrib']:
if self.env['runtime']['settingsManager'].getSettingAsBool('focus', 'highlight'): if self.env['runtime']['settingsManager'].getSettingAsBool('focus', 'highlight'):
self.env['screen']['newAttribDelta'], self.env['screen']['newCursorAttrib'] = screen_utils.trackHighlights(self.env['screen']['oldContentAttrib'], self.env['screen']['newContentAttrib'], self.env['screen']['newContentText'], self.env['screen']['columns']) self.env['screen']['newAttribDelta'], self.env['screen']['newCursorAttrib'] = self.env['runtime']['attributeManager'].trackHighlights(self.env['screen']['oldContentAttrib'], self.env['screen']['newContentAttrib'], self.env['screen']['newContentText'], self.env['screen']['columns'])
except Exception as e: except Exception as e:
print(e)
self.env['runtime']['debug'].writeDebugOut('screenManager:update:highlight: ' + str(e),debug.debugLevel.ERROR) self.env['runtime']['debug'].writeDebugOut('screenManager:update:highlight: ' + str(e),debug.debugLevel.ERROR)
def isSuspendingScreen(self, screen = None): def isSuspendingScreen(self, screen = None):

View File

@ -5,7 +5,6 @@
# By Chrys, Storm Dragon, and contributers. # By Chrys, Storm Dragon, and contributers.
from fenrirscreenreader.core import debug from fenrirscreenreader.core import debug
from collections import Counter
import getpass, time, re, string, select, os import getpass, time, re, string, select, os
def removeNonprintable(text): def removeNonprintable(text):
@ -80,84 +79,3 @@ def getShell():
if isValidShell('/bin/bash'): if isValidShell('/bin/bash'):
return '/bin/bash' return '/bin/bash'
return '/bin/sh' return '/bin/sh'
def trackHighlights(oldAttr, newAttr, text, lenght):
result = ''
currCursor = None
if oldAttr == newAttr:
return result, currCursor
if len(newAttr) == 0:
return result, currCursor
if len(oldAttr) != len(newAttr):
return result, currCursor
old = splitEvery(oldAttr,lenght)
new = splitEvery(newAttr,lenght)
textLines = text.split('\n')
background = []
if len(textLines) - 1 != len(new):
return result, currCursor
try:
bgStat = Counter(newAttr).most_common(3)
background.append(bgStat[0][0])
# if there is a third color add a secondary background (for dialogs for example)
if len(bgStat) > 2:
if bgStat[1][1] > 40:
background.append(bgStat[1][0])
except Exception as e:
background.append((7,7,0,0,0,0))
for line in range(len(new)):
if old[line] != new[line]:
for column in range(len(new[line])):
print(new[line][column])
if old[line][column] != new[line][column]:
if not new[line][column] in background:
if not currCursor:
currCursor = {}
currCursor['x'] = column
currCursor['y'] = line
result += textLines[line][column]
result += ' '
return result, currCursor
'''
t = 'hallo\nwelt!'
old = ((1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0))
new = ((0,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,1,1),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0),(1,1,0,0))
trackHighlights(old,new,t,5)
'''
class headLineManipulation:
def __init__(self):
self.regExSingle = re.compile(r'(([^\w\s])\2{5,})')
self.regExDouble = re.compile(r'([^\w\s]{2,}){5,}')
def replaceHeadLines(self, text):
result = ''
newText = ''
lastPos = 0
for match in self.regExDouble.finditer(text):
span = match.span()
newText += text[lastPos:span[0]]
numberOfChars = len(text[span[0]:span[1]])
name = text[span[0]:span[1]][:2]
if name.strip(name[0]) == '':
newText += ' ' + str(numberOfChars) + ' ' + name[0] + ' '
else:
newText += ' ' + str(int(numberOfChars / 2)) + ' ' + name + ' '
lastPos = span[1]
newText += ' ' + text[lastPos:]
lastPos = 0
for match in self.regExSingle.finditer(newText):
span = match.span()
result += text[lastPos:span[0]]
numberOfChars = len(newText[span[0]:span[1]])
name = newText[span[0]:span[1]][:2]
if name.strip(name[0]) == '':
result += ' ' + str(numberOfChars) + ' ' + name[0] + ' '
else:
result += ' ' + str(int(numberOfChars / 2)) + ' ' + name + ' '
lastPos = span[1]
result += ' ' + newText[lastPos:]
return result