63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
import logging
|
|
|
|
from highlight_regex import HighlightRegex
|
|
from settings import Settings
|
|
|
|
log = logging.getLogger("highlighting")
|
|
|
|
class Highlighting:
|
|
|
|
@staticmethod
|
|
def read_config(settings: Settings) -> [HighlightRegex]:
|
|
result = []
|
|
session = settings.session
|
|
|
|
for section in session.sections():
|
|
if not section.startswith("highlighting."):
|
|
continue
|
|
|
|
query = session.get(section, "query", fallback="")
|
|
if len(query) == 0:
|
|
continue
|
|
ignore_case = session.getboolean(section, "ignore-case", fallback=True)
|
|
is_regex = session.getboolean(section, "is-regex", fallback=False)
|
|
line_background_color = session.get(section, "line.background.color", fallback="None")
|
|
hit_background_color = session.get(section, "hit.background.color", fallback="None")
|
|
|
|
try:
|
|
highlight = HighlightRegex(
|
|
query=query,
|
|
ignore_case=ignore_case,
|
|
is_regex=is_regex,
|
|
hit_background_color=hit_background_color,
|
|
line_background_color=line_background_color
|
|
)
|
|
result.append(highlight)
|
|
except:
|
|
log.exception("failed to parse query for highlighter: %s" % section)
|
|
continue
|
|
|
|
return result
|
|
|
|
@staticmethod
|
|
def write_config(settings: Settings, highlighters: [HighlightRegex]):
|
|
Highlighting.remove_highlighting_sections(settings)
|
|
section_counter = 0
|
|
for highlighter in highlighters:
|
|
highlighter: HighlightRegex = highlighter
|
|
section = "highlighting.%d" % section_counter
|
|
section_counter = section_counter + 1
|
|
settings.session.add_section(section)
|
|
settings.session.set(section, "query", highlighter.query)
|
|
settings.session.set(section, "ignore-case", str(highlighter.ignore_case))
|
|
settings.session.set(section, "is-regex", str(highlighter.is_regex))
|
|
settings.session.set(section, "line.background.color", highlighter.line_background_color)
|
|
settings.session.set(section, "hit.background.color", highlighter.hit_background_color)
|
|
|
|
@staticmethod
|
|
def remove_highlighting_sections(settings: Settings):
|
|
for section in settings.session.sections():
|
|
if not section.startswith("highlighting."):
|
|
continue
|
|
settings.session.remove_section(section)
|