0
0
.dotfiles/powerline-bin/powerline/lint/context.py

69 lines
2.0 KiB
Python

# vim:fileencoding=utf-8:noet
from __future__ import (unicode_literals, division, absolute_import, print_function)
import itertools
from powerline.lib.unicode import unicode
from powerline.lint.markedjson.markedvalue import MarkedUnicode
from powerline.lint.selfcheck import havemarks
class JStr(unicode):
def join(self, iterable):
return super(JStr, self).join((unicode(item) for item in iterable))
key_sep = JStr('/')
def list_themes(data, context):
theme_type = data['theme_type']
ext = data['ext']
main_theme_name = data['main_config'].get('ext', {}).get(ext, {}).get('theme', None)
is_main_theme = (data['theme'] == main_theme_name)
if theme_type == 'top':
return list(itertools.chain(*[
[(theme_ext, theme) for theme in theme_configs.values()]
for theme_ext, theme_configs in data['theme_configs'].items()
]))
elif theme_type == 'main' or is_main_theme:
return [(ext, theme) for theme in data['ext_theme_configs'].values()]
else:
return [(ext, context[0][1])]
class Context(tuple):
for func in dir(tuple):
if func in ('__getitem__', '__init__', '__getattribute__', '__len__', '__iter__'):
continue
exec((
'def {0}(self, *args, **kwargs):\n'
' raise TypeError("{0} is not allowed for Context")'
).format(func))
del func
__slots__ = ()
def __new__(cls, base, context_key=None, context_value=None):
if context_key is not None:
assert(context_value is not None)
assert(type(base) is Context)
havemarks(context_key, context_value)
return tuple.__new__(cls, tuple.__add__(base, ((context_key, context_value),)))
else:
havemarks(base)
return tuple.__new__(cls, ((MarkedUnicode('', base.mark), base),))
@property
def key(self):
return key_sep.join((c[0] for c in self))
def enter_key(self, value, key):
return self.enter(value.keydict[key], value[key])
def enter_item(self, name, item):
return self.enter(MarkedUnicode(name, item.mark), item)
def enter(self, context_key, context_value):
return Context.__new__(Context, self, context_key, context_value)