From 1ac6564a775835dd9bc93a2fb48ef87f9fc2daed Mon Sep 17 00:00:00 2001 From: Asko Nõmm Date: Mon, 30 Dec 2024 18:51:58 +0200 Subject: bump --- htmtl/htmtl.py | 47 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 42 insertions(+), 5 deletions(-) (limited to 'htmtl/htmtl.py') diff --git a/htmtl/htmtl.py b/htmtl/htmtl.py index 10cd806..ffbbe87 100644 --- a/htmtl/htmtl.py +++ b/htmtl/htmtl.py @@ -1,13 +1,50 @@ +from typing import Any from dompa import Dompa +from .attribute_parser import AttributeParser +from .attribute_parsers.inner_text import InnerText +from .expression_modifier import ExpressionModifier +from .expression_parser import ExpressionParser class Htmtl: __dom: Dompa - __attribute_parsers: list - __expression_modifiers: list + __data: dict[str, Any] + __attribute_parsers: list[type[AttributeParser]] + __expression_modifiers: list[type[ExpressionModifier]] - def __init__(self, template: str, attribute_parsers = None, expression_modifiers = None): + def __init__(self, template: str, data: dict[str, Any] = None): self.__dom = Dompa(template) - self.__attribute_parsers = attribute_parsers or [] - self.__expression_modifiers = expression_modifiers or [] + self.__data = data or {} + self.__attribute_parsers = self.__default_attribute_parsers() + self.__expression_modifiers = [] + self.__parse() + @staticmethod + def __default_attribute_parsers() -> list[type[AttributeParser]]: + return [ + InnerText + ] + + def set_attribute_parsers(self, parsers: list[type[AttributeParser]]): + for parser in parsers: + if not isinstance(parser, AttributeParser): + raise TypeError("Attribute parser must extend the AttributeParser class.") + + self.__attribute_parsers = parsers + + def set_expression_modifiers(self, modifiers: list[type[ExpressionModifier]]): + for modifier in modifiers: + if not isinstance(modifier, ExpressionModifier): + raise NotImplementedError("Modifier must extend the ExpressionModifier class.") + + self.__expression_modifiers = modifiers + + def __parse(self) -> None: + expression_parser = ExpressionParser(self.__data, self.__expression_modifiers) + + for parser in self.__attribute_parsers: + parser_instance = parser(self.__data, expression_parser) + self.__dom.update(parser_instance.traverse) + + def html(self) -> str: + return self.__dom.html() \ No newline at end of file -- cgit v1.2.3