22
22
from functools import partial
23
23
from html import escape
24
24
25
+ # %% ../nbs/11_xml.ipynb
26
+ def _fix_k (k ): return k if k == '_' else k .lstrip ('_' ).replace ('_' , '-' )
27
+
25
28
# %% ../nbs/11_xml.ipynb
26
29
_specials = set ('@.-!~:[](){}$%^&*+=|/?<>,`' )
27
30
28
31
def attrmap (o ):
29
- if o == '_' or ( _specials & set (o ) ): return o
32
+ if _specials & set (o ): return o
30
33
o = dict (htmlClass = 'class' , cls = 'class' , _class = 'class' , klass = 'class' ,
31
34
_for = 'for' , fr = 'for' , htmlFor = 'for' ).get (o , o )
32
- return o . lstrip ( '_' ). replace ( '_' , '-' )
35
+ return _fix_k ( o )
33
36
34
37
# %% ../nbs/11_xml.ipynb
35
38
def valmap (o ):
@@ -66,8 +69,8 @@ def changed(self):
66
69
return self
67
70
68
71
def __setattr__ (self , k , v ):
69
- if k .startswith ('__' ) or k [- 1 ]== '_' or k in ('tag' ,'children' ,'attrs' ,'void_' ): return super ().__setattr__ (k ,v )
70
- self .attrs [k . lstrip ( '_' ). replace ( '_' , '-' )] = v
72
+ if len ( k ) > 1 and k .startswith ('__' ) or k [- 1 ]== '_' or k in ('tag' ,'children' ,'attrs' ,'void_' ): return super ().__setattr__ (k ,v )
73
+ self .attrs [_fix_k ( k )] = v
71
74
self .changed ()
72
75
73
76
def __getattr__ (self , k ):
@@ -76,7 +79,8 @@ def __getattr__(self, k):
76
79
77
80
@property
78
81
def list (self ): return [self .tag ,self .children ,self .attrs ]
79
- def get (self , k , default = None ): return self .attrs .get (k .lstrip ('_' ).replace ('_' , '-' ), default )
82
+ def get (self , k , default = None ): return self .attrs .get (_fix_k (k ), default )
83
+
80
84
def __repr__ (self ): return f'{ self .tag } ({ self .children } ,{ self .attrs } )'
81
85
def __iter__ (self ): return iter (self .children )
82
86
def __getitem__ (self , idx ): return self .children [idx ]
@@ -151,7 +155,7 @@ def _to_attr(k,v):
151
155
152
156
# %% ../nbs/11_xml.ipynb
153
157
_block_tags = {'div' , 'p' , 'ul' , 'ol' , 'li' , 'table' , 'thead' , 'tbody' , 'tfoot' ,
154
- 'html' , 'head' , 'body' , 'meta' , '!doctype' , 'input' , 'script' , 'link' , 'style' ,
158
+ 'html' , 'head' , 'body' , 'meta' , 'title' , ' !doctype' , 'input' , 'script' , 'link' , 'style' ,
155
159
'tr' , 'th' , 'td' , 'section' , 'article' , 'nav' , 'aside' , 'header' ,
156
160
'footer' , 'h1' , 'h2' , 'h3' , 'h4' , 'h5' , 'h6' , 'blockquote' }
157
161
_inline_tags = {'a' , 'span' , 'b' , 'i' , 'u' , 'em' , 'strong' , 'img' , 'br' , 'small' ,
@@ -222,6 +226,6 @@ def showtags(s):
222
226
# %% ../nbs/11_xml.ipynb
223
227
def __getattr__ (tag ):
224
228
if tag .startswith ('_' ) or tag [0 ].islower (): raise AttributeError
225
- tag = tag . replace ( "_" , "-" )
229
+ tag = _fix_k ( tag )
226
230
def _f (* c , target_id = None , ** kwargs ): return ft (tag , * c , target_id = target_id , ** kwargs )
227
231
return _f
0 commit comments