some refactoring

This commit is contained in:
Michael Hudson-Doyle 2018-03-27 11:55:50 +13:00
parent c8a15e5533
commit 0ea6c10553
2 changed files with 52 additions and 46 deletions

View File

@ -39,8 +39,55 @@ class KeyboardSetting:
return etc_default_keyboard_template.format( return etc_default_keyboard_template.format(
layout=self.layout, variant=variant, options=options) layout=self.layout, variant=variant, options=options)
def latinizable(self):
"""
If this setting does not allow the typing of latin characters,
return a setting that can be switched to one that can.
"""
if self.layout == 'rs':
if self.variant.startswith('latin'):
return self
else:
if self.variant == 'yz':
new_variant = 'latinyz'
elif self.variant == 'alternatequotes':
new_variant = 'latinalternatequotes'
else:
new_variant = 'latin'
return KeyboardSetting(layout='rs,rs', variant=new_variant + ',' + self.variant)
elif self.layout == 'jp':
if self.variant in ('106', 'common', 'OADG109A', 'nicola_f_bs', ''):
return self
else:
return KeyboardSetting(layout='jp,jp', variant=',' + self.variant)
elif self.layout == 'lt':
if self.variant == 'us':
return KeyboardSetting(layout='lt,lt', variant='us,')
else:
return KeyboardSetting(layout='lt,lt', variant=self.variant + ',us')
elif self.layout == 'me':
if self.variant == 'basic' or self.variant.startswith('latin'):
return self
else:
return KeyboardSetting(layout='me,me', variant=self.variant + ',us')
elif self.layout in standard_non_latin_layouts:
return KeyboardSetting(layout='us,' + self.layout, variant=',' + self.variant)
else:
return self
@classmethod @classmethod
def from_config(cls, XKBLAYOUT, XKBVARIANT, XKBOPTIONS): def from_config(cls, config_file):
content = open(config_file).read()
def optval(opt, default):
match = re.search('(?m)^\s*%s=(.*)$'%(opt,), content)
if match:
r = match.group(1).strip('"')
if r != '':
return r
return default
XKBLAYOUT = optval("XKBLAYOUT", "us")
XKBVARIANT = optval("XKBVARIANT", "")
XKBOPTIONS = optval("XKBOPTIONS", "")
toggle = None toggle = None
if ',' in XKBLAYOUT: if ',' in XKBLAYOUT:
layout1, layout2 = XKBLAYOUT.split(',', 1) layout1, layout2 = XKBLAYOUT.split(',', 1)
@ -85,22 +132,12 @@ standard_non_latin_layouts = set(
class KeyboardModel: class KeyboardModel:
def __init__(self, root): def __init__(self, root):
self.root = root self.root = root
self.setting = KeyboardSetting(layout='us')
self._kbnames_file = os.path.join(os.environ.get("SNAP", '.'), 'kbdnames.txt') self._kbnames_file = os.path.join(os.environ.get("SNAP", '.'), 'kbdnames.txt')
self._clear() self._clear()
if os.path.exists(self.config_path): if os.path.exists(self.config_path):
content = open(self.config_path).read() self.setting = KeyboardSetting.from_config(self.config_path)
def optval(opt, default): else:
match = re.search('(?m)^\s*%s=(.*)$'%(opt,), content) self.setting = KeyboardSetting(layout='us')
if match:
r = match.group(1).strip('"')
if r != '':
return r
return default
XKBLAYOUT = optval("XKBLAYOUT", "us")
XKBVARIANT = optval("XKBVARIANT", "")
XKBOPTIONS = optval("XKBOPTIONS", "")
self.setting = KeyboardSetting.from_config(XKBLAYOUT, XKBVARIANT, XKBOPTIONS)
@property @property
def config_path(self): def config_path(self):
@ -157,34 +194,3 @@ class KeyboardModel:
else: else:
run_command(['sleep', '1']) run_command(['sleep', '1'])
def adjust_setting(self, setting):
if setting.layout == 'rs':
if setting.variant.startswith('latin'):
return setting
else:
if setting.variant == 'yz':
new_variant = 'latinyz'
elif setting.variant == 'alternatequotes':
new_variant = 'latinalternatequotes'
else:
new_variant = 'latin'
return KeyboardSetting(layout='rs,rs', variant=new_variant + ',' + setting.variant)
elif setting.layout == 'jp':
if setting.variant in ('106', 'common', 'OADG109A', 'nicola_f_bs', ''):
return setting
else:
return KeyboardSetting(layout='jp,jp', variant=',' + setting.variant)
elif setting.layout == 'lt':
if setting.variant == 'us':
return KeyboardSetting(layout='lt,lt', variant='us,')
else:
return KeyboardSetting(layout='lt,lt', variant=setting.variant + ',us')
elif setting.layout == 'me':
if setting.variant == 'basic' or setting.variant.startswith('latin'):
return setting
else:
return KeyboardSetting(layout='me,me', variant=setting.variant + ',us')
elif setting.layout in standard_non_latin_layouts:
return KeyboardSetting(layout='us,' + setting.layout, variant=',' + setting.variant)
else:
return setting

View File

@ -418,7 +418,7 @@ class KeyboardView(BaseView):
if self.form.variant.widget.value is not None: if self.form.variant.widget.value is not None:
variant = self.form.variant.widget.value variant = self.form.variant.widget.value
setting = KeyboardSetting(layout=layout, variant=variant) setting = KeyboardSetting(layout=layout, variant=variant)
new_setting = self.model.adjust_setting(setting) new_setting = setting.latinizable()
if new_setting != setting: if new_setting != setting:
self.show_overlay(ToggleQuestion(self, new_setting), height=('relative', 100)) self.show_overlay(ToggleQuestion(self, new_setting), height=('relative', 100))
return return