From c6a252b79db57f3480221cf25213fb8c0993ac3a Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 19 Apr 2022 22:54:11 +0100 Subject: Tag is in a module --- katana.raku | 45 ++++++++------------------------------------- lib/Katana/Tag.rakumod | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+), 37 deletions(-) create mode 100644 lib/Katana/Tag.rakumod diff --git a/katana.raku b/katana.raku index c157619..eee5927 100755 --- a/katana.raku +++ b/katana.raku @@ -1,5 +1,9 @@ #!/usr/bin/env raku +use v6.d; +use lib 'lib'; +use Katana::Tag; + sub prefix:<❱>(*@args) { say "❱ {@args}"; my \proc = run @args, :out, :err; @@ -57,41 +61,6 @@ class Image { } } -class Tag { - 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; - } -} - -sub recurse-tags(@open-stack) { - my @close-stack; - for @open-stack -> $tag { - say $tag.open; - say $tag.text if $tag.has-text; - unshift @close-stack, $tag; - } - for @close-stack -> $tag { - say $tag.close; - recurse-tags $tag.succ if $tag.has-succ; - } -} - sub dist-dirs(Str \dist-dir --> List) { dist-dir <<~>> } sub ensure-directories(Str \dist-dir) { @@ -141,6 +110,8 @@ multi MAIN( Int :$degree = 4, #= Degree of parallelism ) { + my $doctype = ''; + my @html-elems; push @html-elems, Tag.new: name => 'html', params => ( @@ -149,13 +120,13 @@ multi MAIN( 'xml:lang' => 'en' ); - push @html-elems, Tag.new: name => 'header', + push @html-elems, Tag.new: name => 'head', succ => [Tag.new: name => 'body']; push @html-elems, Tag.new: name => 'title', text => $title; - recurse-tags @html-elems; + recurse-tags $doctype, @html-elems; exit; diff --git a/lib/Katana/Tag.rakumod b/lib/Katana/Tag.rakumod new file mode 100644 index 0000000..c1b6204 --- /dev/null +++ b/lib/Katana/Tag.rakumod @@ -0,0 +1,44 @@ +use v6.d; + +unit module Katana:api<0>; + +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; + } +} + +multi sub recurse-tags(Str $doctype, @open-stack) is export { + say $doctype; + recurse-tags @open-stack; +} + +multi sub recurse-tags(@open-stack) is export { + my @close-stack; + for @open-stack -> $tag { + say $tag.open; + say $tag.text if $tag.has-text; + unshift @close-stack, $tag; + } + for @close-stack -> $tag { + say $tag.close; + recurse-tags $tag.succ if $tag.has-succ; + } +} + -- cgit v1.2.3