From 6b0d4ee051f650b46af7ec50acf1122d44088fb5 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Wed, 20 Apr 2022 10:12:14 +0100 Subject: modularize more --- lib/Katana/HTML/Generate.rakumod | 22 ++++++++++++++++++++++ lib/Katana/HTML/Tag.rakumod | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 lib/Katana/HTML/Generate.rakumod create mode 100644 lib/Katana/HTML/Tag.rakumod (limited to 'lib/Katana/HTML') 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 { "" } + + method params returns Str { + return '' unless defined %!params; + my @params; + for %!params.kv -> $key, $val { + push @params, " $key='$val'"; + } + return @params.join; + } +} -- cgit v1.2.3