#!/usr/bin/env perl use v5.34; use warnings; use feature 'signatures'; no warnings 'experimental'; use Getopt::Std (); use CommonMark (); BEGIN { *CM:: = *CommonMark:: } sub usage($fh) { print $fh <<~'EOF'; Usage: md md -h EOF } sub help($fh) { print $fh <<~'EOF'; Options: -h, --help show this message EOF } for (@ARGV) { last if $_ eq '--'; if ($_ eq '--help') { usage *STDOUT; help *STDOUT; exit; } } my %opts; if (!Getopt::Std::getopts('h', \%opts)) { usage *STDERR; exit 2; } if ($opts{h}) { usage *STDOUT; help *STDOUT; exit; } sub into_table($s) { my @lines = (); my $i = 1; for (split "\n", $s) { my $line = '<tr><td>' . $i++ . '</td><td>' . $_ . '</td></tr>'; push @lines, $line; } return join "\n", @lines; } sub with_file($f, $mode, $block) { \$block(); } given (shift @ARGV) { shift @ARGV if defined($ARGV[0]) and $ARGV[0] eq '--'; when ('snippets') { for (@ARGV) { open my $fh, '<', $_ or die "Can't open $_"; my $doc = CM->parse(file => $fh); my $iter = $doc->iterator; my $i = 0; while (my ($event_type, $node) = $iter->next) { next if $node->get_type != CM::NODE_CODE_BLOCK; my $f = "$_.$i.txt"; $i++; say 123; with_file $f, '>', sub { say 456; }; open my $fh, '>', $f or die "Can't open $f"; print $fh $node->get_literal; close $fh or die "Can't close $f"; } close $fh or die "Can't close $_"; } } when ('render') { my $s = CM->parse(file => *STDIN)->render(format => 'html'); my @ret = (); my $in_block = 0; for (split "\n", $s) { if (/^<pre><code/) { say $_; } push @ret, $_; } break; my $s2 = join("\n", @ret) . "\n"; # say "antes: $s"; # say "depois: " . join "\n", @ret; open my $fh1, '>', 'antes'; print $fh1 $s; close $fh1; open my $fh2, '>', 'depois'; print $fh2 $s2; close $fh2; say '=========' if $s eq $s2; break; say "$s"; my $doc = CM->parse(file => *STDIN); my $iter = $doc->iterator; while (my ($event_type, $node) = $iter->next) { # say $node->get_on_exit; # say $node->get_type_string; # next; # next if $node->get_type == CM::NODE_DOCUMENT; # next unless $event_type == CM::EVENT_ENTER; if ($node->get_type == CM::NODE_CODE_BLOCK) { # say $node->get_on_exit; # say $node->get_on_enter; # say 123; # next; # $node->set_literal(into_table($node->get_literal)); # say 123; } else { # say $node->render(format => 'html'); # use Data::Dumper; # say Dumper($node->get_type_string); } } say $doc->render(format => 'html', unsafe => 1); } default { print STDERR "Bad ACTION \"$_\".\n\n"; usage *STDERR; exit 2; } } __END__ # use Data::Dumper; # print Dumper(\%opts); # exit: extra newline in output # no warnings ('experimental::signatures', ); # no warnings ('experimental::when', ); # $Getopt::Std::STANDARD_HELP_VERSION = 1; perlcritic use builtin qw(true); if (true) { say 'true'; exit 3; }