#!/usr/bin/env perl
|
|
|
|
=pod
|
|
|
|
=head1 NAME
|
|
|
|
wrt-repl - simple read-eval-print loop for wrt's inner workings
|
|
|
|
=head1 USAGE
|
|
|
|
wrt repl
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
Uses Term::ReadLine to provide a live interface to a loaded wrt environment for
|
|
the current working wrt directory.
|
|
|
|
This is primarily a debugging tool for the current wrt implementation itself.
|
|
|
|
Detailed documentation can be found in the L<App::WRT> man page or at
|
|
L<https://code.p1k3.com/gitea/brennen/wrt>.
|
|
|
|
=head1 LICENSE
|
|
|
|
wrt is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
=head1 AUTHOR
|
|
|
|
Brennen Bearnes <code@p1k3.com>
|
|
|
|
=cut
|
|
|
|
use 5.10.0;
|
|
|
|
use strict;
|
|
use warnings;
|
|
use utf8;
|
|
use open qw(:std :utf8);
|
|
|
|
use Getopt::Long qw(GetOptionsFromArray);
|
|
use Pod::Usage;
|
|
use App::WRT;
|
|
use Carp;
|
|
use Term::ReadLine;
|
|
use Data::Dumper;
|
|
|
|
$Carp::Verbose = 1;
|
|
|
|
if (not caller()) {
|
|
main(@ARGV);
|
|
exit(0);
|
|
}
|
|
|
|
sub main {
|
|
my (@local_argv) = @_;
|
|
|
|
# Handle options, including help generated from the POD above. See:
|
|
# - http://perldoc.perl.org/Getopt/Long.html#User-defined-subroutines-to-handle-options
|
|
# - https://metacpan.org/pod/Pod::Usage
|
|
# - http://michael.thegrebs.com/2014/06/08/Pod-Usage/
|
|
my $config_file = 'wrt.json';
|
|
GetOptionsFromArray(
|
|
\@local_argv,
|
|
'config=s' => \$config_file,
|
|
help => sub { pod2usage(0) },
|
|
) or pod2usage(2);
|
|
|
|
my $term = Term::ReadLine->new('wrt repl');
|
|
my $OUT = $term->OUT || \*STDOUT;
|
|
|
|
print $OUT "loading configuration from $config_file\n";
|
|
|
|
my $w = App::WRT::new_from_file($config_file);
|
|
|
|
print $OUT $w->{entry_dir} . ":\n";
|
|
print $OUT "\t" . scalar($w->{entries}->all()) . " items\n";
|
|
print $OUT "\t" . scalar($w->{entries}->all_renderable())
|
|
. " renderable entries\n\n";
|
|
print $OUT "Available:\n\t\$w\n";
|
|
print $OUT "\t\$w->{entries}\n";
|
|
print $OUT "\tDumper(\$foo)\n";
|
|
print $OUT "\n";
|
|
|
|
my $prompt = "wrt :: $w->{title_prefix} :: ";
|
|
|
|
while ( defined ($_ = $term->readline($prompt)) ) {
|
|
my $result = eval($_);
|
|
carp $@ if $@;
|
|
print $OUT $result, "\n" unless $@;
|
|
$term->addhistory($_) if /\S/;
|
|
$prompt = "wrt :: $w->{title_prefix} :: ";
|
|
}
|
|
}
|
|
|
|
1;
|