2025-10-26 23:20:40 +05:00
|
|
|
|
'''
|
|
|
|
|
|
MPSTWM
|
|
|
|
|
|
Автор: Игорь Рагозин
|
|
|
|
|
|
Лицензия: MIT(подробнее в /LICENSE)
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
|
|
|
Своя реализация парсера конфига Hyprland.
|
|
|
|
|
|
Примерный алгоритм работы, и концепции на основе
|
|
|
|
|
|
идеи рассказал ИИ. Код полностью написан с помощью обычных рук
|
|
|
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
def ParserKeyValue(line):
|
|
|
|
|
|
line = line.strip()
|
|
|
|
|
|
if '=' in line:
|
|
|
|
|
|
key,value=line.split('=', 1)
|
|
|
|
|
|
key = key.strip()
|
2025-10-27 22:35:15 +05:00
|
|
|
|
value = value.strip()
|
2025-10-26 23:20:40 +05:00
|
|
|
|
return key, value
|
|
|
|
|
|
|
|
|
|
|
|
def isBlock(line):
|
|
|
|
|
|
line = line.strip()
|
|
|
|
|
|
if '{' in line:
|
|
|
|
|
|
return True
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
with open("example_hyprland.conf", "r") as file:
|
2025-10-27 22:35:15 +05:00
|
|
|
|
sections={
|
|
|
|
|
|
'commentConfig': [],
|
|
|
|
|
|
'air': [],
|
|
|
|
|
|
'variableConfig': [],
|
|
|
|
|
|
}
|
2025-10-26 23:20:40 +05:00
|
|
|
|
file = file.readlines()
|
|
|
|
|
|
for index, line in enumerate(file):
|
|
|
|
|
|
no_tab = line.strip()
|
|
|
|
|
|
if line.strip().startswith('#'):
|
2025-10-27 22:35:15 +05:00
|
|
|
|
sections['commentConfig'].append({'rawvalue': no_tab, 'line': index})
|
2025-10-26 23:20:40 +05:00
|
|
|
|
elif not line.strip():
|
2025-10-27 22:35:15 +05:00
|
|
|
|
sections['air'].append({'line': index})
|
2025-10-26 23:20:40 +05:00
|
|
|
|
elif line.strip().startswith('$'):
|
|
|
|
|
|
value_line = ParserKeyValue(no_tab)
|
|
|
|
|
|
key,value = value_line[0],value_line[1]
|
2025-10-27 22:35:15 +05:00
|
|
|
|
sections['variableConfig'].append({'key': key, 'value': value, 'rawvalue': line, 'line': index})
|
|
|
|
|
|
elif no_tab.strip().endswith(' {'):
|
|
|
|
|
|
isBlock = True
|
|
|
|
|
|
nameBlock = no_tab.split()[0]
|
|
|
|
|
|
islist.append(nameBlock)
|
|
|
|
|
|
print(islist)
|