Files
krowlog/highlighting.py

58 lines
1.9 KiB
Python

import logging
import re
from PyQt6.QtGui import QBrush, QColor
from highlight import Highlight
from highlight_regex import HighlightRegex
from settings import Settings
log = logging.getLogger("highlighting")
class Highlighting:
@staticmethod
def read_config(settings: Settings) -> [Highlight]:
result = []
config = settings.config
for section in config.sections():
if not section.startswith("highlighting."):
continue
query = config.get(section, "query", fallback="")
if len(query) == 0:
continue
ignore_case = config.getboolean(section, "ignore-case", fallback=True)
is_regex = config.getboolean(section, "is-regex", fallback=False)
line_background_color = Highlighting.brush(config.get(section, "line.background.color", fallback="None"))
hit_background_color = Highlighting.brush(config.get(section, "hit.background.color", fallback="None"))
try:
flags = re.IGNORECASE if ignore_case else 0
if is_regex:
regex = re.compile(query, flags=flags)
else:
regex = re.compile(re.escape(query), flags=flags)
except:
log.exception("failed to parse query for highlighter: %s" % section)
continue
highlight = HighlightRegex(
regex=regex,
brush=hit_background_color,
brush_full_line=line_background_color
)
result.append(highlight)
return result
@staticmethod
def brush(color: str) -> QBrush:
if re.match("[0-9a-f]{6}", color, flags=re.IGNORECASE):
red = int(color[0:2], 16)
green = int(color[2:4], 16)
blue = int(color[4:6], 16)
return QBrush(QColor(red, green, blue))
return QBrush()