From dd440fa779d8a2f3b9f856778ca2419bfcc7860c Mon Sep 17 00:00:00 2001 From: Seth Trowbridge Date: Thu, 21 Aug 2025 11:53:23 -0400 Subject: [PATCH] nice --- css.py | 86 +++++++++++++++++++++++++++++++++-------------------- scratch.py | 21 ------------- sheet.py | 8 +++-- template.py | 8 ++--- 4 files changed, 61 insertions(+), 62 deletions(-) delete mode 100644 scratch.py diff --git a/css.py b/css.py index 5a98320..4b34343 100644 --- a/css.py +++ b/css.py @@ -2,23 +2,6 @@ from dataclasses import dataclass from typing import Optional, Tuple, Union, Dict, List import random -css_final:List[str] = [] -css_lines:List[str] = [] - -def css_class(css_context:str): - global css_lines - output = f'{css_context}{{ {"".join(css_lines)} }}' - css_lines = [] - css_final.append(output) - -def css_write(str:str): - css_lines.append(str) - -def css_dump(): - global css_final - output = "".join(css_final) - css_final = [] - return output class Unit(): unit = "px" def __init__(self, amount:float): @@ -45,7 +28,6 @@ class Cluster(): pass def __repr__(self)->str: print("repr called on cluster") - #todo: flesh this out / provide overrides for each inheriting class return self.render() def render(self)->str: @@ -54,7 +36,7 @@ class Cluster(): value = self.__getattribute__(self.map[key]) if value: output.append(f'{key}:{value};') - return "\n".join(output) + return "".join(output) @dataclass class Font(Cluster): @@ -83,40 +65,80 @@ class XForm(Space): class Chainer(): def __init__(self) -> None: - self.accessed = 0 + self.size = 0 + self.dump_id:int = -1 + self.log:List[str] = [] pass def __getitem__(self, args:Union[Cluster, Tuple[Cluster, ...]]): - if isinstance(args, tuple): - children = f'\n'.join(k.render() for k in args) + print("bracket access", args) + + styledata = "".join(c.render() for c in args) if isinstance(args, tuple) else args.render() + if self.size: + self.log.append(f'\n@media(min-width:{self.size}px){{ {styledata} }}') else: - children = args.render() - if self.accessed: - css_write(f'@media(max-width:{self.accessed}px){{ {children} }}') - else: - css_write(children) - self.accessed = 0 + self.log.append(styledata) return self def __call__(self, key:int): - self.accessed = key + print("call access", key) + self.size = key return self + + def dump(self, log:List[str], fullName:str, dump_id:int): + if self.dump_id != dump_id: + log.append(f'.{fullName} {{\n {"".join(self.log)} \n}}') + self.dump_id = dump_id + self.log = [] + self.size = 0 -CSS = Chainer() +class Kickoff(): + def __getitem__(self, args:Union[Cluster, Tuple[Cluster, ...]]): + return Chainer().__getitem__(args) + + def __call__(self, key:int): + return Chainer().__call__(key) + +CSS = Kickoff() + +def TAG(*styles:Chainer): + for item in styles: + print(item) ########################## +class Writer: + dump_id = 0 + log:List[str] = [] + + @classmethod + def start(cls): + cls.dump_id += 1 + cls.log.clear() + print("Writer reset, dump_id:", cls.dump_id) + + @classmethod + def capture(cls, fullName:str, chainer:Chainer): + chainer.dump(cls.log, fullName, Writer.dump_id) class _SHEET(type): - last_accessed:Optional[str] = None + def __getattribute__(cls, name:str): if name != "__name__" and name != "__module__": - css_class(f'.{cls.__module__}.{cls.__name__}.{name}') + print("class name access", name) + value = super().__getattribute__(name) + if isinstance(value, Chainer): + fullName = f'{cls.__module__}_{cls.__name__}_{name}' + Writer.capture(fullName, value) + return fullName + return super().__getattribute__(name) class SHEET(metaclass=_SHEET): pass + class UserMadeSheet(SHEET): + Paragraph=CSS[ Font( size=PX(10) ), ](512)[ diff --git a/scratch.py b/scratch.py deleted file mode 100644 index badd4d8..0000000 --- a/scratch.py +++ /dev/null @@ -1,21 +0,0 @@ - -from dataclasses import dataclass, field -from typing import Optional, Dict, Tuple, List - - -class Bracket(): - def __init__(self, *args: str): - self.children = list(args) - -@dataclass -class StyledTag(Bracket): - style: Optional[str] = None - other: Optional[str] = None - - -def Test(*children:str, css:Optional[str]=None, ): - print(css) - print(children) - - -Test("itme1", "item2", css="yo") \ No newline at end of file diff --git a/sheet.py b/sheet.py index c91a458..bc4ca84 100644 --- a/sheet.py +++ b/sheet.py @@ -1,3 +1,5 @@ -from css import UserMadeSheet, css_dump -print(UserMadeSheet.Paragraph, UserMadeSheet.Anchor) -print(css_dump()) \ No newline at end of file +from css import UserMadeSheet, TAG, Writer + +print(TAG(UserMadeSheet.Paragraph)) + +print(Writer.log) diff --git a/template.py b/template.py index 3c07eb7..87e6346 100644 --- a/template.py +++ b/template.py @@ -3,12 +3,8 @@ from pyx import DIV, H1, H2, P, SPAN, BR, IMG, A print( DIV [ - H1("Welcome!"), - P(), - IMG(id="header.png"), - A(css="test"), - A["other?"], - A(css="www.site.com") + H1["Welcome!"], + A(css="www.site.com", href="www.site.com") [ IMG(id="image.png") ]