More pep8 fixes. A tiny bit of refactoring.
This commit is contained in:
@ -2,49 +2,51 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Fenrir TTY screen reader
|
||||
# By Chrys, Storm Dragon, and contributers.
|
||||
# By Chrys, Storm Dragon, and contributors.
|
||||
|
||||
import string
|
||||
from fenrirscreenreader.core import debug
|
||||
import os
|
||||
import inspect
|
||||
import os
|
||||
import re
|
||||
import string
|
||||
|
||||
from fenrirscreenreader.core import debug
|
||||
|
||||
currentdir = os.path.dirname(
|
||||
os.path.realpath(
|
||||
os.path.abspath(
|
||||
inspect.getfile(
|
||||
inspect.currentframe()))))
|
||||
os.path.realpath(os.path.abspath(inspect.getfile(inspect.currentframe())))
|
||||
)
|
||||
fenrir_path = os.path.dirname(currentdir)
|
||||
|
||||
|
||||
class PunctuationManager():
|
||||
class PunctuationManager:
|
||||
def __init__(self):
|
||||
pass
|
||||
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
self.allPunctNone = dict.fromkeys(
|
||||
map(ord, string.punctuation + "§ "), ' ')
|
||||
map(ord, string.punctuation + "§ "), " "
|
||||
)
|
||||
# replace with None:
|
||||
# dot, comma, grave, apostrophe
|
||||
# for char in [ord('`'),ord("'")]:
|
||||
# self.allPunctNone[char] = None
|
||||
# dont restore the following (for announce correct pause)
|
||||
for char in [
|
||||
ord("'"),
|
||||
ord('.'),
|
||||
ord(','),
|
||||
ord(';'),
|
||||
ord(':'),
|
||||
ord('?'),
|
||||
ord('!'),
|
||||
ord('-')]:
|
||||
ord("'"),
|
||||
ord("."),
|
||||
ord(","),
|
||||
ord(";"),
|
||||
ord(":"),
|
||||
ord("?"),
|
||||
ord("!"),
|
||||
ord("-"),
|
||||
]:
|
||||
self.allPunctNone[char] = chr(char)
|
||||
|
||||
def shutdown(self):
|
||||
pass
|
||||
|
||||
def remove_unused(self, text, curr_level=''):
|
||||
def remove_unused(self, text, curr_level=""):
|
||||
# dont translate dot and comma because they create a pause
|
||||
curr_all_punct_none = self.allPunctNone.copy()
|
||||
for char in curr_level:
|
||||
@ -54,123 +56,165 @@ class PunctuationManager():
|
||||
pass
|
||||
return text.translate(curr_all_punct_none)
|
||||
|
||||
def use_custom_dict(self, text, customDict, seperator=''):
|
||||
def use_custom_dict(self, text, customDict, seperator=""):
|
||||
result_text = str(text)
|
||||
if customDict:
|
||||
for key, item in customDict.items():
|
||||
try:
|
||||
regex_lbl = 'REGEX;'
|
||||
if key.upper().startswith(regex_lbl) and (len(key) > len(regex_lbl)):
|
||||
regex_lbl = "REGEX;"
|
||||
if key.upper().startswith(regex_lbl) and (
|
||||
len(key) > len(regex_lbl)
|
||||
):
|
||||
result_text = re.sub(
|
||||
str(key[len(regex_lbl):]), seperator + str(item) + seperator, result_text)
|
||||
str(key[len(regex_lbl) :]),
|
||||
seperator + str(item) + seperator,
|
||||
result_text,
|
||||
)
|
||||
else:
|
||||
result_text = result_text.replace(
|
||||
str(key), seperator + str(item) + seperator)
|
||||
str(key), seperator + str(item) + seperator
|
||||
)
|
||||
except Exception as e:
|
||||
self.env['runtime']['DebugManager'].write_debug_out(
|
||||
"use_custom_dict replace:'" +
|
||||
key +
|
||||
"' with '" +
|
||||
item +
|
||||
"' failed:" +
|
||||
str(e),
|
||||
self.env["runtime"]["DebugManager"].write_debug_out(
|
||||
"use_custom_dict replace:'"
|
||||
+ key
|
||||
+ "' with '"
|
||||
+ item
|
||||
+ "' failed:"
|
||||
+ str(e),
|
||||
debug.DebugLevel.ERROR,
|
||||
on_any_level=False)
|
||||
on_any_level=False,
|
||||
)
|
||||
return result_text
|
||||
|
||||
def use_punctuation_dict(self, text, punctuationDict, punctuation):
|
||||
result_text = str(text)
|
||||
|
||||
if punctuationDict and punctuation and punctuation != '':
|
||||
if ' ' in punctuation:
|
||||
if punctuationDict and punctuation and punctuation != "":
|
||||
if " " in punctuation:
|
||||
result_text = result_text.replace(
|
||||
' ', ' ' + punctuationDict[' '] + ' ')
|
||||
" ", " " + punctuationDict[" "] + " "
|
||||
)
|
||||
for key, item in punctuationDict.items():
|
||||
if (punctuation != '' and key in punctuation) and key not in ' ':
|
||||
if self.env['runtime']['SettingsManager'].get_setting(
|
||||
'general', 'respectPunctuationPause') and len(key) == 1 and key in "',.;:?!":
|
||||
if (
|
||||
punctuation != "" and key in punctuation
|
||||
) and key not in " ":
|
||||
if (
|
||||
self.env["runtime"]["SettingsManager"].get_setting(
|
||||
"general", "respectPunctuationPause"
|
||||
)
|
||||
and len(key) == 1
|
||||
and key in "',.;:?!"
|
||||
):
|
||||
result_text = result_text.replace(
|
||||
str(key), ' ' + str(item) + str(key) + ' ')
|
||||
str(key), " " + str(item) + str(key) + " "
|
||||
)
|
||||
else:
|
||||
result_text = result_text.replace(
|
||||
str(key), ' ' + str(item) + ' ')
|
||||
str(key), " " + str(item) + " "
|
||||
)
|
||||
return result_text
|
||||
|
||||
def is_puctuation(self, char):
|
||||
return char in self.env['punctuation']['PUNCTDICT']
|
||||
return char in self.env["punctuation"]["PUNCTDICT"]
|
||||
|
||||
def proceed_punctuation(self, text, ignore_punctuation=False):
|
||||
if ignore_punctuation:
|
||||
return text
|
||||
result_text = text
|
||||
result_text = self.use_custom_dict(
|
||||
result_text, self.env['punctuation']['CUSTOMDICT'])
|
||||
if self.env['runtime']['SettingsManager'].get_setting_as_bool(
|
||||
'general', 'emoticons'):
|
||||
result_text, self.env["punctuation"]["CUSTOMDICT"]
|
||||
)
|
||||
if self.env["runtime"]["SettingsManager"].get_setting_as_bool(
|
||||
"general", "emoticons"
|
||||
):
|
||||
result_text = self.use_custom_dict(
|
||||
result_text, self.env['punctuation']['EMOTICONDICT'], ' ')
|
||||
curr_punct_level = ''
|
||||
if self.env['runtime']['SettingsManager'].get_setting(
|
||||
'general', 'punctuationLevel').lower() in self.env['punctuation']['LEVELDICT']:
|
||||
curr_punct_level = self.env['punctuation']['LEVELDICT'][self.env['runtime'][
|
||||
'SettingsManager'].get_setting('general', 'punctuationLevel').lower()]
|
||||
result_text, self.env["punctuation"]["EMOTICONDICT"], " "
|
||||
)
|
||||
curr_punct_level = ""
|
||||
if (
|
||||
self.env["runtime"]["SettingsManager"]
|
||||
.get_setting("general", "punctuationLevel")
|
||||
.lower()
|
||||
in self.env["punctuation"]["LEVELDICT"]
|
||||
):
|
||||
curr_punct_level = self.env["punctuation"]["LEVELDICT"][
|
||||
self.env["runtime"]["SettingsManager"]
|
||||
.get_setting("general", "punctuationLevel")
|
||||
.lower()
|
||||
]
|
||||
else:
|
||||
curr_punct_level = string.punctuation + ' §'
|
||||
curr_punct_level = string.punctuation + " §"
|
||||
result_text = self.use_punctuation_dict(
|
||||
result_text, self.env['punctuation']['PUNCTDICT'], curr_punct_level)
|
||||
result_text, self.env["punctuation"]["PUNCTDICT"], curr_punct_level
|
||||
)
|
||||
result_text = self.remove_unused(result_text, curr_punct_level)
|
||||
return result_text
|
||||
|
||||
def cycle_punctuation(self):
|
||||
punct_list = list(self.env['punctuation']['LEVELDICT'].keys())
|
||||
punct_list = list(self.env["punctuation"]["LEVELDICT"].keys())
|
||||
try:
|
||||
curr_index = punct_list.index(
|
||||
self.env['runtime']['SettingsManager'].get_setting(
|
||||
'general', 'punctuationLevel').lower()) # curr punctuation
|
||||
self.env["runtime"]["SettingsManager"]
|
||||
.get_setting("general", "punctuationLevel")
|
||||
.lower()
|
||||
) # curr punctuation
|
||||
except Exception as e:
|
||||
return False
|
||||
curr_index += 1
|
||||
if curr_index >= len(punct_list):
|
||||
curr_index = 0
|
||||
curr_level = punct_list[curr_index]
|
||||
self.env['runtime']['SettingsManager'].set_setting(
|
||||
'general', 'punctuationLevel', curr_level.lower())
|
||||
self.env["runtime"]["SettingsManager"].set_setting(
|
||||
"general", "punctuationLevel", curr_level.lower()
|
||||
)
|
||||
return True
|
||||
|
||||
def load_dicts(self, dictConfigPath=fenrir_path +
|
||||
'/../../config/punctuation/default.conf'):
|
||||
def load_dicts(
|
||||
self,
|
||||
dictConfigPath=fenrir_path + "/../../config/punctuation/default.conf",
|
||||
):
|
||||
dict_config = open(dictConfigPath, "r")
|
||||
curr_dict_name = ''
|
||||
while (True):
|
||||
curr_dict_name = ""
|
||||
while True:
|
||||
line = dict_config.readline()
|
||||
if not line:
|
||||
break
|
||||
line = line.replace('\n', '')
|
||||
if line.replace(" ", "") == '':
|
||||
line = line.replace("\n", "")
|
||||
if line.replace(" ", "") == "":
|
||||
continue
|
||||
if line.replace(" ", "").startswith("#"):
|
||||
if not line.replace(" ", "").startswith("#:===:"):
|
||||
continue
|
||||
if line.replace(" ", "").upper().startswith("[") and \
|
||||
line.replace(" ", "").upper().endswith("DICT]"):
|
||||
curr_dict_name = line[line.find(
|
||||
'[') + 1:line.upper().find('DICT]') + 4].upper()
|
||||
if line.replace(" ", "").upper().startswith("[") and line.replace(
|
||||
" ", ""
|
||||
).upper().endswith("DICT]"):
|
||||
curr_dict_name = line[
|
||||
line.find("[") + 1 : line.upper().find("DICT]") + 4
|
||||
].upper()
|
||||
else:
|
||||
if curr_dict_name == '':
|
||||
if curr_dict_name == "":
|
||||
continue
|
||||
if ":===:" not in line:
|
||||
continue
|
||||
sep_line = line.split(':===:')
|
||||
sep_line = line.split(":===:")
|
||||
if len(sep_line) == 1:
|
||||
sep_line.append('')
|
||||
sep_line.append("")
|
||||
elif len(sep_line) < 1:
|
||||
continue
|
||||
elif len(sep_line) > 2:
|
||||
sep_line[1] = ':===:'
|
||||
self.env['punctuation'][curr_dict_name][sep_line[0]] = sep_line[1]
|
||||
self.env['runtime']['DebugManager'].write_debug_out(
|
||||
"Punctuation: " + curr_dict_name + '.' + str(
|
||||
sep_line[0]) + ' :' + sep_line[1],
|
||||
sep_line[1] = ":===:"
|
||||
self.env["punctuation"][curr_dict_name][sep_line[0]] = (
|
||||
sep_line[1]
|
||||
)
|
||||
self.env["runtime"]["DebugManager"].write_debug_out(
|
||||
"Punctuation: "
|
||||
+ curr_dict_name
|
||||
+ "."
|
||||
+ str(sep_line[0])
|
||||
+ " :"
|
||||
+ sep_line[1],
|
||||
debug.DebugLevel.INFO,
|
||||
on_any_level=True)
|
||||
on_any_level=True,
|
||||
)
|
||||
dict_config.close()
|
||||
|
Reference in New Issue
Block a user