diff options
| -rwxr-xr-x | katana.raku | 45 | ||||
| -rw-r--r-- | lib/Katana/Tag.rakumod | 44 |
2 files changed, 52 insertions, 37 deletions
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 { "</{$.name}>" } - - 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 <<~>> </large /blur /thumb> } sub ensure-directories(Str \dist-dir) { @@ -141,6 +110,8 @@ multi MAIN( Int :$degree = 4, #= Degree of parallelism ) { + my $doctype = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">'; + 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 { "</{$.name}>" } + + 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; + } +} + |
