summaryrefslogtreecommitdiff
path: root/lib/Katana/HTML
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Katana/HTML')
-rw-r--r--lib/Katana/HTML/Generate.rakumod22
-rw-r--r--lib/Katana/HTML/Tag.rakumod24
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;
+ }
+}