diff options
author | Yorhel <git@yorhel.nl> | 2017-12-16 09:45:03 +0100 |
---|---|---|
committer | Yorhel <git@yorhel.nl> | 2017-12-16 09:45:03 +0100 |
commit | 8fefd16c2b503e09730951258944c73ef14a2264 (patch) | |
tree | c1ee0a8c4959a5d573da1394931a90b5d0268f43 /lib/TUWF/XML.pm | |
parent | fa4380844e137905016f5e6cf4a664aae9624a8e (diff) |
TUWF::XML: Add support for a more functional alternative to end()
Diffstat (limited to 'lib/TUWF/XML.pm')
-rw-r--r-- | lib/TUWF/XML.pm | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/lib/TUWF/XML.pm b/lib/TUWF/XML.pm index 51d9b2a..d15b8e9 100644 --- a/lib/TUWF/XML.pm +++ b/lib/TUWF/XML.pm @@ -119,7 +119,9 @@ sub txt { # 'tagname' <tagname> # 'tagname', id => "main" <tagname id="main"> # 'tagname', '<bar>' <tagname><bar></tagname> +# 'tagname', sub { .. } <tagname>..</tagname> # 'tagname', id => 'main', '<bar>' <tagname id="main"><bar></tagname> +# 'tagname', id => 'main', sub { .. } <tagname id="main">..</tagname> # 'tagname', id => 'main', undef <tagname id="main" /> # 'tagname', undef <tagname /> sub tag { @@ -136,11 +138,14 @@ sub tag { } if(!@_) { - $t .= '>'; - $s->lit($t); + $s->lit($t.'>'); push @{$s->{stack}}, $name; } elsif(!defined $_[0]) { $s->lit($t.' />'); + } elsif(ref $_[0] eq 'CODE') { + $s->lit($t.'>'); + $_[0]->(); + $s->lit('</'.$name.'>'); } else { $s->lit($t.'>'.xml_escape(shift).'</'.$name.'>'); } @@ -161,6 +166,8 @@ sub end { sub html { my $s = ref($_[0]) eq __PACKAGE__ ? shift : $OBJ; + my $hascontent = @_ % 2 == 1; + my $c = $hascontent && pop; my %o = @_; $s->lit($doctypes{ delete($o{doctype}) || 'xhtml1-strict' }."\n"); @@ -168,7 +175,8 @@ sub html { $s->tag('html', xmlns => 'http://www.w3.org/1999/xhtml', $lang ? ('xml:lang' => $lang, lang => $lang) : (), - %o + %o, + $hascontent ? ($c) : () ); } |