@@ -29,7 +29,7 @@ class XT(list): pass
2929def xt (tag :str , * c , ** kw ):
3030 "Create an XML tag structure `[tag,children,attrs]` for `toxml()`"
3131 if len (c )== 1 and isinstance (c [0 ], types .GeneratorType ): c = tuple (c [0 ])
32- kw = {_attrmap (k ):str (v ) for k ,v in kw .items () if v is not None }
32+ kw = {_attrmap (k ):( v if isinstance ( v , bool ) else str (v ) ) for k ,v in kw .items () if v is not None }
3333 return XT ([tag .lower (),c ,kw ])
3434
3535# %% ../nbs/11_xml.ipynb 7
@@ -47,9 +47,15 @@ def xt(tag:str, *c, **kw):
4747for o in _all_ : _g [o ] = partial (xt , o .lower ())
4848
4949# %% ../nbs/11_xml.ipynb 10
50- voids = set ('area base br col command embed hr img input keygen link meta param source track wbr' .split ())
50+ voids = set ('area base br col command embed hr img input keygen link meta param source track wbr !doctype ' .split ())
5151
5252# %% ../nbs/11_xml.ipynb 11
53+ def _to_attr (k ,v ):
54+ if v == True : return str (k )
55+ if v == False : return ''
56+ return f'{ k } ="{ escape (str (v ), quote = False )} "'
57+
58+ # %% ../nbs/11_xml.ipynb 12
5359def to_xml (elm , lvl = 0 ):
5460 "Convert `xt` element tree into an XML string"
5561 if isinstance (elm , tuple ): return '\n ' .join (to_xml (o ) for o in elm )
@@ -62,7 +68,7 @@ def to_xml(elm, lvl=0):
6268 tag ,cs ,attrs = elm
6369 stag = tag
6470 if attrs :
65- sattrs = (f' { k } =" { escape ( str ( v ), quote = False ) } "' for k ,v in attrs .items ())
71+ sattrs = (_to_attr ( k , v ) for k ,v in attrs .items ())
6672 stag += ' ' + ' ' .join (sattrs )
6773
6874 cltag = '' if tag in voids else f'</{ tag } >'
@@ -72,12 +78,12 @@ def to_xml(elm, lvl=0):
7278 if tag not in voids : res += f'{ sp } { cltag } \n '
7379 return res
7480
75- # %% ../nbs/11_xml.ipynb 13
81+ # %% ../nbs/11_xml.ipynb 14
7682def highlight (s , lang = 'html' ):
7783 "Markdown to syntax-highlight `s` in language `lang`"
7884 return f'```{ lang } \n { to_xml (s )} \n ```'
7985
80- # %% ../nbs/11_xml.ipynb 14
86+ # %% ../nbs/11_xml.ipynb 15
8187def showtags (s ):
8288 return f"""<code><pre>
8389{ escape (to_xml (s ))}
0 commit comments