from language_utils import gen_boolean, gen_color, gen_date, gen_email, gen_javascript, gen_number, gen_style, gen_text, gen_url class HTMLTag: def __init__(self, name, self_closing=False): self.name = name self.self_closing = self_closing self.attributes = [] self.children = [] def __str__(self) -> str: tag = "" if self.self_closing: tag = f"<{self.name} " for attr in self.attributes: tag += f"{attr} " tag += "/>" else: tag = f"<{self.name}" for attr in self.attributes: tag += f"{attr} " tag += ">" for child in self.children: tag += f"{child}" tag += f"" return tag class HTMLTagAttributeType: TypeText = 0 TypeBoolean = 1 TypeNumber = 2 TypeColor = 3 TypeJavascript = 4 TypeStlye = 5 TypeURL = 6 TypeEmail = 7 TypeDate = 8 Generators = { HTMLTagAttributeType.TypeText: gen_text, HTMLTagAttributeType.TypeBoolean: gen_boolean, HTMLTagAttributeType.TypeNumber: gen_number, HTMLTagAttributeType.TypeColor: gen_color, HTMLTagAttributeType.TypeJavascript: gen_javascript, HTMLTagAttributeType.TypeStlye: gen_style, HTMLTagAttributeType.TypeURL: gen_url, HTMLTagAttributeType.TypeEmail: gen_email, HTMLTagAttributeType.TypeDate: gen_date, } class HTMLAttribute: def __init__(self, name, value_type): self.name = name self.kind = value_type self.value = Generators[value_type]() def __str__(self) -> str: if not self.value: return self.name else: return f'{self.name}="{self.value}"'