Tool-Bench
view release on metacpan or search on metacpan
talk/yaml2hbml.pl view on Meta::CPAN
#!/usr/bin/perl
use strict;
use warnings;
use feature 'say';
use Sub::Current;
use YAML::Any qw{LoadFile};
use Data::Dumper; sub D (@) {warn Dumper(@_)};
my $slides = LoadFile(shift @ARGV);
=pod
[YAML]
---
- Tool::Bench :
(ben hengst) ben.hengst@gmail.com
- Features :
- work for anything, not just perl
- easy to play with
- easy to extend
[HBML]
slides{
slide{
h3{Tool::Bench}
(ben hengst) ben.hengst@gmail.com
}
slide{
h3{Features}
* work for anything, not just perl
* easy to play with
* easy to extend
}
}
=cut
my $indent = ' ';
sub IN(@) {
my $pad = join '', map{$indent} 1..shift;
my $text = shift || '';
my $trinket = shift || '';
say $pad, $trinket || '', $text =~ m/\n/ ? qq|code{pre{{{$text\n}}}\n}| : $text ;
};
sub is_array ($) {ref(shift) eq 'ARRAY'};
sub is_hash ($) {ref(shift) eq 'HASH'};
sub LI(@) {
my $in = shift;
my $data = shift;
for (@$data) {
is_array $_ ? ROUTINE->( 1+$in => $_)
: is_hash $_ ? ROUTINE->( $in => [%$_])
: IN( $in => $_ => '* ' );
}
}
sub S (@) {
my $title = shift;
IN 1 => 'slide{';
IN 2 => qq|h3{$title}|;
foreach (@_) {
is_array $_ || is_hash $_
? LI 2 => $_
: IN 2 => $_;
}
IN 1 => '}';
};
say q|slides{|;
for my $slide (@$slides) {
S %$slide;
}
say qq|}|;
( run in 2.756 seconds using v1.01-cache-2.11-cpan-4ab04211f4c )