66 lines
1.7 KiB
Python
66 lines
1.7 KiB
Python
# standard python
|
|
from typing import List
|
|
from dataclasses import dataclass
|
|
from dataclasses import field
|
|
|
|
# rich
|
|
from rich.highlighter import ISO8601Highlighter
|
|
from rich.highlighter import JSONHighlighter
|
|
|
|
from .communication import Swedish_Phone_Number_Highlighter
|
|
from .communication import Email_Highlighter
|
|
from .html4 import HTML4_Highlighter
|
|
from .misc import Rainbow_Highlighter
|
|
|
|
class Highlighter:
|
|
|
|
def __init__(self, name, highlighter, *args, **kwargs):
|
|
self.name = name
|
|
self.highlighter = highlighter
|
|
|
|
def __call__(self, *args, **kwargs):
|
|
self.highlighter(*args, **kwargs)
|
|
|
|
|
|
@dataclass
|
|
class Highlight_Manager:
|
|
highlighters: List[Highlighter]
|
|
current: int = field(repr=False, default=0)
|
|
|
|
def this(self, name):
|
|
for hl in self.highlighters:
|
|
if hl.name == name:
|
|
return hl
|
|
return
|
|
|
|
def _hl_generator(self):
|
|
for x in self.highlighters:
|
|
yield x
|
|
|
|
def __iter__(self):
|
|
return self._hl_generator()
|
|
|
|
def __next__(self):
|
|
if len(self.highlighters) < self.current:
|
|
self.current = self.current + 1
|
|
else:
|
|
self.current = 0
|
|
raise StopIteration
|
|
|
|
def __call__(self, name):
|
|
return self.this(name)
|
|
|
|
def get_highlighter(name):
|
|
highlighters = Highlight_Manager([
|
|
Highlighter("mobilnr", Swedish_Phone_Number_Highlighter()),
|
|
Highlighter("html4", HTML4_Highlighter()),
|
|
Highlighter("rainbow", Rainbow_Highlighter()),
|
|
Highlighter("email", Email_Highlighter()),
|
|
Highlighter("date_iso8601", ISO8601Highlighter()),
|
|
Highlighter("json", JSONHighlighter()),
|
|
])
|
|
for x in highlighters:
|
|
if x.name == name:
|
|
return x
|
|
return None
|