aboutsummaryrefslogtreecommitdiff
#!/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;
}