summaryrefslogtreecommitdiff
path: root/lib/TUWF/XML.pm
diff options
context:
space:
mode:
authorYorhel <git@yorhel.nl>2011-01-16 16:01:34 +0100
committerYorhel <git@yorhel.nl>2011-01-16 16:01:34 +0100
commitc6ff392cc2b7a2bf9223f03be12f3ea060614426 (patch)
tree830fea30819bad341f79ed434255918a2d537192 /lib/TUWF/XML.pm
parent0d0eeaf50ee339a118e94102d079309d25a44ad8 (diff)
TUWF::XML: More flexible html() function
Diffstat (limited to 'lib/TUWF/XML.pm')
-rw-r--r--lib/TUWF/XML.pm35
1 files changed, 27 insertions, 8 deletions
diff --git a/lib/TUWF/XML.pm b/lib/TUWF/XML.pm
index 6a5b0b6..17aab13 100644
--- a/lib/TUWF/XML.pm
+++ b/lib/TUWF/XML.pm
@@ -47,6 +47,23 @@ BEGIN {
};
+# the common XHTML doctypes, from http://www.w3.org/QA/2002/04/valid-dtd-list.html
+my %doctypes = split /\r?\n/, <<__;
+xhtml1-strict
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+xhtml1-transitional
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+xhtml1-frameset
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+xhtml11
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+xhtml-basic11
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
+xhtml-math-svg
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1 plus MathML 2.0 plus SVG 1.1//EN" "http://www.w3.org/2002/04/xhtml-math-svg/xhtml-math-svg.dtd">
+__
+
+
sub new {
my($pack, %o) = @_;
$o{write} ||= sub { print @_ };
@@ -141,15 +158,17 @@ sub end {
}
-# Special function, this writes the XHTML 1.0 Strict doctype
-# (other doctypes aren't supported at the moment)
-sub html() {
+sub html {
my $s = ref($_[0]) eq __PACKAGE__ ? shift : $OBJ;
- $s->lit(qq|<!DOCTYPE html
- PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">|);
- push @{$s->{stack}}, 'html';
+ my %o = @_;
+
+ $s->lit($doctypes{ delete($o{doctype}) || 'xhtml1-strict' }."\n");
+ my $lang = delete $o{lang};
+ $s->tag('html',
+ xmlns => 'http://www.w3.org/1999/xhtml',
+ $lang ? ('xml:lang' => $lang, lang => $lang) : (),
+ %o
+ );
}