diff options
Diffstat (limited to 'lib/Katana/HTML')
| -rw-r--r-- | lib/Katana/HTML/Generate.rakumod | 22 | ||||
| -rw-r--r-- | lib/Katana/HTML/Tag.rakumod | 24 |
2 files changed, 46 insertions, 0 deletions
diff --git a/lib/Katana/HTML/Generate.rakumod b/lib/Katana/HTML/Generate.rakumod new file mode 100644 index 0000000..fb020b4 --- /dev/null +++ b/lib/Katana/HTML/Generate.rakumod @@ -0,0 +1,22 @@ +use v6.d; + +unit module Katana::HTML::Generate:api<1>; + +multi sub generate-from-tags(Str $doctype, @tags) is export { + say $doctype; + generate-from-tags @tags; +} + +multi sub generate-from-tags(@tags) is export { + my @sgat; # tags spelled in reverse. + for @tags -> $tag { + say $tag.open; + say $tag.text if $tag.has-text; + unshift @sgat, $tag; + } + for @sgat -> $tag { + say $tag.close; + generate-from-tags $tag.succ if $tag.has-succ; + } +} + diff --git a/lib/Katana/HTML/Tag.rakumod b/lib/Katana/HTML/Tag.rakumod new file mode 100644 index 0000000..772a577 --- /dev/null +++ b/lib/Katana/HTML/Tag.rakumod @@ -0,0 +1,24 @@ +use v6.d; +unit module Katana::HTML:api<1>; + +class Tag is export { + has Str $.name; + has Str $.text; + has Str %.params; + has Tag @.succ; + + method has-text returns Bool { defined $.text } + method has-succ returns Bool { defined $.succ } + + method open returns Str { "<{$.name}{self.params}>" } + method close returns Str { "</{$.name}>" } + + method params returns Str { + return '' unless defined %!params; + my @params; + for %!params.kv -> $key, $val { + push @params, " $key='$val'"; + } + return @params.join; + } +} |
